2026-10-23T23:33:19.1643808Z Current runner version: '2.338.1' 2026-10-23T23:33:19.1648626Z Runner name: 'blacksmith-8vcpu-ubuntu-2404-a3e5gotydqmayqwv' 2026-10-23T23:33:19.1649496Z Runner group name: 'blacksmith scale sets - blacksmith-8vcpu-ubuntu-2404' 2026-10-23T23:33:19.1650548Z Machine name: 'ip-172-31-73-130' 2026-10-23T23:33:19.1653302Z ##[group]GITHUB_TOKEN Permissions 2026-10-23T23:33:19.1656196Z Contents: read 2026-10-23T23:33:19.1656625Z Metadata: read 2026-10-23T23:33:19.1657490Z ##[endgroup] 2026-10-23T23:33:19.1659514Z Secret source: Actions 2026-10-23T23:33:19.1660438Z Cache mode: write 2026-10-23T23:33:19.1661082Z Prepare workflow directory 2026-10-23T23:33:19.1892523Z Prepare all required actions 2026-10-23T23:33:19.1926344Z Getting action download info 2026-10-23T23:33:19.3193190Z Download action repository 'actions/checkout@v6' (SHA:d23441a48e516b6c34aea4fa41551a30e30af803) 2026-10-23T23:33:19.3768774Z Download action repository 'actions/cache@v6' (SHA:55cc8345863c7cc4c66a329aec7e433d2d1c52a9) 2026-10-23T23:33:19.5165236Z Setting BLACKSMITH_ACTIONS_RESULTS_URL to https://results-receiver.actions.githubusercontent.com/ 2026-10-23T23:33:19.5213422Z Complete job name: Lint 2026-10-23T23:33:19.5687105Z A job started hook has been configured by the self-hosted runner administrator 2026-10-23T23:33:19.5763563Z ##[group]Run '/setup.sh' 2026-10-23T23:33:19.5775103Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-23T23:33:19.5775593Z env: 2026-10-23T23:33:19.5775864Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 192 2026-10-23T23:33:19.5776209Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 391 2026-10-23T23:33:19.5776535Z BLACKSMITH_CHECK_RUN_ID: 120709611033 2026-10-23T23:33:19.5776868Z BLACKSMITH_JOB_DISPLAY_NAME: Lint 2026-10-23T23:33:19.5777187Z GITHUB_ACTIONS_CACHE_MODE: write 2026-10-23T23:33:19.5777512Z ##[endgroup] 2026-10-23T23:33:19.6082286Z Logging daemon started (blacksmithd for logs) 2026-10-23T23:33:19.6209511Z Results daemon started (blacksmithd for results) 2026-10-23T23:33:19.6389676Z Background adoption and SSH setup started (PID: 3067) 2026-10-23T23:33:19.6390382Z 2026-10-23T23:33:19.6390563Z ---------------------------------------- 2026-10-23T23:33:19.6391152Z View this job: https://app.blacksmith.sh/pingdotgg/runs/40040319435/jobs/120709611033 2026-10-23T23:33:19.6391608Z SSH Access (using your GitHub SSH key): 2026-10-23T23:33:19.6392063Z ssh -p 64003 runner@blacksmith-8vcpu-ubuntu-2404-a3e5gotydqmayqwv.vm.blacksmith.sh 2026-10-23T23:33:19.6392401Z 2026-10-23T23:33:19.6392520Z No GitHub SSH key? Add one at: 2026-10-23T23:33:19.6393052Z https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account 2026-10-23T23:33:19.6393582Z 2026-10-23T23:33:19.6393756Z ---------------------------------------- 2026-10-23T23:33:19.6394056Z 2026-10-23T23:33:19.6394283Z VM ID: blacksmith-8vcpu-ubuntu-2404-a3e5gotydqmayqwv 2026-10-23T23:33:19.6394837Z Host: production-152.236.41.13-x8664 2026-10-23T23:33:19.6395297Z Host Agent PID: 983641 2026-10-23T23:33:19.6395715Z Host Agent Git SHA: 1637818df 2026-10-23T23:33:19.6396190Z Host CPU Manufacturer: AuthenticAMD 2026-10-23T23:33:19.6396682Z Blacksmith Host Generation: gen 2 2026-10-23T23:33:19.6397174Z Petname: production-needed-pony-14b7558b 2026-10-23T23:33:19.6397663Z Region: us-east 2026-10-23T23:33:19.6398058Z Rootfs Version: ubuntu24-full-x64-081926 2026-10-23T23:33:19.6408983Z OS Version: Ubuntu 24.04.4 LTS 2026-10-23T23:33:19.6409436Z 2026-10-23T23:33:19.6409641Z Enabling Blacksmith transparent cache 2026-10-23T23:33:19.6778696Z ##[group]Run actions/checkout@v6 2026-10-23T23:33:19.6779088Z with: 2026-10-23T23:33:19.6779561Z sparse-checkout: /* !/.repos/ !/apps/mobile/modules/t3-terminal/Vendor/**/*.a 2026-10-23T23:33:19.6780030Z sparse-checkout-cone-mode: false 2026-10-23T23:33:19.6780407Z repository: pingdotgg/t3code 2026-10-23T23:33:19.6782746Z token: *** 2026-10-23T23:33:19.6783002Z ssh-strict: true 2026-10-23T23:33:19.6783254Z ssh-user: git 2026-10-23T23:33:19.6783518Z persist-credentials: true 2026-10-23T23:33:19.6784181Z clean: true 2026-10-23T23:33:19.6784431Z fetch-depth: 1 2026-10-23T23:33:19.6784747Z fetch-tags: false 2026-10-23T23:33:19.6785012Z show-progress: true 2026-10-23T23:33:19.6785448Z lfs: false 2026-10-23T23:33:19.6785693Z submodules: false 2026-10-23T23:33:19.6785962Z set-safe-directory: true 2026-10-23T23:33:19.6786258Z allow-unsafe-pr-checkout: false 2026-10-23T23:33:19.6786564Z env: 2026-10-23T23:33:19.6786860Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 192 2026-10-23T23:33:19.6787197Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 391 2026-10-23T23:33:19.6787538Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T23:33:19.6787864Z ##[endgroup] 2026-10-23T23:33:19.8132130Z Syncing repository: pingdotgg/t3code 2026-10-23T23:33:19.8133712Z ##[group]Getting Git version info 2026-10-23T23:33:19.8134261Z Working directory is '/home/runner/_work/t3code/t3code' 2026-10-23T23:33:19.8135114Z [command]/usr/local/bin/git version 2026-10-23T23:33:19.8242003Z git version 2.55.0 2026-10-23T23:33:19.8262216Z ##[endgroup] 2026-10-23T23:33:19.8275650Z Temporarily overriding HOME='/home/runner/_work/_temp/49169e0c-9834-46d7-808d-8359ea6c1d4d' before making global git config changes 2026-10-23T23:33:19.8276438Z Adding repository directory to the temporary git global config as a safe directory 2026-10-23T23:33:19.8280532Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code 2026-10-23T23:33:19.8314518Z Deleting the contents of '/home/runner/_work/t3code/t3code' 2026-10-23T23:33:19.8316450Z ##[group]Determining repository object format 2026-10-23T23:33:19.8317582Z ##[endgroup] 2026-10-23T23:33:19.8317976Z ##[group]Initializing the repository 2026-10-23T23:33:19.8320631Z [command]/usr/local/bin/git init /home/runner/_work/t3code/t3code 2026-10-23T23:33:19.8366364Z hint: Using 'master' as the name for the initial branch. This default branch name 2026-10-23T23:33:19.8367021Z hint: will change to "main" in Git 3.0. To configure the initial branch name 2026-10-23T23:33:19.8367686Z hint: to use in all of your new repositories, which will suppress this warning, 2026-10-23T23:33:19.8368083Z hint: call: 2026-10-23T23:33:19.8368458Z hint: 2026-10-23T23:33:19.8368817Z hint: git config --global init.defaultBranch 2026-10-23T23:33:19.8369345Z hint: 2026-10-23T23:33:19.8369834Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and 2026-10-23T23:33:19.8370676Z hint: 'development'. The just-created branch can be renamed via this command: 2026-10-23T23:33:19.8371329Z hint: 2026-10-23T23:33:19.8371690Z hint: git branch -m 2026-10-23T23:33:19.8372091Z hint: 2026-10-23T23:33:19.8372459Z hint: Disable this message with "git config set advice.defaultBranchName false" 2026-10-23T23:33:19.8372975Z Initialized empty Git repository in /home/runner/_work/t3code/t3code/.git/ 2026-10-23T23:33:19.8373965Z [command]/usr/local/bin/git remote add origin https://github.com/pingdotgg/t3code 2026-10-23T23:33:19.8408923Z ##[endgroup] 2026-10-23T23:33:19.8409363Z ##[group]Disabling automatic garbage collection 2026-10-23T23:33:19.8413096Z [command]/usr/local/bin/git config --local gc.auto 0 2026-10-23T23:33:19.8442630Z ##[endgroup] 2026-10-23T23:33:19.8443040Z ##[group]Setting up auth 2026-10-23T23:33:19.8443375Z Removing SSH command configuration 2026-10-23T23:33:19.8447739Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand 2026-10-23T23:33:19.8473422Z [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-23T23:33:19.8644712Z Removing HTTP extra header 2026-10-23T23:33:19.8652117Z [command]/usr/local/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader 2026-10-23T23:33:19.8692327Z [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-23T23:33:19.8838984Z Removing includeIf entries pointing to credentials config files 2026-10-23T23:33:19.8840154Z [command]/usr/local/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir: 2026-10-23T23:33:19.8873653Z [command]/usr/local/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url 2026-10-23T23:33:19.9002593Z [command]/usr/local/bin/git config --file /home/runner/_work/_temp/git-credentials-87ceb3bd-fe4f-4390-bfa1-3137a7ac8cb3.config http.https://github.com/.extraheader AUTHORIZATION: basic *** 2026-10-23T23:33:19.9037866Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git.path /home/runner/_work/_temp/git-credentials-87ceb3bd-fe4f-4390-bfa1-3137a7ac8cb3.config 2026-10-23T23:33:19.9066778Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git/worktrees/*.path /home/runner/_work/_temp/git-credentials-87ceb3bd-fe4f-4390-bfa1-3137a7ac8cb3.config 2026-10-23T23:33:19.9092608Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git.path /github/runner_temp/git-credentials-87ceb3bd-fe4f-4390-bfa1-3137a7ac8cb3.config 2026-10-23T23:33:19.9118539Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git/worktrees/*.path /github/runner_temp/git-credentials-87ceb3bd-fe4f-4390-bfa1-3137a7ac8cb3.config 2026-10-23T23:33:19.9139950Z ##[endgroup] 2026-10-23T23:33:19.9140462Z ##[group]Fetching the repository 2026-10-23T23:33:19.9146645Z [command]/usr/local/bin/git -c protocol.version=2 fetch --no-tags --prune --no-recurse-submodules --filter=blob:none --depth=1 origin +41a546587fc9731026639ad6a4f18b1ab8a9e9ce:refs/remotes/pull/24264/merge 2026-10-23T23:33:20.2956868Z From https://github.com/pingdotgg/t3code 2026-10-23T23:33:20.2957533Z * [new ref] 41a546587fc9731026639ad6a4f18b1ab8a9e9ce -> pull/24264/merge 2026-10-23T23:33:20.2992310Z ##[endgroup] 2026-10-23T23:33:20.2993181Z ##[group]Determining the checkout info 2026-10-23T23:33:20.2994060Z ##[endgroup] 2026-10-23T23:33:20.2994774Z ##[group]Setting up sparse checkout 2026-10-23T23:33:20.2998458Z [command]/usr/local/bin/git config core.sparseCheckout true 2026-10-23T23:33:20.3036992Z [command]/usr/local/bin/git rev-parse --git-path info/sparse-checkout 2026-10-23T23:33:20.3067975Z .git/info/sparse-checkout 2026-10-23T23:33:20.3075473Z ##[endgroup] 2026-10-23T23:33:20.3076338Z ##[group]Checking out the ref 2026-10-23T23:33:20.3081139Z [command]/usr/local/bin/git checkout --progress --force refs/remotes/pull/24264/merge 2026-10-23T23:33:29.1232940Z Updating files: 0% (1/6311) 2026-10-23T23:33:29.1270574Z Updating files: 1% (64/6311) 2026-10-23T23:33:29.1293901Z Updating files: 2% (127/6311) 2026-10-23T23:33:29.1324114Z Updating files: 3% (190/6311) 2026-10-23T23:33:29.1354020Z Updating files: 4% (253/6311) 2026-10-23T23:33:29.1394564Z Updating files: 5% (316/6311) 2026-10-23T23:33:29.1433777Z Updating files: 6% (379/6311) 2026-10-23T23:33:29.1510297Z Updating files: 7% (442/6311) 2026-10-23T23:33:29.1564544Z Updating files: 8% (505/6311) 2026-10-23T23:33:29.1601442Z Updating files: 9% (568/6311) 2026-10-23T23:33:29.2015173Z Updating files: 10% (632/6311) 2026-10-23T23:33:29.2033960Z Updating files: 11% (695/6311) 2026-10-23T23:33:29.2050179Z Updating files: 12% (758/6311) 2026-10-23T23:33:29.2069609Z Updating files: 13% (821/6311) 2026-10-23T23:33:29.2092917Z Updating files: 14% (884/6311) 2026-10-23T23:33:29.2115666Z Updating files: 15% (947/6311) 2026-10-23T23:33:29.2141649Z Updating files: 16% (1010/6311) 2026-10-23T23:33:29.2163480Z Updating files: 17% (1073/6311) 2026-10-23T23:33:29.2190086Z Updating files: 18% (1136/6311) 2026-10-23T23:33:29.2211804Z Updating files: 19% (1200/6311) 2026-10-23T23:33:29.2247123Z Updating files: 20% (1263/6311) 2026-10-23T23:33:29.2280870Z Updating files: 21% (1326/6311) 2026-10-23T23:33:29.2298242Z Updating files: 22% (1389/6311) 2026-10-23T23:33:29.2317133Z Updating files: 23% (1452/6311) 2026-10-23T23:33:29.2335821Z Updating files: 24% (1515/6311) 2026-10-23T23:33:29.2354554Z Updating files: 25% (1578/6311) 2026-10-23T23:33:29.2371379Z Updating files: 26% (1641/6311) 2026-10-23T23:33:29.2389415Z Updating files: 27% (1704/6311) 2026-10-23T23:33:29.2414308Z Updating files: 28% (1768/6311) 2026-10-23T23:33:29.2456769Z Updating files: 29% (1831/6311) 2026-10-23T23:33:29.2483159Z Updating files: 30% (1894/6311) 2026-10-23T23:33:29.2516964Z Updating files: 31% (1957/6311) 2026-10-23T23:33:29.2556953Z Updating files: 32% (2020/6311) 2026-10-23T23:33:29.2593603Z Updating files: 33% (2083/6311) 2026-10-23T23:33:29.2675435Z Updating files: 34% (2146/6311) 2026-10-23T23:33:29.2743898Z Updating files: 35% (2209/6311) 2026-10-23T23:33:29.2787641Z Updating files: 36% (2272/6311) 2026-10-23T23:33:29.2832855Z Updating files: 37% (2336/6311) 2026-10-23T23:33:29.2887658Z Updating files: 38% (2399/6311) 2026-10-23T23:33:29.2923714Z Updating files: 39% (2462/6311) 2026-10-23T23:33:29.2973376Z Updating files: 40% (2525/6311) 2026-10-23T23:33:29.3018745Z Updating files: 41% (2588/6311) 2026-10-23T23:33:29.3067249Z Updating files: 42% (2651/6311) 2026-10-23T23:33:29.3068701Z Updating files: 43% (2714/6311) 2026-10-23T23:33:29.3089465Z Updating files: 44% (2777/6311) 2026-10-23T23:33:29.3139585Z Updating files: 45% (2840/6311) 2026-10-23T23:33:29.3173177Z Updating files: 46% (2904/6311) 2026-10-23T23:33:29.3215302Z Updating files: 47% (2967/6311) 2026-10-23T23:33:29.3263543Z Updating files: 48% (3030/6311) 2026-10-23T23:33:29.3302581Z Updating files: 49% (3093/6311) 2026-10-23T23:33:29.3348514Z Updating files: 50% (3156/6311) 2026-10-23T23:33:29.3357589Z Updating files: 51% (3219/6311) 2026-10-23T23:33:29.3365731Z Updating files: 51% (3252/6311) 2026-10-23T23:33:29.3405454Z Updating files: 52% (3282/6311) 2026-10-23T23:33:29.3435988Z Updating files: 53% (3345/6311) 2026-10-23T23:33:29.3459857Z Updating files: 54% (3408/6311) 2026-10-23T23:33:29.3491517Z Updating files: 55% (3472/6311) 2026-10-23T23:33:29.3513600Z Updating files: 56% (3535/6311) 2026-10-23T23:33:29.3535626Z Updating files: 57% (3598/6311) 2026-10-23T23:33:29.3558424Z Updating files: 58% (3661/6311) 2026-10-23T23:33:29.4017831Z Updating files: 59% (3724/6311) 2026-10-23T23:33:29.4034367Z Updating files: 60% (3787/6311) 2026-10-23T23:33:29.4053394Z Updating files: 61% (3850/6311) 2026-10-23T23:33:29.4075098Z Updating files: 62% (3913/6311) 2026-10-23T23:33:29.4100695Z Updating files: 63% (3976/6311) 2026-10-23T23:33:29.4131291Z Updating files: 64% (4040/6311) 2026-10-23T23:33:29.4158437Z Updating files: 65% (4103/6311) 2026-10-23T23:33:29.4177593Z Updating files: 66% (4166/6311) 2026-10-23T23:33:29.4208229Z Updating files: 67% (4229/6311) 2026-10-23T23:33:29.4221423Z Updating files: 68% (4292/6311) 2026-10-23T23:33:29.4244865Z Updating files: 69% (4355/6311) 2026-10-23T23:33:29.4260392Z Updating files: 70% (4418/6311) 2026-10-23T23:33:29.4281991Z Updating files: 71% (4481/6311) 2026-10-23T23:33:29.4301769Z Updating files: 72% (4544/6311) 2026-10-23T23:33:29.4332188Z Updating files: 73% (4608/6311) 2026-10-23T23:33:29.4650478Z Updating files: 74% (4671/6311) 2026-10-23T23:33:29.4879903Z Updating files: 75% (4734/6311) 2026-10-23T23:33:29.4906091Z Updating files: 76% (4797/6311) 2026-10-23T23:33:29.4928261Z Updating files: 77% (4860/6311) 2026-10-23T23:33:29.4961163Z Updating files: 78% (4923/6311) 2026-10-23T23:33:29.4984003Z Updating files: 79% (4986/6311) 2026-10-23T23:33:29.5004376Z Updating files: 80% (5049/6311) 2026-10-23T23:33:29.5027301Z Updating files: 81% (5112/6311) 2026-10-23T23:33:29.5051109Z Updating files: 82% (5176/6311) 2026-10-23T23:33:29.5074723Z Updating files: 83% (5239/6311) 2026-10-23T23:33:29.5108055Z Updating files: 84% (5302/6311) 2026-10-23T23:33:29.5134398Z Updating files: 85% (5365/6311) 2026-10-23T23:33:29.5164421Z Updating files: 86% (5428/6311) 2026-10-23T23:33:29.5255916Z Updating files: 87% (5491/6311) 2026-10-23T23:33:29.5295667Z Updating files: 88% (5554/6311) 2026-10-23T23:33:29.5316134Z Updating files: 89% (5617/6311) 2026-10-23T23:33:29.5346995Z Updating files: 90% (5680/6311) 2026-10-23T23:33:29.5393043Z Updating files: 91% (5744/6311) 2026-10-23T23:33:29.5414170Z Updating files: 92% (5807/6311) 2026-10-23T23:33:29.5435572Z Updating files: 93% (5870/6311) 2026-10-23T23:33:29.5459811Z Updating files: 94% (5933/6311) 2026-10-23T23:33:29.5487289Z Updating files: 95% (5996/6311) 2026-10-23T23:33:29.5550117Z Updating files: 96% (6059/6311) 2026-10-23T23:33:29.5581361Z Updating files: 97% (6122/6311) 2026-10-23T23:33:29.5641009Z Updating files: 98% (6185/6311) 2026-10-23T23:33:29.5670925Z Updating files: 99% (6248/6311) 2026-10-23T23:33:29.5671435Z Updating files: 100% (6311/6311) 2026-10-23T23:33:29.5671767Z Updating files: 100% (6311/6311), done. 2026-10-23T23:33:29.5877272Z Note: switching to 'refs/remotes/pull/24264/merge'. 2026-10-23T23:33:29.5877664Z 2026-10-23T23:33:29.5877881Z You are in 'detached HEAD' state. You can look around, make experimental 2026-10-23T23:33:29.5878372Z changes and commit them, and you can discard any commits you make in this 2026-10-23T23:33:29.5878792Z state without impacting any branches by switching back to a branch. 2026-10-23T23:33:29.5879036Z 2026-10-23T23:33:29.5879220Z If you want to create a new branch to retain commits you create, you may 2026-10-23T23:33:29.5879619Z do so (now or later) by using -c with the switch command. Example: 2026-10-23T23:33:29.5879844Z 2026-10-23T23:33:29.5879958Z git switch -c 2026-10-23T23:33:29.5880122Z 2026-10-23T23:33:29.5880246Z Or undo this operation with: 2026-10-23T23:33:29.5880415Z 2026-10-23T23:33:29.5880629Z git switch - 2026-10-23T23:33:29.5880788Z 2026-10-23T23:33:29.5881001Z Turn off this advice by setting config variable advice.detachedHead to false 2026-10-23T23:33:29.5881325Z 2026-10-23T23:33:29.5881622Z HEAD is now at 41a5465 Merge 3ca0235ad75e1aba39294c14538ba3a6c89dfb29 into 22dc1dabc6d3b1616d0fa5017268c086a77887bc 2026-10-23T23:33:29.5892651Z ##[endgroup] 2026-10-23T23:33:29.5948063Z [command]/usr/local/bin/git log -1 --format=%H 2026-10-23T23:33:29.5978761Z 41a546587fc9731026639ad6a4f18b1ab8a9e9ce 2026-10-23T23:33:29.6114729Z ##[group]Run files="$(git ls-files .github/pr-assets)" 2026-10-23T23:33:29.6115088Z files="$(git ls-files .github/pr-assets)" 2026-10-23T23:33:29.6115346Z if test -n "$files"; then 2026-10-23T23:33:29.6115682Z  printf 'PR evidence must be uploaded to GitHub, not committed:\n%s\n' "$files" >&2 2026-10-23T23:33:29.6116028Z  exit 1 2026-10-23T23:33:29.6116178Z fi 2026-10-23T23:33:29.6128950Z shell: /usr/bin/bash -e {0} 2026-10-23T23:33:29.6129183Z env: 2026-10-23T23:33:29.6129343Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 192 2026-10-23T23:33:29.6129557Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 391 2026-10-23T23:33:29.6129737Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T23:33:29.6129913Z ##[endgroup] 2026-10-23T23:33:29.6417975Z Prepare all required actions 2026-10-23T23:33:29.6418560Z Getting action download info 2026-10-23T23:33:29.7241984Z Download action repository 'voidzero-dev/setup-vp@v1' (SHA:250f29ce396baf5e8f24498e17c0dfdebabc26eb) 2026-10-23T23:33:29.8570942Z ##[group]Run ./.github/actions/setup-ci-deps 2026-10-23T23:33:29.8571333Z env: 2026-10-23T23:33:29.8571543Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 192 2026-10-23T23:33:29.8571730Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 391 2026-10-23T23:33:29.8571961Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T23:33:29.8572134Z ##[endgroup] 2026-10-23T23:33:29.8712184Z ##[start-action display=Resolve Vite+ version;id=__self.vp] 2026-10-23T23:33:29.8734312Z ##[group]Run echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-23T23:33:29.8734950Z echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-23T23:33:29.8735327Z echo "node=$(jq -r '.engines.node' package.json)" >> "$GITHUB_OUTPUT" 2026-10-23T23:33:29.8735622Z echo "pnpm=$(jq -r '.packageManager' package.json)" >> "$GITHUB_OUTPUT" 2026-10-23T23:33:29.8747226Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-23T23:33:29.8747449Z env: 2026-10-23T23:33:29.8747606Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 192 2026-10-23T23:33:29.8747793Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 391 2026-10-23T23:33:29.8747980Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T23:33:29.8748161Z ##[endgroup] 2026-10-23T23:33:29.8866106Z ##[end-action id=__self.vp;outcome=success;conclusion=success;duration_ms=15] 2026-10-23T23:33:29.8868705Z ##[start-action display=Cache Vite+;id=__self.vp_cache] 2026-10-23T23:33:29.8937456Z ##[group]Run actions/cache@v6 2026-10-23T23:33:29.8937664Z with: 2026-10-23T23:33:29.8937843Z path: ~/.vite-plus 2026-10-23T23:33:29.8938063Z key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-23T23:33:29.8938320Z enableCrossOsArchive: false 2026-10-23T23:33:29.8938564Z fail-on-cache-miss: false 2026-10-23T23:33:29.8938731Z lookup-only: false 2026-10-23T23:33:29.8938880Z save-always: false 2026-10-23T23:33:29.8939032Z env: 2026-10-23T23:33:29.8939194Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 192 2026-10-23T23:33:29.8939390Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 391 2026-10-23T23:33:29.8939582Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T23:33:29.8939799Z ##[endgroup] 2026-10-23T23:33:30.1198920Z Cache hit for: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-23T23:33:30.6545412Z Received 170349591 of 170349591 (100.0%), 318.5 MBs/sec 2026-10-23T23:33:30.6549924Z Cache Size: ~162 MB (170349591 B) 2026-10-23T23:33:30.6583877Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/1f1eb928-07f1-49b7-8616-cbff4e9ed148/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-23T23:33:31.5615360Z Cache restored successfully 2026-10-23T23:33:31.6159037Z Cache restored from key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-23T23:33:31.6303358Z ##[end-action id=__self.vp_cache;outcome=success;conclusion=success;duration_ms=1743] 2026-10-23T23:33:31.6307060Z ##[start-action display=Use cached Vite+;id=__self.__run] 2026-10-23T23:33:31.6345415Z ##[group]Run echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-23T23:33:31.6345841Z echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-23T23:33:31.6346057Z "$HOME/.vite-plus/bin/vp" env use "26.12.1" 2026-10-23T23:33:31.6359999Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-23T23:33:31.6360271Z env: 2026-10-23T23:33:31.6360444Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 192 2026-10-23T23:33:31.6360626Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 391 2026-10-23T23:33:31.6360926Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T23:33:31.6361086Z ##[endgroup] 2026-10-23T23:33:31.6429669Z Using Node.js v26.12.1 (resolved from 26.12.1) 2026-10-23T23:33:31.6449458Z ##[end-action id=__self.__run;outcome=success;conclusion=success;duration_ms=14] 2026-10-23T23:33:31.6452414Z ##[start-action display=Setup Vite+;id=__self.__voidzero-dev_setup-vp] 2026-10-23T23:33:31.6459805Z ##[end-action id=__self.__voidzero-dev_setup-vp;outcome=skipped;conclusion=skipped;duration_ms=0] 2026-10-23T23:33:31.6461614Z ##[start-action display=Resolve pnpm store path;id=__self.pnpm_store] 2026-10-23T23:33:31.6503946Z ##[group]Run store_path="$(vp pm cache dir)" 2026-10-23T23:33:31.6504282Z store_path="$(vp pm cache dir)" 2026-10-23T23:33:31.6504480Z echo "path=$store_path" >> "$GITHUB_OUTPUT" 2026-10-23T23:33:31.6523140Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-23T23:33:31.6523402Z env: 2026-10-23T23:33:31.6523572Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 192 2026-10-23T23:33:31.6524011Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 391 2026-10-23T23:33:31.6524224Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T23:33:31.6524519Z ##[endgroup] 2026-10-23T23:33:31.6824592Z ##[end-action id=__self.pnpm_store;outcome=success;conclusion=success;duration_ms=36] 2026-10-23T23:33:31.6827463Z ##[start-action display=Cache full pnpm store;id=__self.__actions_cache] 2026-10-23T23:33:31.7523994Z ##[group]Run actions/cache@v6 2026-10-23T23:33:31.7524252Z with: 2026-10-23T23:33:31.7524462Z path: /home/runner/.local/share/pnpm/store/v11 2026-10-23T23:33:31.7524899Z key: pnpm-full-v1-Linux-X64-3cb0b4d7cff93dc8fe33f2ea73cac71ca25a36270fcb648b9b4a9320151012ef 2026-10-23T23:33:31.7525340Z restore-keys: pnpm-full-v1-Linux-X64- 2026-10-23T23:33:31.7525587Z enableCrossOsArchive: false 2026-10-23T23:33:31.7525818Z fail-on-cache-miss: false 2026-10-23T23:33:31.7526017Z lookup-only: false 2026-10-23T23:33:31.7526223Z save-always: false 2026-10-23T23:33:31.7526466Z env: 2026-10-23T23:33:31.7527026Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 192 2026-10-23T23:33:31.7527865Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 391 2026-10-23T23:33:31.7528090Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T23:33:31.7528283Z ##[endgroup] 2026-10-23T23:33:31.9975198Z Cache hit for: pnpm-full-v1-Linux-X64-3cb0b4d7cff93dc8fe33f2ea73cac71ca25a36270fcb648b9b4a9320151012ef 2026-10-23T23:33:33.0338579Z Received 390070272 of 995020926 (39.2%), 369.8 MBs/sec 2026-10-23T23:33:34.0455838Z Received 872415232 of 995020926 (87.7%), 412.3 MBs/sec 2026-10-23T23:33:34.3510484Z Received 995020926 of 995020926 (100.0%), 408.5 MBs/sec 2026-10-23T23:33:34.3512787Z Cache Size: ~949 MB (995020926 B) 2026-10-23T23:33:34.3569702Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/fb913c6d-271c-4d99-8755-af38f2dd2618/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-23T23:33:41.5049109Z Cache restored successfully 2026-10-23T23:33:41.5677964Z Cache restored from key: pnpm-full-v1-Linux-X64-3cb0b4d7cff93dc8fe33f2ea73cac71ca25a36270fcb648b9b4a9320151012ef 2026-10-23T23:33:41.5827124Z ##[end-action id=__self.__actions_cache;outcome=success;conclusion=success;duration_ms=9899] 2026-10-23T23:33:41.5831647Z ##[start-action display=Install dependencies;id=__self.__run_2] 2026-10-23T23:33:41.5849473Z ##[group]Run vp install 2026-10-23T23:33:41.5849730Z vp install 2026-10-23T23:33:41.5864819Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-23T23:33:41.5865021Z env: 2026-10-23T23:33:41.5865188Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 192 2026-10-23T23:33:41.5865446Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 391 2026-10-23T23:33:41.5865623Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T23:33:41.5865793Z ##[endgroup] 2026-10-23T23:33:41.6326190Z Scope: all 33 workspace projects 2026-10-23T23:33:41.7796012Z ? Verifying lockfile against supply-chain policies (2088 entries)... 2026-10-23T23:33:42.1808631Z Packages are hard linked from the content-addressable store to the virtual store. 2026-10-23T23:33:42.1809012Z Content-addressable store is at: /home/runner/.local/share/pnpm/store/v11 2026-10-23T23:33:42.1809257Z Virtual store is at: node_modules/.pnpm 2026-10-23T23:33:44.9851735Z ✓ Lockfile passes supply-chain policies (2088 entries in 3.2s) 2026-10-23T23:33:44.9852158Z Lockfile is up to date, resolution step is skipped 2026-10-23T23:33:45.0098422Z Packages: +1721 2026-10-23T23:33:45.0098676Z ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2026-10-23T23:33:45.0619364Z Progress: resolved 1721, reused 1718, downloaded 0, added 1721, done 2026-10-23T23:33:46.3241151Z . prepare$ vp config --no-agent 2026-10-23T23:33:46.4610345Z . prepare: Done 2026-10-23T23:33:46.4629750Z 2026-10-23T23:33:46.4630185Z devDependencies: 2026-10-23T23:33:46.4630425Z + @coderabbitai/config 1.1.0 2026-10-23T23:33:46.4630675Z + @shadcn/lint 0.1.5 2026-10-23T23:33:46.4630914Z + @types/node 24.12.4 2026-10-23T23:33:46.4631120Z + knip 6.34.0 2026-10-23T23:33:46.4631331Z + typescript <- @tsc-rs/typescript 0.8.0 2026-10-23T23:33:46.4631604Z + vite-plus 1.3.0 2026-10-23T23:33:46.4631712Z 2026-10-23T23:33:46.4655607Z Done in 4.9s using pnpm v12.14.0 2026-10-23T23:33:46.4862889Z ##[end-action id=__self.__run_2;outcome=success;conclusion=success;duration_ms=4903] 2026-10-23T23:33:46.5592460Z ##[group]Run actions/cache@v6 2026-10-23T23:33:46.5593304Z with: 2026-10-23T23:33:46.5593507Z path: ~/.cache/electron 2026-10-23T23:33:46.5593918Z key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-23T23:33:46.5594351Z enableCrossOsArchive: false 2026-10-23T23:33:46.5594592Z fail-on-cache-miss: false 2026-10-23T23:33:46.5594812Z lookup-only: false 2026-10-23T23:33:46.5595015Z save-always: false 2026-10-23T23:33:46.5595210Z env: 2026-10-23T23:33:46.5595407Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 192 2026-10-23T23:33:46.5595660Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 391 2026-10-23T23:33:46.5595911Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T23:33:46.5596163Z ##[endgroup] 2026-10-23T23:33:46.8079078Z Cache hit for: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-23T23:33:47.0501072Z Received 122906203 of 122906203 (100.0%), 545.2 MBs/sec 2026-10-23T23:33:47.0501477Z Cache Size: ~117 MB (122906203 B) 2026-10-23T23:33:47.0531621Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/1ee49ef3-585b-42af-a36c-441d13d8ac10/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-23T23:33:47.1769181Z Cache restored successfully 2026-10-23T23:33:47.2114423Z Cache restored from key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-23T23:33:47.2281697Z ##[group]Run vp run --filter @t3tools/desktop ensure:electron 2026-10-23T23:33:47.2282247Z vp run --filter @t3tools/desktop ensure:electron 2026-10-23T23:33:47.2299484Z shell: /usr/bin/bash -e {0} 2026-10-23T23:33:47.2299750Z env: 2026-10-23T23:33:47.2299965Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 192 2026-10-23T23:33:47.2300241Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 391 2026-10-23T23:33:47.2300501Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T23:33:47.2300759Z ##[endgroup] 2026-10-23T23:33:47.5035074Z ~/apps/desktop$ node scripts/ensure-electron-runtime.mjs ⊘ cache disabled 2026-10-23T23:33:48.1929303Z /home/runner/_work/t3code/t3code/node_modules/.pnpm/electron@44.9.3_supports-color@8.1.1/node_modules/electron/dist/electron 2026-10-23T23:33:48.1959026Z 2026-10-23T23:33:48.2090423Z ##[group]Run vp run knip:check 2026-10-23T23:33:48.2090678Z vp run knip:check 2026-10-23T23:33:48.2103551Z shell: /usr/bin/bash -e {0} 2026-10-23T23:33:48.2103722Z env: 2026-10-23T23:33:48.2103854Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 192 2026-10-23T23:33:48.2104028Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 391 2026-10-23T23:33:48.2104195Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T23:33:48.2104352Z ##[endgroup] 2026-10-23T23:33:48.4171662Z $ knip --include files,dependencies --no-config-hints ⊘ cache disabled 2026-10-23T23:33:53.6955949Z 2026-10-23T23:33:53.6959239Z $ 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-23T23:34:05.6993380Z 2026-10-23T23:34:05.6994824Z --- 2026-10-23T23:34:05.6995480Z vp run: 2/2 successful. (Run `vp run --last-details` for full details) 2026-10-23T23:34:05.7113960Z ##[group]Run vp run --filter @t3tools/source-control-github generate --check 2026-10-23T23:34:05.7114354Z vp run --filter @t3tools/source-control-github generate --check 2026-10-23T23:34:05.7126275Z shell: /usr/bin/bash -e {0} 2026-10-23T23:34:05.7126430Z env: 2026-10-23T23:34:05.7126560Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 192 2026-10-23T23:34:05.7126733Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 391 2026-10-23T23:34:05.7126898Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T23:34:05.7127065Z ##[endgroup] 2026-10-23T23:34:05.9168384Z ~/packages/source-control-github$ graphqlgen --check ⊘ cache disabled 2026-10-23T23:34:06.1982795Z 2026-10-23T23:34:06.2098076Z ##[group]Run vp run --filter t3 generate --check 2026-10-23T23:34:06.2098361Z vp run --filter t3 generate --check 2026-10-23T23:34:06.2109889Z shell: /usr/bin/bash -e {0} 2026-10-23T23:34:06.2110051Z env: 2026-10-23T23:34:06.2110197Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 192 2026-10-23T23:34:06.2110370Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 391 2026-10-23T23:34:06.2110534Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T23:34:06.2110693Z ##[endgroup] 2026-10-23T23:34:06.4327917Z ~/apps/server$ graphqlgen --check ⊘ cache disabled 2026-10-23T23:34:06.6864826Z 2026-10-23T23:34:06.6988642Z ##[group]Run vp check 2026-10-23T23:34:06.6988915Z vp check 2026-10-23T23:34:06.7006877Z shell: /usr/bin/bash -e {0} 2026-10-23T23:34:06.7007126Z env: 2026-10-23T23:34:06.7007336Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 192 2026-10-23T23:34:06.7007616Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 391 2026-10-23T23:34:06.7007875Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T23:34:06.7008123Z ##[endgroup] 2026-10-23T23:34:07.4824426Z pass: All 5668 files are correctly formatted (585ms, 8 threads) 2026-10-23T23:34:17.8451078Z warn: Lint warnings found 2026-10-23T23:34:17.8452745Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T23:34:17.8453566Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:215:7] 2026-10-23T23:34:17.8454006Z 211 │ }; 2026-10-23T23:34:17.8454262Z 212 │ useEffect(() => { 2026-10-23T23:34:17.8454577Z ·  ────┬──── 2026-10-23T23:34:17.8454998Z · ╰── This is the containing effect 2026-10-23T23:34:17.8455610Z 213 │ const inserted = ownerKey ? readComposerDraftSelection(ownerKey, draftMessage) : null; 2026-10-23T23:34:17.8456081Z 214 │ if (inserted) { 2026-10-23T23:34:17.8456380Z 215 │ setSelection((current) => 2026-10-23T23:34:17.8456714Z ·  ──────┬───── 2026-10-23T23:34:17.8457239Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T23:34:17.8457887Z 216 │ current.start === inserted.start && current.end === inserted.end ? current : inserted, 2026-10-23T23:34:17.8458307Z ╰──── 2026-10-23T23:34:17.8459546Z  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-23T23:34:17.8461252Z  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-23T23:34:17.8461938Z 2026-10-23T23:34:17.8462442Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T23:34:17.8463208Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:296:7] 2026-10-23T23:34:17.8463661Z 284 │ }, [hasWorkspaceSnapshot]); 2026-10-23T23:34:17.8463957Z 285 │ useEffect(() => { 2026-10-23T23:34:17.8464243Z ·  ────┬──── 2026-10-23T23:34:17.8464634Z · ╰── This is the containing effect 2026-10-23T23:34:17.8465161Z 286 │ if (!environmentId || !projectCwd || !selectedProviderInstanceId) return; 2026-10-23T23:34:17.8465712Z 287 │ const key = `${environmentId}:${selectedProviderInstanceId}:${projectCwd}`; 2026-10-23T23:34:17.8466129Z 288 │ const now = Date.now(); 2026-10-23T23:34:17.8466827Z 289 │ const lastRequest = workspaceRefreshKeyRef.current; 2026-10-23T23:34:17.8467175Z 290 │ if ( 2026-10-23T23:34:17.8467452Z 291 │ lastRequest?.key === key && 2026-10-23T23:34:17.8467907Z 292 │ now - lastRequest.requestedAt < PROVIDER_WORKSPACE_SNAPSHOT_TTL_MS 2026-10-23T23:34:17.8468283Z 293 │ ) 2026-10-23T23:34:17.8468518Z 294 │ return; 2026-10-23T23:34:17.8468974Z 295 │ if (hasCurrentProviderWorkspaceSnapshot(selectedProviderStatus, projectCwd, now)) { 2026-10-23T23:34:17.8469464Z 296 │ setWorkspaceRefreshRetry(null); 2026-10-23T23:34:17.8469845Z ·  ────────────┬─────────── 2026-10-23T23:34:17.8470360Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T23:34:17.8470840Z 297 │ return; 2026-10-23T23:34:17.8471070Z ╰──── 2026-10-23T23:34:17.8472598Z  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-23T23:34:17.8474285Z  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-23T23:34:17.8474850Z 2026-10-23T23:34:17.8475221Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T23:34:17.8475898Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:326:5] 2026-10-23T23:34:17.8476305Z 325 │ }, [ 2026-10-23T23:34:17.8476567Z 326 │ draftMessage, 2026-10-23T23:34:17.8476835Z ·  ──────┬───── 2026-10-23T23:34:17.8477123Z · ╰── Unnecessary dependency `draftMessage` 2026-10-23T23:34:17.8477376Z 327 │ environmentId, 2026-10-23T23:34:17.8477533Z ╰──── 2026-10-23T23:34:17.8477948Z  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-23T23:34:17.8478699Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.8479224Z 2026-10-23T23:34:17.8479751Z ⚠ eslint(no-unused-vars): Variable 'revokeActiveMcpThread' is declared but never used. Unused variables should start with a '_'. 2026-10-23T23:34:17.8480213Z ╭─[apps/server/src/mcp/McpSessionRegistry.ts:218:7] 2026-10-23T23:34:17.8480501Z 217 │ 2026-10-23T23:34:17.8480764Z 218 │ const revokeActiveMcpThread = (threadId: ThreadId): Effect.Effect => 2026-10-23T23:34:17.8481071Z ·  ──────────┬────────── 2026-10-23T23:34:17.8481374Z · ╰── 'revokeActiveMcpThread' is declared here 2026-10-23T23:34:17.8481774Z 219 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeThread(threadId) : Effect.void; 2026-10-23T23:34:17.8482055Z ╰──── 2026-10-23T23:34:17.8482251Z  help: Consider removing this declaration. 2026-10-23T23:34:17.8482388Z 2026-10-23T23:34:17.8482773Z ⚠ eslint(no-unused-vars): Variable 'revokeAllActiveMcpCredentials' is declared but never used. Unused variables should start with a '_'. 2026-10-23T23:34:17.8483252Z ╭─[apps/server/src/mcp/McpSessionRegistry.ts:221:7] 2026-10-23T23:34:17.8483468Z 220 │ 2026-10-23T23:34:17.8483699Z 221 │ const revokeAllActiveMcpCredentials = (): Effect.Effect => 2026-10-23T23:34:17.8483985Z ·  ──────────────┬────────────── 2026-10-23T23:34:17.8484316Z · ╰── 'revokeAllActiveMcpCredentials' is declared here 2026-10-23T23:34:17.8484703Z 222 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeAll : Effect.void; 2026-10-23T23:34:17.8485092Z ╰──── 2026-10-23T23:34:17.8485319Z  help: Consider removing this declaration. 2026-10-23T23:34:17.8485462Z 2026-10-23T23:34:17.8485646Z ⚠ eslint(no-new): Do not use 'new' for side effects. 2026-10-23T23:34:17.8485974Z ╭─[apps/server/src/mcp/McpToolAccess.test.ts:168:3] 2026-10-23T23:34:17.8486352Z 167 │ // @ts-expect-error a declaration constructed directly 2026-10-23T23:34:17.8486702Z 168 │ new McpToolAccess.Declaration(unchecked); 2026-10-23T23:34:17.8487126Z ·  ───────────────────────────── 2026-10-23T23:34:17.8487615Z 169 │ // @ts-expect-error a handlers layer built outside McpToolAccess 2026-10-23T23:34:17.8487967Z ╰──── 2026-10-23T23:34:17.8488356Z  help: Assign the result of 'new' to a variable or compare it to a reference. 2026-10-23T23:34:17.8488591Z 2026-10-23T23:34:17.8488975Z ⚠ 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-23T23:34:17.8489502Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:50:18] 2026-10-23T23:34:17.8489858Z 49 │ for (const tool of ["sendMessage", "followupTask", "interruptAgent", "listAgents"]) { 2026-10-23T23:34:17.8490253Z 50 │ assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true); 2026-10-23T23:34:17.8490628Z ·  ───────── 2026-10-23T23:34:17.8490972Z 51 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true); 2026-10-23T23:34:17.8491245Z ╰──── 2026-10-23T23:34:17.8491314Z 2026-10-23T23:34:17.8491699Z ⚠ 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-23T23:34:17.8492216Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:51:18] 2026-10-23T23:34:17.8492589Z 50 │ assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true); 2026-10-23T23:34:17.8492990Z 51 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true); 2026-10-23T23:34:17.8493299Z ·  ───────── 2026-10-23T23:34:17.8493480Z 52 │ } 2026-10-23T23:34:17.8493618Z ╰──── 2026-10-23T23:34:17.8493683Z 2026-10-23T23:34:17.8494069Z ⚠ 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-23T23:34:17.8494587Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:55:5] 2026-10-23T23:34:17.8494832Z 54 │ assert.equal( 2026-10-23T23:34:17.8495123Z 55 │ Schema.is(CodexSchema.ServerNotification__CollabAgentToolCallStatus)("interrupted"), 2026-10-23T23:34:17.8495409Z ·  ───────── 2026-10-23T23:34:17.8495585Z 56 │ true, 2026-10-23T23:34:17.8495722Z ╰──── 2026-10-23T23:34:17.8495786Z 2026-10-23T23:34:17.8496176Z ⚠ 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-23T23:34:17.8496686Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:59:5] 2026-10-23T23:34:17.8496933Z 58 │ assert.equal( 2026-10-23T23:34:17.8497231Z 59 │ Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentToolCallStatus)("interrupted"), 2026-10-23T23:34:17.8497519Z ·  ───────── 2026-10-23T23:34:17.8497684Z 60 │ true, 2026-10-23T23:34:17.8497821Z ╰──── 2026-10-23T23:34:17.8497886Z 2026-10-23T23:34:17.8498259Z ⚠ 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-23T23:34:17.8498769Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:103:16] 2026-10-23T23:34:17.8499012Z 102 │ 2026-10-23T23:34:17.8499381Z 103 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse)(resumeResponse), true); 2026-10-23T23:34:17.8499798Z ·  ───────── 2026-10-23T23:34:17.8499975Z 104 │ }); 2026-10-23T23:34:17.8500112Z ╰──── 2026-10-23T23:34:17.8500180Z 2026-10-23T23:34:17.8500714Z ⚠ 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-23T23:34:17.8501249Z ╭─[packages/shared/src/otelEnvironment.ts:146:14] 2026-10-23T23:34:17.8501468Z 145 │ name, 2026-10-23T23:34:17.8501942Z 146 │ (raw) => Schema.decodeUnknownOption(OtlpProtocol)(raw.toLowerCase()), 2026-10-23T23:34:17.8502385Z ·  ────────────────────────── 2026-10-23T23:34:17.8502803Z 147 │ `${name} is not http/protobuf or http/json, ${NOT_EXPORTED}`, 2026-10-23T23:34:17.8503127Z ╰──── 2026-10-23T23:34:17.8503237Z 2026-10-23T23:34:17.8503558Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T23:34:17.8504142Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:121:27] 2026-10-23T23:34:17.8504678Z 120 │ const scope = makeScope(options.capabilities ?? new Set(["preview", "worktree"])); 2026-10-23T23:34:17.8505135Z 121 │ const dispatch = vi.fn((_: unknown) => 2026-10-23T23:34:17.8505459Z ·  ┬ 2026-10-23T23:34:17.8505877Z · ╰── '_' is declared here 2026-10-23T23:34:17.8506283Z 122 │ (options.dispatchGate ?? Effect.void).pipe( 2026-10-23T23:34:17.8506580Z ╰──── 2026-10-23T23:34:17.8506853Z  help: Consider removing this parameter. 2026-10-23T23:34:17.8507059Z 2026-10-23T23:34:17.8507393Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T23:34:17.8507953Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:134:39] 2026-10-23T23:34:17.8508314Z 133 │ ); 2026-10-23T23:34:17.8508606Z 134 │ const listLocalBranchNames = vi.fn((_: string) => 2026-10-23T23:34:17.8508991Z ·  ┬ 2026-10-23T23:34:17.8509444Z · ╰── '_' is declared here 2026-10-23T23:34:17.8509816Z 135 │ Effect.succeed( 2026-10-23T23:34:17.8510055Z ╰──── 2026-10-23T23:34:17.8510324Z  help: Consider removing this parameter. 2026-10-23T23:34:17.8510572Z 2026-10-23T23:34:17.8510902Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T23:34:17.8511459Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:178:31] 2026-10-23T23:34:17.8511824Z 177 │ }); 2026-10-23T23:34:17.8512108Z 178 │ const sendToThread = vi.fn((_: unknown) => { 2026-10-23T23:34:17.8512456Z ·  ┬ 2026-10-23T23:34:17.8512863Z · ╰── '_' is declared here 2026-10-23T23:34:17.8513278Z 179 │ switch (options.continuation ?? "queued") { 2026-10-23T23:34:17.8513573Z ╰──── 2026-10-23T23:34:17.8513841Z  help: Consider removing this parameter. 2026-10-23T23:34:17.8514035Z 2026-10-23T23:34:17.8514370Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T23:34:17.8514934Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:203:33] 2026-10-23T23:34:17.8515282Z 202 │ ); 2026-10-23T23:34:17.8515764Z 203 │ const removeWorktree = vi.fn((_: unknown) => 2026-10-23T23:34:17.8516229Z ·  ┬ 2026-10-23T23:34:17.8516664Z · ╰── '_' is declared here 2026-10-23T23:34:17.8517083Z 204 │ options.removeWorktreeFails 2026-10-23T23:34:17.8517358Z ╰──── 2026-10-23T23:34:17.8517660Z  help: Consider removing this parameter. 2026-10-23T23:34:17.8517877Z 2026-10-23T23:34:17.8518208Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T23:34:17.8518776Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:208:36] 2026-10-23T23:34:17.8519128Z 207 │ ); 2026-10-23T23:34:17.8519418Z 208 │ const deleteLocalBranch = vi.fn((_: unknown) => 2026-10-23T23:34:17.8519793Z ·  ┬ 2026-10-23T23:34:17.8520226Z · ╰── '_' is declared here 2026-10-23T23:34:17.8520660Z 209 │ options.deleteLocalBranchFails 2026-10-23T23:34:17.8520933Z ╰──── 2026-10-23T23:34:17.8521207Z  help: Consider removing this parameter. 2026-10-23T23:34:17.8521409Z 2026-10-23T23:34:17.8521730Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T23:34:17.8522296Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:213:42] 2026-10-23T23:34:17.8522647Z 212 │ ); 2026-10-23T23:34:17.8522961Z 213 │ const fetchWorktreeBaseCommit = vi.fn((_: unknown) => 2026-10-23T23:34:17.8523364Z ·  ┬ 2026-10-23T23:34:17.8523829Z · ╰── '_' is declared here 2026-10-23T23:34:17.8524237Z 214 │ options.fetchWorktreeBaseFails 2026-10-23T23:34:17.8524515Z ╰──── 2026-10-23T23:34:17.8524787Z  help: Consider removing this parameter. 2026-10-23T23:34:17.8524993Z 2026-10-23T23:34:17.8525316Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T23:34:17.8525885Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:254:30] 2026-10-23T23:34:17.8526197Z 253 │ ); 2026-10-23T23:34:17.8526375Z 254 │ const localStatus = vi.fn((_: unknown) => 2026-10-23T23:34:17.8526598Z ·  ┬ 2026-10-23T23:34:17.8526881Z · ╰── '_' is declared here 2026-10-23T23:34:17.8527112Z 255 │ Effect.succeed({ 2026-10-23T23:34:17.8527275Z ╰──── 2026-10-23T23:34:17.8527488Z  help: Consider removing this parameter. 2026-10-23T23:34:17.8527630Z 2026-10-23T23:34:17.8527844Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T23:34:17.8528211Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:264:32] 2026-10-23T23:34:17.8528458Z 263 │ ); 2026-10-23T23:34:17.8528706Z 264 │ const refreshStatus = vi.fn((_: string) => Effect.die("refreshStatus stub")); 2026-10-23T23:34:17.8529004Z ·  ┬ 2026-10-23T23:34:17.8529280Z · ╰── '_' is declared here 2026-10-23T23:34:17.8529612Z 265 │ const runForThread = vi.fn((input: { readonly worktreePath: string }) => { 2026-10-23T23:34:17.8529855Z ╰──── 2026-10-23T23:34:17.8530158Z  help: Consider removing this parameter. 2026-10-23T23:34:17.8530341Z 2026-10-23T23:34:17.8530658Z ⚠ eslint(no-unused-vars): Identifier 'Duration' is imported but never used. 2026-10-23T23:34:17.8531043Z ╭─[packages/provider-pi/src/server/adapter.test.ts:24:13] 2026-10-23T23:34:17.8531328Z 23 │ import * as Deferred from "effect/Deferred"; 2026-10-23T23:34:17.8531563Z 24 │ import * as Duration from "effect/Duration"; 2026-10-23T23:34:17.8531845Z ·  ────┬─── 2026-10-23T23:34:17.8532120Z · ╰── 'Duration' is imported here 2026-10-23T23:34:17.8532380Z 25 │ import * as Effect from "effect/Effect"; 2026-10-23T23:34:17.8532568Z ╰──── 2026-10-23T23:34:17.8532746Z  help: Consider removing this import. 2026-10-23T23:34:17.8532878Z 2026-10-23T23:34:17.8559666Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-23T23:34:17.8560767Z ╭─[packages/provider-pi/src/server/adapter.ts:3405:7] 2026-10-23T23:34:17.8561112Z 3404 │ 2026-10-23T23:34:17.8561481Z 3405 │ const layer: Layer.Layer = 2026-10-23T23:34:17.8561862Z ·  ──┬── 2026-10-23T23:34:17.8562219Z · ╰── 'layer' is declared here 2026-10-23T23:34:17.8562474Z 3406 │ Layer.effect( 2026-10-23T23:34:17.8562648Z ╰──── 2026-10-23T23:34:17.8562850Z  help: Consider removing this declaration. 2026-10-23T23:34:17.8563000Z 2026-10-23T23:34:17.8563239Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T23:34:17.8563683Z ╭─[apps/web/src/components/pullRequest/PullRequestSummaryTab.tsx:814:17] 2026-10-23T23:34:17.8563978Z 813 │
{ 2026-10-23T23:34:17.8570014Z ·  ────┬──── 2026-10-23T23:34:17.8570271Z · ╰── This is the containing effect 2026-10-23T23:34:17.8570638Z 78 │ const { host, code } = parsePairingUrl(connectionPairingUrl); 2026-10-23T23:34:17.8570883Z 79 │ setHostInput(host); 2026-10-23T23:34:17.8571079Z ·  ──────┬───── 2026-10-23T23:34:17.8571393Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T23:34:17.8571662Z 80 │ setCodeInput(code); 2026-10-23T23:34:17.8571825Z ╰──── 2026-10-23T23:34:17.8572606Z  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-23T23:34:17.8573687Z  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-23T23:34:17.8574053Z 2026-10-23T23:34:17.8574350Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T23:34:17.8574834Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:89:5] 2026-10-23T23:34:17.8575090Z 82 │ 2026-10-23T23:34:17.8575228Z 83 │ useEffect(() => { 2026-10-23T23:34:17.8575399Z ·  ────┬──── 2026-10-23T23:34:17.8575646Z · ╰── This is the containing effect 2026-10-23T23:34:17.8575902Z 84 │ if (routePairingUrl.length === 0) { 2026-10-23T23:34:17.8576099Z 85 │ return; 2026-10-23T23:34:17.8576251Z 86 │ } 2026-10-23T23:34:17.8576378Z 87 │ 2026-10-23T23:34:17.8576574Z 88 │ const { host, code } = parsePairingUrl(routePairingUrl); 2026-10-23T23:34:17.8576797Z 89 │ setHostInput(host); 2026-10-23T23:34:17.8576980Z ·  ──────┬───── 2026-10-23T23:34:17.8577273Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T23:34:17.8577540Z 90 │ setCodeInput(code); 2026-10-23T23:34:17.8577693Z ╰──── 2026-10-23T23:34:17.8578449Z  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-23T23:34:17.8579582Z  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-23T23:34:17.8580019Z 2026-10-23T23:34:17.8580332Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T23:34:17.8580891Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:95:7] 2026-10-23T23:34:17.8581156Z 92 │ 2026-10-23T23:34:17.8581295Z 93 │ useEffect(() => { 2026-10-23T23:34:17.8581809Z ·  ────┬──── 2026-10-23T23:34:17.8582056Z · ╰── This is the containing effect 2026-10-23T23:34:17.8582309Z 94 │ if (pairingConnectionError) { 2026-10-23T23:34:17.8582511Z 95 │ setIsSubmitting(false); 2026-10-23T23:34:17.8582717Z ·  ───────┬─────── 2026-10-23T23:34:17.8583033Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T23:34:17.8583286Z 96 │ } 2026-10-23T23:34:17.8583422Z ╰──── 2026-10-23T23:34:17.8584191Z  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-23T23:34:17.8585211Z  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-23T23:34:17.8585571Z 2026-10-23T23:34:17.8585803Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T23:34:17.8586230Z ╭─[apps/web/src/components/pullRequest/PullRequestChecksPopover.tsx:88:15] 2026-10-23T23:34:17.8586514Z 87 │
  • { 2026-10-23T23:34:17.8589346Z ·  ────┬──── 2026-10-23T23:34:17.8589598Z · ╰── This is the containing effect 2026-10-23T23:34:17.8589819Z 436 │ if ( 2026-10-23T23:34:17.8589990Z 437 │ props.active === false || 2026-10-23T23:34:17.8590190Z 438 │ activeDraftKey !== null || 2026-10-23T23:34:17.8590447Z 439 │ editingPendingTask !== null || 2026-10-23T23:34:17.8590675Z 440 │ selectedProject === null 2026-10-23T23:34:17.8590847Z 441 │ ) { 2026-10-23T23:34:17.8590998Z 442 │ return; 2026-10-23T23:34:17.8591143Z 443 │ } 2026-10-23T23:34:17.8591295Z 444 │ setActiveDraftKey( 2026-10-23T23:34:17.8591598Z ·  ────────┬──────── 2026-10-23T23:34:17.8592011Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T23:34:17.8592284Z 445 │ createNewTaskDraft({ 2026-10-23T23:34:17.8592454Z ╰──── 2026-10-23T23:34:17.8593290Z  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-23T23:34:17.8594301Z  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-23T23:34:17.8594656Z 2026-10-23T23:34:17.8594949Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-23T23:34:17.8595417Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:1244:36] 2026-10-23T23:34:17.8595741Z 1243 │ 2026-10-23T23:34:17.8596109Z 1244 │ {props.children} 2026-10-23T23:34:17.8596466Z ·  ───────────── 2026-10-23T23:34:17.8596687Z 1245 │ 2026-10-23T23:34:17.8596851Z ╰──── 2026-10-23T23:34:17.8597173Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-23T23:34:17.8597595Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-23T23:34:17.8597809Z 2026-10-23T23:34:17.8598114Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T23:34:17.8598581Z ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:40:5] 2026-10-23T23:34:17.8598906Z 37 │ const [initialized, setInitialized] = useState(false); 2026-10-23T23:34:17.8599140Z 38 │ useLayoutEffect(() => { 2026-10-23T23:34:17.8599336Z ·  ───────┬─────── 2026-10-23T23:34:17.8599600Z · ╰── This is the containing effect 2026-10-23T23:34:17.8599824Z 39 │ reset(); 2026-10-23T23:34:17.8599990Z 40 │ setInitialized(true); 2026-10-23T23:34:17.8600180Z ·  ───────┬────── 2026-10-23T23:34:17.8600527Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T23:34:17.8600798Z 41 │ }, [reset]); 2026-10-23T23:34:17.8600952Z ╰──── 2026-10-23T23:34:17.8601709Z  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-23T23:34:17.8602714Z  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-23T23:34:17.8603073Z 2026-10-23T23:34:17.8603364Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T23:34:17.8603836Z ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:93:5] 2026-10-23T23:34:17.8604177Z 88 │ 2026-10-23T23:34:17.8604412Z 89 │ useEffect(() => { 2026-10-23T23:34:17.8604591Z ·  ────┬──── 2026-10-23T23:34:17.8604841Z · ╰── This is the containing effect 2026-10-23T23:34:17.8605260Z 90 │ if (!needsPreparation || !initialProjectRef.branch || waitingForProject) return; 2026-10-23T23:34:17.8605568Z 91 │ const branchName = initialProjectRef.branch; 2026-10-23T23:34:17.8605779Z 92 │ let active = true; 2026-10-23T23:34:17.8605987Z 93 │ setPendingCheckouts((count) => count + 1); 2026-10-23T23:34:17.8606216Z ·  ─────────┬───────── 2026-10-23T23:34:17.8606530Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T23:34:17.8606904Z 94 │ // Serialize replacements: ignoring a stale result cannot undo its Git mutation. 2026-10-23T23:34:17.8607158Z ╰──── 2026-10-23T23:34:17.8607919Z  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-23T23:34:17.8608918Z  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-23T23:34:17.8609274Z 2026-10-23T23:34:17.8609574Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T23:34:17.8610072Z ╭─[apps/mobile/src/features/threads/thread-inspector-content-stack.tsx:60:5] 2026-10-23T23:34:17.8610344Z 58 │ 2026-10-23T23:34:17.8610537Z 59 │ useEffect(() => { 2026-10-23T23:34:17.8610729Z ·  ────┬──── 2026-10-23T23:34:17.8610990Z · ╰── This is the containing effect 2026-10-23T23:34:17.8611248Z 60 │ setMountedModes((current) => { 2026-10-23T23:34:17.8611458Z ·  ───────┬─────── 2026-10-23T23:34:17.8611773Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T23:34:17.8612067Z 61 │ if (current.has(props.mode)) { 2026-10-23T23:34:17.8612249Z ╰──── 2026-10-23T23:34:17.8613082Z  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-23T23:34:17.8614250Z  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-23T23:34:17.8614606Z 2026-10-23T23:34:17.8614789Z ⚠ react(immutability): This value cannot be modified 2026-10-23T23:34:17.8615162Z ╭─[apps/mobile/src/features/connection/ConnectionStatusDot.tsx:58:7] 2026-10-23T23:34:17.8615464Z 53 │ function usePulseAnimation(pulse: boolean) { 2026-10-23T23:34:17.8615710Z 54 │ const pulseProgress = useSharedValue(0); 2026-10-23T23:34:17.8615932Z ·  ──────┬────── 2026-10-23T23:34:17.8616216Z · ╰── `pulseProgress` originates here 2026-10-23T23:34:17.8616449Z 55 │ 2026-10-23T23:34:17.8616601Z 56 │ useEffect(() => { 2026-10-23T23:34:17.8616772Z 57 │ if (pulse) { 2026-10-23T23:34:17.8616966Z 58 │ pulseProgress.value = withRepeat( 2026-10-23T23:34:17.8617185Z ·  ──────┬────── 2026-10-23T23:34:17.8617462Z · ╰── `pulseProgress` cannot be modified 2026-10-23T23:34:17.8617713Z 59 │ withTiming(1, { 2026-10-23T23:34:17.8617872Z ╰──── 2026-10-23T23:34:17.8618254Z  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-23T23:34:17.8618905Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T23:34:17.8619249Z 2026-10-23T23:34:17.8619564Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-23T23:34:17.8620022Z ╭─[packages/provider-opencode/src/server/adapter.ts:3755:7] 2026-10-23T23:34:17.8620261Z 3754 │ 2026-10-23T23:34:17.8620623Z 3755 │ const layer: Layer.Layer = 2026-10-23T23:34:17.8620946Z ·  ──┬── 2026-10-23T23:34:17.8621197Z · ╰── 'layer' is declared here 2026-10-23T23:34:17.8621436Z 3756 │ Layer.effect( 2026-10-23T23:34:17.8621750Z ╰──── 2026-10-23T23:34:17.8622042Z  help: Consider removing this declaration. 2026-10-23T23:34:17.8622260Z 2026-10-23T23:34:17.8622826Z ⚠ eslint(no-unused-vars): Variable 'layerFromProviderAdapter' is declared but never used. Unused variables should start with a '_'. 2026-10-23T23:34:17.8623660Z ╭─[apps/server/src/orchestration-v2/ProviderAdapterRegistry.ts:346:7] 2026-10-23T23:34:17.8624079Z 345 │ 2026-10-23T23:34:17.8624372Z 346 │ const layerFromProviderAdapter: Layer.Layer< 2026-10-23T23:34:17.8624756Z ·  ────────────┬─────────── 2026-10-23T23:34:17.8625232Z · ╰── 'layerFromProviderAdapter' is declared here 2026-10-23T23:34:17.8625671Z 347 │ ProviderAdapterRegistryV2, 2026-10-23T23:34:17.8625849Z ╰──── 2026-10-23T23:34:17.8626038Z  help: Consider removing this declaration. 2026-10-23T23:34:17.8626178Z 2026-10-23T23:34:17.8626374Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T23:34:17.8626760Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:697:76] 2026-10-23T23:34:17.8627298Z 696 │ const [snoozeGateClock, setSnoozeGateClock] = useState(() => ({ thread, now: Date.now() })); 2026-10-23T23:34:17.8627884Z 697 │ if (snoozeGateClock.thread !== thread) setSnoozeGateClock({ thread, now: Date.now() }); 2026-10-23T23:34:17.8628391Z ·  ─────┬──── 2026-10-23T23:34:17.8628826Z · ╰── Cannot call impure function 2026-10-23T23:34:17.8629189Z 698 │ const snoozeGateNow = new Date(snoozeGateClock.now).toISOString(); 2026-10-23T23:34:17.8629429Z ╰──── 2026-10-23T23:34:17.8629827Z  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-23T23:34:17.8630563Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T23:34:17.8630895Z 2026-10-23T23:34:17.8631090Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T23:34:17.8631479Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:718:71] 2026-10-23T23:34:17.8631763Z 717 │ const snoozePresets = useMemo( 2026-10-23T23:34:17.8632089Z 718 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-23T23:34:17.8632457Z ·  ─────┬──── 2026-10-23T23:34:17.8632834Z · ╰── Cannot call impure function 2026-10-23T23:34:17.8633173Z 719 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-23T23:34:17.8633392Z ╰──── 2026-10-23T23:34:17.8633788Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-23T23:34:17.8634441Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T23:34:17.8634768Z 2026-10-23T23:34:17.8634978Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-23T23:34:17.8635388Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:719:6] 2026-10-23T23:34:17.8635789Z 718 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-23T23:34:17.8636140Z 719 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-23T23:34:17.8636401Z ·  ────────────┬─────────── 2026-10-23T23:34:17.8636735Z · ╰── Unnecessary dependency `props.snoozePresetMinute` 2026-10-23T23:34:17.8636997Z 720 │ ); 2026-10-23T23:34:17.8637134Z ╰──── 2026-10-23T23:34:17.8637560Z  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-23T23:34:17.8638273Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.8638621Z 2026-10-23T23:34:17.8638839Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-23T23:34:17.8639323Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:765:7] 2026-10-23T23:34:17.8639670Z 764 │ thread.pinnedAt, 2026-10-23T23:34:17.8639850Z 765 │ variant, 2026-10-23T23:34:17.8640025Z ·  ───┬─── 2026-10-23T23:34:17.8640397Z · ╰── Unnecessary dependency `variant` 2026-10-23T23:34:17.8640653Z 766 │ ], 2026-10-23T23:34:17.8640787Z ╰──── 2026-10-23T23:34:17.8641215Z  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-23T23:34:17.8641911Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.8642257Z 2026-10-23T23:34:17.8642494Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T23:34:17.8642909Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:1215:21] 2026-10-23T23:34:17.8643268Z 1214 │ {providerDrivers.slice(0, -1).map((driver, index) => ( 2026-10-23T23:34:17.8643587Z 1215 │ 2026-10-23T23:34:17.8643896Z ·  ────────────────────────── 2026-10-23T23:34:17.8644164Z 1216 │ 2026-10-23T23:34:17.8644379Z ╰──── 2026-10-23T23:34:17.8644615Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-23T23:34:17.8644801Z 2026-10-23T23:34:17.8645003Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-23T23:34:17.8645435Z ╭─[packages/provider-opencode/src/server/OpenCodeRuntime.environment.test.ts:53:14] 2026-10-23T23:34:17.8645728Z 52 │ 2026-10-23T23:34:17.8645874Z 53 │ for (const {} of [ 2026-10-23T23:34:17.8646061Z ·  ── 2026-10-23T23:34:17.8646243Z 54 │ { healthy: true }, 2026-10-23T23:34:17.8646400Z ╰──── 2026-10-23T23:34:17.8646742Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-23T23:34:17.8647009Z 2026-10-23T23:34:17.8647272Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-23T23:34:17.8647700Z ╭─[packages/client-runtime/src/operations/projects.ts:228:51] 2026-10-23T23:34:17.8647948Z 227 │ ): string { 2026-10-23T23:34:17.8648224Z 228 │ const folderName = workspaceRoot.split(/[\\/]/).filter(Boolean).at(-1) ?? ""; 2026-10-23T23:34:17.8648546Z ·  ────── 2026-10-23T23:34:17.8648846Z 229 │ return target.owner ? `${target.owner}/${folderName}` : folderName; 2026-10-23T23:34:17.8649076Z ╰──── 2026-10-23T23:34:17.8649344Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-23T23:34:17.8649632Z 2026-10-23T23:34:17.8650185Z ⚠ 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-23T23:34:17.8650947Z ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:566:7] 2026-10-23T23:34:17.8651269Z 565 │ let afterSequence = created[0]!.sequence; 2026-10-23T23:34:17.8651732Z 566 │ ╭─▶ for (let index = 1; index <= 32; index += 1) { 2026-10-23T23:34:17.8652175Z 567 │ │ const nextEvent = { 2026-10-23T23:34:17.8652511Z 568 │ │ id: EventId.make(`event:foundation-stream-race:${index}`), 2026-10-23T23:34:17.8652935Z 569 │ │ type: "thread.metadata-updated" as const, 2026-10-23T23:34:17.8653222Z 570 │ │ threadId, 2026-10-23T23:34:17.8653473Z 571 │ │ providerInstanceId, 2026-10-23T23:34:17.8653731Z 572 │ │ occurredAt: now, 2026-10-23T23:34:17.8654045Z 573 │ │ payload: { ...thread, title: `Race update ${index}` }, 2026-10-23T23:34:17.8654384Z 574 │ │ } satisfies OrchestrationV2DomainEvent; 2026-10-23T23:34:17.8654694Z 575 │ │ const reader = yield* eventSink 2026-10-23T23:34:17.8655004Z 576 │ │ .stream({ threadId, afterSequence }) 2026-10-23T23:34:17.8655320Z 577 │ │ .pipe(Stream.runHead, Effect.forkChild); 2026-10-23T23:34:17.8655620Z 578 │ │ yield* Effect.yieldNow; 2026-10-23T23:34:17.8655960Z 579 │ │ const written = yield* eventSink.write({ events: [nextEvent] }); 2026-10-23T23:34:17.8656319Z 580 │ │ const received = yield* Fiber.join(reader); 2026-10-23T23:34:17.8656620Z 581 │ │ if (Option.isNone(received)) { 2026-10-23T23:34:17.8657015Z 582 │ │ return yield* Effect.die("The event stream ended before delivering the live event."); 2026-10-23T23:34:17.8657347Z 583 │ │ } 2026-10-23T23:34:17.8657654Z 584 │ │ assert.equal(received.value.sequence, written[0]?.sequence); 2026-10-23T23:34:17.8658024Z 585 │ │ assert.equal(received.value.event.id, nextEvent.id); 2026-10-23T23:34:17.8658360Z 586 │ │ afterSequence = received.value.sequence; 2026-10-23T23:34:17.8658689Z 587 │ ╰─▶ } 2026-10-23T23:34:17.8658918Z 588 │ }), 2026-10-23T23:34:17.8659065Z ╰──── 2026-10-23T23:34:17.8659133Z 2026-10-23T23:34:17.8659694Z ⚠ 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-23T23:34:17.8660436Z ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:2327:9] 2026-10-23T23:34:17.8660755Z 2326 │ let settled = false; 2026-10-23T23:34:17.8661077Z 2327 │ ╭─▶ while (!settled) { 2026-10-23T23:34:17.8661459Z 2328 │ │ settled = (yield* outbox.listByCommandId(commandId)).every( 2026-10-23T23:34:17.8662063Z 2329 │ │ (effect) => effect.status === "succeeded", 2026-10-23T23:34:17.8662329Z 2330 │ │ ); 2026-10-23T23:34:17.8662606Z 2331 │ │ if (!settled) yield* Effect.yieldNow; 2026-10-23T23:34:17.8662926Z 2332 │ ╰─▶ } 2026-10-23T23:34:17.8663346Z 2333 │ }).pipe(Effect.provide(layerWorker), Effect.scoped); 2026-10-23T23:34:17.8663685Z ╰──── 2026-10-23T23:34:17.8663755Z 2026-10-23T23:34:17.8664033Z ⚠ eslint(no-unused-vars): Function 'resolveThreadWorkspaceCwd' is declared but never used. 2026-10-23T23:34:17.8664558Z ╭─[apps/server/src/checkpointing/Utils.ts:12:10] 2026-10-23T23:34:17.8664792Z 11 │ 2026-10-23T23:34:17.8664978Z 12 │ function resolveThreadWorkspaceCwd(input: { 2026-10-23T23:34:17.8665251Z ·  ────────────┬──────────── 2026-10-23T23:34:17.8665589Z · ╰── 'resolveThreadWorkspaceCwd' is declared here 2026-10-23T23:34:17.8665866Z 13 │ readonly thread: { 2026-10-23T23:34:17.8666023Z ╰──── 2026-10-23T23:34:17.8666212Z  help: Consider removing this declaration. 2026-10-23T23:34:17.8666357Z 2026-10-23T23:34:17.8666613Z ⚠ eslint(no-unused-vars): Function 'nonEmptyString' is declared but never used. 2026-10-23T23:34:17.8667028Z ╭─[packages/client-runtime/src/work-log/presentation.ts:234:10] 2026-10-23T23:34:17.8667276Z 233 │ 2026-10-23T23:34:17.8667483Z 234 │ function nonEmptyString(value: unknown): string | null { 2026-10-23T23:34:17.8667741Z ·  ───────┬────── 2026-10-23T23:34:17.8668028Z · ╰── 'nonEmptyString' is declared here 2026-10-23T23:34:17.8668370Z 235 │ return typeof value === "string" && value.trim().length > 0 ? value : null; 2026-10-23T23:34:17.8668607Z ╰──── 2026-10-23T23:34:17.8668804Z  help: Consider removing this declaration. 2026-10-23T23:34:17.8668941Z 2026-10-23T23:34:17.8669502Z ⚠ 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-23T23:34:17.8670165Z ╭─[packages/client-runtime/src/rpc/session.test.ts:226:3] 2026-10-23T23:34:17.8670462Z 225 │ ) { 2026-10-23T23:34:17.8670796Z 226 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-23T23:34:17.8671159Z 227 │ │ const socket = sockets[index]; 2026-10-23T23:34:17.8671413Z 228 │ │ if (socket) { 2026-10-23T23:34:17.8671647Z 229 │ │ return socket; 2026-10-23T23:34:17.8671871Z 230 │ │ } 2026-10-23T23:34:17.8672102Z 231 │ │ yield* Effect.yieldNow; 2026-10-23T23:34:17.8672400Z 232 │ ╰─▶ } 2026-10-23T23:34:17.8672762Z 233 │ return yield* Effect.die(new Error("Expected the RPC protocol to create a websocket.")); 2026-10-23T23:34:17.8673026Z ╰──── 2026-10-23T23:34:17.8673096Z 2026-10-23T23:34:17.8673636Z ⚠ 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-23T23:34:17.8674290Z ╭─[packages/client-runtime/src/rpc/session.test.ts:240:3] 2026-10-23T23:34:17.8674522Z 239 │ ) { 2026-10-23T23:34:17.8674839Z 240 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-23T23:34:17.8675403Z 241 │ │ const request = socket.sent.map((message) => decodeJson(message)).filter(isRpcRequest)[index]; 2026-10-23T23:34:17.8675848Z 242 │ │ if (request) { 2026-10-23T23:34:17.8676089Z 243 │ │ return request; 2026-10-23T23:34:17.8676378Z 244 │ │ } 2026-10-23T23:34:17.8676610Z 245 │ │ yield* Effect.yieldNow; 2026-10-23T23:34:17.8676902Z 246 │ ╰─▶ } 2026-10-23T23:34:17.8677260Z 247 │ return yield* Effect.die(new Error("Expected the RPC protocol to send a request.")); 2026-10-23T23:34:17.8677521Z ╰──── 2026-10-23T23:34:17.8677591Z 2026-10-23T23:34:17.8678147Z ⚠ 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-23T23:34:17.8678802Z ╭─[packages/client-runtime/src/rpc/client.test.ts:131:9] 2026-10-23T23:34:17.8679048Z 130 │ ) { 2026-10-23T23:34:17.8679385Z 131 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-23T23:34:17.8679774Z 132 │ │ if (subscriptions.length >= count) { 2026-10-23T23:34:17.8680042Z 133 │ │ return; 2026-10-23T23:34:17.8680273Z 134 │ │ } 2026-10-23T23:34:17.8680553Z 135 │ │ yield* Effect.yieldNow; 2026-10-23T23:34:17.8680863Z 136 │ ╰─▶ } 2026-10-23T23:34:17.8681225Z 137 │ return yield* Effect.die(new Error(`Expected ${count} durable subscriptions.`)); 2026-10-23T23:34:17.8681496Z ╰──── 2026-10-23T23:34:17.8681562Z 2026-10-23T23:34:17.8682109Z ⚠ 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-23T23:34:17.8682766Z ╭─[packages/client-runtime/src/rpc/client.test.ts:252:7] 2026-10-23T23:34:17.8683123Z 251 │ yield* SubscriptionRef.set(activeSession, Option.some(session(firstClient))); 2026-10-23T23:34:17.8683626Z 252 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 1; attempt += 1) { 2026-10-23T23:34:17.8684026Z 253 │ │ yield* Effect.yieldNow; 2026-10-23T23:34:17.8684416Z 254 │ ╰─▶ } 2026-10-23T23:34:17.8684800Z 255 │ yield* SubscriptionRef.set(activeSession, Option.none()); 2026-10-23T23:34:17.8685025Z ╰──── 2026-10-23T23:34:17.8685090Z 2026-10-23T23:34:17.8685713Z ⚠ 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-23T23:34:17.8686362Z ╭─[packages/client-runtime/src/rpc/client.test.ts:258:7] 2026-10-23T23:34:17.8686594Z 257 │ 2026-10-23T23:34:17.8686972Z 258 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-23T23:34:17.8687372Z 259 │ │ yield* Effect.yieldNow; 2026-10-23T23:34:17.8687682Z 260 │ ╰─▶ } 2026-10-23T23:34:17.8687975Z 261 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-23T23:34:17.8688180Z ╰──── 2026-10-23T23:34:17.8688243Z 2026-10-23T23:34:17.8688786Z ⚠ 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-23T23:34:17.8689427Z ╭─[packages/client-runtime/src/rpc/client.test.ts:322:7] 2026-10-23T23:34:17.8689663Z 321 │ ); 2026-10-23T23:34:17.8690061Z 322 │ ╭─▶ for (let attempt = 0; attempt < 100 && observedFailures.length < 1; attempt += 1) { 2026-10-23T23:34:17.8690524Z 323 │ │ yield* Effect.yieldNow; 2026-10-23T23:34:17.8690828Z 324 │ ╰─▶ } 2026-10-23T23:34:17.8691052Z 325 │ 2026-10-23T23:34:17.8691186Z ╰──── 2026-10-23T23:34:17.8691257Z 2026-10-23T23:34:17.8691800Z ⚠ 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-23T23:34:17.8692447Z ╭─[packages/client-runtime/src/rpc/client.test.ts:330:7] 2026-10-23T23:34:17.8692810Z 329 │ yield* SubscriptionRef.set(activeSession, Option.some(session(secondClient))); 2026-10-23T23:34:17.8693318Z 330 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-23T23:34:17.8693721Z 331 │ │ yield* Effect.yieldNow; 2026-10-23T23:34:17.8694015Z 332 │ ╰─▶ } 2026-10-23T23:34:17.8694304Z 333 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-23T23:34:17.8694508Z ╰──── 2026-10-23T23:34:17.8694579Z 2026-10-23T23:34:17.8694860Z ⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence. 2026-10-23T23:34:17.8695320Z ╭─[apps/web/src/components/pullRequest/pullRequestList.logic.ts:265:9] 2026-10-23T23:34:17.8695607Z 264 │ ): boolean { 2026-10-23T23:34:17.8695877Z 265 │ const labels = entry.labels.map((label) => label.name.trim().toLowerCase()); 2026-10-23T23:34:17.8696373Z ·  ───────────────────────────────────────────────────────────────────── 2026-10-23T23:34:17.8696844Z 266 │ const holds = (label: string) => labels.includes(label.trim().toLowerCase()); 2026-10-23T23:34:17.8697093Z ╰──── 2026-10-23T23:34:17.8697325Z  help: Switch to `Set` 2026-10-23T23:34:17.8697442Z 2026-10-23T23:34:17.8697715Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-23T23:34:17.8698132Z ╭─[scripts/lib/cli-external-packages.test.ts:114:11] 2026-10-23T23:34:17.8698393Z 113 │ const declared = { 2026-10-23T23:34:17.8698606Z 114 │ ...(manifest.dependencies ?? {}), 2026-10-23T23:34:17.8698872Z ·  ──────────────────────────────── 2026-10-23T23:34:17.8699135Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-23T23:34:17.8699335Z ╰──── 2026-10-23T23:34:17.8699736Z  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-23T23:34:17.8700048Z 2026-10-23T23:34:17.8700309Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-23T23:34:17.8700761Z ╭─[scripts/lib/cli-external-packages.test.ts:115:11] 2026-10-23T23:34:17.8701030Z 114 │ ...(manifest.dependencies ?? {}), 2026-10-23T23:34:17.8701283Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-23T23:34:17.8701679Z ·  ──────────────────────────────────────── 2026-10-23T23:34:17.8701952Z 116 │ ...(manifest.peerDependencies ?? {}), 2026-10-23T23:34:17.8702151Z ╰──── 2026-10-23T23:34:17.8702542Z  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-23T23:34:17.8702848Z 2026-10-23T23:34:17.8703104Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-23T23:34:17.8703508Z ╭─[scripts/lib/cli-external-packages.test.ts:116:11] 2026-10-23T23:34:17.8703790Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-23T23:34:17.8704046Z 116 │ ...(manifest.peerDependencies ?? {}), 2026-10-23T23:34:17.8704317Z ·  ──────────────────────────────────── 2026-10-23T23:34:17.8704531Z 117 │ }; 2026-10-23T23:34:17.8704682Z ╰──── 2026-10-23T23:34:17.8705067Z  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-23T23:34:17.8705370Z 2026-10-23T23:34:17.8705649Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-23T23:34:17.8706078Z ╭─[apps/server/src/terminal/Manager.test.ts:731:31] 2026-10-23T23:34:17.8706306Z 730 │ ); 2026-10-23T23:34:17.8706597Z 731 │ const snapshot = events.filter((event) => event.type === "snapshot").at(-1)?.snapshot; 2026-10-23T23:34:17.8706922Z ·  ────── 2026-10-23T23:34:17.8707195Z 732 │ expect(snapshot?.history).toBe("aa😀\rEND"); 2026-10-23T23:34:17.8707396Z ╰──── 2026-10-23T23:34:17.8707666Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-23T23:34:17.8707887Z 2026-10-23T23:34:17.8708578Z ⚠ 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-23T23:34:17.8709420Z ╭─[apps/server/src/project/ProjectEnrichmentService.test.ts:28:3] 2026-10-23T23:34:17.8709704Z 27 │ ) { 2026-10-23T23:34:17.8710025Z 28 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-23T23:34:17.8710463Z 29 │ │ const available = yield* service.peek(workspaceRoot); 2026-10-23T23:34:17.8710799Z 30 │ │ if (predicate(available)) return available; 2026-10-23T23:34:17.8711089Z 31 │ │ yield* Effect.yieldNow; 2026-10-23T23:34:17.8711367Z 32 │ ╰─▶ } 2026-10-23T23:34:17.8711751Z 33 │ return yield* Effect.die(`Project metadata for ${workspaceRoot} was not resolved in time.`); 2026-10-23T23:34:17.8712027Z ╰──── 2026-10-23T23:34:17.8712097Z 2026-10-23T23:34:17.8712406Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T23:34:17.8712904Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:335:7] 2026-10-23T23:34:17.8713179Z 330 │ }; 2026-10-23T23:34:17.8713334Z 331 │ useEffect(() => { 2026-10-23T23:34:17.8713525Z ·  ────┬──── 2026-10-23T23:34:17.8713787Z · ╰── This is the containing effect 2026-10-23T23:34:17.8714078Z 332 │ if (!guidesEnabled && section === "guide") { 2026-10-23T23:34:17.8714328Z 333 │ requestedSection.current = "overview"; 2026-10-23T23:34:17.8714669Z 334 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-23T23:34:17.8714973Z 335 │ setSection("overview"); 2026-10-23T23:34:17.8715176Z ·  ─────┬──── 2026-10-23T23:34:17.8715501Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T23:34:17.8715767Z 336 │ } 2026-10-23T23:34:17.8715913Z ╰──── 2026-10-23T23:34:17.8716706Z  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-23T23:34:17.8717745Z  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-23T23:34:17.8718117Z 2026-10-23T23:34:17.8718370Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-23T23:34:17.8718819Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:337:6] 2026-10-23T23:34:17.8719143Z 332 │ if (!guidesEnabled && section === "guide") { 2026-10-23T23:34:17.8719398Z 333 │ requestedSection.current = "overview"; 2026-10-23T23:34:17.8719631Z ·  ────────┬─────── 2026-10-23T23:34:17.8720293Z · ╰── 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-23T23:34:17.8721002Z 334 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-23T23:34:17.8721490Z ·  ─────────┬───────── ──────┬────── 2026-10-23T23:34:17.8722426Z · │ ╰── 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-23T23:34:17.8723470Z · ╰── 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-23T23:34:17.8724043Z 335 │ setSection("overview"); 2026-10-23T23:34:17.8724231Z 336 │ } 2026-10-23T23:34:17.8724426Z 337 │ }, [guidesEnabled, section, insets.top]); 2026-10-23T23:34:17.8724697Z ·  ──────────────────┬───────────────── 2026-10-23T23:34:17.8725066Z · ╰── This dependency list is missing values used by the callback 2026-10-23T23:34:17.8725384Z 338 │ const tabContent = activityContent; 2026-10-23T23:34:17.8725566Z ╰──── 2026-10-23T23:34:17.8725837Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-23T23:34:17.8726414Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.8726767Z 2026-10-23T23:34:17.8727015Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-23T23:34:17.8727457Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:873:6] 2026-10-23T23:34:17.8727750Z 856 │ if ( 2026-10-23T23:34:17.8727974Z 857 │ lastSelection.current.path === route.params.path && 2026-10-23T23:34:17.8728226Z ·  ──────┬────── 2026-10-23T23:34:17.8728857Z · ╰── 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-23T23:34:17.8729469Z 858 │ lastSelection.current.id === route.params.fileSelectionId 2026-10-23T23:34:17.8729698Z 859 │ ) 2026-10-23T23:34:17.8729857Z 860 │ return; 2026-10-23T23:34:17.8730154Z 861 │ lastSelection.current = { path: route.params.path, id: route.params.fileSelectionId }; 2026-10-23T23:34:17.8730588Z 862 │ if (route.params.focus) navigation.setParams({ focus: undefined }); 2026-10-23T23:34:17.8730946Z 863 │ setJumpPath(route.params.path); 2026-10-23T23:34:17.8731247Z 864 │ setSelectedRowId(null); 2026-10-23T23:34:17.8731449Z 865 │ jumpStarted.current = false; 2026-10-23T23:34:17.8731788Z 866 │ const file = data.files.find((entry) => entry.path === route.params.path); 2026-10-23T23:34:17.8732124Z 867 │ if (!file || !nativeView.current) return; 2026-10-23T23:34:17.8732363Z ·  ─────┬──── 2026-10-23T23:34:17.8733007Z · ╰── 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-23T23:34:17.8733619Z 868 │ setCollapsedIds((ids) => ids.filter((id) => id !== file.id)); 2026-10-23T23:34:17.8733874Z 869 │ jumpStarted.current = true; 2026-10-23T23:34:17.8734157Z 870 │ void nativeView.current.scrollToFile(file.id, false).catch(() => { 2026-10-23T23:34:17.8734445Z 871 │ jumpStarted.current = false; 2026-10-23T23:34:17.8734647Z 872 │ }); 2026-10-23T23:34:17.8734975Z 873 │ }, [route.params.path, route.params.fileSelectionId, route.params.focus, data.files, navigation]); 2026-10-23T23:34:17.8735453Z ·  ──────────────────────────────────────────────┬────────────────────────────────────────────── 2026-10-23T23:34:17.8735957Z · ╰── This dependency list is missing values used by the callback 2026-10-23T23:34:17.8736327Z 874 │ const appliedFilter = useRef(filter.hideTestFiles); 2026-10-23T23:34:17.8736546Z ╰──── 2026-10-23T23:34:17.8736812Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-23T23:34:17.8737395Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.8737756Z 2026-10-23T23:34:17.8738303Z ⚠ 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-23T23:34:17.8738964Z ╭─[apps/server/src/project/ProjectService.test.ts:94:3] 2026-10-23T23:34:17.8739203Z 93 │ ) { 2026-10-23T23:34:17.8739531Z 94 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-23T23:34:17.8739964Z 95 │ │ const project = Option.getOrThrow(yield* service.getById(projectId)); 2026-10-23T23:34:17.8740325Z 96 │ │ if (predicate(project)) return project; 2026-10-23T23:34:17.8740673Z 97 │ │ yield* Effect.yieldNow; 2026-10-23T23:34:17.8740962Z 98 │ ╰─▶ } 2026-10-23T23:34:17.8741289Z 99 │ return yield* Effect.die(`Project ${projectId} was not enriched in time.`); 2026-10-23T23:34:17.8741647Z ╰──── 2026-10-23T23:34:17.8741746Z 2026-10-23T23:34:17.8742101Z ⚠ eslint(require-yield): This generator function does not have `yield` 2026-10-23T23:34:17.8742552Z ╭─[packages/provider-acp/src/server/mcpOverAcpBridge.ts:81:78] 2026-10-23T23:34:17.8742805Z  80 │ 2026-10-23T23:34:17.8743215Z  81 │ ╭─▶ export const makeAcpMcpOverAcpBridge = Effect.fn("AcpMcpOverAcpBridge.make")(function* ( 2026-10-23T23:34:17.8743801Z  82 │ │ options: AcpMcpOverAcpBridgeOptions, 2026-10-23T23:34:17.8744228Z  83 │ │ ): Effect.fn.Return { 2026-10-23T23:34:17.8744628Z  84 │ │ const fetchImplementation = options.fetchImplementation ?? fetch; 2026-10-23T23:34:17.8745063Z  85 │ │ const connections = new Map(); 2026-10-23T23:34:17.8745310Z  86 │ │ 2026-10-23T23:34:17.8745672Z  87 │ │ const connectionFor = (connectionId: string): Effect.Effect => 2026-10-23T23:34:17.8746039Z  88 │ │ Effect.suspend(() => { 2026-10-23T23:34:17.8746337Z  89 │ │ const connection = connections.get(connectionId); 2026-10-23T23:34:17.8746648Z  90 │ │ return connection === undefined 2026-10-23T23:34:17.8747051Z  91 │ │ ? Effect.fail(new AcpMcpOverAcpError(`Unknown MCP-over-ACP connection "${connectionId}".`)) 2026-10-23T23:34:17.8747442Z  92 │ │ : Effect.succeed(connection); 2026-10-23T23:34:17.8747680Z  93 │ │ }); 2026-10-23T23:34:17.8747881Z  94 │ │ 2026-10-23T23:34:17.8748093Z  95 │ │ const send = ( 2026-10-23T23:34:17.8748343Z  96 │ │ connection: Connection, 2026-10-23T23:34:17.8748590Z  97 │ │ message: unknown, 2026-10-23T23:34:17.8748918Z  98 │ │ ): Effect.Effect, AcpMcpOverAcpError> => 2026-10-23T23:34:17.8749252Z  99 │ │ connection.mutex.withPermits(1)( 2026-10-23T23:34:17.8749542Z 100 │ │ Effect.gen(function* () { 2026-10-23T23:34:17.8749839Z 101 │ │ const body = JSON.stringify(message); 2026-10-23T23:34:17.8750171Z 102 │ │ if (Buffer.byteLength(body) > MAX_MESSAGE_BYTES) { 2026-10-23T23:34:17.8750671Z 103 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("MCP-over-ACP message exceeds 8 MiB.")); 2026-10-23T23:34:17.8751013Z 104 │ │ } 2026-10-23T23:34:17.8751288Z 105 │ │ const response = yield* Effect.tryPromise({ 2026-10-23T23:34:17.8751580Z 106 │ │ try: (signal) => 2026-10-23T23:34:17.8751871Z 107 │ │ fetchImplementation(options.endpoint, { 2026-10-23T23:34:17.8752162Z 108 │ │ method: "POST", 2026-10-23T23:34:17.8752422Z 109 │ │ signal, 2026-10-23T23:34:17.8752667Z 110 │ │ headers: { 2026-10-23T23:34:17.8752959Z 111 │ │ "content-type": "application/json", 2026-10-23T23:34:17.8753292Z 112 │ │ accept: "application/json, text/event-stream", 2026-10-23T23:34:17.8753628Z 113 │ │ authorization: options.authorization, 2026-10-23T23:34:17.8753948Z 114 │ │ ...(connection.sessionId === null 2026-10-23T23:34:17.8754225Z 115 │ │ ? {} 2026-10-23T23:34:17.8754523Z 116 │ │ : { "mcp-session-id": connection.sessionId }), 2026-10-23T23:34:17.8754859Z 117 │ │ ...(connection.protocolVersion === null 2026-10-23T23:34:17.8755220Z 118 │ │ ? {} 2026-10-23T23:34:17.8755658Z 119 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-23T23:34:17.8755956Z 120 │ │ }, 2026-10-23T23:34:17.8756267Z 121 │ │ body, 2026-10-23T23:34:17.8756501Z 122 │ │ }), 2026-10-23T23:34:17.8756750Z 123 │ │ catch: bridgeError, 2026-10-23T23:34:17.8756984Z 124 │ │ }); 2026-10-23T23:34:17.8757351Z 125 │ │ connection.sessionId = response.headers.get("mcp-session-id") ?? connection.sessionId; 2026-10-23T23:34:17.8757735Z 126 │ │ if (!response.ok) { 2026-10-23T23:34:17.8758008Z 127 │ │ yield* Effect.promise( 2026-10-23T23:34:17.8758379Z 128 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-23T23:34:17.8758689Z 129 │ │ ); 2026-10-23T23:34:17.8758948Z 130 │ │ return yield* Effect.fail( 2026-10-23T23:34:17.8759342Z 131 │ │ new AcpMcpOverAcpError(`T3 Code MCP endpoint responded with HTTP ${response.status}.`), 2026-10-23T23:34:17.8759687Z 132 │ │ ); 2026-10-23T23:34:17.8759899Z 133 │ │ } 2026-10-23T23:34:17.8760270Z 134 │ │ const payloads = [...(yield* Stream.runCollect(responsePayloads(response, bridgeError)))]; 2026-10-23T23:34:17.8760717Z 135 │ │ for (const payload of payloads) { 2026-10-23T23:34:17.8761137Z 136 │ │ connection.protocolVersion = protocolVersionOf(payload) ?? connection.protocolVersion; 2026-10-23T23:34:17.8761482Z 137 │ │ } 2026-10-23T23:34:17.8761716Z 138 │ │ return payloads; 2026-10-23T23:34:17.8761995Z 139 │ │ }).pipe(Effect.mapError(bridgeError)), 2026-10-23T23:34:17.8762245Z 140 │ │ ); 2026-10-23T23:34:17.8762440Z 141 │ │ 2026-10-23T23:34:17.8762756Z 142 │ │ const disconnect = Effect.fn("mcpOverAcpBridge.disconnect")(function* ( 2026-10-23T23:34:17.8763118Z 143 │ │ request: AcpSchema.DisconnectMcpRequest, 2026-10-23T23:34:17.8763504Z 144 │ │ ): Effect.fn.Return { 2026-10-23T23:34:17.8763924Z 145 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-23T23:34:17.8764269Z 146 │ │ connections.delete(request.connectionId); 2026-10-23T23:34:17.8764583Z 147 │ │ const sessionId = connection.sessionId; 2026-10-23T23:34:17.8764860Z 148 │ │ if (sessionId !== null) { 2026-10-23T23:34:17.8765156Z 149 │ │ const response = yield* Effect.tryPromise({ 2026-10-23T23:34:17.8765437Z 150 │ │ try: (signal) => 2026-10-23T23:34:17.8765736Z 151 │ │ fetchImplementation(options.endpoint, { 2026-10-23T23:34:17.8766017Z 152 │ │ method: "DELETE", 2026-10-23T23:34:17.8766273Z 153 │ │ signal, 2026-10-23T23:34:17.8766530Z 154 │ │ headers: { 2026-10-23T23:34:17.8766912Z 155 │ │ authorization: options.authorization, 2026-10-23T23:34:17.8767329Z 156 │ │ "mcp-session-id": sessionId, 2026-10-23T23:34:17.8767644Z 157 │ │ ...(connection.protocolVersion === null 2026-10-23T23:34:17.8768001Z 158 │ │ ? {} 2026-10-23T23:34:17.8768329Z 159 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-23T23:34:17.8768626Z 160 │ │ }, 2026-10-23T23:34:17.8768849Z 161 │ │ }), 2026-10-23T23:34:17.8769088Z 162 │ │ catch: bridgeError, 2026-10-23T23:34:17.8769323Z 163 │ │ }); 2026-10-23T23:34:17.8785615Z 164 │ │ if (!response.ok && response.status !== 404) { 2026-10-23T23:34:17.8785964Z 165 │ │ return yield* Effect.fail( 2026-10-23T23:34:17.8786247Z 166 │ │ new AcpMcpOverAcpError( 2026-10-23T23:34:17.8786621Z 167 │ │ `T3 Code MCP endpoint rejected disconnect with HTTP ${response.status}.`, 2026-10-23T23:34:17.8786949Z 168 │ │ ), 2026-10-23T23:34:17.8787164Z 169 │ │ ); 2026-10-23T23:34:17.8787381Z 170 │ │ } 2026-10-23T23:34:17.8787621Z 171 │ │ yield* Effect.promise( 2026-10-23T23:34:17.8787988Z 172 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-23T23:34:17.8788293Z 173 │ │ ); 2026-10-23T23:34:17.8788501Z 174 │ │ } 2026-10-23T23:34:17.8788729Z 175 │ │ return {}; 2026-10-23T23:34:17.8788933Z 176 │ │ }); 2026-10-23T23:34:17.8789127Z 177 │ │ 2026-10-23T23:34:17.8789327Z 178 │ │ return { 2026-10-23T23:34:17.8789650Z 179 │ │ connect: Effect.fn("mcpOverAcpBridge.connect")(function* (request) { 2026-10-23T23:34:17.8789994Z 180 │ │ if (request.serverId !== "t3-code") { 2026-10-23T23:34:17.8790282Z 181 │ │ return yield* Effect.fail( 2026-10-23T23:34:17.8790731Z 182 │ │ new AcpMcpOverAcpError(`Unknown ACP MCP server "${request.serverId}".`), 2026-10-23T23:34:17.8791045Z 183 │ │ ); 2026-10-23T23:34:17.8791246Z 184 │ │ } 2026-10-23T23:34:17.8791517Z 185 │ │ if (connections.size >= MAX_CONNECTIONS) { 2026-10-23T23:34:17.8791925Z 186 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("Too many MCP-over-ACP connections.")); 2026-10-23T23:34:17.8792252Z 187 │ │ } 2026-10-23T23:34:17.8792537Z 188 │ │ const connectionId = yield* options.allocateConnectionId; 2026-10-23T23:34:17.8792859Z 189 │ │ connections.set(connectionId, { 2026-10-23T23:34:17.8793141Z 190 │ │ mutex: yield* Semaphore.make(1), 2026-10-23T23:34:17.8793402Z 191 │ │ sessionId: null, 2026-10-23T23:34:17.8793658Z 192 │ │ protocolVersion: null, 2026-10-23T23:34:17.8793910Z 193 │ │ nextRequestId: 0, 2026-10-23T23:34:17.8794395Z 194 │ │ }); 2026-10-23T23:34:17.8794760Z 195 │ │ return { connectionId }; 2026-10-23T23:34:17.8794987Z 196 │ │ }), 2026-10-23T23:34:17.8795364Z 197 │ │ message: Effect.fn("mcpOverAcpBridge.message")(function* (request) { 2026-10-23T23:34:17.8795771Z 198 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-23T23:34:17.8796108Z 199 │ │ const id = ++connection.nextRequestId; 2026-10-23T23:34:17.8796415Z 200 │ │ const payloads = yield* send(connection, { 2026-10-23T23:34:17.8796683Z 201 │ │ jsonrpc: "2.0", 2026-10-23T23:34:17.8796904Z 202 │ │ id, 2026-10-23T23:34:17.8797136Z 203 │ │ method: request.method, 2026-10-23T23:34:17.8797468Z 204 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-23T23:34:17.8797748Z 205 │ │ }); 2026-10-23T23:34:17.8798077Z 206 │ │ const response = payloads.find((payload) => asEnvelope(payload)?.id === id); 2026-10-23T23:34:17.8798440Z 207 │ │ const envelope = asEnvelope(response); 2026-10-23T23:34:17.8798720Z 208 │ │ if (envelope === null) { 2026-10-23T23:34:17.8798994Z 209 │ │ return yield* Effect.fail( 2026-10-23T23:34:17.8799353Z 210 │ │ new AcpMcpOverAcpError("MCP server did not return a matching response."), 2026-10-23T23:34:17.8799668Z 211 │ │ ); 2026-10-23T23:34:17.8799868Z 212 │ │ } 2026-10-23T23:34:17.8800134Z 213 │ │ if (envelope.error !== undefined) { 2026-10-23T23:34:17.8800555Z 214 │ │ return yield* Effect.fail(new AcpMcpOverAcpError(errorMessage(envelope.error))); 2026-10-23T23:34:17.8800882Z 215 │ │ } 2026-10-23T23:34:17.8801189Z 216 │ │ return (envelope.result ?? null) as AcpSchema.MessageMcpResponse; 2026-10-23T23:34:17.8801477Z 217 │ │ }), 2026-10-23T23:34:17.8801807Z 218 │ │ notification: Effect.fn("mcpOverAcpBridge.notification")(function* (request) { 2026-10-23T23:34:17.8802220Z 219 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-23T23:34:17.8802531Z 220 │ │ yield* send(connection, { 2026-10-23T23:34:17.8802870Z 221 │ │ jsonrpc: "2.0", 2026-10-23T23:34:17.8803211Z 222 │ │ method: request.method, 2026-10-23T23:34:17.8803536Z 223 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-23T23:34:17.8803899Z 224 │ │ }); 2026-10-23T23:34:17.8804104Z 225 │ │ }), 2026-10-23T23:34:17.8804329Z 226 │ │ disconnect, 2026-10-23T23:34:17.8804579Z 227 │ │ dispose: Effect.suspend(() => 2026-10-23T23:34:17.8804854Z 228 │ │ Effect.forEach( 2026-10-23T23:34:17.8805110Z 229 │ │ [...connections.keys()], 2026-10-23T23:34:17.8805447Z 230 │ │ (connectionId) => disconnect({ connectionId }).pipe(Effect.ignore), 2026-10-23T23:34:17.8805763Z 231 │ │ { discard: true }, 2026-10-23T23:34:17.8805992Z 232 │ │ ), 2026-10-23T23:34:17.8806194Z 233 │ │ ), 2026-10-23T23:34:17.8806396Z 234 │ │ }; 2026-10-23T23:34:17.8806658Z 235 │ ╰─▶ }); 2026-10-23T23:34:17.8806885Z ╰──── 2026-10-23T23:34:17.8807248Z  help: Add a `yield` expression inside the generator body, or convert it to a regular function if iteration behavior is not needed. 2026-10-23T23:34:17.8807538Z 2026-10-23T23:34:17.8807790Z ⚠ eslint(no-unused-vars): Function 'summarizePayload' is declared but never used. 2026-10-23T23:34:17.8808192Z ╭─[packages/provider-acp/src/server/nativeLogging.ts:22:10] 2026-10-23T23:34:17.8808425Z 21 │ 2026-10-23T23:34:17.8808693Z 22 │ function summarizePayload(payload: unknown): Readonly> { 2026-10-23T23:34:17.8808993Z ·  ────────┬─────── 2026-10-23T23:34:17.8809286Z · ╰── 'summarizePayload' is declared here 2026-10-23T23:34:17.8809582Z 23 │ if (payload === null) return { valueType: "null" }; 2026-10-23T23:34:17.8809787Z ╰──── 2026-10-23T23:34:17.8809976Z  help: Consider removing this declaration. 2026-10-23T23:34:17.8810116Z 2026-10-23T23:34:17.8810313Z ⚠ eslint(no-empty-pattern): Empty array binding pattern 2026-10-23T23:34:17.8810756Z ╭─[apps/server/src/pullRequest/PullRequestService.test.ts:1526:12] 2026-10-23T23:34:17.8811020Z 1525 │ 2026-10-23T23:34:17.8811174Z 1526 │ for (const [] of [ 2026-10-23T23:34:17.8811362Z ·  ── 2026-10-23T23:34:17.8811557Z 1527 │ ["github", "github.com"], 2026-10-23T23:34:17.8811723Z ╰──── 2026-10-23T23:34:17.8812113Z  help: Passing non-iterable values (null, undefined, numbers, booleans, etc.) will result in a runtime error because these values are not iterable. 2026-10-23T23:34:17.8812423Z 2026-10-23T23:34:17.8812836Z ⚠ 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-23T23:34:17.8813374Z ╭─[apps/server/src/vcs/GitVcsDriverCore.test.ts:1786:34] 2026-10-23T23:34:17.8813703Z 1785 │ const stat = branch.files!.find((file) => file.path === path)!; 2026-10-23T23:34:17.8814042Z 1786 │ const request = yield* Schema.decodeEffect(ReviewDiffPreviewInput)({ 2026-10-23T23:34:17.8814357Z ·  ─────────────────── 2026-10-23T23:34:17.8814672Z 1787 │ cwd, 2026-10-23T23:34:17.8814915Z ╰──── 2026-10-23T23:34:17.8814981Z 2026-10-23T23:34:17.8815260Z ⚠ unicorn(prefer-string-starts-ends-with): Prefer String#startsWith over a regex with a caret. 2026-10-23T23:34:17.8815748Z ╭─[apps/server/src/vcs/GitVcsDriverCore.ts:509:11] 2026-10-23T23:34:17.8816019Z 508 │ GIT_DIAGNOSTIC_LINE_PATTERN.test(line) || 2026-10-23T23:34:17.8816306Z 509 │ (!/^remote:/.test(line) && SSH_TRANSPORT_REFUSAL_PATTERN.test(line)), 2026-10-23T23:34:17.8816582Z ·  ─────────────── 2026-10-23T23:34:17.8816767Z 510 │ ) 2026-10-23T23:34:17.8816905Z ╰──── 2026-10-23T23:34:17.8817150Z  help: Replace `/^remote:/.test(line)` with `line.startsWith('remote:')`. 2026-10-23T23:34:17.8817339Z 2026-10-23T23:34:17.8817551Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T23:34:17.8817914Z ╭─[apps/web/src/components/CustomSnoozeDialog.tsx:140:58] 2026-10-23T23:34:17.8818242Z 139 │ {...(weekStartsOn === undefined ? {} : { weekStartsOn })} 2026-10-23T23:34:17.8818574Z 140 │ disabled={{ before: new Date(new Date().setHours(0, 0, 0, 0)) }} 2026-10-23T23:34:17.8818891Z ·  ─────┬──── 2026-10-23T23:34:17.8819243Z · ╰── Cannot call impure function 2026-10-23T23:34:17.8819549Z 141 │ onSelect={(selected) => { 2026-10-23T23:34:17.8819739Z ╰──── 2026-10-23T23:34:17.8820138Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-23T23:34:17.8820881Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T23:34:17.8821214Z 2026-10-23T23:34:17.8821412Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T23:34:17.8821890Z ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:372:47] 2026-10-23T23:34:17.8822230Z 371 │ const { open, onOpenChange, onSnooze, timestampFormat } = props; 2026-10-23T23:34:17.8822580Z 372 │ const presets = open ? resolveSnoozePresets(new Date(), timestampFormat) : []; 2026-10-23T23:34:17.8822907Z ·  ─────┬──── 2026-10-23T23:34:17.8823255Z · ╰── Cannot call impure function 2026-10-23T23:34:17.8823516Z 373 │ return ( 2026-10-23T23:34:17.8823666Z ╰──── 2026-10-23T23:34:17.8824055Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-23T23:34:17.8824720Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T23:34:17.8825047Z 2026-10-23T23:34:17.8825240Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T23:34:17.8825612Z ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:853:39] 2026-10-23T23:34:17.8825903Z 852 │ if (snoozeGateClock.thread !== thread) { 2026-10-23T23:34:17.8826310Z 853 │ setSnoozeGateClock({ thread, now: new Date().toISOString() }); 2026-10-23T23:34:17.8826699Z ·  ─────┬──── 2026-10-23T23:34:17.8827028Z · ╰── Cannot call impure function 2026-10-23T23:34:17.8827358Z 854 │ } 2026-10-23T23:34:17.8827499Z ╰──── 2026-10-23T23:34:17.8827889Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-23T23:34:17.8828547Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T23:34:17.8828880Z 2026-10-23T23:34:17.8829187Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-23T23:34:17.8829634Z ╭─[apps/server/src/serverRuntimeStartup.ts:728:7] 2026-10-23T23:34:17.8829860Z 727 │ 2026-10-23T23:34:17.8830029Z 728 │ const layer = layerWithOptions(); 2026-10-23T23:34:17.8830233Z ·  ──┬── 2026-10-23T23:34:17.8830553Z · ╰── 'layer' is declared here 2026-10-23T23:34:17.8830783Z ╰──── 2026-10-23T23:34:17.8830972Z  help: Consider removing this declaration. 2026-10-23T23:34:17.8831118Z 2026-10-23T23:34:17.8831676Z ⚠ 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-23T23:34:17.8832377Z ╭─[apps/server/src/background/HostPowerMonitor.test.ts:133:11] 2026-10-23T23:34:17.8832728Z 132 │ const monitor = yield* HostPowerMonitor.HostPowerMonitor; 2026-10-23T23:34:17.8833078Z 133 │ ╭─▶ for ( 2026-10-23T23:34:17.8833375Z 134 │ │ let attempt = 0; 2026-10-23T23:34:17.8833726Z 135 │ │ attempt < 100 && (yield* monitor.snapshot).onBattery !== "true"; 2026-10-23T23:34:17.8834043Z 136 │ │ attempt += 1 2026-10-23T23:34:17.8834283Z 137 │ │ ) { 2026-10-23T23:34:17.8834528Z 138 │ │ yield* Effect.yieldNow; 2026-10-23T23:34:17.8834845Z 139 │ ╰─▶ } 2026-10-23T23:34:17.8835156Z 140 │ expect((yield* monitor.snapshot).onBattery).toBe("true"); 2026-10-23T23:34:17.8835392Z ╰──── 2026-10-23T23:34:17.8835466Z 2026-10-23T23:34:17.8836008Z ⚠ 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-23T23:34:17.8836689Z ╭─[packages/client-runtime/src/connection/supervisor.test.ts:135:3] 2026-10-23T23:34:17.8837008Z 134 │ let lastState = yield* SubscriptionRef.get(state); 2026-10-23T23:34:17.8837414Z 135 │ ╭─▶ for (let iteration = 0; iteration < 100; iteration += 1) { 2026-10-23T23:34:17.8837810Z 136 │ │ lastState = yield* SubscriptionRef.get(state); 2026-10-23T23:34:17.8838115Z 137 │ │ if (predicate(lastState)) { 2026-10-23T23:34:17.8838463Z 138 │ │ return lastState; 2026-10-23T23:34:17.8838782Z 139 │ │ } 2026-10-23T23:34:17.8839019Z 140 │ │ yield* Effect.yieldNow; 2026-10-23T23:34:17.8839326Z 141 │ ╰─▶ } 2026-10-23T23:34:17.8839646Z 142 │ return yield* Effect.die( 2026-10-23T23:34:17.8839822Z ╰──── 2026-10-23T23:34:17.8839886Z 2026-10-23T23:34:17.8840135Z ⚠ eslint(no-unsafe-optional-chaining): Unsafe usage of optional chaining 2026-10-23T23:34:17.8840619Z ╭─[apps/server/src/orchestration-v2/ThreadLaunchService.test.ts:1783:8] 2026-10-23T23:34:17.8840901Z 1782 │ assert.equal( 2026-10-23T23:34:17.8841172Z 1783 │ (stored.context?.records[0] as { attachmentId: string }).attachmentId, 2026-10-23T23:34:17.8841495Z ·  ────────────────────────── 2026-10-23T23:34:17.8841726Z 1784 │ stored.attachments[0]?.id, 2026-10-23T23:34:17.8841914Z ╰──── 2026-10-23T23:34:17.8842182Z  help: If this short-circuits with 'undefined' the evaluation will throw TypeError 2026-10-23T23:34:17.8842393Z 2026-10-23T23:34:17.8842719Z ⚠ eslint(no-unused-vars): Variable 'layerDaemon' is declared but never used. Unused variables should start with a '_'. 2026-10-23T23:34:17.8843183Z ╭─[apps/server/src/orchestration-v2/EffectWorker.ts:914:7] 2026-10-23T23:34:17.8843550Z 913 │ 2026-10-23T23:34:17.8843850Z 914 │ const layerDaemon: Layer.Layer = Layer.effectDiscard( 2026-10-23T23:34:17.8844182Z ·  ─────┬───── 2026-10-23T23:34:17.8844454Z · ╰── 'layerDaemon' is declared here 2026-10-23T23:34:17.8844734Z 915 │ runDaemon.pipe(Effect.forkScoped), 2026-10-23T23:34:17.8844922Z ╰──── 2026-10-23T23:34:17.8845113Z  help: Consider removing this declaration. 2026-10-23T23:34:17.8845251Z 2026-10-23T23:34:17.8845563Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T23:34:17.8846046Z ╭─[apps/mobile/src/features/terminal/terminalLaunchContext.ts:117:5] 2026-10-23T23:34:17.8846439Z 112 │ const [entry, setEntry] = useState(() => ({ key: input.targetKey, location: candidate })); 2026-10-23T23:34:17.8846725Z 113 │ useEffect(() => { 2026-10-23T23:34:17.8846906Z ·  ────┬──── 2026-10-23T23:34:17.8847162Z · ╰── This is the containing effect 2026-10-23T23:34:17.8847527Z 114 │ if (entry.key === input.targetKey && (entry.location !== null || candidate === null)) { 2026-10-23T23:34:17.8847811Z 115 │ return; 2026-10-23T23:34:17.8847978Z 116 │ } 2026-10-23T23:34:17.8848196Z 117 │ setEntry({ key: input.targetKey, location: candidate }); 2026-10-23T23:34:17.8848441Z ·  ────┬─── 2026-10-23T23:34:17.8848745Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T23:34:17.8849090Z 118 │ }, [candidate, entry.key, entry.location, input.targetKey]); 2026-10-23T23:34:17.8849306Z ╰──── 2026-10-23T23:34:17.8850084Z  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-23T23:34:17.8851265Z  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-23T23:34:17.8851732Z 2026-10-23T23:34:17.8851958Z ⚠ react(static-components): Cannot create components during render 2026-10-23T23:34:17.8852449Z ╭─[apps/mobile/src/features/terminal/NativeTerminalSurface.tsx:234:10] 2026-10-23T23:34:17.8852757Z 196 │ const { onInput, onResize } = props; 2026-10-23T23:34:17.8853055Z 197 │ const NativeTerminalSurfaceView = resolveNativeTerminalSurfaceView(); 2026-10-23T23:34:17.8853404Z ·  ────────────────┬─────────────── 2026-10-23T23:34:17.8853784Z · ╰── The component is created during render here 2026-10-23T23:34:17.8854156Z 198 │ const hasNativeSurface = Boolean(NativeTerminalSurfaceView); 2026-10-23T23:34:17.8854383Z 199 │ 2026-10-23T23:34:17.8854534Z 200 │ useEffect(() => { 2026-10-23T23:34:17.8854733Z 201 │ terminalDebugLog("native:surface", { 2026-10-23T23:34:17.8854961Z 202 │ terminalKey: props.terminalKey, 2026-10-23T23:34:17.8855173Z 203 │ native: hasNativeSurface, 2026-10-23T23:34:17.8855449Z 204 │ hardwareKeyRevision: getNativeTerminalHardwareKeyRevision(), 2026-10-23T23:34:17.8855727Z 205 │ bufferLen: props.buffer.length, 2026-10-23T23:34:17.8855942Z 206 │ isRunning: props.isRunning, 2026-10-23T23:34:17.8856138Z 207 │ }); 2026-10-23T23:34:17.8856409Z 208 │ }, [hasNativeSurface, props.buffer.length, props.isRunning, props.terminalKey]); 2026-10-23T23:34:17.8856722Z 209 │ const handleNativeInput = useCallback( 2026-10-23T23:34:17.8856992Z 210 │ (event: NativeSyntheticEvent) => { 2026-10-23T23:34:17.8857278Z 211 │ if (!props.isRunning || props.readOnly) { 2026-10-23T23:34:17.8857493Z 212 │ return; 2026-10-23T23:34:17.8857664Z 213 │ } 2026-10-23T23:34:17.8857864Z 214 │ terminalDebugLog("native:onInput", { 2026-10-23T23:34:17.8858176Z 215 │ codes: Array.from(event.nativeEvent.data, (char) => char.codePointAt(0)), 2026-10-23T23:34:17.8858436Z 216 │ }); 2026-10-23T23:34:17.8858619Z 217 │ onInput(event.nativeEvent.data); 2026-10-23T23:34:17.8858811Z 218 │ }, 2026-10-23T23:34:17.8859001Z 219 │ [onInput, props.isRunning, props.readOnly], 2026-10-23T23:34:17.8859211Z 220 │ ); 2026-10-23T23:34:17.8859390Z 221 │ const handleNativeResize = useCallback( 2026-10-23T23:34:17.8859656Z 222 │ (event: NativeSyntheticEvent) => { 2026-10-23T23:34:17.8859891Z 223 │ onResize({ 2026-10-23T23:34:17.8860083Z 224 │ cols: event.nativeEvent.cols, 2026-10-23T23:34:17.8860312Z 225 │ rows: event.nativeEvent.rows, 2026-10-23T23:34:17.8860543Z 226 │ }); 2026-10-23T23:34:17.8860697Z 227 │ }, 2026-10-23T23:34:17.8860848Z 228 │ [onResize], 2026-10-23T23:34:17.8861006Z 229 │ ); 2026-10-23T23:34:17.8861141Z 230 │ 2026-10-23T23:34:17.8861315Z 231 │ if (NativeTerminalSurfaceView) { 2026-10-23T23:34:17.8861633Z 232 │ return ( 2026-10-23T23:34:17.8861767Z 233 │ 2026-10-23T23:34:17.8861863Z 234 │ 2026-10-23T23:34:17.8865257Z 8 │ Gesture.Hover() 2026-10-23T23:34:17.8865349Z ·  ──┬── 2026-10-23T23:34:17.8865508Z · ╰── `Hover` may be a component 2026-10-23T23:34:17.8865607Z 9 │ .manualActivation(true) 2026-10-23T23:34:17.8865672Z ╰──── 2026-10-23T23:34:17.8866010Z  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-23T23:34:17.8866542Z  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-23T23:34:17.8866545Z 2026-10-23T23:34:17.8866885Z ⚠ eslint(no-unused-vars): Variable 'legacyCredentials' is declared but never used. Unused variables should start with a '_'. 2026-10-23T23:34:17.8867072Z ╭─[packages/provider-cursor/src/server/credentialStore.test.ts:15:7] 2026-10-23T23:34:17.8867140Z 14 │ 2026-10-23T23:34:17.8867307Z 15 │ const legacyCredentials = { 2026-10-23T23:34:17.8867482Z ·  ────────┬──────── 2026-10-23T23:34:17.8867666Z · ╰── 'legacyCredentials' is declared here 2026-10-23T23:34:17.8867751Z 16 │ version: 1 as const, 2026-10-23T23:34:17.8867814Z ╰──── 2026-10-23T23:34:17.8867944Z  help: Consider removing this declaration. 2026-10-23T23:34:17.8867947Z 2026-10-23T23:34:17.8868359Z ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'. 2026-10-23T23:34:17.8868518Z ╭─[packages/provider-cursor/src/server/auth.ts:249:20] 2026-10-23T23:34:17.8868590Z 248 │ }, 2026-10-23T23:34:17.8868684Z 249 │ (effect, flow, stopSessions) => 2026-10-23T23:34:17.8868806Z ·  ──────┬───── 2026-10-23T23:34:17.8868986Z · ╰── 'stopSessions' is declared here 2026-10-23T23:34:17.8869067Z 250 │ effect.pipe( 2026-10-23T23:34:17.8869127Z ╰──── 2026-10-23T23:34:17.8869251Z  help: Consider removing this parameter. 2026-10-23T23:34:17.8869254Z 2026-10-23T23:34:17.8869485Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T23:34:17.8869675Z ╭─[apps/mobile/src/features/terminal/TerminalContextSheet.tsx:72:15] 2026-10-23T23:34:17.8869750Z 71 │ { 2026-10-23T23:34:17.8871084Z ·  ────┬──── 2026-10-23T23:34:17.8871241Z · ╰── This is the containing effect 2026-10-23T23:34:17.8871370Z 640 │ if (pendingLaunchEntry.key === launchTargetKey) { 2026-10-23T23:34:17.8871446Z 641 │ return; 2026-10-23T23:34:17.8871517Z 642 │ } 2026-10-23T23:34:17.8871612Z 643 │ setPendingLaunchEntry({ 2026-10-23T23:34:17.8871719Z ·  ──────────┬────────── 2026-10-23T23:34:17.8871925Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T23:34:17.8872011Z 644 │ key: launchTargetKey, 2026-10-23T23:34:17.8872074Z ╰──── 2026-10-23T23:34:17.8872779Z  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-23T23:34:17.8873161Z  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-23T23:34:17.8873164Z 2026-10-23T23:34:17.8873541Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T23:34:17.8873823Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:653:5] 2026-10-23T23:34:17.8873887Z 648 │ 2026-10-23T23:34:17.8873961Z 649 │ useEffect(() => { 2026-10-23T23:34:17.8874046Z ·  ────┬──── 2026-10-23T23:34:17.8874200Z · ╰── This is the containing effect 2026-10-23T23:34:17.8874349Z 650 │ if (initialAttachGridEntry.key === launchTargetKey) { 2026-10-23T23:34:17.8874450Z 651 │ return; 2026-10-23T23:34:17.8874558Z 652 │ } 2026-10-23T23:34:17.8874662Z 653 │ setInitialAttachGridEntry({ 2026-10-23T23:34:17.8874770Z ·  ────────────┬──────────── 2026-10-23T23:34:17.8874986Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T23:34:17.8875074Z 654 │ key: launchTargetKey, 2026-10-23T23:34:17.8875139Z ╰──── 2026-10-23T23:34:17.8875846Z  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-23T23:34:17.8876224Z  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-23T23:34:17.8876227Z 2026-10-23T23:34:17.8876529Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T23:34:17.8876741Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:746:7] 2026-10-23T23:34:17.8876808Z 743 │ 2026-10-23T23:34:17.8876882Z 744 │ useEffect(() => { 2026-10-23T23:34:17.8876974Z ·  ────┬──── 2026-10-23T23:34:17.8877139Z · ╰── This is the containing effect 2026-10-23T23:34:17.8877267Z 745 │ if (!routeEnvironmentId || !routeThreadId) { 2026-10-23T23:34:17.8877349Z 746 │ setLastGridSize({ 2026-10-23T23:34:17.8877448Z ·  ───────┬─────── 2026-10-23T23:34:17.8877651Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T23:34:17.8877752Z 747 │ cols: DEFAULT_TERMINAL_COLS, 2026-10-23T23:34:17.8877811Z ╰──── 2026-10-23T23:34:17.8878532Z  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-23T23:34:17.8878918Z  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-23T23:34:17.8878921Z 2026-10-23T23:34:17.8879161Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T23:34:17.8879369Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:538:24] 2026-10-23T23:34:17.8879432Z 537 │ }); 2026-10-23T23:34:17.8879590Z 538 │ }, [terminal.buffer, terminal.buffer.length, terminalKey]); 2026-10-23T23:34:17.8879800Z ·  ───────────┬────────── 2026-10-23T23:34:17.8880195Z · ╰── Overly precise dependency `terminal.buffer.length`, use `terminal.buffer` instead 2026-10-23T23:34:17.8880424Z 539 │ const cwd = terminal.summary?.cwd ?? selectedThreadProject?.workspaceRoot ?? null; 2026-10-23T23:34:17.8880500Z ╰──── 2026-10-23T23:34:17.8880939Z  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-23T23:34:17.8881311Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.8881315Z 2026-10-23T23:34:17.8881563Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T23:34:17.8881763Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:709:7] 2026-10-23T23:34:17.8881885Z 708 │ sentInitialInputKeyRef.current = null; 2026-10-23T23:34:17.8881969Z 709 │ }, [terminalKey]); 2026-10-23T23:34:17.8882064Z ·  ─────┬───── 2026-10-23T23:34:17.8882237Z · ╰── Unnecessary dependency `terminalKey` 2026-10-23T23:34:17.8882307Z 710 │ 2026-10-23T23:34:17.8882374Z ╰──── 2026-10-23T23:34:17.8882724Z  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-23T23:34:17.8883097Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.8883111Z 2026-10-23T23:34:17.8883344Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T23:34:17.8883554Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:800:52] 2026-10-23T23:34:17.8883629Z 799 │ }; 2026-10-23T23:34:17.8883843Z 800 │ }, [canOperateTerminal, isRunning, pasteSession, terminal.lifecycleVersion, terminalKey]); 2026-10-23T23:34:17.8884062Z ·  ────────────┬──────────── ─────┬───── 2026-10-23T23:34:17.8884344Z · │ ╰── Unnecessary dependency `terminalKey` 2026-10-23T23:34:17.8884602Z · ╰── Unnecessary dependency `terminal.lifecycleVersion` 2026-10-23T23:34:17.8884673Z 801 │ 2026-10-23T23:34:17.8884733Z ╰──── 2026-10-23T23:34:17.8885079Z  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-23T23:34:17.8885444Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.8885446Z 2026-10-23T23:34:17.8885623Z ⚠ react(refs): Cannot access refs during render 2026-10-23T23:34:17.8885822Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:793:24] 2026-10-23T23:34:17.8885884Z 792 │ } 2026-10-23T23:34:17.8886092Z 793 │ const pasteSession = pasteSessionRef.current; 2026-10-23T23:34:17.8886307Z ·  ───────────┬─────────── 2026-10-23T23:34:17.8886504Z · ╰── Cannot access ref value during render 2026-10-23T23:34:17.8886565Z 794 │ 2026-10-23T23:34:17.8886630Z ╰──── 2026-10-23T23:34:17.8887278Z  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-23T23:34:17.8887627Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T23:34:17.8887630Z 2026-10-23T23:34:17.8887941Z ⚠ eslint(no-unused-vars): Function 'promptResponseHasMissingXAiStopReason' is declared but never used. 2026-10-23T23:34:17.8888131Z ╭─[packages/provider-grok/src/server/xaiAcpExtension.ts:1620:10] 2026-10-23T23:34:17.8888200Z 1619 │ 2026-10-23T23:34:17.8888455Z 1620 │ function promptResponseHasMissingXAiStopReason(response: EffectAcpSchema.PromptResponse): boolean { 2026-10-23T23:34:17.8888597Z ·  ──────────────────┬────────────────── 2026-10-23T23:34:17.8888841Z · ╰── 'promptResponseHasMissingXAiStopReason' is declared here 2026-10-23T23:34:17.8888938Z 1621 │ const meta = response._meta; 2026-10-23T23:34:17.8889003Z ╰──── 2026-10-23T23:34:17.8889130Z  help: Consider removing this declaration. 2026-10-23T23:34:17.8889134Z 2026-10-23T23:34:17.8889391Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-23T23:34:17.8889547Z ╭─[apps/mobile/src/lib/markdownDocument.ts:138:28] 2026-10-23T23:34:17.8889645Z 137 │ visit(parser.parse(markdown)); 2026-10-23T23:34:17.8889748Z 138 │ for (const edit of edits.reverse()) 2026-10-23T23:34:17.8889861Z ·  ─────── 2026-10-23T23:34:17.8890060Z 139 │ markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end); 2026-10-23T23:34:17.8890132Z ╰──── 2026-10-23T23:34:17.8890501Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-23T23:34:17.8890504Z 2026-10-23T23:34:17.8890759Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-23T23:34:17.8890991Z ╭─[apps/mobile/src/lib/markdownDocument.ts:169:28] 2026-10-23T23:34:17.8891179Z 168 │ visit(parser.parse(markdown)); 2026-10-23T23:34:17.8891284Z 169 │ for (const edit of edits.reverse()) 2026-10-23T23:34:17.8891391Z ·  ─────── 2026-10-23T23:34:17.8891591Z 170 │ markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end); 2026-10-23T23:34:17.8891655Z ╰──── 2026-10-23T23:34:17.8892042Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-23T23:34:17.8892045Z 2026-10-23T23:34:17.8892299Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-23T23:34:17.8892443Z ╭─[apps/mobile/src/lib/markdownDocument.ts:223:38] 2026-10-23T23:34:17.8892544Z 222 │ visit(parser.parse(markdown)); 2026-10-23T23:34:17.8892678Z 223 │ for (const lineStart of lineStarts.reverse()) { 2026-10-23T23:34:17.8892806Z ·  ─────── 2026-10-23T23:34:17.8893001Z 224 │ // The header row may be a lazy line without its container markers (`>` or list indent), 2026-10-23T23:34:17.8893072Z ╰──── 2026-10-23T23:34:17.8893373Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-23T23:34:17.8893376Z 2026-10-23T23:34:17.8893705Z ⚠ eslint(no-unused-vars): Variable 'useDragRegion' is declared but never used. Unused variables should start with a '_'. 2026-10-23T23:34:17.8893879Z ╭─[apps/web/src/components/preview/PreviewPanelShell.tsx:61:9] 2026-10-23T23:34:17.8893949Z 60 │ ) { 2026-10-23T23:34:17.8894160Z 61 │ const useDragRegion = isElectron && props.mode !== "sheet" && props.mode !== "embedded"; 2026-10-23T23:34:17.8894264Z ·  ──────┬────── 2026-10-23T23:34:17.8894428Z · ╰── 'useDragRegion' is declared here 2026-10-23T23:34:17.8894545Z 62 │ const isInline = props.mode === "inline"; 2026-10-23T23:34:17.8894612Z ╰──── 2026-10-23T23:34:17.8894743Z  help: Consider removing this declaration. 2026-10-23T23:34:17.8894746Z 2026-10-23T23:34:17.8895046Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-23T23:34:17.8895209Z ╭─[packages/provider-grok/src/server/adapter.ts:408:7] 2026-10-23T23:34:17.8895286Z 407 │ 2026-10-23T23:34:17.8895376Z 408 │ const layer: Layer.Layer< 2026-10-23T23:34:17.8895466Z ·  ──┬── 2026-10-23T23:34:17.8895623Z · ╰── 'layer' is declared here 2026-10-23T23:34:17.8895737Z 409 │ ProviderAdapter.ProviderAdapterV2, 2026-10-23T23:34:17.8895804Z ╰──── 2026-10-23T23:34:17.8895923Z  help: Consider removing this declaration. 2026-10-23T23:34:17.8895927Z 2026-10-23T23:34:17.8896191Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-23T23:34:17.8896395Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:1998:15] 2026-10-23T23:34:17.8896477Z 1997 │ assert.equal( 2026-10-23T23:34:17.8896654Z 1998 │ items.filter((item) => item.type === "assistant_message").at(-1)?.text, 2026-10-23T23:34:17.8896752Z ·  ────── 2026-10-23T23:34:17.8896931Z 1999 │ "authoritative answer", 2026-10-23T23:34:17.8897087Z ╰──── 2026-10-23T23:34:17.8897285Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-23T23:34:17.8897294Z 2026-10-23T23:34:17.8897921Z ⚠ 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-23T23:34:17.8898138Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:3951:7] 2026-10-23T23:34:17.8898354Z 3950 │ const closeFiber = yield* Scope.close(sessionScope, Exit.void).pipe(Effect.forkScoped); 2026-10-23T23:34:17.8898607Z 3951 │ ╭─▶ while (!responseLifecycle.includes("failed")) { 2026-10-23T23:34:17.8898743Z 3952 │ │ yield* Effect.yieldNow; 2026-10-23T23:34:17.8898911Z 3953 │ ╰─▶ } 2026-10-23T23:34:17.8899061Z 3954 │ const responseExit = yield* Fiber.join(responseFiber); 2026-10-23T23:34:17.8899126Z ╰──── 2026-10-23T23:34:17.8899129Z 2026-10-23T23:34:17.8899670Z ⚠ 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-23T23:34:17.8899864Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6062:9] 2026-10-23T23:34:17.8899972Z 6061 │ .pipe(Effect.forkScoped); 2026-10-23T23:34:17.8900198Z 6062 │ ╭─▶ while (promptGates.length < 1) { 2026-10-23T23:34:17.8900334Z 6063 │ │ yield* Effect.yieldNow; 2026-10-23T23:34:17.8900541Z 6064 │ ╰─▶ } 2026-10-23T23:34:17.8900744Z 6065 │ assert.isDefined(sessionUpdateHandler, "session update handler must be wired"); 2026-10-23T23:34:17.8900810Z ╰──── 2026-10-23T23:34:17.8900813Z 2026-10-23T23:34:17.8901349Z ⚠ 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-23T23:34:17.8901651Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6197:9] 2026-10-23T23:34:17.8901760Z 6196 │ .pipe(Effect.forkScoped); 2026-10-23T23:34:17.8901982Z 6197 │ ╭─▶ while (promptGates.length < 2) { 2026-10-23T23:34:17.8902117Z 6198 │ │ yield* Effect.yieldNow; 2026-10-23T23:34:17.8902280Z 6199 │ ╰─▶ } 2026-10-23T23:34:17.8902471Z 6200 │ if (sessionUpdateHandler === undefined || capturedMutation.current === null) { 2026-10-23T23:34:17.8902536Z ╰──── 2026-10-23T23:34:17.8902539Z 2026-10-23T23:34:17.8902789Z ⚠ eslint(no-unused-vars): Identifier 'HookForwarder' is imported but never used. 2026-10-23T23:34:17.8902918Z ╭─[infra/relay/src/http/Api.ts:69:13] 2026-10-23T23:34:17.8903082Z 68 │ import * as EnvironmentLinks from "../environments/EnvironmentLinks.ts"; 2026-10-23T23:34:17.8903340Z 69 │ import * as HookForwarder from "../hooks/HookForwarder.ts"; 2026-10-23T23:34:17.8903510Z ·  ──────┬────── 2026-10-23T23:34:17.8903737Z · ╰── 'HookForwarder' is imported here 2026-10-23T23:34:17.8903858Z 70 │ import * as HeldHooks from "../hooks/HeldHooks.ts"; 2026-10-23T23:34:17.8903923Z ╰──── 2026-10-23T23:34:17.8904044Z  help: Consider removing this import. 2026-10-23T23:34:17.8904047Z 2026-10-23T23:34:17.8904534Z ⚠ eslint(no-unused-vars): Variable 'layerCodexAppServerClientFactoryCommand' is declared but never used. Unused variables should start with a '_'. 2026-10-23T23:34:17.8904726Z ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1444:7] 2026-10-23T23:34:17.8904793Z 1443 │ 2026-10-23T23:34:17.8904927Z 1444 │ const layerCodexAppServerClientFactoryCommand = ( 2026-10-23T23:34:17.8905076Z ·  ───────────────────┬─────────────────── 2026-10-23T23:34:17.8905315Z · ╰── 'layerCodexAppServerClientFactoryCommand' is declared here 2026-10-23T23:34:17.8905464Z 1445 │ options: CodexClient.CodexAppServerClientOptions & { 2026-10-23T23:34:17.8905533Z ╰──── 2026-10-23T23:34:17.8905662Z  help: Consider removing this declaration. 2026-10-23T23:34:17.8905665Z 2026-10-23T23:34:17.8905969Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-23T23:34:17.8906155Z ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1680:7] 2026-10-23T23:34:17.8906221Z 1679 │ 2026-10-23T23:34:17.8906308Z 1680 │ const layer: Layer.Layer< 2026-10-23T23:34:17.8906398Z ·  ──┬── 2026-10-23T23:34:17.8906550Z · ╰── 'layer' is declared here 2026-10-23T23:34:17.8906666Z 1681 │ ProviderAdapter.ProviderAdapterV2, 2026-10-23T23:34:17.8906735Z ╰──── 2026-10-23T23:34:17.8906855Z  help: Consider removing this declaration. 2026-10-23T23:34:17.8906863Z 2026-10-23T23:34:17.8907158Z ⚠ eslint(no-unused-vars): Function 'layerClaudeAgentSdkReplayQueryRunner' is declared but never used. 2026-10-23T23:34:17.8907377Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.testkit.ts:960:10] 2026-10-23T23:34:17.8907444Z 959 │ 2026-10-23T23:34:17.8907574Z 960 │ function layerClaudeAgentSdkReplayQueryRunner( 2026-10-23T23:34:17.8907708Z ·  ──────────────────┬───────────────── 2026-10-23T23:34:17.8907949Z · ╰── 'layerClaudeAgentSdkReplayQueryRunner' is declared here 2026-10-23T23:34:17.8908078Z 961 │ transcript: ClaudeAgentSdkReplayTranscript, 2026-10-23T23:34:17.8908142Z ╰──── 2026-10-23T23:34:17.8908259Z  help: Consider removing this declaration. 2026-10-23T23:34:17.8908262Z 2026-10-23T23:34:17.8908460Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T23:34:17.8908604Z ╭─[apps/web/src/hooks/useThreadActions.ts:821:56] 2026-10-23T23:34:17.8908727Z 820 │ const resolved = resolveThreadTarget(target); 2026-10-23T23:34:17.8908910Z 821 │ if (resolved && !canSnooze(resolved.thread, { now: new Date().toISOString() })) { 2026-10-23T23:34:17.8909058Z ·  ─────┬──── 2026-10-23T23:34:17.8909350Z · ╰── Cannot call impure function 2026-10-23T23:34:17.8909503Z 822 │ return AsyncResult.failure( 2026-10-23T23:34:17.8909560Z ╰──── 2026-10-23T23:34:17.8909951Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-23T23:34:17.8910303Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T23:34:17.8910306Z 2026-10-23T23:34:17.8910617Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T23:34:17.8910765Z ╭─[apps/web/src/hooks/useThreadActions.ts:709:46] 2026-10-23T23:34:17.8910849Z 708 │ const wokeAt = resolved 2026-10-23T23:34:17.8911017Z 709 │ ? threadWokeAt(resolved.thread, { now: new Date().toISOString() }) 2026-10-23T23:34:17.8911152Z ·  ─────┬──── 2026-10-23T23:34:17.8911342Z · ╰── Cannot call impure function 2026-10-23T23:34:17.8911417Z 710 │ : null; 2026-10-23T23:34:17.8911479Z ╰──── 2026-10-23T23:34:17.8911804Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-23T23:34:17.8912150Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T23:34:17.8912153Z 2026-10-23T23:34:17.8912363Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-23T23:34:17.8912564Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:100:85] 2026-10-23T23:34:17.8912691Z  99 │ const startEditor = startScheduledTaskEditor; 2026-10-23T23:34:17.8912907Z 100 │ const resetEditor = useCallback(() => startEditor(defaultEditor), [defaultEditor, startEditor]); 2026-10-23T23:34:17.8913085Z ·  ─────┬───── 2026-10-23T23:34:17.8913320Z · ╰── Unnecessary dependency `startEditor` 2026-10-23T23:34:17.8913419Z 101 │ const readEditor = useCallback( 2026-10-23T23:34:17.8913482Z ╰──── 2026-10-23T23:34:17.8913866Z  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-23T23:34:17.8914236Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.8914240Z 2026-10-23T23:34:17.8914457Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-23T23:34:17.8914646Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:121:7] 2026-10-23T23:34:17.8914723Z 120 │ setEditor, 2026-10-23T23:34:17.8914799Z 121 │ startEditor, 2026-10-23T23:34:17.8914894Z ·  ─────┬───── 2026-10-23T23:34:17.8915066Z · ╰── Unnecessary dependency `startEditor` 2026-10-23T23:34:17.8915142Z 122 │ hasChanges, 2026-10-23T23:34:17.8915202Z ╰──── 2026-10-23T23:34:17.8915650Z  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-23T23:34:17.8916115Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.8916118Z 2026-10-23T23:34:17.8916423Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-23T23:34:17.8916630Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts:10578:7] 2026-10-23T23:34:17.8916693Z 10577 │ 2026-10-23T23:34:17.8916837Z 10578 │ const layer: Layer.Layer< 2026-10-23T23:34:17.8916945Z ·  ──┬── 2026-10-23T23:34:17.8917104Z · ╰── 'layer' is declared here 2026-10-23T23:34:17.8917217Z 10579 │ ProviderAdapter.ProviderAdapterV2, 2026-10-23T23:34:17.8917283Z ╰──── 2026-10-23T23:34:17.8917416Z  help: Consider removing this declaration. 2026-10-23T23:34:17.8917419Z 2026-10-23T23:34:17.8917641Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-23T23:34:17.8917787Z ╭─[packages/client-runtime/src/state/shell.ts:189:5] 2026-10-23T23:34:17.8917922Z 186 │ let waiting = yield* Ref.get(awaitingCompletion); 2026-10-23T23:34:17.8918004Z 187 │ let next = initial; 2026-10-23T23:34:17.8918089Z ·  ──┬─ 2026-10-23T23:34:17.8918229Z · ╰── From this accumulator 2026-10-23T23:34:17.8918329Z 188 │ let receivedSnapshot = false; 2026-10-23T23:34:17.8918429Z 189 │ for (const item of items) { 2026-10-23T23:34:17.8918514Z ·  ─┬─ 2026-10-23T23:34:17.8918636Z · ╰── For this loop 2026-10-23T23:34:17.8918747Z 190 │ if (item.kind === "synchronized") { 2026-10-23T23:34:17.8918828Z 191 │ waiting = false; 2026-10-23T23:34:17.8918938Z 192 │ if (Option.isSome(next.snapshot)) { 2026-10-23T23:34:17.8919077Z 193 │ next = { ...next, status: "live", error: Option.none() }; 2026-10-23T23:34:17.8919183Z ·  ───┬─── 2026-10-23T23:34:17.8919340Z · ╰── From this spread 2026-10-23T23:34:17.8919412Z 194 │ } 2026-10-23T23:34:17.8919471Z ╰──── 2026-10-23T23:34:17.8919657Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-23T23:34:17.8919853Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-23T23:34:17.8919859Z 2026-10-23T23:34:17.8920442Z ⚠ 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-23T23:34:17.8920587Z ╭─[packages/effect-acp/src/errors.test.ts:129:28] 2026-10-23T23:34:17.8920704Z 128 │ const secret = "acp-summary-secret"; 2026-10-23T23:34:17.8920836Z 129 │ const cause = yield* Schema.decodeUnknownEffect( 2026-10-23T23:34:17.8920978Z ·  ────────────────────────── 2026-10-23T23:34:17.8921059Z 130 │ Schema.Struct({ 2026-10-23T23:34:17.8921123Z ╰──── 2026-10-23T23:34:17.8921126Z 2026-10-23T23:34:17.8921445Z ⚠ eslint(no-unused-vars): Type 'EnvironmentId' is imported but never used. 2026-10-23T23:34:17.8921705Z ╭─[packages/client-runtime/src/state/sharedSettings.ts:2:3] 2026-10-23T23:34:17.8921801Z 1 │ import type { 2026-10-23T23:34:17.8921876Z 2 │ EnvironmentId, 2026-10-23T23:34:17.8921967Z ·  ──────┬────── 2026-10-23T23:34:17.8922136Z · ╰── 'EnvironmentId' is imported here 2026-10-23T23:34:17.8922233Z 3 │ ExecutionEnvironmentCapabilities, 2026-10-23T23:34:17.8922298Z ╰──── 2026-10-23T23:34:17.8922420Z  help: Consider removing this import. 2026-10-23T23:34:17.8922423Z 2026-10-23T23:34:17.8922832Z ⚠ eslint(no-unused-vars): Variable 'layerUnavailable' is declared but never used. Unused variables should start with a '_'. 2026-10-23T23:34:17.8923013Z ╭─[apps/server/src/orchestration-v2/Orchestrator.ts:12340:7] 2026-10-23T23:34:17.8923080Z 12339 │ 2026-10-23T23:34:17.8923252Z 12340 │ const layerUnavailable: Layer.Layer = Layer.succeed( 2026-10-23T23:34:17.8923354Z ·  ────────┬─────── 2026-10-23T23:34:17.8923531Z · ╰── 'layerUnavailable' is declared here 2026-10-23T23:34:17.8923611Z 12341 │ OrchestratorV2, 2026-10-23T23:34:17.8923677Z ╰──── 2026-10-23T23:34:17.8923799Z  help: Consider removing this declaration. 2026-10-23T23:34:17.8923802Z 2026-10-23T23:34:17.8923976Z ⚠ react(refs): Cannot access refs during render 2026-10-23T23:34:17.8924117Z ╭─[apps/mobile/src/native/StackHeader.tsx:185:9] 2026-10-23T23:34:17.8924196Z 184 │ "options", 2026-10-23T23:34:17.8924318Z 185 │ latestOptionFunctionsRef.current, 2026-10-23T23:34:17.8924453Z ·  ────────────────┬─────────────── 2026-10-23T23:34:17.8924682Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T23:34:17.8924799Z 186 │ optionFunctionWrappersRef.current, 2026-10-23T23:34:17.8924863Z ╰──── 2026-10-23T23:34:17.8925415Z  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-23T23:34:17.8925758Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T23:34:17.8925761Z 2026-10-23T23:34:17.8926029Z ⚠ react(refs): Cannot access refs during render 2026-10-23T23:34:17.8926241Z ╭─[apps/mobile/src/native/StackHeader.tsx:186:9] 2026-10-23T23:34:17.8926374Z 185 │ latestOptionFunctionsRef.current, 2026-10-23T23:34:17.8926483Z 186 │ optionFunctionWrappersRef.current, 2026-10-23T23:34:17.8926622Z ·  ────────────────┬──────────────── 2026-10-23T23:34:17.8926856Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T23:34:17.8926971Z 187 │ ) as NativeStackNavigationOptions) 2026-10-23T23:34:17.8927043Z ╰──── 2026-10-23T23:34:17.8927668Z  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-23T23:34:17.8928014Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T23:34:17.8928017Z 2026-10-23T23:34:17.8928563Z ⚠ 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-23T23:34:17.8928717Z ╭─[packages/effect-acp/src/protocol.test.ts:500:31] 2026-10-23T23:34:17.8928782Z 499 │ 2026-10-23T23:34:17.8928916Z 500 │ const response = yield* Schema.decodeUnknownEffect( 2026-10-23T23:34:17.8929059Z ·  ────────────────────────── 2026-10-23T23:34:17.8929194Z 501 │ Schema.fromJsonString(JsonRpcErrorResponse), 2026-10-23T23:34:17.8929260Z ╰──── 2026-10-23T23:34:17.8929263Z 2026-10-23T23:34:17.8929655Z ⚠ 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-23T23:34:17.8929796Z ╭─[packages/effect-acp/src/schema.test.ts:18:12] 2026-10-23T23:34:17.8929996Z 17 │ const command = { name: "plan", description: "Make a plan", input: { hint: "Task" } }; 2026-10-23T23:34:17.8930144Z 18 │ expect(Schema.is(V1.AvailableCommand)(command)).toBe(true); 2026-10-23T23:34:17.8930236Z ·  ───────── 2026-10-23T23:34:17.8930310Z 19 │ expect( 2026-10-23T23:34:17.8930433Z ╰──── 2026-10-23T23:34:17.8930436Z 2026-10-23T23:34:17.8930839Z ⚠ 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-23T23:34:17.8930977Z ╭─[packages/effect-acp/src/schema.test.ts:20:7] 2026-10-23T23:34:17.8931051Z 19 │ expect( 2026-10-23T23:34:17.8931254Z 20 │ Schema.is(V2.AvailableCommand)({ ...command, input: { type: "text", hint: "Task" } }), 2026-10-23T23:34:17.8931345Z ·  ───────── 2026-10-23T23:34:17.8931417Z 21 │ ).toBe(true); 2026-10-23T23:34:17.8931479Z ╰──── 2026-10-23T23:34:17.8931481Z 2026-10-23T23:34:17.8932017Z ⚠ 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-23T23:34:17.8932182Z ╭─[apps/server/src/assets/AssetAccess.test.ts:1043:32] 2026-10-23T23:34:17.8932455Z 1042 │ expect(error._tag).toBe("AssetGitHubMediaUrlValidationError"); 2026-10-23T23:34:17.8932779Z 1043 │ const encoded = yield* Schema.encodeEffect(Schema.fromJsonString(AssetAccessError))(error); 2026-10-23T23:34:17.8932952Z ·  ─────────────────── 2026-10-23T23:34:17.8933070Z 1044 │ expect(encoded).not.toContain(url); 2026-10-23T23:34:17.8933136Z ╰──── 2026-10-23T23:34:17.8933139Z 2026-10-23T23:34:17.8933365Z ⚠ eslint(no-unused-vars): Identifier 'Image' is imported but never used. 2026-10-23T23:34:17.8933542Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:17:10] 2026-10-23T23:34:17.8933777Z 16 │ import type { NativeSyntheticEvent, ViewProps } from "react-native"; 2026-10-23T23:34:17.8933915Z 17 │ import { Image, Platform, StyleSheet } from "react-native"; 2026-10-23T23:34:17.8934005Z ·  ──┬── 2026-10-23T23:34:17.8934164Z · ╰── 'Image' is imported here 2026-10-23T23:34:17.8934230Z 18 │ 2026-10-23T23:34:17.8934295Z ╰──── 2026-10-23T23:34:17.8934410Z  help: Consider removing this import. 2026-10-23T23:34:17.8934413Z 2026-10-23T23:34:17.8934654Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-23T23:34:17.8934826Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:227:6] 2026-10-23T23:34:17.8935019Z 223 │ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents( 2026-10-23T23:34:17.8935123Z 224 │ nativeEventSnapshotsRef.current, 2026-10-23T23:34:17.8935246Z ·  ───────────┬─────────── 2026-10-23T23:34:17.8935804Z · ╰── 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-23T23:34:17.8935896Z 225 │ mostRecentEventCount, 2026-10-23T23:34:17.8935960Z 226 │ ); 2026-10-23T23:34:17.8936107Z 227 │ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]); 2026-10-23T23:34:17.8936271Z ·  ──────────────────────────┬────────────────────────── 2026-10-23T23:34:17.8936508Z · ╰── This dependency list is missing values used by the callback 2026-10-23T23:34:17.8936609Z 228 │ const assumedValue = props.value; 2026-10-23T23:34:17.8936669Z ╰──── 2026-10-23T23:34:17.8936873Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-23T23:34:17.8937253Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.8937261Z 2026-10-23T23:34:17.8937515Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-23T23:34:17.8937680Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:235:7] 2026-10-23T23:34:17.8937851Z 234 │ nativeEventSnapshotsRef.current = assumeComposerControlledState( 2026-10-23T23:34:17.8937959Z 235 │ nativeEventSnapshotsRef.current, 2026-10-23T23:34:17.8938069Z ·  ───────────┬─────────── 2026-10-23T23:34:17.8938689Z · ╰── 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-23T23:34:17.8938825Z 236 │ controlledEventCount, 2026-10-23T23:34:17.8938912Z 237 │ assumedValue, 2026-10-23T23:34:17.8939024Z 238 │ ); 2026-10-23T23:34:17.8939216Z 239 │ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]); 2026-10-23T23:34:17.8939382Z ·  ───────────┬────────── 2026-10-23T23:34:17.8939632Z · ╰── Unnecessary dependency `controlledDocumentJson` 2026-10-23T23:34:17.8939790Z 240 │ const acceptNativeEvent = useCallback( 2026-10-23T23:34:17.8939877Z ╰──── 2026-10-23T23:34:17.8940410Z  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-23T23:34:17.8940790Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.8940793Z 2026-10-23T23:34:17.8940966Z ⚠ react(refs): Cannot access refs during render 2026-10-23T23:34:17.8941139Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:160:29] 2026-10-23T23:34:17.8941284Z 159 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-23T23:34:17.8941424Z 160 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-23T23:34:17.8941690Z ·  ─────────────┬──────────── 2026-10-23T23:34:17.8941934Z · ╰── Cannot access ref value during render 2026-10-23T23:34:17.8942005Z 161 │ }); 2026-10-23T23:34:17.8942067Z ╰──── 2026-10-23T23:34:17.8942617Z  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-23T23:34:17.8942962Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T23:34:17.8942964Z 2026-10-23T23:34:17.8943138Z ⚠ react(refs): Cannot access refs during render 2026-10-23T23:34:17.8943306Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:160:29] 2026-10-23T23:34:17.8943455Z 159 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-23T23:34:17.8943590Z 160 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-23T23:34:17.8943729Z ·  ─────────────┬──────────── 2026-10-23T23:34:17.8943969Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T23:34:17.8944043Z 161 │ }); 2026-10-23T23:34:17.8944108Z ╰──── 2026-10-23T23:34:17.8944653Z  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-23T23:34:17.8945155Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T23:34:17.8945237Z 2026-10-23T23:34:17.8945435Z ⚠ react(refs): Cannot access refs during render 2026-10-23T23:34:17.8945656Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:23] 2026-10-23T23:34:17.8945738Z 161 │ }); 2026-10-23T23:34:17.8945859Z 162 │ confirmedTokensRef.current = tokens; 2026-10-23T23:34:17.8946007Z ·  ─────────┬────────────┬─── 2026-10-23T23:34:17.8946289Z · │ ╰── Cannot update ref value during render 2026-10-23T23:34:17.8946465Z · ╰── This value is a ref 2026-10-23T23:34:17.8946563Z 163 │ return JSON.stringify( 2026-10-23T23:34:17.8946621Z ╰──── 2026-10-23T23:34:17.8947176Z  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-23T23:34:17.8947533Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T23:34:17.8947536Z 2026-10-23T23:34:17.8947716Z ⚠ react(refs): Cannot access refs during render 2026-10-23T23:34:17.8947893Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:204:5] 2026-10-23T23:34:17.8947977Z 203 │ mostRecentEventCount, 2026-10-23T23:34:17.8948099Z 204 │ nativeEventSnapshotsRef.current, 2026-10-23T23:34:17.8948235Z ·  ───────────────┬─────────────── 2026-10-23T23:34:17.8948468Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T23:34:17.8948539Z 205 │ ); 2026-10-23T23:34:17.8948612Z ╰──── 2026-10-23T23:34:17.8949150Z  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-23T23:34:17.8949490Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T23:34:17.8949493Z 2026-10-23T23:34:17.8949664Z ⚠ react(refs): Cannot access refs during render 2026-10-23T23:34:17.8949827Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:210:5] 2026-10-23T23:34:17.8949999Z 209 │ mostRecentEventCount, 2026-10-23T23:34:17.8950146Z 210 │ nativeEventSnapshotsRef.current, 2026-10-23T23:34:17.8950318Z ·  ───────────────┬─────────────── 2026-10-23T23:34:17.8950571Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T23:34:17.8950644Z 211 │ ); 2026-10-23T23:34:17.8950709Z ╰──── 2026-10-23T23:34:17.8951344Z  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-23T23:34:17.8951682Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T23:34:17.8951691Z 2026-10-23T23:34:17.8951918Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-23T23:34:17.8952088Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:195:6] 2026-10-23T23:34:17.8952235Z 159 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-23T23:34:17.8952364Z 160 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-23T23:34:17.8952500Z ·  ─────────┬──────── 2026-10-23T23:34:17.8953052Z · ╰── 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-23T23:34:17.8953120Z 161 │ }); 2026-10-23T23:34:17.8953242Z 162 │ confirmedTokensRef.current = tokens; 2026-10-23T23:34:17.8953329Z 163 │ return JSON.stringify( 2026-10-23T23:34:17.8953530Z 164 │ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => { 2026-10-23T23:34:17.8953611Z 165 │ const record = 2026-10-23T23:34:17.8953709Z 166 │ token.type === "context" 2026-10-23T23:34:17.8953898Z 167 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-23T23:34:17.8953979Z 168 │ : undefined; 2026-10-23T23:34:17.8954110Z 169 │ const presentation = contextChipPresentation( 2026-10-23T23:34:17.8954247Z 170 │ token.type === "context" ? token.kind : token.type, 2026-10-23T23:34:17.8954320Z 171 │ record, 2026-10-23T23:34:17.8954396Z 172 │ ); 2026-10-23T23:34:17.8954497Z 173 │ const icon = contextChipIcon( 2026-10-23T23:34:17.8954589Z 174 │ presentation, 2026-10-23T23:34:17.8954758Z 175 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-23T23:34:17.8954835Z 176 │ ); 2026-10-23T23:34:17.8954910Z 177 │ return { 2026-10-23T23:34:17.8954991Z 178 │ type: token.type, 2026-10-23T23:34:17.8955083Z 179 │ source: token.source, 2026-10-23T23:34:17.8955171Z 180 │ start: token.start, 2026-10-23T23:34:17.8955251Z 181 │ end: token.end, 2026-10-23T23:34:17.8955348Z 182 │ accent: presentation.accent, 2026-10-23T23:34:17.8955426Z 183 │ label: 2026-10-23T23:34:17.8955523Z 184 │ token.type === "skill" 2026-10-23T23:34:17.8955652Z 185 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-23T23:34:17.8955746Z 186 │ : token.type === "context" 2026-10-23T23:34:17.8956113Z 187 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-23T23:34:17.8956274Z 188 │ : basename(token.value), 2026-10-23T23:34:17.8956507Z 189 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-23T23:34:17.8956616Z 190 │ iconUri: contextChipIconUri(icon), 2026-10-23T23:34:17.8956725Z 191 │ tintsIcon: icon.kind === "chip", 2026-10-23T23:34:17.8956799Z 192 │ }; 2026-10-23T23:34:17.8956879Z 193 │ }), 2026-10-23T23:34:17.8956948Z 194 │ ); 2026-10-23T23:34:17.8957089Z 195 │ }, [props.value, props.context, skillLabels]); 2026-10-23T23:34:17.8957290Z ·  ────────────────────┬──────────────────── 2026-10-23T23:34:17.8957536Z · ╰── This dependency list is missing values used by the callback 2026-10-23T23:34:17.8957701Z 196 │ // Every render resolves against the snapshot history, so a render whose 2026-10-23T23:34:17.8957766Z ╰──── 2026-10-23T23:34:17.8958009Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-23T23:34:17.8958381Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.8958384Z 2026-10-23T23:34:17.8958607Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-23T23:34:17.8958771Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:257:5] 2026-10-23T23:34:17.8958931Z 249 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-23T23:34:17.8959058Z 250 │ nativeEventSnapshotsRef.current.push({ 2026-10-23T23:34:17.8959173Z ·  ───────────┬─────────── 2026-10-23T23:34:17.8959718Z · ╰── 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-23T23:34:17.8959831Z 251 │ eventCount: acknowledgedEventCount, 2026-10-23T23:34:17.8959912Z 252 │ value, 2026-10-23T23:34:17.8960012Z 253 │ selection: nextSelection, 2026-10-23T23:34:17.8960078Z 254 │ }); 2026-10-23T23:34:17.8960188Z 255 │ return acknowledgedEventCount; 2026-10-23T23:34:17.8960256Z 256 │ }, 2026-10-23T23:34:17.8960326Z 257 │ [], 2026-10-23T23:34:17.8960465Z ·  ─┬ 2026-10-23T23:34:17.8960693Z · ╰── This dependency list is missing values used by the callback 2026-10-23T23:34:17.8960770Z 258 │ ); 2026-10-23T23:34:17.8960837Z ╰──── 2026-10-23T23:34:17.8961075Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-23T23:34:17.8961443Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.8961446Z 2026-10-23T23:34:17.8961887Z ⚠ 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-23T23:34:17.8962026Z ╭─[packages/effect-acp/src/client.ts:1269:11] 2026-10-23T23:34:17.8962278Z 1268 │ extNotificationHandlers.set(CLIENT_METHODS.mcp_message, (params) => 2026-10-23T23:34:17.8962539Z 1269 │ Schema.decodeUnknownEffect(AcpSchemaV2.MessageMcpNotification)(params).pipe( 2026-10-23T23:34:17.8962718Z ·  ────────────────────────── 2026-10-23T23:34:17.8962893Z 1270 │ Effect.mapError(() => AcpError.AcpRequestError.invalidParams()), 2026-10-23T23:34:17.8962958Z ╰──── 2026-10-23T23:34:17.8962970Z 2026-10-23T23:34:17.8963212Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-23T23:34:17.8963441Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:229:6] 2026-10-23T23:34:17.8963656Z 225 │ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents( 2026-10-23T23:34:17.8963767Z 226 │ nativeEventSnapshotsRef.current, 2026-10-23T23:34:17.8963878Z ·  ───────────┬─────────── 2026-10-23T23:34:17.8964430Z · ╰── 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-23T23:34:17.8964524Z 227 │ mostRecentEventCount, 2026-10-23T23:34:17.8964593Z 228 │ ); 2026-10-23T23:34:17.8964733Z 229 │ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]); 2026-10-23T23:34:17.8964897Z ·  ──────────────────────────┬────────────────────────── 2026-10-23T23:34:17.8965134Z · ╰── This dependency list is missing values used by the callback 2026-10-23T23:34:17.8965235Z 230 │ const assumedValue = props.value; 2026-10-23T23:34:17.8965296Z ╰──── 2026-10-23T23:34:17.8965507Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-23T23:34:17.8965883Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.8965886Z 2026-10-23T23:34:17.8966139Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-23T23:34:17.8966301Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:237:7] 2026-10-23T23:34:17.8966467Z 236 │ nativeEventSnapshotsRef.current = assumeComposerControlledState( 2026-10-23T23:34:17.8966580Z 237 │ nativeEventSnapshotsRef.current, 2026-10-23T23:34:17.8966691Z ·  ───────────┬─────────── 2026-10-23T23:34:17.8967234Z · ╰── 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-23T23:34:17.8967322Z 238 │ controlledEventCount, 2026-10-23T23:34:17.8967406Z 239 │ assumedValue, 2026-10-23T23:34:17.8967476Z 240 │ ); 2026-10-23T23:34:17.8967670Z 241 │ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]); 2026-10-23T23:34:17.8967831Z ·  ───────────┬────────── 2026-10-23T23:34:17.8968084Z · ╰── Unnecessary dependency `controlledDocumentJson` 2026-10-23T23:34:17.8968195Z 242 │ const acceptNativeEvent = useCallback( 2026-10-23T23:34:17.8968263Z ╰──── 2026-10-23T23:34:17.8968848Z  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-23T23:34:17.8969334Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.8969337Z 2026-10-23T23:34:17.8969522Z ⚠ react(refs): Cannot access refs during render 2026-10-23T23:34:17.8969695Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:162:29] 2026-10-23T23:34:17.8969872Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-23T23:34:17.8970052Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-23T23:34:17.8970195Z ·  ─────────────┬──────────── 2026-10-23T23:34:17.8970432Z · ╰── Cannot access ref value during render 2026-10-23T23:34:17.8970503Z 163 │ }); 2026-10-23T23:34:17.8970570Z ╰──── 2026-10-23T23:34:17.8971122Z  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-23T23:34:17.8971463Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T23:34:17.8971466Z 2026-10-23T23:34:17.8971638Z ⚠ react(refs): Cannot access refs during render 2026-10-23T23:34:17.8971806Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:162:29] 2026-10-23T23:34:17.8971947Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-23T23:34:17.8972083Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-23T23:34:17.8972224Z ·  ─────────────┬──────────── 2026-10-23T23:34:17.8972470Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T23:34:17.8972533Z 163 │ }); 2026-10-23T23:34:17.8972596Z ╰──── 2026-10-23T23:34:17.8973145Z  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-23T23:34:17.8973564Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T23:34:17.8973613Z 2026-10-23T23:34:17.8973821Z ⚠ react(refs): Cannot access refs during render 2026-10-23T23:34:17.8973995Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:23] 2026-10-23T23:34:17.8974069Z 163 │ }); 2026-10-23T23:34:17.8974180Z 164 │ confirmedTokensRef.current = tokens; 2026-10-23T23:34:17.8974327Z ·  ─────────┬────────────┬─── 2026-10-23T23:34:17.8974599Z · │ ╰── Cannot update ref value during render 2026-10-23T23:34:17.8974770Z · ╰── This value is a ref 2026-10-23T23:34:17.8974860Z 165 │ return JSON.stringify( 2026-10-23T23:34:17.8974931Z ╰──── 2026-10-23T23:34:17.8975473Z  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-23T23:34:17.8975814Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T23:34:17.8975817Z 2026-10-23T23:34:17.8975991Z ⚠ react(refs): Cannot access refs during render 2026-10-23T23:34:17.8976156Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:206:5] 2026-10-23T23:34:17.8976248Z 205 │ mostRecentEventCount, 2026-10-23T23:34:17.8976351Z 206 │ nativeEventSnapshotsRef.current, 2026-10-23T23:34:17.8976481Z ·  ───────────────┬─────────────── 2026-10-23T23:34:17.8976708Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T23:34:17.8976776Z 207 │ ); 2026-10-23T23:34:17.8976835Z ╰──── 2026-10-23T23:34:17.8977381Z  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-23T23:34:17.8977723Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T23:34:17.8977726Z 2026-10-23T23:34:17.8977895Z ⚠ react(refs): Cannot access refs during render 2026-10-23T23:34:17.8978055Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:212:5] 2026-10-23T23:34:17.8978144Z 211 │ mostRecentEventCount, 2026-10-23T23:34:17.8978248Z 212 │ nativeEventSnapshotsRef.current, 2026-10-23T23:34:17.8978375Z ·  ───────────────┬─────────────── 2026-10-23T23:34:17.8978590Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T23:34:17.8978659Z 213 │ ); 2026-10-23T23:34:17.8978726Z ╰──── 2026-10-23T23:34:17.8979264Z  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-23T23:34:17.8979684Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T23:34:17.8979732Z 2026-10-23T23:34:17.8979995Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-23T23:34:17.8980160Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:197:6] 2026-10-23T23:34:17.8980304Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-23T23:34:17.8980487Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-23T23:34:17.8980622Z ·  ─────────┬──────── 2026-10-23T23:34:17.8981246Z · ╰── 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-23T23:34:17.8981315Z 163 │ }); 2026-10-23T23:34:17.8981428Z 164 │ confirmedTokensRef.current = tokens; 2026-10-23T23:34:17.8981600Z 165 │ return JSON.stringify( 2026-10-23T23:34:17.8981861Z 166 │ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => { 2026-10-23T23:34:17.8981943Z 167 │ const record = 2026-10-23T23:34:17.8982040Z 168 │ token.type === "context" 2026-10-23T23:34:17.8982229Z 169 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-23T23:34:17.8982311Z 170 │ : undefined; 2026-10-23T23:34:17.8982443Z 171 │ const presentation = contextChipPresentation( 2026-10-23T23:34:17.8982577Z 172 │ token.type === "context" ? token.kind : token.type, 2026-10-23T23:34:17.8982649Z 173 │ record, 2026-10-23T23:34:17.8982720Z 174 │ ); 2026-10-23T23:34:17.8982828Z 175 │ const icon = contextChipIcon( 2026-10-23T23:34:17.8982919Z 176 │ presentation, 2026-10-23T23:34:17.8983083Z 177 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-23T23:34:17.8983154Z 178 │ ); 2026-10-23T23:34:17.8983230Z 179 │ return { 2026-10-23T23:34:17.8983315Z 180 │ type: token.type, 2026-10-23T23:34:17.8983400Z 181 │ source: token.source, 2026-10-23T23:34:17.8983487Z 182 │ start: token.start, 2026-10-23T23:34:17.8983570Z 183 │ end: token.end, 2026-10-23T23:34:17.8983680Z 184 │ accent: presentation.accent, 2026-10-23T23:34:17.8983749Z 185 │ label: 2026-10-23T23:34:17.8983862Z 186 │ token.type === "skill" 2026-10-23T23:34:17.8983994Z 187 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-23T23:34:17.8984102Z 188 │ : token.type === "context" 2026-10-23T23:34:17.8992843Z 189 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-23T23:34:17.8993040Z 190 │ : basename(token.value), 2026-10-23T23:34:17.8993214Z 191 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-23T23:34:17.8993344Z 192 │ iconUri: contextChipIconUri(icon), 2026-10-23T23:34:17.8993518Z 193 │ tintsIcon: icon.kind === "chip", 2026-10-23T23:34:17.8993602Z 194 │ }; 2026-10-23T23:34:17.8993669Z 195 │ }), 2026-10-23T23:34:17.8993744Z 196 │ ); 2026-10-23T23:34:17.8993868Z 197 │ }, [props.value, props.context, skillLabels]); 2026-10-23T23:34:17.8994022Z ·  ────────────────────┬──────────────────── 2026-10-23T23:34:17.8994675Z · ╰── This dependency list is missing values used by the callback 2026-10-23T23:34:17.8995034Z 198 │ // Every render resolves against the snapshot history, so a render whose 2026-10-23T23:34:17.8995145Z ╰──── 2026-10-23T23:34:17.8995463Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-23T23:34:17.8996035Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.8996041Z 2026-10-23T23:34:17.8996405Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-23T23:34:17.8996669Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:259:5] 2026-10-23T23:34:17.8996916Z 251 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-23T23:34:17.8997108Z 252 │ nativeEventSnapshotsRef.current.push({ 2026-10-23T23:34:17.8997292Z ·  ───────────┬─────────── 2026-10-23T23:34:17.8998201Z · ╰── 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-23T23:34:17.8998382Z 253 │ eventCount: acknowledgedEventCount, 2026-10-23T23:34:17.8998503Z 254 │ value, 2026-10-23T23:34:17.8998649Z 255 │ selection: nextSelection, 2026-10-23T23:34:17.8998760Z 256 │ }); 2026-10-23T23:34:17.8998919Z 257 │ return acknowledgedEventCount; 2026-10-23T23:34:17.8999026Z 258 │ }, 2026-10-23T23:34:17.8999130Z 259 │ [], 2026-10-23T23:34:17.8999257Z ·  ─┬ 2026-10-23T23:34:17.8999618Z · ╰── This dependency list is missing values used by the callback 2026-10-23T23:34:17.8999699Z 260 │ ); 2026-10-23T23:34:17.8999767Z ╰──── 2026-10-23T23:34:17.9000012Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-23T23:34:17.9000417Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.9000422Z 2026-10-23T23:34:17.9000630Z ⚠ react(immutability): This value cannot be modified 2026-10-23T23:34:17.9000801Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:174:5] 2026-10-23T23:34:17.9000978Z 170 │ const expandedAngle = props.collapsedDirection === "right" ? 90 : 180; 2026-10-23T23:34:17.9001152Z 171 │ const rotation = useSharedValue(props.expanded ? expandedAngle : 0); 2026-10-23T23:34:17.9001246Z ·  ────┬─── 2026-10-23T23:34:17.9001402Z · ╰── `rotation` originates here 2026-10-23T23:34:17.9001476Z 172 │ 2026-10-23T23:34:17.9001565Z 173 │ useLayoutEffect(() => { 2026-10-23T23:34:17.9001733Z 174 │ rotation.value = withTiming(props.expanded ? expandedAngle : 0, { 2026-10-23T23:34:17.9001820Z ·  ────┬─── 2026-10-23T23:34:17.9001982Z · ╰── `rotation` cannot be modified 2026-10-23T23:34:17.9002108Z 175 │ duration: THREAD_DISCLOSURE_TRANSITION_MS, 2026-10-23T23:34:17.9002180Z ╰──── 2026-10-23T23:34:17.9002600Z  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-23T23:34:17.9003067Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T23:34:17.9003073Z 2026-10-23T23:34:17.9003307Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T23:34:17.9003491Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:1246:23] 2026-10-23T23:34:17.9003586Z 1245 │ { 2026-10-23T23:34:17.9005521Z 111 │ separationProgress.value = withTiming(props.showScrollToEnd ? 1 : 0, CONTROL_TIMING); 2026-10-23T23:34:17.9005636Z ·  ─────────┬──────── 2026-10-23T23:34:17.9005820Z · ╰── `separationProgress` cannot be modified 2026-10-23T23:34:17.9005961Z 112 │ }, [props.showScrollToEnd, separationProgress]); 2026-10-23T23:34:17.9006027Z ╰──── 2026-10-23T23:34:17.9006346Z  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-23T23:34:17.9006706Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T23:34:17.9006708Z 2026-10-23T23:34:17.9006887Z ⚠ react(immutability): This value cannot be modified 2026-10-23T23:34:17.9007085Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5] 2026-10-23T23:34:17.9007329Z 128 │ // and repeatedly retargets the animation as it grows. 2026-10-23T23:34:17.9007559Z 129 │ const capsuleWidth = useSharedValue(null); 2026-10-23T23:34:17.9007665Z ·  ──────┬───── 2026-10-23T23:34:17.9007840Z · ╰── `capsuleWidth` originates here 2026-10-23T23:34:17.9007979Z 130 │ const measuredWidthRef = useRef(null); 2026-10-23T23:34:17.9008123Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-23T23:34:17.9008275Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-23T23:34:17.9008436Z 133 │ if (width === measuredWidthRef.current) { 2026-10-23T23:34:17.9008511Z 134 │ return; 2026-10-23T23:34:17.9008577Z 135 │ } 2026-10-23T23:34:17.9008698Z 136 │ const first = measuredWidthRef.current === null; 2026-10-23T23:34:17.9008808Z 137 │ measuredWidthRef.current = width; 2026-10-23T23:34:17.9008980Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-23T23:34:17.9009072Z ·  ──────┬───── 2026-10-23T23:34:17.9009236Z · ╰── `capsuleWidth` cannot be modified 2026-10-23T23:34:17.9009305Z 139 │ }; 2026-10-23T23:34:17.9009369Z ╰──── 2026-10-23T23:34:17.9009677Z  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-23T23:34:17.9010025Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T23:34:17.9010028Z 2026-10-23T23:34:17.9010209Z ⚠ react(immutability): This value cannot be modified 2026-10-23T23:34:17.9010467Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7] 2026-10-23T23:34:17.9010614Z 128 │ // and repeatedly retargets the animation as it grows. 2026-10-23T23:34:17.9010753Z 129 │ const capsuleWidth = useSharedValue(null); 2026-10-23T23:34:17.9010844Z ·  ──────┬───── 2026-10-23T23:34:17.9011006Z · ╰── `capsuleWidth` originates here 2026-10-23T23:34:17.9011137Z 130 │ const measuredWidthRef = useRef(null); 2026-10-23T23:34:17.9011271Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-23T23:34:17.9011393Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-23T23:34:17.9011510Z 133 │ if (width === measuredWidthRef.current) { 2026-10-23T23:34:17.9011590Z 134 │ return; 2026-10-23T23:34:17.9011653Z 135 │ } 2026-10-23T23:34:17.9011787Z 136 │ const first = measuredWidthRef.current === null; 2026-10-23T23:34:17.9011898Z 137 │ measuredWidthRef.current = width; 2026-10-23T23:34:17.9012078Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-23T23:34:17.9012152Z 139 │ }; 2026-10-23T23:34:17.9012277Z 140 │ const hasStatus = props.status !== null; 2026-10-23T23:34:17.9012451Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-23T23:34:17.9012538Z 142 │ useEffect(() => { 2026-10-23T23:34:17.9012614Z 143 │ if (!hasStatus) { 2026-10-23T23:34:17.9012731Z 144 │ measuredWidthRef.current = null; 2026-10-23T23:34:17.9012837Z 145 │ capsuleWidth.value = null; 2026-10-23T23:34:17.9012945Z ·  ──────┬───── 2026-10-23T23:34:17.9013252Z · ╰── `capsuleWidth` cannot be modified 2026-10-23T23:34:17.9013410Z 146 │ } 2026-10-23T23:34:17.9013492Z ╰──── 2026-10-23T23:34:17.9013877Z  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-23T23:34:17.9014229Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T23:34:17.9014243Z 2026-10-23T23:34:17.9014556Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-23T23:34:17.9014752Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7] 2026-10-23T23:34:17.9014913Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-23T23:34:17.9014994Z 142 │ useEffect(() => { 2026-10-23T23:34:17.9015088Z ·  ───┬─── 2026-10-23T23:34:17.9015351Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-23T23:34:17.9015432Z 143 │ if (!hasStatus) { 2026-10-23T23:34:17.9015539Z 144 │ measuredWidthRef.current = null; 2026-10-23T23:34:17.9015630Z 145 │ capsuleWidth.value = null; 2026-10-23T23:34:17.9015724Z ·  ──────┬───── 2026-10-23T23:34:17.9015885Z · ╰── This modifies `capsuleWidth` 2026-10-23T23:34:17.9015962Z 146 │ } 2026-10-23T23:34:17.9016021Z ╰──── 2026-10-23T23:34:17.9016422Z  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-23T23:34:17.9016784Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T23:34:17.9016790Z 2026-10-23T23:34:17.9017024Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-23T23:34:17.9017211Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5] 2026-10-23T23:34:17.9017346Z 130 │ const measuredWidthRef = useRef(null); 2026-10-23T23:34:17.9017484Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-23T23:34:17.9017628Z ·  ───────────────┬─────────────── 2026-10-23T23:34:17.9017905Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-23T23:34:17.9018040Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-23T23:34:17.9018156Z 133 │ if (width === measuredWidthRef.current) { 2026-10-23T23:34:17.9018231Z 134 │ return; 2026-10-23T23:34:17.9018292Z 135 │ } 2026-10-23T23:34:17.9018416Z 136 │ const first = measuredWidthRef.current === null; 2026-10-23T23:34:17.9018516Z 137 │ measuredWidthRef.current = width; 2026-10-23T23:34:17.9018685Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-23T23:34:17.9018771Z ·  ──────┬───── 2026-10-23T23:34:17.9018930Z · ╰── This modifies `capsuleWidth` 2026-10-23T23:34:17.9018996Z 139 │ }; 2026-10-23T23:34:17.9019062Z ╰──── 2026-10-23T23:34:17.9019523Z  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-23T23:34:17.9019978Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T23:34:17.9019983Z 2026-10-23T23:34:17.9020168Z ⚠ react(immutability): This value cannot be modified 2026-10-23T23:34:17.9020429Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-23T23:34:17.9020525Z  86 │ 2026-10-23T23:34:17.9020691Z  87 │ const cardCoverage = props.cardCoverage; 2026-10-23T23:34:17.9020793Z ·  ──────┬───── 2026-10-23T23:34:17.9020957Z · ╰── `cardCoverage` originates here 2026-10-23T23:34:17.9021055Z  88 │ const barHeightRef = useRef(0); 2026-10-23T23:34:17.9021151Z  89 │ const cardHeightRef = useRef(0); 2026-10-23T23:34:17.9021256Z  90 │ const cardHeight = useSharedValue(0); 2026-10-23T23:34:17.9021365Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-23T23:34:17.9021447Z  92 │ if (!cardCoverage) { 2026-10-23T23:34:17.9021654Z  93 │ return; 2026-10-23T23:34:17.9021762Z  94 │ } 2026-10-23T23:34:17.9021990Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-23T23:34:17.9022088Z  96 │ if (coverage === cardCoverage.value) { 2026-10-23T23:34:17.9022164Z  97 │ return; 2026-10-23T23:34:17.9022231Z  98 │ } 2026-10-23T23:34:17.9022329Z  99 │ if (cardCoverage.value === 0) { 2026-10-23T23:34:17.9022422Z 100 │ cardCoverage.value = coverage; 2026-10-23T23:34:17.9022518Z ·  ──────┬───── 2026-10-23T23:34:17.9022693Z · ╰── `cardCoverage` cannot be modified 2026-10-23T23:34:17.9022768Z 101 │ return; 2026-10-23T23:34:17.9022827Z ╰──── 2026-10-23T23:34:17.9023173Z  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-23T23:34:17.9023527Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T23:34:17.9023530Z 2026-10-23T23:34:17.9023715Z ⚠ react(immutability): This value cannot be modified 2026-10-23T23:34:17.9023897Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7] 2026-10-23T23:34:17.9023988Z  89 │ const cardHeightRef = useRef(0); 2026-10-23T23:34:17.9024097Z  90 │ const cardHeight = useSharedValue(0); 2026-10-23T23:34:17.9024189Z ·  ─────┬──── 2026-10-23T23:34:17.9024351Z · ╰── `cardHeight` originates here 2026-10-23T23:34:17.9024454Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-23T23:34:17.9024536Z  92 │ if (!cardCoverage) { 2026-10-23T23:34:17.9024613Z  93 │ return; 2026-10-23T23:34:17.9024673Z  94 │ } 2026-10-23T23:34:17.9024845Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-23T23:34:17.9024951Z  96 │ if (coverage === cardCoverage.value) { 2026-10-23T23:34:17.9025021Z  97 │ return; 2026-10-23T23:34:17.9025081Z  98 │ } 2026-10-23T23:34:17.9025179Z  99 │ if (cardCoverage.value === 0) { 2026-10-23T23:34:17.9025273Z 100 │ cardCoverage.value = coverage; 2026-10-23T23:34:17.9025474Z 101 │ return; 2026-10-23T23:34:17.9025644Z 102 │ } 2026-10-23T23:34:17.9025811Z 103 │ cardCoverage.value = withTiming(coverage, { 2026-10-23T23:34:17.9025928Z 104 │ duration: USER_INPUT_TOGGLE_DURATION_MS, 2026-10-23T23:34:17.9026030Z 105 │ easing: Easing.out(Easing.cubic), 2026-10-23T23:34:17.9026096Z 106 │ }); 2026-10-23T23:34:17.9026177Z 107 │ }, [cardCoverage]); 2026-10-23T23:34:17.9026277Z 108 │ const handleBarLayout = useCallback( 2026-10-23T23:34:17.9026378Z 109 │ (event: LayoutChangeEvent) => { 2026-10-23T23:34:17.9026597Z 110 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-23T23:34:17.9026681Z 111 │ notifyCoverage(); 2026-10-23T23:34:17.9026750Z 112 │ }, 2026-10-23T23:34:17.9026831Z 113 │ [notifyCoverage], 2026-10-23T23:34:17.9026896Z 114 │ ); 2026-10-23T23:34:17.9027006Z 115 │ const handleCardLayout = useCallback( 2026-10-23T23:34:17.9027103Z 116 │ (event: LayoutChangeEvent) => { 2026-10-23T23:34:17.9027249Z 117 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-23T23:34:17.9027383Z 118 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-23T23:34:17.9027475Z ·  ─────┬──── 2026-10-23T23:34:17.9027642Z · ╰── `cardHeight` cannot be modified 2026-10-23T23:34:17.9027720Z 119 │ notifyCoverage(); 2026-10-23T23:34:17.9027788Z ╰──── 2026-10-23T23:34:17.9028095Z  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-23T23:34:17.9028446Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T23:34:17.9028456Z 2026-10-23T23:34:17.9028690Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-23T23:34:17.9028867Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-23T23:34:17.9028969Z  90 │ const cardHeight = useSharedValue(0); 2026-10-23T23:34:17.9029080Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-23T23:34:17.9029203Z ·  ───┬─── 2026-10-23T23:34:17.9029481Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-23T23:34:17.9029563Z  92 │ if (!cardCoverage) { 2026-10-23T23:34:17.9029632Z  93 │ return; 2026-10-23T23:34:17.9029695Z  94 │ } 2026-10-23T23:34:17.9029874Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-23T23:34:17.9029982Z  96 │ if (coverage === cardCoverage.value) { 2026-10-23T23:34:17.9030054Z  97 │ return; 2026-10-23T23:34:17.9030123Z  98 │ } 2026-10-23T23:34:17.9030218Z  99 │ if (cardCoverage.value === 0) { 2026-10-23T23:34:17.9030315Z 100 │ cardCoverage.value = coverage; 2026-10-23T23:34:17.9030480Z ·  ──────┬───── 2026-10-23T23:34:17.9030653Z · ╰── This modifies `cardCoverage` 2026-10-23T23:34:17.9030722Z 101 │ return; 2026-10-23T23:34:17.9030788Z ╰──── 2026-10-23T23:34:17.9031184Z  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-23T23:34:17.9031653Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T23:34:17.9031718Z 2026-10-23T23:34:17.9032004Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-23T23:34:17.9032192Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-23T23:34:17.9032290Z  99 │ if (cardCoverage.value === 0) { 2026-10-23T23:34:17.9032389Z 100 │ cardCoverage.value = coverage; 2026-10-23T23:34:17.9032479Z ·  ──────┬───── 2026-10-23T23:34:17.9032663Z · ╰── This modifies `cardCoverage` 2026-10-23T23:34:17.9032781Z 101 │ return; 2026-10-23T23:34:17.9032857Z 102 │ } 2026-10-23T23:34:17.9032975Z 103 │ cardCoverage.value = withTiming(coverage, { 2026-10-23T23:34:17.9033098Z 104 │ duration: USER_INPUT_TOGGLE_DURATION_MS, 2026-10-23T23:34:17.9033204Z 105 │ easing: Easing.out(Easing.cubic), 2026-10-23T23:34:17.9033277Z 106 │ }); 2026-10-23T23:34:17.9033352Z 107 │ }, [cardCoverage]); 2026-10-23T23:34:17.9033456Z 108 │ const handleBarLayout = useCallback( 2026-10-23T23:34:17.9033553Z 109 │ (event: LayoutChangeEvent) => { 2026-10-23T23:34:17.9033681Z ·  ───────────────┬─────────────── 2026-10-23T23:34:17.9033942Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-23T23:34:17.9034094Z 110 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-23T23:34:17.9034162Z ╰──── 2026-10-23T23:34:17.9034562Z  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-23T23:34:17.9034916Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T23:34:17.9034922Z 2026-10-23T23:34:17.9035152Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-23T23:34:17.9035333Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7] 2026-10-23T23:34:17.9035436Z 115 │ const handleCardLayout = useCallback( 2026-10-23T23:34:17.9035531Z 116 │ (event: LayoutChangeEvent) => { 2026-10-23T23:34:17.9035650Z ·  ───────────────┬─────────────── 2026-10-23T23:34:17.9035993Z · ╰── This function may (indirectly) reassign or modify `cardHeight` after render 2026-10-23T23:34:17.9036200Z 117 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-23T23:34:17.9036368Z 118 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-23T23:34:17.9036458Z ·  ─────┬──── 2026-10-23T23:34:17.9036630Z · ╰── This modifies `cardHeight` 2026-10-23T23:34:17.9036723Z 119 │ notifyCoverage(); 2026-10-23T23:34:17.9036797Z ╰──── 2026-10-23T23:34:17.9037278Z  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-23T23:34:17.9037637Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T23:34:17.9037640Z 2026-10-23T23:34:17.9037904Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-23T23:34:17.9038036Z ╭─[apps/mobile/src/Stack.tsx:1068:21] 2026-10-23T23:34:17.9038112Z 1067 │ } 2026-10-23T23:34:17.9038448Z ·  ───────────────────────────────────────────── 2026-10-23T23:34:17.9038536Z 1069 │ screenListeners={{ 2026-10-23T23:34:17.9038596Z ╰──── 2026-10-23T23:34:17.9039032Z  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-23T23:34:17.9039036Z 2026-10-23T23:34:17.9039293Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-23T23:34:17.9039475Z ╭─[packages/client-runtime/src/state/usageAccess.ts:3:8] 2026-10-23T23:34:17.9039564Z 2 │ AuthDiagnosticsReadScope, 2026-10-23T23:34:17.9039648Z 3 │ type AuthSessionState, 2026-10-23T23:34:17.9039750Z ·  ────────┬─────── 2026-10-23T23:34:17.9039930Z · ╰── 'AuthSessionState' is imported here 2026-10-23T23:34:17.9040023Z 4 │ sessionGrantsScope, 2026-10-23T23:34:17.9040088Z ╰──── 2026-10-23T23:34:17.9040226Z  help: Consider removing this import. 2026-10-23T23:34:17.9040230Z 2026-10-23T23:34:17.9040615Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T23:34:17.9040818Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5] 2026-10-23T23:34:17.9040898Z 259 │ .join("|"); 2026-10-23T23:34:17.9040987Z 260 │ useEffect(() => { 2026-10-23T23:34:17.9041083Z ·  ────┬──── 2026-10-23T23:34:17.9041240Z · ╰── This is the containing effect 2026-10-23T23:34:17.9041313Z 261 │ stop(); 2026-10-23T23:34:17.9041400Z ·  ──┬─ 2026-10-23T23:34:17.9041608Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T23:34:17.9041688Z 262 │ }, [orderVersion]); 2026-10-23T23:34:17.9041748Z ╰──── 2026-10-23T23:34:17.9042549Z  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-23T23:34:17.9043048Z  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-23T23:34:17.9043052Z 2026-10-23T23:34:17.9043321Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-23T23:34:17.9043523Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5] 2026-10-23T23:34:17.9043644Z 260 │ useEffect(() => { 2026-10-23T23:34:17.9043741Z 261 │ stop(); 2026-10-23T23:34:17.9043832Z ·  ──┬─ 2026-10-23T23:34:17.9043987Z · ╰── Missing dependency `stop` 2026-10-23T23:34:17.9044065Z 262 │ }, [orderVersion]); 2026-10-23T23:34:17.9044176Z ·  ──────┬───── 2026-10-23T23:34:17.9044363Z · ╰── Unnecessary dependency `orderVersion` 2026-10-23T23:34:17.9044443Z 263 │ useEffect( 2026-10-23T23:34:17.9044502Z ╰──── 2026-10-23T23:34:17.9045003Z  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-23T23:34:17.9045369Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.9045372Z 2026-10-23T23:34:17.9045548Z ⚠ react(refs): Cannot access refs during render 2026-10-23T23:34:17.9045740Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:96:9] 2026-10-23T23:34:17.9045836Z 95 │ const latest = useRef(props); 2026-10-23T23:34:17.9045923Z 96 │ latest.current = props; 2026-10-23T23:34:17.9046056Z ·  ───┬──────┬─── 2026-10-23T23:34:17.9046279Z · │ ╰── Cannot update ref value during render 2026-10-23T23:34:17.9046415Z · ╰── This value is a ref 2026-10-23T23:34:17.9046501Z 97 │ const gesture = useMemo( 2026-10-23T23:34:17.9046567Z ╰──── 2026-10-23T23:34:17.9047123Z  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-23T23:34:17.9047473Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T23:34:17.9047479Z 2026-10-23T23:34:17.9047653Z ⚠ react(refs): Cannot access refs during render 2026-10-23T23:34:17.9047843Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:104:18] 2026-10-23T23:34:17.9047924Z 103 │ .runOnJS(true) 2026-10-23T23:34:17.9048039Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-23T23:34:17.9048184Z ·  ───────────────┬────────────── 2026-10-23T23:34:17.9048424Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T23:34:17.9048589Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-23T23:34:17.9049111Z ╰──── 2026-10-23T23:34:17.9049828Z  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-23T23:34:17.9050190Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T23:34:17.9050193Z 2026-10-23T23:34:17.9050405Z ⚠ react(refs): Cannot access refs during render 2026-10-23T23:34:17.9050602Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:105:19] 2026-10-23T23:34:17.9050715Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-23T23:34:17.9050878Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-23T23:34:17.9051061Z ·  ──────────────────────────┬───────────────────────── 2026-10-23T23:34:17.9051315Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T23:34:17.9051468Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-23T23:34:17.9051527Z ╰──── 2026-10-23T23:34:17.9052078Z  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-23T23:34:17.9052424Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T23:34:17.9052433Z 2026-10-23T23:34:17.9052612Z ⚠ react(refs): Cannot access refs during render 2026-10-23T23:34:17.9052804Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:106:16] 2026-10-23T23:34:17.9052952Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-23T23:34:17.9053100Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-23T23:34:17.9053272Z ·  ──────────────────────────┬───────────────────────── 2026-10-23T23:34:17.9053515Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T23:34:17.9053661Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-23T23:34:17.9053730Z ╰──── 2026-10-23T23:34:17.9054278Z  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-23T23:34:17.9054617Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T23:34:17.9054620Z 2026-10-23T23:34:17.9054793Z ⚠ react(refs): Cannot access refs during render 2026-10-23T23:34:17.9054977Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:107:21] 2026-10-23T23:34:17.9055128Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-23T23:34:17.9055274Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-23T23:34:17.9055525Z ·  ───────────────────────┬────────────────────── 2026-10-23T23:34:17.9055880Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T23:34:17.9055967Z 108 │ [props.disabled], 2026-10-23T23:34:17.9056029Z ╰──── 2026-10-23T23:34:17.9056649Z  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-23T23:34:17.9056989Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T23:34:17.9056995Z 2026-10-23T23:34:17.9057170Z ⚠ react(refs): Cannot access refs during render 2026-10-23T23:34:17.9057364Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:249:9] 2026-10-23T23:34:17.9057500Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-23T23:34:17.9057625Z 249 │ latest.current = { rows, planners, moveThread }; 2026-10-23T23:34:17.9057743Z ·  ───┬──────┬─── 2026-10-23T23:34:17.9057953Z · │ ╰── Cannot update ref value during render 2026-10-23T23:34:17.9058090Z · ╰── This value is a ref 2026-10-23T23:34:17.9058155Z 250 │ 2026-10-23T23:34:17.9058218Z ╰──── 2026-10-23T23:34:17.9058770Z  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-23T23:34:17.9059107Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T23:34:17.9059109Z 2026-10-23T23:34:17.9059275Z ⚠ react(refs): Cannot access refs during render 2026-10-23T23:34:17.9059460Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:247:22] 2026-10-23T23:34:17.9059595Z 246 │ const [preview, setPreview] = useState(null); 2026-10-23T23:34:17.9059730Z 247 │ const translateY = useRef(new Animated.Value(0)).current; 2026-10-23T23:34:17.9059876Z ·  ──────────────────┬────────────────── 2026-10-23T23:34:17.9060149Z · ╰── Cannot access ref value during render 2026-10-23T23:34:17.9060453Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-23T23:34:17.9060531Z ╰──── 2026-10-23T23:34:17.9061129Z  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-23T23:34:17.9061601Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T23:34:17.9061606Z 2026-10-23T23:34:17.9061868Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T23:34:17.9062058Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:324:16] 2026-10-23T23:34:17.9062148Z 323 │ update(0); 2026-10-23T23:34:17.9062248Z 324 │ let last = performance.now(); 2026-10-23T23:34:17.9062358Z ·  ────────┬──────── 2026-10-23T23:34:17.9062524Z · ╰── Cannot call impure function 2026-10-23T23:34:17.9062606Z 325 │ const tick = () => { 2026-10-23T23:34:17.9062668Z ╰──── 2026-10-23T23:34:17.9063014Z  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-23T23:34:17.9063361Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T23:34:17.9063364Z 2026-10-23T23:34:17.9063597Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-23T23:34:17.9063785Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:99:15] 2026-10-23T23:34:17.9063855Z  98 │ () => 2026-10-23T23:34:17.9063933Z  99 │ Gesture.Pan() 2026-10-23T23:34:17.9064024Z ·  ─┬─ 2026-10-23T23:34:17.9064185Z · ╰── `Pan` may be a component 2026-10-23T23:34:17.9064283Z 100 │ .enabled(!props.disabled) 2026-10-23T23:34:17.9064340Z ╰──── 2026-10-23T23:34:17.9064661Z  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-23T23:34:17.9065179Z  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-23T23:34:17.9065185Z 2026-10-23T23:34:17.9065407Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-23T23:34:17.9065592Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:108:5] 2026-10-23T23:34:17.9065666Z 103 │ .runOnJS(true) 2026-10-23T23:34:17.9065784Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-23T23:34:17.9065888Z ·  ───┬── 2026-10-23T23:34:17.9066388Z · ╰── 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-23T23:34:17.9066665Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-23T23:34:17.9066954Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-23T23:34:17.9067119Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-23T23:34:17.9067204Z 108 │ [props.disabled], 2026-10-23T23:34:17.9067298Z ·  ────────┬─────── 2026-10-23T23:34:17.9067530Z · ╰── This dependency list is missing values used by the callback 2026-10-23T23:34:17.9067612Z 109 │ ); 2026-10-23T23:34:17.9067721Z ╰──── 2026-10-23T23:34:17.9067981Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-23T23:34:17.9068352Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.9068355Z 2026-10-23T23:34:17.9068668Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T23:34:17.9068851Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:512:5] 2026-10-23T23:34:17.9068923Z 510 │ }, []); 2026-10-23T23:34:17.9068999Z 511 │ useEffect(() => { 2026-10-23T23:34:17.9069088Z ·  ────┬──── 2026-10-23T23:34:17.9069243Z · ╰── This is the containing effect 2026-10-23T23:34:17.9069347Z 512 │ setKeyboardStateSuspect(false); 2026-10-23T23:34:17.9069453Z ·  ───────────┬─────────── 2026-10-23T23:34:17.9069660Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T23:34:17.9069785Z 513 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-23T23:34:17.9069854Z ╰──── 2026-10-23T23:34:17.9070613Z  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-23T23:34:17.9070992Z  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-23T23:34:17.9070996Z 2026-10-23T23:34:17.9071307Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T23:34:17.9071485Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:872:7] 2026-10-23T23:34:17.9071674Z 869 │ const [lastKnownKeyboardHeight, setLastKnownKeyboardHeight] = useState(0); 2026-10-23T23:34:17.9071751Z 870 │ useEffect(() => { 2026-10-23T23:34:17.9071841Z ·  ────┬──── 2026-10-23T23:34:17.9071993Z · ╰── This is the containing effect 2026-10-23T23:34:17.9072186Z 871 │ if (liveKeyboardHeight > 0 && liveKeyboardHeight !== lastKnownKeyboardHeight) { 2026-10-23T23:34:17.9072321Z 872 │ setLastKnownKeyboardHeight(liveKeyboardHeight); 2026-10-23T23:34:17.9072443Z ·  ─────────────┬──────────── 2026-10-23T23:34:17.9072659Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T23:34:17.9072728Z 873 │ } 2026-10-23T23:34:17.9072789Z ╰──── 2026-10-23T23:34:17.9073603Z  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-23T23:34:17.9074071Z  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-23T23:34:17.9074076Z 2026-10-23T23:34:17.9074384Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T23:34:17.9074589Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1119:5] 2026-10-23T23:34:17.9074692Z 1117 │ 2026-10-23T23:34:17.9074807Z 1118 │ useEffect(() => { 2026-10-23T23:34:17.9074902Z ·  ────┬──── 2026-10-23T23:34:17.9075068Z · ╰── This is the containing effect 2026-10-23T23:34:17.9075162Z 1119 │ setAnchorMessageId(null); 2026-10-23T23:34:17.9075265Z ·  ─────────┬──────── 2026-10-23T23:34:17.9075473Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T23:34:17.9075573Z 1120 │ setSubmittedMessageId(null); 2026-10-23T23:34:17.9075631Z ╰──── 2026-10-23T23:34:17.9076324Z  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-23T23:34:17.9076711Z  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-23T23:34:17.9076716Z 2026-10-23T23:34:17.9076956Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T23:34:17.9077134Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:513:7] 2026-10-23T23:34:17.9077232Z 512 │ setKeyboardStateSuspect(false); 2026-10-23T23:34:17.9077354Z 513 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-23T23:34:17.9077523Z ·  ────────┬──────── ─────────┬──────── 2026-10-23T23:34:17.9077769Z · │ ╰── Unnecessary dependency `liveKeyboardHeight` 2026-10-23T23:34:17.9077959Z · ╰── Unnecessary dependency `isKeyboardVisible` 2026-10-23T23:34:17.9078117Z 514 │ const handleOwnedInputFocusChange = (focused: boolean) => { 2026-10-23T23:34:17.9078180Z ╰──── 2026-10-23T23:34:17.9078527Z  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-23T23:34:17.9078886Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.9078889Z 2026-10-23T23:34:17.9079128Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T23:34:17.9079315Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1067:7] 2026-10-23T23:34:17.9079420Z 1066 │ userInputInsetProgress.set(1); 2026-10-23T23:34:17.9079690Z 1067 │ }, [activeUserInputRequestId, userInputCardProgress, userInputInsetProgress]); 2026-10-23T23:34:17.9079890Z ·  ────────────┬─────────── 2026-10-23T23:34:17.9080107Z · ╰── Unnecessary dependency `activeUserInputRequestId` 2026-10-23T23:34:17.9080240Z 1068 │ const showContent = props.showContent ?? true; 2026-10-23T23:34:17.9080313Z ╰──── 2026-10-23T23:34:17.9080791Z  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-23T23:34:17.9081161Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.9081165Z 2026-10-23T23:34:17.9081410Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T23:34:17.9081609Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1125:15] 2026-10-23T23:34:17.9081691Z 1124 │ freeze.set(false); 2026-10-23T23:34:17.9081793Z 1125 │ }, [freeze, selectedThreadKey]); 2026-10-23T23:34:17.9081904Z ·  ────────┬──────── 2026-10-23T23:34:17.9082103Z · ╰── Unnecessary dependency `selectedThreadKey` 2026-10-23T23:34:17.9082163Z 1126 │ 2026-10-23T23:34:17.9082228Z ╰──── 2026-10-23T23:34:17.9082568Z  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-23T23:34:17.9082940Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.9082948Z 2026-10-23T23:34:17.9083133Z ⚠ react(immutability): This value cannot be modified 2026-10-23T23:34:17.9083307Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:955:5] 2026-10-23T23:34:17.9083443Z 950 │ const composerPopoverHeight = useSharedValue(0); 2026-10-23T23:34:17.9083569Z 951 │ const floatingControlCoverage = useSharedValue( 2026-10-23T23:34:17.9083686Z ·  ───────────┬─────────── 2026-10-23T23:34:17.9083874Z · ╰── `floatingControlCoverage` originates here 2026-10-23T23:34:17.9084024Z 952 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-23T23:34:17.9084092Z 953 │ ); 2026-10-23T23:34:17.9084177Z 954 │ useEffect(() => { 2026-10-23T23:34:17.9084302Z 955 │ floatingControlCoverage.value = withTiming( 2026-10-23T23:34:17.9084417Z ·  ───────────┬─────────── 2026-10-23T23:34:17.9084612Z · ╰── `floatingControlCoverage` cannot be modified 2026-10-23T23:34:17.9084760Z 956 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-23T23:34:17.9084819Z ╰──── 2026-10-23T23:34:17.9085130Z  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-23T23:34:17.9085492Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T23:34:17.9085495Z 2026-10-23T23:34:17.9085691Z ⚠ react(immutability): This value cannot be modified 2026-10-23T23:34:17.9086014Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:973:7] 2026-10-23T23:34:17.9086370Z 963 │ const userInputCoverageApplies = Platform.OS === "ios" && activeUserInputRequestId !== null; 2026-10-23T23:34:17.9086532Z 964 │ const combinedContentInsetEndAdjustment = useSharedValue( 2026-10-23T23:34:17.9086682Z ·  ────────────────┬──────────────── 2026-10-23T23:34:17.9086915Z · ╰── `combinedContentInsetEndAdjustment` originates here 2026-10-23T23:34:17.9087130Z 965 │ Math.max(0, estimatedOverlayHeight - nativeInsetOvercount), 2026-10-23T23:34:17.9087201Z 966 │ ); 2026-10-23T23:34:17.9087286Z 967 │ useAnimatedReaction( 2026-10-23T23:34:17.9087354Z 968 │ () => 2026-10-23T23:34:17.9087468Z 969 │ contentInsetEndAdjustment.value + 2026-10-23T23:34:17.9087582Z 970 │ floatingControlCoverage.value + 2026-10-23T23:34:17.9087819Z 971 │ (userInputCoverageApplies ? userInputInsetProgress.value * userInputCardCoverage.value : 0), 2026-10-23T23:34:17.9087891Z 972 │ (value) => { 2026-10-23T23:34:17.9088035Z 973 │ combinedContentInsetEndAdjustment.value = value; 2026-10-23T23:34:17.9088168Z ·  ────────────────┬──────────────── 2026-10-23T23:34:17.9088398Z · ╰── `combinedContentInsetEndAdjustment` cannot be modified 2026-10-23T23:34:17.9088463Z 974 │ }, 2026-10-23T23:34:17.9088531Z ╰──── 2026-10-23T23:34:17.9088844Z  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-23T23:34:17.9089213Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T23:34:17.9089220Z 2026-10-23T23:34:17.9089482Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-23T23:34:17.9089639Z ╭─[apps/web/src/lib/composerContextReferences.ts:90:40] 2026-10-23T23:34:17.9089731Z 89 │ let cursor = prompt.length; 2026-10-23T23:34:17.9089857Z 90 │ for (const occurrence of occurrences.reverse()) { 2026-10-23T23:34:17.9089984Z ·  ─────── 2026-10-23T23:34:17.9090078Z 91 │ let { start, end } = occurrence; 2026-10-23T23:34:17.9090148Z ╰──── 2026-10-23T23:34:17.9090503Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-23T23:34:17.9090509Z 2026-10-23T23:34:17.9090907Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T23:34:17.9091187Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:57:5] 2026-10-23T23:34:17.9091254Z 55 │ 2026-10-23T23:34:17.9091334Z 56 │ useEffect(() => { 2026-10-23T23:34:17.9091424Z ·  ────┬──── 2026-10-23T23:34:17.9091574Z · ╰── This is the containing effect 2026-10-23T23:34:17.9091661Z 57 │ setDecodedSize(null); 2026-10-23T23:34:17.9091770Z ·  ───────┬────── 2026-10-23T23:34:17.9092042Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T23:34:17.9092122Z 58 │ }, [props.sourceKey]); 2026-10-23T23:34:17.9092186Z ╰──── 2026-10-23T23:34:17.9092900Z  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-23T23:34:17.9093280Z  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-23T23:34:17.9093284Z 2026-10-23T23:34:17.9093588Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T23:34:17.9093766Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:61:5] 2026-10-23T23:34:17.9093832Z 59 │ 2026-10-23T23:34:17.9093910Z 60 │ useEffect(() => { 2026-10-23T23:34:17.9093996Z ·  ────┬──── 2026-10-23T23:34:17.9094146Z · ╰── This is the containing effect 2026-10-23T23:34:17.9094228Z 61 │ setFailedUri(null); 2026-10-23T23:34:17.9094320Z ·  ──────┬───── 2026-10-23T23:34:17.9094517Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T23:34:17.9094594Z 62 │ }, [props.uri]); 2026-10-23T23:34:17.9094654Z ╰──── 2026-10-23T23:34:17.9095366Z  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-23T23:34:17.9095755Z  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-23T23:34:17.9095760Z 2026-10-23T23:34:17.9096021Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-23T23:34:17.9096278Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:7:10] 2026-10-23T23:34:17.9096485Z 6 │ import { parse, SvgAst, type JsxAST } from "react-native-svg"; 2026-10-23T23:34:17.9096704Z 7 │ import { ActivityIndicator, Pressable, StyleSheet, View, type ViewStyle } from "react-native"; 2026-10-23T23:34:17.9096815Z ·  ────────┬──────── 2026-10-23T23:34:17.9097010Z · ╰── 'ActivityIndicator' is imported here 2026-10-23T23:34:17.9097076Z 8 │ 2026-10-23T23:34:17.9097142Z ╰──── 2026-10-23T23:34:17.9097383Z  help: Consider removing this import. 2026-10-23T23:34:17.9097439Z 2026-10-23T23:34:17.9097757Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T23:34:17.9097952Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:58:7] 2026-10-23T23:34:17.9098037Z 57 │ setDecodedSize(null); 2026-10-23T23:34:17.9098127Z 58 │ }, [props.sourceKey]); 2026-10-23T23:34:17.9098224Z ·  ───────┬─────── 2026-10-23T23:34:17.9098492Z · ╰── Unnecessary dependency `props.sourceKey` 2026-10-23T23:34:17.9098564Z 59 │ 2026-10-23T23:34:17.9098633Z ╰──── 2026-10-23T23:34:17.9098979Z  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-23T23:34:17.9099369Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.9099376Z 2026-10-23T23:34:17.9099630Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T23:34:17.9099813Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:62:7] 2026-10-23T23:34:17.9099903Z 61 │ setFailedUri(null); 2026-10-23T23:34:17.9099979Z 62 │ }, [props.uri]); 2026-10-23T23:34:17.9100074Z ·  ────┬──── 2026-10-23T23:34:17.9100241Z · ╰── Unnecessary dependency `props.uri` 2026-10-23T23:34:17.9100310Z 63 │ 2026-10-23T23:34:17.9100463Z ╰──── 2026-10-23T23:34:17.9100825Z  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-23T23:34:17.9101200Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.9101203Z 2026-10-23T23:34:17.9101435Z ⚠ eslint(no-unused-vars): Identifier 'Arr' is imported but never used. 2026-10-23T23:34:17.9101700Z ╭─[packages/client-runtime/src/state/threadSort.ts:4:13] 2026-10-23T23:34:17.9101846Z 3 │ import type { EnvironmentThreadShell } from "./models.ts"; 2026-10-23T23:34:17.9101948Z 4 │ import * as Arr from "effect/Array"; 2026-10-23T23:34:17.9102036Z ·  ─┬─ 2026-10-23T23:34:17.9102180Z · ╰── 'Arr' is imported here 2026-10-23T23:34:17.9102292Z 5 │ import * as Order from "effect/Order"; 2026-10-23T23:34:17.9102361Z ╰──── 2026-10-23T23:34:17.9102477Z  help: Consider removing this import. 2026-10-23T23:34:17.9102481Z 2026-10-23T23:34:17.9102707Z ⚠ eslint(no-unused-vars): Identifier 'Order' is imported but never used. 2026-10-23T23:34:17.9102864Z ╭─[packages/client-runtime/src/state/threadSort.ts:5:13] 2026-10-23T23:34:17.9102961Z 4 │ import * as Arr from "effect/Array"; 2026-10-23T23:34:17.9103061Z 5 │ import * as Order from "effect/Order"; 2026-10-23T23:34:17.9103146Z ·  ──┬── 2026-10-23T23:34:17.9103302Z · ╰── 'Order' is imported here 2026-10-23T23:34:17.9103364Z 6 │ 2026-10-23T23:34:17.9103426Z ╰──── 2026-10-23T23:34:17.9103540Z  help: Consider removing this import. 2026-10-23T23:34:17.9103689Z 2026-10-23T23:34:17.9104071Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-23T23:34:17.9104281Z ╭─[apps/mobile/src/features/threads/NewTaskContextPickerScreens.tsx:249:7] 2026-10-23T23:34:17.9104378Z 248 │ mountedRef.current = false; 2026-10-23T23:34:17.9104467Z 249 │ flow.setBranchQuery(""); 2026-10-23T23:34:17.9104559Z ·  ──┬─ 2026-10-23T23:34:17.9104778Z · ╰── Missing dependency `flow` 2026-10-23T23:34:17.9104850Z 250 │ }; 2026-10-23T23:34:17.9104936Z 251 │ }, [flow.setBranchQuery]); 2026-10-23T23:34:17.9105050Z ·  ─────────┬───────── 2026-10-23T23:34:17.9105297Z · ╰── Overly precise dependency `flow.setBranchQuery`, use `flow` instead 2026-10-23T23:34:17.9105374Z 252 │ 2026-10-23T23:34:17.9105439Z ╰──── 2026-10-23T23:34:17.9105940Z  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-23T23:34:17.9106312Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.9106315Z 2026-10-23T23:34:17.9106586Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-23T23:34:17.9106753Z ╭─[apps/mobile/src/state/use-model-option-memory.ts:21:7] 2026-10-23T23:34:17.9106829Z 20 │ [instanceId]: { 2026-10-23T23:34:17.9106932Z 21 │ ...(state[instanceId] ?? {}), 2026-10-23T23:34:17.9107056Z ·  ──────────────────────────── 2026-10-23T23:34:17.9107137Z 22 │ [model]: options, 2026-10-23T23:34:17.9107197Z ╰──── 2026-10-23T23:34:17.9107516Z  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-23T23:34:17.9107521Z 2026-10-23T23:34:17.9107764Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-23T23:34:17.9107927Z ╭─[packages/client-runtime/src/state/filesystem.ts:3:8] 2026-10-23T23:34:17.9108010Z 2 │ AuthFilesystemReadScope, 2026-10-23T23:34:17.9108099Z 3 │ type AuthSessionState, 2026-10-23T23:34:17.9108201Z ·  ────────┬─────── 2026-10-23T23:34:17.9108390Z · ╰── 'AuthSessionState' is imported here 2026-10-23T23:34:17.9108481Z 4 │ type FilesystemBrowseEntry, 2026-10-23T23:34:17.9108549Z ╰──── 2026-10-23T23:34:17.9108666Z  help: Consider removing this import. 2026-10-23T23:34:17.9108669Z 2026-10-23T23:34:17.9109227Z ⚠ 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-23T23:34:17.9109409Z ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1228:7] 2026-10-23T23:34:17.9109524Z 1227 │ yield* harness.replaceSession; 2026-10-23T23:34:17.9109781Z 1228 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-23T23:34:17.9110065Z 1229 │ │ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) { 2026-10-23T23:34:17.9110267Z 1230 │ │ break; 2026-10-23T23:34:17.9110403Z 1231 │ │ } 2026-10-23T23:34:17.9110540Z 1232 │ │ yield* Effect.yieldNow; 2026-10-23T23:34:17.9110704Z 1233 │ ╰─▶ } 2026-10-23T23:34:17.9110795Z 1234 │ yield* Queue.offer( 2026-10-23T23:34:17.9110855Z ╰──── 2026-10-23T23:34:17.9110858Z 2026-10-23T23:34:17.9111495Z ⚠ 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-23T23:34:17.9111687Z ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1337:7] 2026-10-23T23:34:17.9111800Z 1336 │ yield* harness.replaceSession; 2026-10-23T23:34:17.9112041Z 1337 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-23T23:34:17.9112235Z 1338 │ │ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) break; 2026-10-23T23:34:17.9112363Z 1339 │ │ yield* Effect.yieldNow; 2026-10-23T23:34:17.9112523Z 1340 │ ╰─▶ } 2026-10-23T23:34:17.9112677Z 1341 │ expect(yield* Ref.get(harness.subscriptionCount)).toBe(2); 2026-10-23T23:34:17.9112743Z ╰──── 2026-10-23T23:34:17.9112746Z 2026-10-23T23:34:17.9112938Z ⚠ react(immutability): This value cannot be modified 2026-10-23T23:34:17.9113151Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:93:5] 2026-10-23T23:34:17.9113222Z 90 │ }) { 2026-10-23T23:34:17.9113355Z 91 │ const rotation = useSharedValue(props.hidden ? 1 : 0); 2026-10-23T23:34:17.9113450Z ·  ────┬─── 2026-10-23T23:34:17.9113613Z · ╰── `rotation` originates here 2026-10-23T23:34:17.9113701Z 92 │ useLayoutEffect(() => { 2026-10-23T23:34:17.9113866Z 93 │ rotation.value = withTiming(props.hidden ? 1 : 0, TOOLBAR_FLIP_TIMING); 2026-10-23T23:34:17.9113952Z ·  ────┬─── 2026-10-23T23:34:17.9114116Z · ╰── `rotation` cannot be modified 2026-10-23T23:34:17.9114213Z 94 │ }, [props.hidden, rotation]); 2026-10-23T23:34:17.9114275Z ╰──── 2026-10-23T23:34:17.9114604Z  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-23T23:34:17.9114976Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T23:34:17.9114979Z 2026-10-23T23:34:17.9115165Z ⚠ react(immutability): This value cannot be modified 2026-10-23T23:34:17.9115364Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:269:5] 2026-10-23T23:34:17.9115482Z 266 │ const variant = props.variant ?? "plain"; 2026-10-23T23:34:17.9115643Z 267 │ const loadingVisibility = useSharedValue(props.loading ? 1 : 0); 2026-10-23T23:34:17.9115748Z ·  ────────┬──────── 2026-10-23T23:34:17.9115919Z · ╰── `loadingVisibility` originates here 2026-10-23T23:34:17.9116097Z 268 │ useLayoutEffect(() => { 2026-10-23T23:34:17.9116384Z 269 │ loadingVisibility.value = withTiming(props.loading ? 1 : 0, DICTATION_TIMING); 2026-10-23T23:34:17.9116489Z ·  ────────┬──────── 2026-10-23T23:34:17.9116668Z · ╰── `loadingVisibility` cannot be modified 2026-10-23T23:34:17.9116780Z 270 │ }, [loadingVisibility, props.loading]); 2026-10-23T23:34:17.9116850Z ╰──── 2026-10-23T23:34:17.9117252Z  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-23T23:34:17.9117609Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T23:34:17.9117617Z 2026-10-23T23:34:17.9117864Z ⚠ react(immutability): This value cannot be modified 2026-10-23T23:34:17.9118127Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:328:5] 2026-10-23T23:34:17.9118193Z 325 │ }) { 2026-10-23T23:34:17.9118387Z 326 │ const recordingVisibility = useSharedValue(props.phase === "recording" ? 1 : 0); 2026-10-23T23:34:17.9118491Z ·  ─────────┬───────── 2026-10-23T23:34:17.9118673Z · ╰── `recordingVisibility` originates here 2026-10-23T23:34:17.9118763Z 327 │ useLayoutEffect(() => { 2026-10-23T23:34:17.9118987Z 328 │ recordingVisibility.value = withTiming(props.phase === "recording" ? 1 : 0, DICTATION_TIMING); 2026-10-23T23:34:17.9119089Z ·  ─────────┬───────── 2026-10-23T23:34:17.9119286Z · ╰── `recordingVisibility` cannot be modified 2026-10-23T23:34:17.9119397Z 329 │ }, [props.phase, recordingVisibility]); 2026-10-23T23:34:17.9119466Z ╰──── 2026-10-23T23:34:17.9119769Z  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-23T23:34:17.9120136Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T23:34:17.9120139Z 2026-10-23T23:34:17.9120336Z ⚠ react(immutability): This value cannot be modified 2026-10-23T23:34:17.9120591Z ╭─[apps/mobile/src/features/voice-input/GlobalVoiceInputControl.tsx:68:5] 2026-10-23T23:34:17.9120715Z 65 │ const [expanded, setExpanded] = useState(false); 2026-10-23T23:34:17.9120825Z 66 │ const progress = useSharedValue(0); 2026-10-23T23:34:17.9121006Z ·  ────┬─── 2026-10-23T23:34:17.9121269Z · ╰── `progress` originates here 2026-10-23T23:34:17.9121347Z 67 │ useEffect(() => { 2026-10-23T23:34:17.9121496Z 68 │ progress.value = withTiming(expanded ? 1 : 0, MORPH_TIMING); 2026-10-23T23:34:17.9121579Z ·  ────┬─── 2026-10-23T23:34:17.9121737Z · ╰── `progress` cannot be modified 2026-10-23T23:34:17.9121823Z 69 │ }, [expanded, progress]); 2026-10-23T23:34:17.9121926Z ╰──── 2026-10-23T23:34:17.9122270Z  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-23T23:34:17.9122632Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T23:34:17.9122638Z 2026-10-23T23:34:17.9122947Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T23:34:17.9123109Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2121:5] 2026-10-23T23:34:17.9123178Z 2119 │ ); 2026-10-23T23:34:17.9123260Z 2120 │ useEffect(() => { 2026-10-23T23:34:17.9123351Z ·  ────┬──── 2026-10-23T23:34:17.9123504Z · ╰── This is the containing effect 2026-10-23T23:34:17.9123600Z 2121 │ setExpandedVideo(null); 2026-10-23T23:34:17.9123702Z ·  ────────┬─────── 2026-10-23T23:34:17.9123909Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T23:34:17.9124001Z 2122 │ setExpandedFile(null); 2026-10-23T23:34:17.9124073Z ╰──── 2026-10-23T23:34:17.9124784Z  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-23T23:34:17.9125167Z  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-23T23:34:17.9125170Z 2026-10-23T23:34:17.9125444Z ⚠ eslint(no-unused-vars): Identifier 'isMarkdownFileLinkLabel' is imported but never used. 2026-10-23T23:34:17.9125601Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:62:10] 2026-10-23T23:34:17.9125774Z 61 │ import { resolveAssetUrl } from "@t3tools/client-runtime/state/assets"; 2026-10-23T23:34:17.9125946Z 62 │ import { isMarkdownFileLinkLabel } from "@t3tools/shared/markdownLinks"; 2026-10-23T23:34:17.9126070Z ·  ───────────┬─────────── 2026-10-23T23:34:17.9126269Z · ╰── 'isMarkdownFileLinkLabel' is imported here 2026-10-23T23:34:17.9126460Z 63 │ import { formatAttachmentSize } from "@t3tools/client-runtime/state/attachments"; 2026-10-23T23:34:17.9126530Z ╰──── 2026-10-23T23:34:17.9126656Z  help: Consider removing this import. 2026-10-23T23:34:17.9126659Z 2026-10-23T23:34:17.9126909Z ⚠ eslint(no-unused-vars): Identifier 'createContext' is imported but never used. 2026-10-23T23:34:17.9127072Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:88:3] 2026-10-23T23:34:17.9127241Z 87 │ import { 2026-10-23T23:34:17.9127400Z 88 │ createContext, 2026-10-23T23:34:17.9127504Z ·  ──────┬────── 2026-10-23T23:34:17.9127667Z · ╰── 'createContext' is imported here 2026-10-23T23:34:17.9127740Z 89 │ memo, 2026-10-23T23:34:17.9127803Z ╰──── 2026-10-23T23:34:17.9127916Z  help: Consider removing this import. 2026-10-23T23:34:17.9127919Z 2026-10-23T23:34:17.9128249Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-23T23:34:17.9128416Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:104:3] 2026-10-23T23:34:17.9128490Z 103 │ import { 2026-10-23T23:34:17.9128568Z 104 │ ActivityIndicator, 2026-10-23T23:34:17.9128670Z ·  ────────┬──────── 2026-10-23T23:34:17.9128848Z · ╰── 'ActivityIndicator' is imported here 2026-10-23T23:34:17.9128921Z 105 │ Image, 2026-10-23T23:34:17.9128980Z ╰──── 2026-10-23T23:34:17.9129100Z  help: Consider removing this import. 2026-10-23T23:34:17.9129105Z 2026-10-23T23:34:17.9129349Z ⚠ eslint(no-unused-vars): Identifier 'ScrollView' is imported but never used. 2026-10-23T23:34:17.9129506Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:111:3] 2026-10-23T23:34:17.9129578Z 110 │ Pressable, 2026-10-23T23:34:17.9129663Z 111 │ ScrollView, 2026-10-23T23:34:17.9129754Z ·  ─────┬──── 2026-10-23T23:34:17.9129913Z · ╰── 'ScrollView' is imported here 2026-10-23T23:34:17.9129983Z 112 │ StyleSheet, 2026-10-23T23:34:17.9130048Z ╰──── 2026-10-23T23:34:17.9130172Z  help: Consider removing this import. 2026-10-23T23:34:17.9130178Z 2026-10-23T23:34:17.9130442Z ⚠ eslint(no-unused-vars): Identifier 'NativeText' is imported but never used. 2026-10-23T23:34:17.9130605Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:113:11] 2026-10-23T23:34:17.9130679Z 112 │ StyleSheet, 2026-10-23T23:34:17.9130762Z 113 │ Text as NativeText, 2026-10-23T23:34:17.9130858Z ·  ─────┬──── 2026-10-23T23:34:17.9131016Z · ╰── 'NativeText' is imported here 2026-10-23T23:34:17.9131102Z 114 │ type ColorValue, 2026-10-23T23:34:17.9131164Z ╰──── 2026-10-23T23:34:17.9131276Z  help: Consider removing this import. 2026-10-23T23:34:17.9131278Z 2026-10-23T23:34:17.9131534Z ⚠ eslint(no-unused-vars): Identifier 'tryOpenExternalUrl' is imported but never used. 2026-10-23T23:34:17.9131697Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:136:10] 2026-10-23T23:34:17.9131860Z 135 │ import { copyTextWithHaptic } from "../../lib/copyTextWithHaptic"; 2026-10-23T23:34:17.9132011Z 136 │ import { tryOpenExternalUrl } from "../../lib/openExternalUrl"; 2026-10-23T23:34:17.9132116Z ·  ─────────┬──────── 2026-10-23T23:34:17.9132303Z · ╰── 'tryOpenExternalUrl' is imported here 2026-10-23T23:34:17.9132482Z 137 │ import { downloadAndShareAttachment } from "../../lib/attachmentDownload"; 2026-10-23T23:34:17.9132548Z ╰──── 2026-10-23T23:34:17.9132657Z  help: Consider removing this import. 2026-10-23T23:34:17.9132660Z 2026-10-23T23:34:17.9133016Z ⚠ eslint(no-unused-vars): Identifier 'faviconUrlForOrigin' is imported but never used. 2026-10-23T23:34:17.9133279Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:139:10] 2026-10-23T23:34:17.9133446Z 138 │ import { hasWideMarkdownBlock } from "../../lib/wideMarkdownBlocks"; 2026-10-23T23:34:17.9133594Z 139 │ import { faviconUrlForOrigin } from "@t3tools/shared/favicon"; 2026-10-23T23:34:17.9133703Z ·  ─────────┬───────── 2026-10-23T23:34:17.9133940Z · ╰── 'faviconUrlForOrigin' is imported here 2026-10-23T23:34:17.9134045Z 140 │ import { 2026-10-23T23:34:17.9134108Z ╰──── 2026-10-23T23:34:17.9134230Z  help: Consider removing this import. 2026-10-23T23:34:17.9134234Z 2026-10-23T23:34:17.9134493Z ⚠ eslint(no-unused-vars): Identifier 'MediaVideoPlayer' is imported but never used. 2026-10-23T23:34:17.9134669Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:153:10] 2026-10-23T23:34:17.9134861Z 152 │ import { VideoAttachmentTile } from "../../components/VideoAttachmentTile"; 2026-10-23T23:34:17.9135025Z 153 │ import { MediaVideoPlayer } from "../../components/MediaVideoPlayer"; 2026-10-23T23:34:17.9135139Z ·  ────────┬─────── 2026-10-23T23:34:17.9135331Z · ╰── 'MediaVideoPlayer' is imported here 2026-10-23T23:34:17.9135498Z 154 │ import { resolveMarkdownMediaPreview } from "../../lib/markdownMedia"; 2026-10-23T23:34:17.9135558Z ╰──── 2026-10-23T23:34:17.9135675Z  help: Consider removing this import. 2026-10-23T23:34:17.9135678Z 2026-10-23T23:34:17.9135941Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoPreviewUri' is imported but never used. 2026-10-23T23:34:17.9136149Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:157:3] 2026-10-23T23:34:17.9136295Z 156 │ attachmentVideoPreviewSource, 2026-10-23T23:34:17.9136391Z 157 │ mediaVideoPreviewUri, 2026-10-23T23:34:17.9136504Z ·  ──────────┬───────── 2026-10-23T23:34:17.9136698Z · ╰── 'mediaVideoPreviewUri' is imported here 2026-10-23T23:34:17.9136782Z 158 │ mediaVideoThumbnailKey, 2026-10-23T23:34:17.9136848Z ╰──── 2026-10-23T23:34:17.9136964Z  help: Consider removing this import. 2026-10-23T23:34:17.9136968Z 2026-10-23T23:34:17.9137236Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoThumbnailKey' is imported but never used. 2026-10-23T23:34:17.9137392Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:158:3] 2026-10-23T23:34:17.9137479Z 157 │ mediaVideoPreviewUri, 2026-10-23T23:34:17.9137571Z 158 │ mediaVideoThumbnailKey, 2026-10-23T23:34:17.9137684Z ·  ───────────┬────────── 2026-10-23T23:34:17.9137866Z · ╰── 'mediaVideoThumbnailKey' is imported here 2026-10-23T23:34:17.9137966Z 159 │ type MediaVideoPreviewSource, 2026-10-23T23:34:17.9138027Z ╰──── 2026-10-23T23:34:17.9138142Z  help: Consider removing this import. 2026-10-23T23:34:17.9138144Z 2026-10-23T23:34:17.9138394Z ⚠ eslint(no-unused-vars): Type 'MediaVideoPreviewSource' is imported but never used. 2026-10-23T23:34:17.9138555Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:159:8] 2026-10-23T23:34:17.9138645Z 158 │ mediaVideoThumbnailKey, 2026-10-23T23:34:17.9138745Z 159 │ type MediaVideoPreviewSource, 2026-10-23T23:34:17.9138956Z ·  ───────────┬─────────── 2026-10-23T23:34:17.9139296Z · ╰── 'MediaVideoPreviewSource' is imported here 2026-10-23T23:34:17.9139412Z 160 │ } from "../../lib/videoPreviewSource"; 2026-10-23T23:34:17.9139477Z ╰──── 2026-10-23T23:34:17.9139588Z  help: Consider removing this import. 2026-10-23T23:34:17.9139593Z 2026-10-23T23:34:17.9139857Z ⚠ eslint(no-unused-vars): Type 'ReviewDiffTheme' is imported but never used. 2026-10-23T23:34:17.9140078Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:167:15] 2026-10-23T23:34:17.9140287Z 166 │ import { parseReviewCommentMessageSegments } from "../review/reviewCommentSelection"; 2026-10-23T23:34:17.9140511Z 167 │ import type { ReviewDiffTheme } from "../review/shikiReviewHighlighter"; 2026-10-23T23:34:17.9140620Z ·  ───────┬─────── 2026-10-23T23:34:17.9140809Z · ╰── 'ReviewDiffTheme' is imported here 2026-10-23T23:34:17.9140887Z 168 │ import { 2026-10-23T23:34:17.9140947Z ╰──── 2026-10-23T23:34:17.9141067Z  help: Consider removing this import. 2026-10-23T23:34:17.9141070Z 2026-10-23T23:34:17.9141347Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownFontSizes' is imported but never used. 2026-10-23T23:34:17.9141660Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:182:3] 2026-10-23T23:34:17.9141777Z 181 │ import { 2026-10-23T23:34:17.9141870Z 182 │ resolveMarkdownFontSizes, 2026-10-23T23:34:17.9141982Z ·  ────────────┬─────────── 2026-10-23T23:34:17.9142177Z · ╰── 'resolveMarkdownFontSizes' is imported here 2026-10-23T23:34:17.9142290Z 183 │ resolveNativeMarkdownTypography, 2026-10-23T23:34:17.9142350Z ╰──── 2026-10-23T23:34:17.9142462Z  help: Consider removing this import. 2026-10-23T23:34:17.9142465Z 2026-10-23T23:34:17.9142727Z ⚠ eslint(no-unused-vars): Identifier 'markdownLinkIconSource' is imported but never used. 2026-10-23T23:34:17.9142882Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:187:10] 2026-10-23T23:34:17.9143038Z 186 │ import { PierreEntryIcon } from "../../components/PierreEntryIcon"; 2026-10-23T23:34:17.9143206Z 187 │ import { markdownLinkIconSource } from "../../lib/markdownLinkIcons"; 2026-10-23T23:34:17.9143326Z ·  ───────────┬────────── 2026-10-23T23:34:17.9143522Z · ╰── 'markdownLinkIconSource' is imported here 2026-10-23T23:34:17.9143591Z 188 │ import { 2026-10-23T23:34:17.9143830Z ╰──── 2026-10-23T23:34:17.9144066Z  help: Consider removing this import. 2026-10-23T23:34:17.9144070Z 2026-10-23T23:34:17.9144402Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownInlineCodePresentation' is imported but never used. 2026-10-23T23:34:17.9144561Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:190:3] 2026-10-23T23:34:17.9144684Z 189 │ normalizeNativeMarkdownUrl, 2026-10-23T23:34:17.9144859Z 190 │ resolveMarkdownInlineCodePresentation, 2026-10-23T23:34:17.9145022Z ·  ──────────────────┬────────────────── 2026-10-23T23:34:17.9145250Z · ╰── 'resolveMarkdownInlineCodePresentation' is imported here 2026-10-23T23:34:17.9145342Z 191 │ resolveMarkdownLinkIcon, 2026-10-23T23:34:17.9145407Z ╰──── 2026-10-23T23:34:17.9145572Z  help: Consider removing this import. 2026-10-23T23:34:17.9145582Z 2026-10-23T23:34:17.9145914Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownLinkIcon' is imported but never used. 2026-10-23T23:34:17.9146073Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:191:3] 2026-10-23T23:34:17.9146184Z 190 │ resolveMarkdownInlineCodePresentation, 2026-10-23T23:34:17.9146275Z 191 │ resolveMarkdownLinkIcon, 2026-10-23T23:34:17.9146377Z ·  ───────────┬─────────── 2026-10-23T23:34:17.9146564Z · ╰── 'resolveMarkdownLinkIcon' is imported here 2026-10-23T23:34:17.9146669Z 192 │ resolveMarkdownLinkPresentation, 2026-10-23T23:34:17.9146733Z ╰──── 2026-10-23T23:34:17.9146843Z  help: Consider removing this import. 2026-10-23T23:34:17.9146846Z 2026-10-23T23:34:17.9147129Z ⚠ eslint(no-unused-vars): Identifier 'useMarkdownCodeHighlight' is imported but never used. 2026-10-23T23:34:17.9147291Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:230:10] 2026-10-23T23:34:17.9147422Z 229 │ import { ThreadMcpApp } from "./McpAppWebView"; 2026-10-23T23:34:17.9147598Z 230 │ import { useMarkdownCodeHighlight } from "./markdownCodeHighlightState"; 2026-10-23T23:34:17.9147717Z ·  ────────────┬─────────── 2026-10-23T23:34:17.9147930Z · ╰── 'useMarkdownCodeHighlight' is imported here 2026-10-23T23:34:17.9148011Z 231 │ import { 2026-10-23T23:34:17.9148077Z ╰──── 2026-10-23T23:34:17.9148189Z  help: Consider removing this import. 2026-10-23T23:34:17.9148192Z 2026-10-23T23:34:17.9148455Z ⚠ eslint(no-unused-vars): Identifier 'useAssetUrlState' is imported but never used. 2026-10-23T23:34:17.9148619Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:234:3] 2026-10-23T23:34:17.9148704Z 233 │ useAssetUrl, 2026-10-23T23:34:17.9148783Z 234 │ useAssetUrlState, 2026-10-23T23:34:17.9148879Z ·  ────────┬─────── 2026-10-23T23:34:17.9149047Z · ╰── 'useAssetUrlState' is imported here 2026-10-23T23:34:17.9149131Z 235 │ useRefreshAssetUrl, 2026-10-23T23:34:17.9149189Z ╰──── 2026-10-23T23:34:17.9149303Z  help: Consider removing this import. 2026-10-23T23:34:17.9149306Z 2026-10-23T23:34:17.9149545Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T23:34:17.9149710Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2123:7] 2026-10-23T23:34:17.9149894Z 2122 │ setExpandedFile(null); 2026-10-23T23:34:17.9150184Z 2123 │ }, [props.environmentId, props.threadId, props.contentPresentation.kind]); 2026-10-23T23:34:17.9150503Z ·  ─────────┬───────── ───────┬────── ───────────────┬────────────── 2026-10-23T23:34:17.9150935Z · │ │ ╰── Unnecessary dependency `props.contentPresentation.kind` 2026-10-23T23:34:17.9151166Z · │ ╰── Unnecessary dependency `props.threadId` 2026-10-23T23:34:17.9151364Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-23T23:34:17.9151536Z 2124 │ const horizontalPadding = props.layoutVariant === "split" ? 20 : 16; 2026-10-23T23:34:17.9151613Z ╰──── 2026-10-23T23:34:17.9151968Z  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-23T23:34:17.9152345Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.9152348Z 2026-10-23T23:34:17.9152588Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T23:34:17.9152756Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2590:7] 2026-10-23T23:34:17.9152878Z 2589 │ reportHeaderMaterialVisibility(false); 2026-10-23T23:34:17.9153011Z 2590 │ }, [feedThreadKey, reportHeaderMaterialVisibility]); 2026-10-23T23:34:17.9153123Z ·  ──────┬────── 2026-10-23T23:34:17.9153311Z · ╰── Unnecessary dependency `feedThreadKey` 2026-10-23T23:34:17.9153384Z 2591 │ 2026-10-23T23:34:17.9153443Z ╰──── 2026-10-23T23:34:17.9153789Z  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-23T23:34:17.9154158Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.9154161Z 2026-10-23T23:34:17.9154400Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T23:34:17.9154571Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2606:7] 2026-10-23T23:34:17.9154643Z 2605 │ } 2026-10-23T23:34:17.9154812Z 2606 │ }, [listMountKey, props.contentInsetEndAdjustment, listRef]); 2026-10-23T23:34:17.9154913Z ·  ──────┬───── 2026-10-23T23:34:17.9155092Z · ╰── Unnecessary dependency `listMountKey` 2026-10-23T23:34:17.9155158Z 2607 │ 2026-10-23T23:34:17.9155225Z ╰──── 2026-10-23T23:34:17.9155565Z  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-23T23:34:17.9155933Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.9155936Z 2026-10-23T23:34:17.9156169Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T23:34:17.9156415Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2763:7] 2026-10-23T23:34:17.9156570Z 2762 │ } 2026-10-23T23:34:17.9156810Z 2763 │ }, [expandedTurnIds, expandedWorkGroups, expandedWorkRows, settleDisclosureAfterLayout]); 2026-10-23T23:34:17.9157049Z ·  ───────┬─────── ─────────┬──────── ────────┬─────── 2026-10-23T23:34:17.9157385Z · │ │ ╰── Unnecessary dependency `expandedWorkRows` 2026-10-23T23:34:17.9157693Z · │ ╰── Unnecessary dependency `expandedWorkGroups` 2026-10-23T23:34:17.9157874Z · ╰── Unnecessary dependency `expandedTurnIds` 2026-10-23T23:34:17.9157950Z 2764 │ 2026-10-23T23:34:17.9158014Z ╰──── 2026-10-23T23:34:17.9158362Z  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-23T23:34:17.9158735Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.9158738Z 2026-10-23T23:34:17.9158965Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-23T23:34:17.9159124Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:605:9] 2026-10-23T23:34:17.9159203Z 604 │ }; 2026-10-23T23:34:17.9159346Z 605 │ }, [props.environmentId, attachment.id, httpBaseUrl]), 2026-10-23T23:34:17.9159588Z ·  ─────────┬───────── ──────┬────── ─────┬───── 2026-10-23T23:34:17.9159879Z · │ │ ╰── Unnecessary dependency `httpBaseUrl` 2026-10-23T23:34:17.9160120Z · │ ╰── Unnecessary dependency `attachment.id` 2026-10-23T23:34:17.9160326Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-23T23:34:17.9160440Z 606 │ ); 2026-10-23T23:34:17.9160508Z ╰──── 2026-10-23T23:34:17.9160878Z  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-23T23:34:17.9161352Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.9161411Z 2026-10-23T23:34:17.9161654Z ⚠ react(refs): Cannot access refs during render 2026-10-23T23:34:17.9161866Z ╭─[apps/mobile/src/features/voice-input/useVoiceInputController.ts:27:14] 2026-10-23T23:34:17.9161975Z 26 │ const latestInput = useRef(input); 2026-10-23T23:34:17.9162092Z 27 │ latestInput.current = input; 2026-10-23T23:34:17.9162242Z ·  ─────┬─────────┬─── 2026-10-23T23:34:17.9162543Z · │ ╰── Cannot update ref value during render 2026-10-23T23:34:17.9162689Z · ╰── This value is a ref 2026-10-23T23:34:17.9162782Z 28 │ const mounted = useRef(true); 2026-10-23T23:34:17.9162859Z ╰──── 2026-10-23T23:34:17.9163425Z  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-23T23:34:17.9163770Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T23:34:17.9163773Z 2026-10-23T23:34:17.9164323Z ⚠ 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-23T23:34:17.9164508Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:169:7] 2026-10-23T23:34:17.9164590Z 168 │ }); 2026-10-23T23:34:17.9164838Z 169 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-23T23:34:17.9165069Z 170 │ │ if ((yield* SubscriptionRef.get(shellState)).status === "synchronizing") break; 2026-10-23T23:34:17.9165193Z 171 │ │ yield* Effect.yieldNow; 2026-10-23T23:34:17.9165354Z 172 │ ╰─▶ } 2026-10-23T23:34:17.9165420Z 173 │ 2026-10-23T23:34:17.9165486Z ╰──── 2026-10-23T23:34:17.9165489Z 2026-10-23T23:34:17.9166026Z ⚠ 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-23T23:34:17.9166212Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:178:7] 2026-10-23T23:34:17.9166352Z 177 │ yield* Deferred.succeed(releaseSave, undefined); 2026-10-23T23:34:17.9166587Z 178 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-23T23:34:17.9166743Z 179 │ │ if ((yield* Ref.get(saved)).length > 0) break; 2026-10-23T23:34:17.9166880Z 180 │ │ yield* Effect.yieldNow; 2026-10-23T23:34:17.9167042Z 181 │ ╰─▶ } 2026-10-23T23:34:17.9167114Z 182 │ 2026-10-23T23:34:17.9167175Z ╰──── 2026-10-23T23:34:17.9167182Z 2026-10-23T23:34:17.9167830Z ⚠ 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-23T23:34:17.9168117Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:307:7] 2026-10-23T23:34:17.9168277Z 306 │ yield* Deferred.succeed(releaseUnenrichedSave, undefined); 2026-10-23T23:34:17.9168514Z 307 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-23T23:34:17.9168656Z 308 │ │ const values = yield* Ref.get(saved); 2026-10-23T23:34:17.9168974Z 309 │ │ if (values.length > 0 && values.at(-1)?.projects[0]?.repositoryIdentity != null) { 2026-10-23T23:34:17.9169098Z 310 │ │ break; 2026-10-23T23:34:17.9169201Z 311 │ │ } 2026-10-23T23:34:17.9169332Z 312 │ │ yield* Effect.yieldNow; 2026-10-23T23:34:17.9169511Z 313 │ ╰─▶ } 2026-10-23T23:34:17.9169586Z 314 │ 2026-10-23T23:34:17.9169658Z ╰──── 2026-10-23T23:34:17.9169671Z 2026-10-23T23:34:17.9169915Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T23:34:17.9170099Z ╭─[apps/mobile/src/state/use-thread-outbox-drain.ts:1315:5] 2026-10-23T23:34:17.9170211Z 1314 │ queuedMessagesByThreadKey, 2026-10-23T23:34:17.9170298Z 1315 │ retryTick, 2026-10-23T23:34:17.9170425Z ·  ────┬──── 2026-10-23T23:34:17.9170616Z · ╰── Unnecessary dependency `retryTick` 2026-10-23T23:34:17.9170720Z 1316 │ restoreQueuedMessage, 2026-10-23T23:34:17.9170809Z ╰──── 2026-10-23T23:34:17.9171158Z  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-23T23:34:17.9171537Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.9171540Z 2026-10-23T23:34:17.9171723Z ⚠ react(refs): Cannot access refs during render 2026-10-23T23:34:17.9171928Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:122:38] 2026-10-23T23:34:17.9172120Z 121 │ const audioLevelsRef = useRef(Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-23T23:34:17.9172265Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-23T23:34:17.9172424Z ·  ───────────┬────────── 2026-10-23T23:34:17.9172636Z · ╰── Cannot access ref value during render 2026-10-23T23:34:17.9172780Z 123 │ const sessionRef = useRef(null); 2026-10-23T23:34:17.9172840Z ╰──── 2026-10-23T23:34:17.9173392Z  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-23T23:34:17.9173745Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T23:34:17.9173748Z 2026-10-23T23:34:17.9174017Z ⚠ react(refs): Cannot access refs during render 2026-10-23T23:34:17.9174321Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:8] 2026-10-23T23:34:17.9174384Z 125 │ 2026-10-23T23:34:17.9174522Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-23T23:34:17.9174635Z ·  ─────────┬──────── 2026-10-23T23:34:17.9174823Z · ╰── Cannot access ref value during render 2026-10-23T23:34:17.9174950Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-23T23:34:17.9175051Z ╰──── 2026-10-23T23:34:17.9175649Z  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-23T23:34:17.9176006Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T23:34:17.9176012Z 2026-10-23T23:34:17.9176289Z ⚠ react(refs): Cannot access refs during render 2026-10-23T23:34:17.9176519Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:7] 2026-10-23T23:34:17.9176590Z 125 │ 2026-10-23T23:34:17.9176724Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-23T23:34:17.9176836Z ·  ─────────┬───────── 2026-10-23T23:34:17.9177014Z · ╰── Cannot access ref value during render 2026-10-23T23:34:17.9177142Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-23T23:34:17.9177209Z ╰──── 2026-10-23T23:34:17.9177774Z  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-23T23:34:17.9178121Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T23:34:17.9178125Z 2026-10-23T23:34:17.9178300Z ⚠ react(refs): Cannot access refs during render 2026-10-23T23:34:17.9178490Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:31] 2026-10-23T23:34:17.9178553Z 125 │ 2026-10-23T23:34:17.9178679Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-23T23:34:17.9178820Z ·  ─────────┬───────── 2026-10-23T23:34:17.9179027Z · ╰── Cannot access ref value during render 2026-10-23T23:34:17.9179150Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-23T23:34:17.9179214Z ╰──── 2026-10-23T23:34:17.9179766Z  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-23T23:34:17.9180111Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T23:34:17.9180114Z 2026-10-23T23:34:17.9180287Z ⚠ react(refs): Cannot access refs during render 2026-10-23T23:34:17.9180667Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:30] 2026-10-23T23:34:17.9180840Z 125 │ 2026-10-23T23:34:17.9180998Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-23T23:34:17.9181149Z ·  ──────────┬───────── 2026-10-23T23:34:17.9181360Z · ╰── Cannot access ref value during render 2026-10-23T23:34:17.9181651Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-23T23:34:17.9181746Z ╰──── 2026-10-23T23:34:17.9182301Z  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-23T23:34:17.9182657Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T23:34:17.9182664Z 2026-10-23T23:34:17.9182838Z ⚠ react(refs): Cannot access refs during render 2026-10-23T23:34:17.9183019Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:127:46] 2026-10-23T23:34:17.9183480Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-23T23:34:17.9183712Z 127 │ ╭─▶ const recorder = createLazyVoiceRecorder({ 2026-10-23T23:34:17.9183923Z 128 │ │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-23T23:34:17.9184079Z 129 │ │ onStatus: (status: RecordingStatus) => { 2026-10-23T23:34:17.9184263Z 130 │ │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-23T23:34:17.9184418Z 131 │ │ isFinished: status.isFinished, 2026-10-23T23:34:17.9184634Z 132 │ │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-23T23:34:17.9184764Z 133 │ │ error: status.error, 2026-10-23T23:34:17.9184878Z 134 │ │ url: status.url, 2026-10-23T23:34:17.9184981Z 135 │ │ }); 2026-10-23T23:34:17.9185077Z 136 │ │ }, 2026-10-23T23:34:17.9185311Z 137 │ │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-23T23:34:17.9185435Z 138 │ │ selectInput: (inputs) => { 2026-10-23T23:34:17.9185631Z 139 │ │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-23T23:34:17.9185820Z 140 │ │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-23T23:34:17.9186026Z 141 │ │ const known = microphoneOrder(preferences.value.microphones); 2026-10-23T23:34:17.9186191Z 142 │ │ const order = rememberMicrophones(known, inputs); 2026-10-23T23:34:17.9186319Z 143 │ │ if (order !== known) { 2026-10-23T23:34:17.9186491Z 144 │ │ registry.set(updateMobilePreferencesAtom, { 2026-10-23T23:34:17.9186631Z 145 │ │ transform: (current) => ({ 2026-10-23T23:34:17.9186874Z 146 │ │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-23T23:34:17.9186980Z 147 │ │ }), 2026-10-23T23:34:17.9187080Z 148 │ │ }); 2026-10-23T23:34:17.9187340Z 149 │ │ } 2026-10-23T23:34:17.9187617Z 150 │ │ return preferredMicrophoneInput(inputs, order); 2026-10-23T23:34:17.9187717Z 151 │ │ }, 2026-10-23T23:34:17.9187880Z 152 │ ├─▶ }); 2026-10-23T23:34:17.9188172Z · ╰──── Passing a ref to a function may read its value during render 2026-10-23T23:34:17.9188333Z 153 │ recorderRef.current = recorder; 2026-10-23T23:34:17.9188416Z ╰──── 2026-10-23T23:34:17.9188983Z  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-23T23:34:17.9189336Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T23:34:17.9189339Z 2026-10-23T23:34:17.9189514Z ⚠ react(refs): Cannot access refs during render 2026-10-23T23:34:17.9189702Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:153:16] 2026-10-23T23:34:17.9189781Z 152 │ }); 2026-10-23T23:34:17.9189889Z 153 │ recorderRef.current = recorder; 2026-10-23T23:34:17.9190030Z ·  ─────┬─────────┬─── 2026-10-23T23:34:17.9190249Z · │ ╰── Cannot update ref value during render 2026-10-23T23:34:17.9190437Z · ╰── This value is a ref 2026-10-23T23:34:17.9190580Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-23T23:34:17.9190658Z ╰──── 2026-10-23T23:34:17.9191212Z  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-23T23:34:17.9191564Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T23:34:17.9191567Z 2026-10-23T23:34:17.9191741Z ⚠ react(refs): Cannot access refs during render 2026-10-23T23:34:17.9191932Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:48] 2026-10-23T23:34:17.9192045Z 153 │ recorderRef.current = recorder; 2026-10-23T23:34:17.9192276Z 154 │ ╭─▶ sessionRef.current = new VoiceInputSession({ 2026-10-23T23:34:17.9192384Z 155 │ │ recorder, 2026-10-23T23:34:17.9192549Z 156 │ │ getTranscriber: getLocalVoiceTranscriber, 2026-10-23T23:34:17.9192689Z 157 │ │ requestPermission: async () => { 2026-10-23T23:34:17.9192885Z 158 │ │ const permission = await requestRecordingPermissionsAsync(); 2026-10-23T23:34:17.9193118Z 159 │ │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-23T23:34:17.9193215Z 160 │ │ }, 2026-10-23T23:34:17.9193389Z 161 │ │ configureRecording: configureVoiceRecordingAudio, 2026-10-23T23:34:17.9193642Z 162 │ │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-23T23:34:17.9193926Z 163 │ │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-23T23:34:17.9194067Z 164 │ │ onStateChange: (nextState) => 2026-10-23T23:34:17.9194183Z 165 │ │ setState({ 2026-10-23T23:34:17.9194311Z 166 │ │ state: nextState, 2026-10-23T23:34:17.9194483Z 167 │ │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-23T23:34:17.9194740Z 168 │ │ label: sessionRef.current?.label ?? null, 2026-10-23T23:34:17.9194845Z 169 │ │ }), 2026-10-23T23:34:17.9195004Z 170 │ ├─▶ }); 2026-10-23T23:34:17.9195243Z · ╰──── Cannot access ref value during render 2026-10-23T23:34:17.9195315Z 171 │ } 2026-10-23T23:34:17.9195381Z ╰──── 2026-10-23T23:34:17.9195930Z  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-23T23:34:17.9196270Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T23:34:17.9196273Z 2026-10-23T23:34:17.9196445Z ⚠ react(refs): Cannot access refs during render 2026-10-23T23:34:17.9196637Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:15] 2026-10-23T23:34:17.9196748Z 153 │ recorderRef.current = recorder; 2026-10-23T23:34:17.9196877Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-23T23:34:17.9197021Z ·  ─────┬────────┬─── 2026-10-23T23:34:17.9197250Z · │ ╰── Cannot update ref value during render 2026-10-23T23:34:17.9197394Z · ╰── This value is a ref 2026-10-23T23:34:17.9197485Z 155 │ recorder, 2026-10-23T23:34:17.9197549Z ╰──── 2026-10-23T23:34:17.9198100Z  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-23T23:34:17.9198593Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T23:34:17.9198715Z 2026-10-23T23:34:17.9198948Z ⚠ react(refs): Cannot access refs during render 2026-10-23T23:34:17.9199143Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:7] 2026-10-23T23:34:17.9199262Z 184 │ return () => subscription.remove(); 2026-10-23T23:34:17.9199347Z 185 │ }, [controller]); 2026-10-23T23:34:17.9199448Z ·  ─────┬──── 2026-10-23T23:34:17.9199699Z · ╰── Cannot access ref value during render 2026-10-23T23:34:17.9199771Z 186 │ 2026-10-23T23:34:17.9199837Z ╰──── 2026-10-23T23:34:17.9200443Z  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-23T23:34:17.9200800Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T23:34:17.9200803Z 2026-10-23T23:34:17.9200975Z ⚠ react(refs): Cannot access refs during render 2026-10-23T23:34:17.9201182Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:6] 2026-10-23T23:34:17.9201334Z 184 │ return () => subscription.remove(); 2026-10-23T23:34:17.9201425Z 185 │ }, [controller]); 2026-10-23T23:34:17.9201526Z ·  ──────┬───── 2026-10-23T23:34:17.9201702Z · ╰── Cannot access ref value during render 2026-10-23T23:34:17.9201768Z 186 │ 2026-10-23T23:34:17.9201846Z ╰──── 2026-10-23T23:34:17.9209777Z  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-23T23:34:17.9210170Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T23:34:17.9210174Z 2026-10-23T23:34:17.9210404Z ⚠ react(refs): Cannot access refs during render 2026-10-23T23:34:17.9210612Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:6] 2026-10-23T23:34:17.9210679Z 191 │ }, 2026-10-23T23:34:17.9210775Z 192 │ [controller, recorder], 2026-10-23T23:34:17.9210882Z ·  ─────┬──── 2026-10-23T23:34:17.9211071Z · ╰── Cannot access ref value during render 2026-10-23T23:34:17.9211137Z 193 │ ); 2026-10-23T23:34:17.9211208Z ╰──── 2026-10-23T23:34:17.9211762Z  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-23T23:34:17.9212110Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T23:34:17.9212113Z 2026-10-23T23:34:17.9212288Z ⚠ react(refs): Cannot access refs during render 2026-10-23T23:34:17.9212629Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:175:20] 2026-10-23T23:34:17.9212848Z 174 │ const controller = session.controller; 2026-10-23T23:34:17.9213024Z 175 │ const recorder = recorderRef.current; 2026-10-23T23:34:17.9213171Z ·  ─────────┬───────── 2026-10-23T23:34:17.9213364Z · ╰── Cannot access ref value during render 2026-10-23T23:34:17.9213444Z 176 │ 2026-10-23T23:34:17.9213519Z ╰──── 2026-10-23T23:34:17.9214151Z  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-23T23:34:17.9214494Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T23:34:17.9214500Z 2026-10-23T23:34:17.9214671Z ⚠ react(refs): Cannot access refs during render 2026-10-23T23:34:17.9214861Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:5] 2026-10-23T23:34:17.9214932Z 191 │ }, 2026-10-23T23:34:17.9215013Z 192 │ [controller, recorder], 2026-10-23T23:34:17.9215124Z ·  ───────────┬────────── 2026-10-23T23:34:17.9215310Z · ╰── Cannot access ref value during render 2026-10-23T23:34:17.9215383Z 193 │ ); 2026-10-23T23:34:17.9215441Z ╰──── 2026-10-23T23:34:17.9215993Z  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-23T23:34:17.9216530Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T23:34:17.9216537Z 2026-10-23T23:34:17.9216808Z ⚠ react(refs): Cannot access refs during render 2026-10-23T23:34:17.9217003Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:20] 2026-10-23T23:34:17.9217115Z 245 │ return () => clearInterval(intervalId); 2026-10-23T23:34:17.9217256Z 246 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-23T23:34:17.9217374Z ·  ─────┬──── 2026-10-23T23:34:17.9217565Z · ╰── Cannot access ref value during render 2026-10-23T23:34:17.9217630Z 247 │ 2026-10-23T23:34:17.9217698Z ╰──── 2026-10-23T23:34:17.9218254Z  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-23T23:34:17.9218602Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T23:34:17.9218604Z 2026-10-23T23:34:17.9218780Z ⚠ react(refs): Cannot access refs during render 2026-10-23T23:34:17.9218960Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:6] 2026-10-23T23:34:17.9219079Z 245 │ return () => clearInterval(intervalId); 2026-10-23T23:34:17.9219213Z 246 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-23T23:34:17.9219517Z ·  ────────────────────────┬─────────────────────── 2026-10-23T23:34:17.9219848Z · ╰── Cannot access ref value during render 2026-10-23T23:34:17.9219927Z 247 │ 2026-10-23T23:34:17.9219989Z ╰──── 2026-10-23T23:34:17.9220664Z  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-23T23:34:17.9221017Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T23:34:17.9221024Z 2026-10-23T23:34:17.9221191Z ⚠ react(refs): Cannot access refs during render 2026-10-23T23:34:17.9221381Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:261:5] 2026-10-23T23:34:17.9221472Z 260 │ setOwnerFocused, 2026-10-23T23:34:17.9221783Z 261 │ session, 2026-10-23T23:34:17.9221883Z ·  ───┬─── 2026-10-23T23:34:17.9222051Z · ╰── Cannot access ref value during render 2026-10-23T23:34:17.9222124Z 262 │ stop, 2026-10-23T23:34:17.9222182Z ╰──── 2026-10-23T23:34:17.9222715Z  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-23T23:34:17.9223058Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T23:34:17.9223064Z 2026-10-23T23:34:17.9223232Z ⚠ react(refs): Cannot access refs during render 2026-10-23T23:34:17.9223419Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:251:10] 2026-10-23T23:34:17.9223480Z 250 │ 2026-10-23T23:34:17.9223649Z 251 │ ╭─▶ return { 2026-10-23T23:34:17.9223897Z 252 │ │ isAvailable: getLocalVoiceTranscriber() !== null || getNativeShowcaseScene() !== null, 2026-10-23T23:34:17.9223997Z 253 │ │ state, 2026-10-23T23:34:17.9224099Z 254 │ │ audioLevels, 2026-10-23T23:34:17.9224215Z 255 │ │ elapsedSeconds, 2026-10-23T23:34:17.9224371Z 256 │ │ isBusy: voiceInputBlocksSubmission(state), 2026-10-23T23:34:17.9224483Z 257 │ │ ownerKey, 2026-10-23T23:34:17.9224575Z 258 │ │ label, 2026-10-23T23:34:17.9224692Z 259 │ │ focusedOwners, 2026-10-23T23:34:17.9224807Z 260 │ │ setOwnerFocused, 2026-10-23T23:34:17.9224910Z 261 │ │ session, 2026-10-23T23:34:17.9224999Z 262 │ │ stop, 2026-10-23T23:34:17.9225094Z 263 │ │ cancel, 2026-10-23T23:34:17.9225249Z 264 │ ├─▶ }; 2026-10-23T23:34:17.9225483Z · ╰──── Cannot access ref value during render 2026-10-23T23:34:17.9225545Z 265 │ } 2026-10-23T23:34:17.9225607Z ╰──── 2026-10-23T23:34:17.9226321Z  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-23T23:34:17.9226806Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T23:34:17.9226809Z 2026-10-23T23:34:17.9226996Z ⚠ react(immutability): This value cannot be modified 2026-10-23T23:34:17.9227178Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7] 2026-10-23T23:34:17.9227447Z 121 │ const audioLevelsRef = useRef(Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-23T23:34:17.9227596Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-23T23:34:17.9227698Z ·  ─────┬───── 2026-10-23T23:34:17.9227856Z · ╰── `audioLevels` originates here 2026-10-23T23:34:17.9228000Z 123 │ const sessionRef = useRef(null); 2026-10-23T23:34:17.9228181Z 124 │ const recorderRef = useRef | null>(null); 2026-10-23T23:34:17.9228248Z 125 │ 2026-10-23T23:34:17.9228370Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-23T23:34:17.9228494Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-23T23:34:17.9228673Z 128 │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-23T23:34:17.9228788Z 129 │ onStatus: (status: RecordingStatus) => { 2026-10-23T23:34:17.9228925Z 130 │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-23T23:34:17.9229035Z 131 │ isFinished: status.isFinished, 2026-10-23T23:34:17.9229214Z 132 │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-23T23:34:17.9229311Z 133 │ error: status.error, 2026-10-23T23:34:17.9229387Z 134 │ url: status.url, 2026-10-23T23:34:17.9229466Z 135 │ }); 2026-10-23T23:34:17.9229543Z 136 │ }, 2026-10-23T23:34:17.9229740Z 137 │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-23T23:34:17.9229832Z 138 │ selectInput: (inputs) => { 2026-10-23T23:34:17.9229983Z 139 │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-23T23:34:17.9230123Z 140 │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-23T23:34:17.9230280Z 141 │ const known = microphoneOrder(preferences.value.microphones); 2026-10-23T23:34:17.9230446Z 142 │ const order = rememberMicrophones(known, inputs); 2026-10-23T23:34:17.9230554Z 143 │ if (order !== known) { 2026-10-23T23:34:17.9230680Z 144 │ registry.set(updateMobilePreferencesAtom, { 2026-10-23T23:34:17.9230782Z 145 │ transform: (current) => ({ 2026-10-23T23:34:17.9230980Z 146 │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-23T23:34:17.9231065Z 147 │ }), 2026-10-23T23:34:17.9231142Z 148 │ }); 2026-10-23T23:34:17.9231212Z 149 │ } 2026-10-23T23:34:17.9231335Z 150 │ return preferredMicrophoneInput(inputs, order); 2026-10-23T23:34:17.9231403Z 151 │ }, 2026-10-23T23:34:17.9231468Z 152 │ }); 2026-10-23T23:34:17.9231563Z 153 │ recorderRef.current = recorder; 2026-10-23T23:34:17.9231684Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-23T23:34:17.9231765Z 155 │ recorder, 2026-10-23T23:34:17.9231975Z 156 │ getTranscriber: getLocalVoiceTranscriber, 2026-10-23T23:34:17.9232173Z 157 │ requestPermission: async () => { 2026-10-23T23:34:17.9232343Z 158 │ const permission = await requestRecordingPermissionsAsync(); 2026-10-23T23:34:17.9232529Z 159 │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-23T23:34:17.9232607Z 160 │ }, 2026-10-23T23:34:17.9232730Z 161 │ configureRecording: configureVoiceRecordingAudio, 2026-10-23T23:34:17.9232886Z 162 │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-23T23:34:17.9233061Z 163 │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-23T23:34:17.9233158Z 164 │ onStateChange: (nextState) => 2026-10-23T23:34:17.9233232Z 165 │ setState({ 2026-10-23T23:34:17.9233320Z 166 │ state: nextState, 2026-10-23T23:34:17.9233456Z 167 │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-23T23:34:17.9233585Z 168 │ label: sessionRef.current?.label ?? null, 2026-10-23T23:34:17.9233653Z 169 │ }), 2026-10-23T23:34:17.9233725Z 170 │ }); 2026-10-23T23:34:17.9233789Z 171 │ } 2026-10-23T23:34:17.9233854Z 172 │ 2026-10-23T23:34:17.9233950Z 173 │ const session = sessionRef.current; 2026-10-23T23:34:17.9234060Z 174 │ const controller = session.controller; 2026-10-23T23:34:17.9234162Z 175 │ const recorder = recorderRef.current; 2026-10-23T23:34:17.9234232Z 176 │ 2026-10-23T23:34:17.9234309Z 177 │ useEffect(() => { 2026-10-23T23:34:17.9234484Z 178 │ const subscription = AppState.addEventListener("change", (nextState) => { 2026-10-23T23:34:17.9234655Z 179 │ // iOS reports `inactive` while its permission dialog is open. Only the 2026-10-23T23:34:17.9234825Z 180 │ // real background state cancels preparation; recorder status handles 2026-10-23T23:34:17.9234945Z 181 │ // calls and route interruptions during capture. 2026-10-23T23:34:17.9235108Z 182 │ if (nextState === "background") controller.appMovedToBackground(); 2026-10-23T23:34:17.9235182Z 183 │ }); 2026-10-23T23:34:17.9235287Z 184 │ return () => subscription.remove(); 2026-10-23T23:34:17.9235362Z 185 │ }, [controller]); 2026-10-23T23:34:17.9235427Z 186 │ 2026-10-23T23:34:17.9235503Z 187 │ useEffect( 2026-10-23T23:34:17.9235575Z 188 │ () => () => { 2026-10-23T23:34:17.9235668Z 189 │ controller.dispose(); 2026-10-23T23:34:17.9235756Z 190 │ recorder.release(); 2026-10-23T23:34:17.9235826Z 191 │ }, 2026-10-23T23:34:17.9235909Z 192 │ [controller, recorder], 2026-10-23T23:34:17.9235979Z 193 │ ); 2026-10-23T23:34:17.9236049Z 194 │ 2026-10-23T23:34:17.9236132Z 195 │ useEffect(() => { 2026-10-23T23:34:17.9236247Z 196 │ if (state.phase !== "recording") return; 2026-10-23T23:34:17.9236326Z 197 │ 2026-10-23T23:34:17.9236503Z 198 │ const tag = `voice-input:${keepAwakeId}:${++keepAwakeSessionRef.current}`; 2026-10-23T23:34:17.9236628Z 199 │ const activation = activateKeepAwakeAsync(tag); 2026-10-23T23:34:17.9236724Z 200 │ void activation.catch(() => {}); 2026-10-23T23:34:17.9236803Z 201 │ return () => { 2026-10-23T23:34:17.9236982Z 202 │ // Release after activation settles, even if the recording ends immediately. 2026-10-23T23:34:17.9237148Z 203 │ void activation.then(() => deactivateKeepAwake(tag)).catch(() => {}); 2026-10-23T23:34:17.9237209Z 204 │ }; 2026-10-23T23:34:17.9237304Z 205 │ }, [keepAwakeId, state.phase]); 2026-10-23T23:34:17.9237371Z 206 │ 2026-10-23T23:34:17.9237443Z 207 │ useEffect(() => { 2026-10-23T23:34:17.9237702Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-23T23:34:17.9237844Z 209 │ 2026-10-23T23:34:17.9238035Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-23T23:34:17.9238216Z 211 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-23T23:34:17.9238343Z 212 │ audioLevels.value = audioLevelsRef.current; 2026-10-23T23:34:17.9238440Z ·  ─────┬───── 2026-10-23T23:34:17.9238664Z · ╰── `audioLevels` cannot be modified 2026-10-23T23:34:17.9238768Z 213 │ } 2026-10-23T23:34:17.9238834Z ╰──── 2026-10-23T23:34:17.9239161Z  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-23T23:34:17.9239540Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T23:34:17.9239548Z 2026-10-23T23:34:17.9239797Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-23T23:34:17.9239978Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7] 2026-10-23T23:34:17.9240043Z 206 │ 2026-10-23T23:34:17.9240121Z 207 │ useEffect(() => { 2026-10-23T23:34:17.9240216Z ·  ───┬─── 2026-10-23T23:34:17.9240521Z · ╰── This function may (indirectly) reassign or modify `audioLevels` after render 2026-10-23T23:34:17.9240690Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-23T23:34:17.9240758Z 209 │ 2026-10-23T23:34:17.9240908Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-23T23:34:17.9241099Z 211 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-23T23:34:17.9241224Z 212 │ audioLevels.value = audioLevelsRef.current; 2026-10-23T23:34:17.9241317Z ·  ─────┬───── 2026-10-23T23:34:17.9241474Z · ╰── This modifies `audioLevels` 2026-10-23T23:34:17.9241539Z 213 │ } 2026-10-23T23:34:17.9241604Z ╰──── 2026-10-23T23:34:17.9242012Z  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-23T23:34:17.9242370Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T23:34:17.9242466Z 2026-10-23T23:34:17.9242739Z ⚠ react(refs): Cannot access refs during render 2026-10-23T23:34:17.9242927Z ╭─[apps/mobile/src/features/diffs/nativeReviewDiffSurface.ts:277:39] 2026-10-23T23:34:17.9242995Z 276 │ 2026-10-23T23:34:17.9243219Z 277 │ ╭─▶ return createElement(RawNativeView, { 2026-10-23T23:34:17.9243353Z 278 │ │ ...nativeProps, 2026-10-23T23:34:17.9243580Z 279 │ │ refreshEnabled: props.onPullToRefresh !== undefined, 2026-10-23T23:34:17.9243692Z 280 │ │ ref: nativeRef, 2026-10-23T23:34:17.9243850Z 281 │ ├─▶ }); 2026-10-23T23:34:17.9244144Z · ╰──── Passing a ref to a function may read its value during render 2026-10-23T23:34:17.9244212Z 282 │ } 2026-10-23T23:34:17.9244282Z ╰──── 2026-10-23T23:34:17.9244826Z  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-23T23:34:17.9245167Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T23:34:17.9245170Z 2026-10-23T23:34:17.9245472Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T23:34:17.9245660Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:361:7] 2026-10-23T23:34:17.9245838Z 355 │ }, [cancelledIncomingShareId, navigation, props.incomingShareId]); 2026-10-23T23:34:17.9245942Z 356 │ useEffect(() => { 2026-10-23T23:34:17.9246032Z ·  ────┬──── 2026-10-23T23:34:17.9246189Z · ╰── This is the containing effect 2026-10-23T23:34:17.9246308Z 357 │ if (!isReturningToProjectPicker) { 2026-10-23T23:34:17.9246390Z 358 │ return; 2026-10-23T23:34:17.9246454Z 359 │ } 2026-10-23T23:34:17.9246570Z 360 │ if (requestedInitialProjectAvailable) { 2026-10-23T23:34:17.9246680Z 361 │ setIsReturningToProjectPicker(false); 2026-10-23T23:34:17.9246804Z ·  ──────────────┬────────────── 2026-10-23T23:34:17.9247010Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T23:34:17.9247097Z 362 │ return; 2026-10-23T23:34:17.9247162Z ╰──── 2026-10-23T23:34:17.9247858Z  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-23T23:34:17.9248239Z  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-23T23:34:17.9248242Z 2026-10-23T23:34:17.9248544Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T23:34:17.9248722Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:504:9] 2026-10-23T23:34:17.9248878Z 447 │ 2026-10-23T23:34:17.9249029Z 448 │ useEffect(() => { 2026-10-23T23:34:17.9249139Z ·  ────┬──── 2026-10-23T23:34:17.9249296Z · ╰── This is the containing effect 2026-10-23T23:34:17.9249421Z 449 │ if (props.pendingTaskId || props.draftId) { 2026-10-23T23:34:17.9249494Z 450 │ return; 2026-10-23T23:34:17.9249555Z 451 │ } 2026-10-23T23:34:17.9249730Z 452 │ if (lastInitialProjectRefRef.current !== props.initialProjectRef) { 2026-10-23T23:34:17.9249969Z 453 │ lastInitialProjectRefRef.current = props.initialProjectRef; 2026-10-23T23:34:17.9250099Z 454 │ appliedInitialProjectKeyRef.current = null; 2026-10-23T23:34:17.9250163Z 455 │ } 2026-10-23T23:34:17.9250366Z 456 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-23T23:34:17.9250536Z 457 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-23T23:34:17.9250669Z 458 │ if (initialEnvironmentId && initialProjectId) { 2026-10-23T23:34:17.9250756Z 459 │ const directProject = 2026-10-23T23:34:17.9250841Z 460 │ projects.find( 2026-10-23T23:34:17.9250925Z 461 │ (project) => 2026-10-23T23:34:17.9251137Z 462 │ project.environmentId === initialEnvironmentId && project.id === initialProjectId, 2026-10-23T23:34:17.9251211Z 463 │ ) ?? null; 2026-10-23T23:34:17.9251280Z 464 │ 2026-10-23T23:34:17.9251370Z 465 │ if (directProject) { 2026-10-23T23:34:17.9251540Z 466 │ // Apply the route's project once. Re-applying on every change would 2026-10-23T23:34:17.9251700Z 467 │ // instantly revert environment/project switches made in the picker. 2026-10-23T23:34:17.9251900Z 468 │ const directProjectKey = `${directProject.environmentId}:${directProject.id}`; 2026-10-23T23:34:17.9252065Z 469 │ if (appliedInitialProjectKeyRef.current === directProjectKey) { 2026-10-23T23:34:17.9252143Z 470 │ return; 2026-10-23T23:34:17.9252208Z 471 │ } 2026-10-23T23:34:17.9252329Z 472 │ if (props.initialProjectRef?.branch) { 2026-10-23T23:34:17.9252410Z 473 │ if ( 2026-10-23T23:34:17.9252584Z 474 │ selectedProject?.environmentId !== directProject.environmentId || 2026-10-23T23:34:17.9252709Z 475 │ selectedProject.id !== directProject.id 2026-10-23T23:34:17.9252785Z 476 │ ) { 2026-10-23T23:34:17.9252894Z 477 │ setProject(directProject); 2026-10-23T23:34:17.9252969Z 478 │ return; 2026-10-23T23:34:17.9253037Z 479 │ } 2026-10-23T23:34:17.9253145Z 480 │ if (!flow.draftKey) return; 2026-10-23T23:34:17.9253320Z 481 │ // The route completes checkout before mounting this composer. Local 2026-10-23T23:34:17.9253501Z 482 │ // mode reuses an existing worktree; worktree mode would create another. 2026-10-23T23:34:17.9253631Z 483 │ updateComposerDraftSettings(flow.draftKey, { 2026-10-23T23:34:17.9253729Z 484 │ workspaceSelection: { 2026-10-23T23:34:17.9253812Z 485 │ mode: "local", 2026-10-23T23:34:17.9253938Z 486 │ branch: props.initialProjectRef.branch, 2026-10-23T23:34:17.9254113Z 487 │ worktreePath: props.initialProjectRef.worktreePath ?? null, 2026-10-23T23:34:17.9254219Z 488 │ startFromOrigin: false, 2026-10-23T23:34:17.9254305Z 489 │ }, 2026-10-23T23:34:17.9254375Z 490 │ }); 2026-10-23T23:34:17.9254452Z 491 │ } 2026-10-23T23:34:17.9254617Z 492 │ appliedInitialProjectKeyRef.current = directProjectKey; 2026-10-23T23:34:17.9254786Z 493 │ if ( 2026-10-23T23:34:17.9255075Z 494 │ selectedProject?.environmentId === directProject.environmentId && 2026-10-23T23:34:17.9255188Z 495 │ selectedProject.id === directProject.id 2026-10-23T23:34:17.9255262Z 496 │ ) { 2026-10-23T23:34:17.9255337Z 497 │ return; 2026-10-23T23:34:17.9255401Z 498 │ } 2026-10-23T23:34:17.9255497Z 499 │ setProject(directProject); 2026-10-23T23:34:17.9255575Z 500 │ return; 2026-10-23T23:34:17.9255651Z 501 │ } 2026-10-23T23:34:17.9255749Z 502 │ 2026-10-23T23:34:17.9255881Z 503 │ if (projects.length > 0) { 2026-10-23T23:34:17.9256000Z 504 │ setIsReturningToProjectPicker(true); 2026-10-23T23:34:17.9256195Z ·  ──────────────┬────────────── 2026-10-23T23:34:17.9256485Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T23:34:17.9256564Z 505 │ } 2026-10-23T23:34:17.9256631Z ╰──── 2026-10-23T23:34:17.9257337Z  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-23T23:34:17.9257729Z  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-23T23:34:17.9257732Z 2026-10-23T23:34:17.9258042Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T23:34:17.9258236Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:604:5] 2026-10-23T23:34:17.9258304Z 545 │ 2026-10-23T23:34:17.9258382Z 546 │ useEffect(() => { 2026-10-23T23:34:17.9258465Z ·  ────┬──── 2026-10-23T23:34:17.9258621Z · ╰── This is the containing effect 2026-10-23T23:34:17.9258739Z 547 │ const shareId = props.incomingShareId; 2026-10-23T23:34:17.9258836Z 548 │ const draftKey = flow.draftKey; 2026-10-23T23:34:17.9258956Z 549 │ const destinationProject = selectedProject; 2026-10-23T23:34:17.9259124Z 550 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-23T23:34:17.9259278Z 551 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-23T23:34:17.9259386Z 552 │ const selectedProjectMatchesRoute = 2026-10-23T23:34:17.9259474Z 553 │ !initialEnvironmentId || 2026-10-23T23:34:17.9259565Z 554 │ !initialProjectId || 2026-10-23T23:34:17.9259724Z 555 │ (destinationProject?.environmentId === initialEnvironmentId && 2026-10-23T23:34:17.9259852Z 556 │ destinationProject.id === initialProjectId); 2026-10-23T23:34:17.9259920Z 557 │ if ( 2026-10-23T23:34:17.9260004Z 558 │ !shareId || 2026-10-23T23:34:17.9260083Z 559 │ !draftKey || 2026-10-23T23:34:17.9260170Z 560 │ !destinationProject || 2026-10-23T23:34:17.9260273Z 561 │ !selectedProjectMatchesRoute || 2026-10-23T23:34:17.9260440Z 562 │ cancelledIncomingShareId === shareId 2026-10-23T23:34:17.9260514Z 563 │ ) { 2026-10-23T23:34:17.9260586Z 564 │ return; 2026-10-23T23:34:17.9260660Z 565 │ } 2026-10-23T23:34:17.9260778Z 566 │ const importKey = `${shareId}:${draftKey}`; 2026-10-23T23:34:17.9260852Z 567 │ if ( 2026-10-23T23:34:17.9261111Z 568 │ startedShareImportKeyRef.current === importKey || 2026-10-23T23:34:17.9261397Z 569 │ cancellingShareImportKeyRef.current === importKey 2026-10-23T23:34:17.9261643Z 570 │ ) { 2026-10-23T23:34:17.9261749Z 571 │ return; 2026-10-23T23:34:17.9261816Z 572 │ } 2026-10-23T23:34:17.9261880Z 573 │ 2026-10-23T23:34:17.9261966Z 574 │ if (!incomingShare) { 2026-10-23T23:34:17.9262304Z 575 │ if (isIncomingShareUnavailable && alertedUnavailableIncomingShareIdRef.current !== shareId) { 2026-10-23T23:34:17.9262486Z 576 │ alertedUnavailableIncomingShareIdRef.current = shareId; 2026-10-23T23:34:17.9262570Z 577 │ Dialog.alert( 2026-10-23T23:34:17.9262674Z 578 │ "Shared content unavailable", 2026-10-23T23:34:17.9262888Z 579 │ "The shared content is no longer in the inbox. You can continue editing this task draft.", 2026-10-23T23:34:17.9262965Z 580 │ ); 2026-10-23T23:34:17.9263042Z 581 │ } 2026-10-23T23:34:17.9263112Z 582 │ return; 2026-10-23T23:34:17.9263178Z 583 │ } 2026-10-23T23:34:17.9263237Z 584 │ 2026-10-23T23:34:17.9263307Z 585 │ if ( 2026-10-23T23:34:17.9263503Z 586 │ incomingShare.attachments.some((attachment) => attachment.type === "file") && 2026-10-23T23:34:17.9263619Z 587 │ selectedEnvironmentServerConfig === null 2026-10-23T23:34:17.9263689Z 588 │ ) { 2026-10-23T23:34:17.9263763Z 589 │ return; 2026-10-23T23:34:17.9263830Z 590 │ } 2026-10-23T23:34:17.9263888Z 591 │ 2026-10-23T23:34:17.9264053Z 592 │ if (alertedUnavailableIncomingShareIdRef.current === shareId) { 2026-10-23T23:34:17.9264205Z 593 │ alertedUnavailableIncomingShareIdRef.current = null; 2026-10-23T23:34:17.9264276Z 594 │ } 2026-10-23T23:34:17.9264410Z 595 │ startedShareImportKeyRef.current = importKey; 2026-10-23T23:34:17.9264499Z 596 │ const draftBackup = 2026-10-23T23:34:17.9264724Z 597 │ shareImportDraftBackupRef.current.get(importKey) ?? getComposerDraftSnapshot(draftKey); 2026-10-23T23:34:17.9264888Z 598 │ shareImportDraftBackupRef.current.set(importKey, draftBackup); 2026-10-23T23:34:17.9264991Z 599 │ const importToken = Symbol(importKey); 2026-10-23T23:34:17.9265092Z 600 │ let didReserveShare = false; 2026-10-23T23:34:17.9265186Z 601 │ let didConsumeShare = false; 2026-10-23T23:34:17.9265287Z 602 │ let needsDraftRestore = false; 2026-10-23T23:34:17.9265418Z 603 │ activeShareImportTokenRef.current = importToken; 2026-10-23T23:34:17.9265522Z 604 │ setImportingShareKey(importKey); 2026-10-23T23:34:17.9265634Z ·  ──────────┬───────── 2026-10-23T23:34:17.9265861Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T23:34:17.9265945Z 605 │ void (async () => { 2026-10-23T23:34:17.9266014Z ╰──── 2026-10-23T23:34:17.9266720Z  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-23T23:34:17.9267113Z  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-23T23:34:17.9267117Z 2026-10-23T23:34:17.9267367Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T23:34:17.9267718Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:524:5] 2026-10-23T23:34:17.9267912Z 523 │ props.initialProjectRef, 2026-10-23T23:34:17.9268028Z 524 │ props.incomingShareId, 2026-10-23T23:34:17.9268139Z ·  ──────────┬────────── 2026-10-23T23:34:17.9268341Z · ╰── Unnecessary dependency `props.incomingShareId` 2026-10-23T23:34:17.9268431Z 525 │ props.pendingTaskId, 2026-10-23T23:34:17.9268495Z ╰──── 2026-10-23T23:34:17.9268935Z  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-23T23:34:17.9269307Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.9269310Z 2026-10-23T23:34:17.9269575Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-23T23:34:17.9269764Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:543:5] 2026-10-23T23:34:17.9269906Z 542 │ loadedBranchesProjectKeyRef.current = projectKey; 2026-10-23T23:34:17.9269985Z 543 │ flow.loadBranches(); 2026-10-23T23:34:17.9270069Z ·  ──┬─ 2026-10-23T23:34:17.9270224Z · ╰── Missing dependency `flow` 2026-10-23T23:34:17.9270379Z 544 │ }, [flow.loadBranches, selectedProject]); 2026-10-23T23:34:17.9270483Z ·  ────────┬──────── 2026-10-23T23:34:17.9270737Z · ╰── Overly precise dependency `flow.loadBranches`, use `flow` instead 2026-10-23T23:34:17.9270808Z 545 │ 2026-10-23T23:34:17.9270883Z ╰──── 2026-10-23T23:34:17.9271391Z  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-23T23:34:17.9271765Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.9271768Z 2026-10-23T23:34:17.9272007Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T23:34:17.9272193Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:766:5] 2026-10-23T23:34:17.9272281Z 765 │ flow.draftKey, 2026-10-23T23:34:17.9272370Z 766 │ hasImportedIncomingShare, 2026-10-23T23:34:17.9272503Z ·  ────────────┬─────────── 2026-10-23T23:34:17.9272722Z · ╰── Unnecessary dependency `hasImportedIncomingShare` 2026-10-23T23:34:17.9272811Z 767 │ incomingShare, 2026-10-23T23:34:17.9272908Z 768 │ isIncomingShareInboxLoading, 2026-10-23T23:34:17.9273033Z ·  ─────────────┬───────────── 2026-10-23T23:34:17.9273256Z · ╰── Unnecessary dependency `isIncomingShareInboxLoading` 2026-10-23T23:34:17.9273352Z 769 │ isIncomingShareUnavailable, 2026-10-23T23:34:17.9273436Z 770 │ props.incomingShareId, 2026-10-23T23:34:17.9273551Z 771 │ props.initialProjectRef?.environmentId, 2026-10-23T23:34:17.9273659Z 772 │ props.initialProjectRef?.projectId, 2026-10-23T23:34:17.9273752Z 773 │ releaseShareReservation, 2026-10-23T23:34:17.9273826Z 774 │ reserveShare, 2026-10-23T23:34:17.9274042Z 775 │ selectedEnvironmentServerConfig, 2026-10-23T23:34:17.9274223Z 776 │ selectedProject, 2026-10-23T23:34:17.9274327Z 777 │ shareImportAttempt, 2026-10-23T23:34:17.9274430Z ·  ─────────┬──────── 2026-10-23T23:34:17.9274631Z · ╰── Unnecessary dependency `shareImportAttempt` 2026-10-23T23:34:17.9274704Z 778 │ ]); 2026-10-23T23:34:17.9274775Z ╰──── 2026-10-23T23:34:17.9275207Z  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-23T23:34:17.9275578Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.9275581Z 2026-10-23T23:34:17.9276127Z ⚠ 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-23T23:34:17.9276284Z ╭─[apps/server/src/serverSettings.test.ts:1741:32] 2026-10-23T23:34:17.9276489Z 1740 │ const model = createModelSelection(ProviderInstanceId.make("codex"), "gpt-5.5"); 2026-10-23T23:34:17.9276711Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-23T23:34:17.9276858Z ·  ─────────────────── 2026-10-23T23:34:17.9276992Z 1742 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-23T23:34:17.9277058Z ╰──── 2026-10-23T23:34:17.9277061Z 2026-10-23T23:34:17.9277593Z ⚠ 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-23T23:34:17.9277751Z ╭─[apps/server/src/serverSettings.test.ts:1742:34] 2026-10-23T23:34:17.9277979Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-23T23:34:17.9278111Z 1742 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-23T23:34:17.9278248Z ·  ─────────────────── 2026-10-23T23:34:17.9278396Z 1743 │ Schema.fromJsonString(Schema.Array(ProjectScript)), 2026-10-23T23:34:17.9278468Z ╰──── 2026-10-23T23:34:17.9278470Z 2026-10-23T23:34:17.9278747Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-23T23:34:17.9279009Z ╭─[apps/mobile/src/state/use-composer-drafts.ts:1022:15] 2026-10-23T23:34:17.9279216Z 1021 │ instanceId, 2026-10-23T23:34:17.9279401Z 1022 │ { ...(persisted.modelOptionMemory[instanceId] ?? {}), ...models }, 2026-10-23T23:34:17.9279597Z ·  ────────────────────────────────────────────────── 2026-10-23T23:34:17.9279683Z 1023 │ ]), 2026-10-23T23:34:17.9279747Z ╰──── 2026-10-23T23:34:17.9280159Z  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-23T23:34:17.9280163Z 2026-10-23T23:34:17.9280526Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T23:34:17.9280726Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:400:5] 2026-10-23T23:34:17.9280796Z 398 │ 2026-10-23T23:34:17.9280891Z 399 │ useEffect(() => { 2026-10-23T23:34:17.9280982Z ·  ────┬──── 2026-10-23T23:34:17.9281152Z · ╰── This is the containing effect 2026-10-23T23:34:17.9281262Z 400 │ setInspectorSelection((current) => { 2026-10-23T23:34:17.9281371Z ·  ──────────┬────────── 2026-10-23T23:34:17.9281579Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T23:34:17.9281708Z 401 │ if (props.renderInspector === undefined) { 2026-10-23T23:34:17.9281768Z ╰──── 2026-10-23T23:34:17.9282499Z  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-23T23:34:17.9282900Z  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-23T23:34:17.9282904Z 2026-10-23T23:34:17.9283166Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-23T23:34:17.9283352Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:528:24] 2026-10-23T23:34:17.9283540Z 527 │ const inspectorHeaderInset = Platform.OS === "ios" ? 0 : safeAreaInsets.top; 2026-10-23T23:34:17.9283751Z 528 │ ╭─▶ const GitInspector = () => ( 2026-10-23T23:34:17.9283877Z 529 │ │ 2026-10-23T23:34:17.9284636Z 534 │ ╰─▶ ); 2026-10-23T23:34:17.9284732Z 535 │ const FilesInspector = () => 2026-10-23T23:34:17.9284800Z ╰──── 2026-10-23T23:34:17.9285073Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-23T23:34:17.9285076Z 2026-10-23T23:34:17.9285425Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-23T23:34:17.9285771Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:535:26] 2026-10-23T23:34:17.9285846Z 534 │ ); 2026-10-23T23:34:17.9286050Z 535 │ ╭─▶ const FilesInspector = () => 2026-10-23T23:34:17.9286238Z 536 │ │ selectedThread !== null && selectedThreadCwd !== null ? ( 2026-10-23T23:34:17.9286411Z 537 │ │ 2026-10-23T23:34:17.9287656Z 545 │ ╰─▶ ) : null; 2026-10-23T23:34:17.9287837Z 546 │ const RouteInspector = () => props.renderInspector?.(inspectorHeaderInset); 2026-10-23T23:34:17.9287910Z ╰──── 2026-10-23T23:34:17.9288179Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-23T23:34:17.9288184Z 2026-10-23T23:34:17.9288437Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T23:34:17.9288582Z ╭─[apps/mobile/src/state/thread-order.ts:29:7] 2026-10-23T23:34:17.9288697Z 28 │ getPendingThreadOrder(); 2026-10-23T23:34:17.9288821Z 29 │ }, [nowMinute, snoozeWakeTick]); 2026-10-23T23:34:17.9288982Z ·  ────┬──── ───────┬────── 2026-10-23T23:34:17.9289213Z · │ ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-23T23:34:17.9289388Z · ╰── Unnecessary dependency `nowMinute` 2026-10-23T23:34:17.9289475Z 30 │ return pending; 2026-10-23T23:34:17.9289548Z ╰──── 2026-10-23T23:34:17.9289892Z  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-23T23:34:17.9290281Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.9290288Z 2026-10-23T23:34:17.9290687Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-23T23:34:17.9290879Z ╭─[apps/web/src/components/settings/SettingInheritance.tsx:163:24] 2026-10-23T23:34:17.9290955Z 162 │ keys, 2026-10-23T23:34:17.9291044Z 163 │ overridingProjects = [], 2026-10-23T23:34:17.9291146Z ·  ── 2026-10-23T23:34:17.9291231Z 164 │ onClearOverrides, 2026-10-23T23:34:17.9291298Z ╰──── 2026-10-23T23:34:17.9291674Z  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-23T23:34:17.9291678Z 2026-10-23T23:34:17.9291985Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-23T23:34:17.9292259Z ╭─[apps/server/src/process/externalLauncher.test.ts:186:12] 2026-10-23T23:34:17.9292330Z 185 │ 2026-10-23T23:34:17.9292453Z 186 │ for (const {} of ["darwin", "linux"] as const) { 2026-10-23T23:34:17.9292544Z ·  ── 2026-10-23T23:34:17.9292612Z 187 │ } 2026-10-23T23:34:17.9292677Z ╰──── 2026-10-23T23:34:17.9293027Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-23T23:34:17.9293031Z 2026-10-23T23:34:17.9293234Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-23T23:34:17.9293405Z ╭─[apps/server/src/process/externalLauncher.test.ts:189:12] 2026-10-23T23:34:17.9293480Z 188 │ 2026-10-23T23:34:17.9293559Z 189 │ for (const {} of [ 2026-10-23T23:34:17.9293649Z ·  ── 2026-10-23T23:34:17.9293768Z 190 │ { kind: "browser", folderVerb: "none" }, 2026-10-23T23:34:17.9293831Z ╰──── 2026-10-23T23:34:17.9294100Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-23T23:34:17.9294103Z 2026-10-23T23:34:17.9294310Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-23T23:34:17.9294479Z ╭─[apps/server/src/process/externalLauncher.test.ts:311:12] 2026-10-23T23:34:17.9294549Z 310 │ 2026-10-23T23:34:17.9294707Z 311 │ for (const {} of ["rejected", "spawn-error", "stalled"] as const) { 2026-10-23T23:34:17.9294801Z ·  ── 2026-10-23T23:34:17.9294879Z 312 │ } 2026-10-23T23:34:17.9294954Z ╰──── 2026-10-23T23:34:17.9295220Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-23T23:34:17.9295223Z 2026-10-23T23:34:17.9295428Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-23T23:34:17.9295599Z ╭─[apps/server/src/process/externalLauncher.test.ts:314:12] 2026-10-23T23:34:17.9295667Z 313 │ 2026-10-23T23:34:17.9295742Z 314 │ for (const {} of [ 2026-10-23T23:34:17.9295828Z ·  ── 2026-10-23T23:34:17.9295901Z 315 │ { 2026-10-23T23:34:17.9295972Z ╰──── 2026-10-23T23:34:17.9296342Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-23T23:34:17.9296349Z 2026-10-23T23:34:17.9296643Z ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed 2026-10-23T23:34:17.9296857Z ╭─[apps/server/src/sourceControl/SourceControlProviderRegistry.ts:15:13] 2026-10-23T23:34:17.9296946Z 14 │ } from "@t3tools/contracts"; 2026-10-23T23:34:17.9297056Z 15 │ import type {} from "@t3tools/contracts"; 2026-10-23T23:34:17.9297156Z ·  ── 2026-10-23T23:34:17.9297377Z 16 │ import { detectSourceControlProviderFromRemoteUrl } from "@t3tools/shared/sourceControl"; 2026-10-23T23:34:17.9297445Z ╰──── 2026-10-23T23:34:17.9297544Z  help: Remove empty braces 2026-10-23T23:34:17.9297547Z 2026-10-23T23:34:17.9298235Z ⚠ 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-23T23:34:17.9298552Z ╭─[apps/server/src/usage/UsageService.test.ts:2383:7] 2026-10-23T23:34:17.9298700Z 2382 │ let orphanedAt: number | undefined; 2026-10-23T23:34:17.9298999Z 2383 │ ╭─▶ for (let interruptAt = 1; interruptAt <= 31; interruptAt += 1) { 2026-10-23T23:34:17.9299159Z 2384 │ │ const tasks: Array<() => void> = []; 2026-10-23T23:34:17.9299420Z 2385 │ │ const dispatcher: Scheduler.SchedulerDispatcher = { 2026-10-23T23:34:17.9299588Z 2386 │ │ scheduleTask: (task) => tasks.push(task), 2026-10-23T23:34:17.9299719Z 2387 │ │ flush: () => { 2026-10-23T23:34:17.9299873Z 2388 │ │ let task: (() => void) | undefined; 2026-10-23T23:34:17.9300075Z 2389 │ │ while ((task = tasks.shift()) !== undefined) task(); 2026-10-23T23:34:17.9300188Z 2390 │ │ }, 2026-10-23T23:34:17.9300292Z 2391 │ │ }; 2026-10-23T23:34:17.9300421Z 2392 │ │ 2026-10-23T23:34:17.9300635Z 2393 │ │ let requestFiber: Fiber.Fiber | undefined; 2026-10-23T23:34:17.9300769Z 2394 │ │ let requestChecks = 0; 2026-10-23T23:34:17.9300930Z 2395 │ │ const scheduler: Scheduler.Scheduler = { 2026-10-23T23:34:17.9301062Z 2396 │ │ executionMode: "async", 2026-10-23T23:34:17.9301209Z 2397 │ │ makeDispatcher: () => dispatcher, 2026-10-23T23:34:17.9301350Z 2398 │ │ shouldYield: (fiber) => { 2026-10-23T23:34:17.9301654Z 2399 │ │ if (fiber !== requestFiber) return false; 2026-10-23T23:34:17.9301804Z 2400 │ │ requestChecks += 1; 2026-10-23T23:34:17.9301993Z 2401 │ │ if (requestChecks !== interruptAt) return false; 2026-10-23T23:34:17.9302141Z 2402 │ │ fiber.interruptUnsafe(); 2026-10-23T23:34:17.9302265Z 2403 │ │ return true; 2026-10-23T23:34:17.9302371Z 2404 │ │ }, 2026-10-23T23:34:17.9302470Z 2405 │ │ }; 2026-10-23T23:34:17.9302554Z 2406 │ │ 2026-10-23T23:34:17.9302709Z 2407 │ │ const input: UsageSummaryInput = { 2026-10-23T23:34:17.9302827Z 2408 │ │ ...WINDOW, 2026-10-23T23:34:17.9302988Z 2409 │ │ sinceDay: UsageDay.make("2026-09-01"), 2026-10-23T23:34:17.9303238Z 2410 │ │ untilDay: UsageDay.make(`2026-08-${String(interruptAt).padStart(2, "0")}`), 2026-10-23T23:34:17.9303343Z 2411 │ │ }; 2026-10-23T23:34:17.9303489Z 2412 │ │ const first = yield* service 2026-10-23T23:34:17.9303614Z 2413 │ │ .readSummary(input) 2026-10-23T23:34:17.9303730Z 2414 │ │ .pipe( 2026-10-23T23:34:17.9303854Z 2415 │ │ Effect.exit, 2026-10-23T23:34:17.9304048Z 2416 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-23T23:34:17.9304174Z 2417 │ │ Effect.forkChild, 2026-10-23T23:34:17.9304492Z 2418 │ │ ); 2026-10-23T23:34:17.9304774Z 2419 │ │ requestFiber = first; 2026-10-23T23:34:17.9304909Z 2420 │ │ yield* Effect.yieldNow; 2026-10-23T23:34:17.9305032Z 2421 │ │ dispatcher.flush(); 2026-10-23T23:34:17.9305123Z 2422 │ │ 2026-10-23T23:34:17.9305316Z 2423 │ │ const second = yield* service.readSummary(input).pipe( 2026-10-23T23:34:17.9305483Z 2424 │ │ Effect.match({ 2026-10-23T23:34:17.9305663Z 2425 │ │ onFailure: (error) => error.reason, 2026-10-23T23:34:17.9305826Z 2426 │ │ onSuccess: () => "success" as const, 2026-10-23T23:34:17.9305937Z 2427 │ │ }), 2026-10-23T23:34:17.9306141Z 2428 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-23T23:34:17.9306271Z 2429 │ │ Effect.forkChild, 2026-10-23T23:34:17.9306382Z 2430 │ │ ); 2026-10-23T23:34:17.9306512Z 2431 │ │ yield* Effect.yieldNow; 2026-10-23T23:34:17.9306643Z 2432 │ │ dispatcher.flush(); 2026-10-23T23:34:17.9306798Z 2433 │ │ const secondExit = second.pollUnsafe(); 2026-10-23T23:34:17.9306946Z 2434 │ │ if (secondExit === undefined) { 2026-10-23T23:34:17.9307086Z 2435 │ │ second.interruptUnsafe(); 2026-10-23T23:34:17.9307225Z 2436 │ │ orphanedAt = interruptAt; 2026-10-23T23:34:17.9307329Z 2437 │ │ break; 2026-10-23T23:34:17.9307435Z 2438 │ │ } 2026-10-23T23:34:17.9307586Z 2439 │ │ if (Exit.isFailure(secondExit)) { 2026-10-23T23:34:17.9307778Z 2440 │ │ assert.fail("the matching request fiber was interrupted"); 2026-10-23T23:34:17.9307872Z 2441 │ │ } 2026-10-23T23:34:17.9308063Z 2442 │ │ assert.strictEqual(secondExit.value, "invalidWindow"); 2026-10-23T23:34:17.9308230Z 2443 │ ╰─▶ } 2026-10-23T23:34:17.9308307Z 2444 │ 2026-10-23T23:34:17.9308370Z ╰──── 2026-10-23T23:34:17.9308374Z 2026-10-23T23:34:17.9308702Z ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'. 2026-10-23T23:34:17.9308858Z ╭─[apps/server/src/usage/UsageService.ts:169:7] 2026-10-23T23:34:17.9308936Z 168 │ 2026-10-23T23:34:17.9309032Z 169 │ const layerTest = Layer.succeed( 2026-10-23T23:34:17.9309133Z ·  ────┬──── 2026-10-23T23:34:17.9309298Z · ╰── 'layerTest' is declared here 2026-10-23T23:34:17.9309379Z 170 │ UsageService, 2026-10-23T23:34:17.9309439Z ╰──── 2026-10-23T23:34:17.9309573Z  help: Consider removing this declaration. 2026-10-23T23:34:17.9309576Z 2026-10-23T23:34:17.9309888Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T23:34:17.9310045Z ╭─[apps/mobile/src/state/use-vcs-action-state.ts:86:5] 2026-10-23T23:34:17.9310170Z 83 │ const [nowMs, setNowMs] = useState(() => Date.now()); 2026-10-23T23:34:17.9310425Z 84 │ useEffect(() => { 2026-10-23T23:34:17.9310618Z ·  ────┬──── 2026-10-23T23:34:17.9310803Z · ╰── This is the containing effect 2026-10-23T23:34:17.9310908Z 85 │ if (!actionState.isRunning) return; 2026-10-23T23:34:17.9310995Z 86 │ setNowMs(Date.now()); 2026-10-23T23:34:17.9311085Z ·  ────┬─── 2026-10-23T23:34:17.9311291Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T23:34:17.9311521Z 87 │ const interval = setInterval(() => setNowMs(Date.now()), 1000); 2026-10-23T23:34:17.9311592Z ╰──── 2026-10-23T23:34:17.9312316Z  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-23T23:34:17.9312719Z  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-23T23:34:17.9312722Z 2026-10-23T23:34:17.9312970Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T23:34:17.9313125Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:542:25] 2026-10-23T23:34:17.9313294Z 541 │ // range) the boundary string is identical and the chain would die. 2026-10-23T23:34:17.9313417Z 542 │ }, [nextSnoozeWakeAt, snoozeWakeTick]); 2026-10-23T23:34:17.9313547Z ·  ───────┬────── 2026-10-23T23:34:17.9313807Z · ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-23T23:34:17.9313981Z 543 │ const v2SearchQuery = props.searchQuery.trim().toLocaleLowerCase(); 2026-10-23T23:34:17.9314047Z ╰──── 2026-10-23T23:34:17.9314406Z  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-23T23:34:17.9314785Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.9314788Z 2026-10-23T23:34:17.9314990Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T23:34:17.9315147Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:533:53] 2026-10-23T23:34:17.9315256Z 532 │ if (Number.isNaN(wakeAtMs)) return; 2026-10-23T23:34:17.9315544Z 533 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647); 2026-10-23T23:34:17.9315809Z ·  ─────┬──── 2026-10-23T23:34:17.9316018Z · ╰── Cannot call impure function 2026-10-23T23:34:17.9316117Z 534 │ const id = setTimeout(() => { 2026-10-23T23:34:17.9316184Z ╰──── 2026-10-23T23:34:17.9316607Z  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-23T23:34:17.9316960Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T23:34:17.9316963Z 2026-10-23T23:34:17.9317186Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-23T23:34:17.9317337Z ╭─[apps/server/src/processRunner.test.ts:266:14] 2026-10-23T23:34:17.9317412Z 265 │ 2026-10-23T23:34:17.9317538Z 266 │ for (const {} of ["timeout", "success"] as const) { 2026-10-23T23:34:17.9317636Z ·  ── 2026-10-23T23:34:17.9317719Z 267 │ } 2026-10-23T23:34:17.9317785Z ╰──── 2026-10-23T23:34:17.9318067Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-23T23:34:17.9318070Z 2026-10-23T23:34:17.9318255Z ⚠ react(refs): Cannot access refs during render 2026-10-23T23:34:17.9318441Z ╭─[apps/mobile/src/features/home/thread-swipe-actions.tsx:494:27] 2026-10-23T23:34:17.9318521Z 493 │ > 2026-10-23T23:34:17.9318623Z 494 │ {props.children(close)} 2026-10-23T23:34:17.9318741Z ·  ──┬── 2026-10-23T23:34:17.9318936Z · ╰── Cannot access ref value during render 2026-10-23T23:34:17.9319036Z 495 │ 2026-10-23T23:34:17.9319096Z ╰──── 2026-10-23T23:34:17.9319659Z  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-23T23:34:17.9320009Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T23:34:17.9320013Z 2026-10-23T23:34:17.9320333Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T23:34:17.9320585Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:123:7] 2026-10-23T23:34:17.9320648Z 118 │ 2026-10-23T23:34:17.9320739Z 119 │ useEffect(() => { 2026-10-23T23:34:17.9320834Z ·  ────┬──── 2026-10-23T23:34:17.9320984Z · ╰── This is the containing effect 2026-10-23T23:34:17.9321089Z 120 │ if (orientationSettled) return; 2026-10-23T23:34:17.9321229Z 121 │ const orientation = getNativeShowcaseOrientation(); 2026-10-23T23:34:17.9321325Z 122 │ if (orientation === null) { 2026-10-23T23:34:17.9321421Z 123 │ setOrientationSettled(true); 2026-10-23T23:34:17.9321538Z ·  ──────────┬────────── 2026-10-23T23:34:17.9321849Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T23:34:17.9322031Z 124 │ return; 2026-10-23T23:34:17.9322115Z ╰──── 2026-10-23T23:34:17.9322862Z  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-23T23:34:17.9323296Z  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-23T23:34:17.9323299Z 2026-10-23T23:34:17.9323613Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T23:34:17.9323823Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:304:7] 2026-10-23T23:34:17.9323888Z 292 │ 2026-10-23T23:34:17.9323973Z 293 │ useEffect(() => { 2026-10-23T23:34:17.9324062Z ·  ────┬──── 2026-10-23T23:34:17.9324219Z · ╰── This is the containing effect 2026-10-23T23:34:17.9324291Z 294 │ if ( 2026-10-23T23:34:17.9324378Z 295 │ scene === null || 2026-10-23T23:34:17.9324479Z 296 │ requestedScene === null || 2026-10-23T23:34:17.9324573Z 297 │ scene !== requestedScene || 2026-10-23T23:34:17.9324649Z 298 │ !hasFixture || 2026-10-23T23:34:17.9324743Z 299 │ !orientationSettled || 2026-10-23T23:34:17.9324827Z 300 │ !themeApplied || 2026-10-23T23:34:17.9324980Z 301 │ (scene === "agent-activity" && !agentActivityStaged) || 2026-10-23T23:34:17.9325142Z 302 │ !isShowcaseNativeContentReady({ scene, themeId, renderSignal }) 2026-10-23T23:34:17.9325218Z 303 │ ) { 2026-10-23T23:34:17.9325307Z 304 │ setReadyScene(null); 2026-10-23T23:34:17.9325405Z ·  ──────┬────── 2026-10-23T23:34:17.9325607Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T23:34:17.9325690Z 305 │ return; 2026-10-23T23:34:17.9325764Z ╰──── 2026-10-23T23:34:17.9326472Z  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-23T23:34:17.9326856Z  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-23T23:34:17.9326870Z 2026-10-23T23:34:17.9327188Z ⚠ eslint(no-unused-vars): Variable 'lastOutcome' is declared but never used. Unused variables should start with a '_'. 2026-10-23T23:34:17.9327393Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:128:9] 2026-10-23T23:34:17.9327486Z 127 │ let cancelled = false; 2026-10-23T23:34:17.9327593Z 128 │ let lastOutcome: string | null = null; 2026-10-23T23:34:17.9327685Z ·  ─────┬───── 2026-10-23T23:34:17.9327855Z · ╰── 'lastOutcome' is declared here 2026-10-23T23:34:17.9328070Z 129 │ void retryShowcaseOperation(async () => applyNativeShowcaseOrientation(orientation), { 2026-10-23T23:34:17.9328262Z ╰──── 2026-10-23T23:34:17.9328495Z  help: Consider removing this declaration. 2026-10-23T23:34:17.9328498Z 2026-10-23T23:34:17.9328743Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T23:34:17.9328924Z ╭─[apps/mobile/src/components/ComposerContextSheet.tsx:267:25] 2026-10-23T23:34:17.9329057Z 266 │ {record.elements?.map((element, index) => ( 2026-10-23T23:34:17.9329306Z 267 │ 2026-10-23T23:34:17.9329538Z ·  ─────────────────────────────────────────────────────── 2026-10-23T23:34:17.9329640Z 268 │ { 2026-10-23T23:34:17.9332446Z ·  ────┬──── 2026-10-23T23:34:17.9332608Z · ╰── This is the containing effect 2026-10-23T23:34:17.9332724Z 59 │ const controller = new AbortController(); 2026-10-23T23:34:17.9332814Z 60 │ setLoadState("pending"); 2026-10-23T23:34:17.9332910Z ·  ──────┬───── 2026-10-23T23:34:17.9333121Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T23:34:17.9333318Z 61 │ // A renewed signature is used on Retry, not as a reason to reset the native player. 2026-10-23T23:34:17.9333387Z ╰──── 2026-10-23T23:34:17.9334100Z  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-23T23:34:17.9334487Z  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-23T23:34:17.9334490Z 2026-10-23T23:34:17.9334846Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T23:34:17.9335099Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:71:7] 2026-10-23T23:34:17.9335205Z 70 │ return () => controller.abort(); 2026-10-23T23:34:17.9335326Z 71 │ }, [player, props.playRequested, attempt]); 2026-10-23T23:34:17.9335536Z ·  ───┬── ─────────┬───────── ───┬─── 2026-10-23T23:34:17.9335839Z · │ │ ╰── Unnecessary dependency `attempt` 2026-10-23T23:34:17.9336130Z · │ ╰── Unnecessary dependency `props.playRequested` 2026-10-23T23:34:17.9336411Z · ╰── Unnecessary dependency `player_0` 2026-10-23T23:34:17.9336506Z 72 │ 2026-10-23T23:34:17.9336580Z ╰──── 2026-10-23T23:34:17.9336940Z  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-23T23:34:17.9337325Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.9337328Z 2026-10-23T23:34:17.9337663Z ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'. 2026-10-23T23:34:17.9337828Z ╭─[apps/server/src/telemetry/AnalyticsService.ts:340:7] 2026-10-23T23:34:17.9337891Z 339 │ 2026-10-23T23:34:17.9338040Z 340 │ const layerTest = AnalyticsService.layerTest; 2026-10-23T23:34:17.9338143Z ·  ────┬──── 2026-10-23T23:34:17.9338314Z · ╰── 'layerTest' is declared here 2026-10-23T23:34:17.9338383Z ╰──── 2026-10-23T23:34:17.9338518Z  help: Consider removing this declaration. 2026-10-23T23:34:17.9338521Z 2026-10-23T23:34:17.9338726Z ⚠ eslint(no-control-regex): Unexpected control character 2026-10-23T23:34:17.9338959Z ╭─[apps/mobile/src/features/settings/SettingsProviderAccountsRouteScreen.tsx:220:46] 2026-10-23T23:34:17.9339123Z 219 │ 2026-10-23T23:34:17.9339318Z 220 │ {interaction.output.replace(/\x1b\[[0-?]*[ -/]*[@-~]/g, "")} 2026-10-23T23:34:17.9339455Z ·  ──┬─ 2026-10-23T23:34:17.9339672Z · ╰── 'U+001B' is a control character. 2026-10-23T23:34:17.9339754Z 221 │ 2026-10-23T23:34:17.9339831Z ╰──── 2026-10-23T23:34:17.9340116Z  help: Avoid matching control characters in regular expressions. If intentional, disable this rule for the expression. 2026-10-23T23:34:17.9340119Z 2026-10-23T23:34:17.9340506Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T23:34:17.9340684Z ╭─[apps/mobile/src/components/VideoPreviewModal.ios.tsx:63:55] 2026-10-23T23:34:17.9340765Z 61 │ }, []); 2026-10-23T23:34:17.9340849Z 62 │ useEffect(() => { 2026-10-23T23:34:17.9340936Z ·  ────┬──── 2026-10-23T23:34:17.9341090Z · ╰── This is the containing effect 2026-10-23T23:34:17.9341385Z 63 │ if (playbackUrl === null && resolvedUrl !== null) setPlaybackUrl(resolvedUrl); 2026-10-23T23:34:17.9341801Z ·  ───────┬────── 2026-10-23T23:34:17.9342067Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T23:34:17.9342177Z 64 │ }, [playbackUrl, resolvedUrl]); 2026-10-23T23:34:17.9342245Z ╰──── 2026-10-23T23:34:17.9343050Z  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-23T23:34:17.9343453Z  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-23T23:34:17.9343460Z 2026-10-23T23:34:17.9343768Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T23:34:17.9343994Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:119:10] 2026-10-23T23:34:17.9344057Z 117 │ 2026-10-23T23:34:17.9344144Z 118 │ useEffect(() => { 2026-10-23T23:34:17.9344231Z ·  ────┬──── 2026-10-23T23:34:17.9344382Z · ╰── This is the containing effect 2026-10-23T23:34:17.9344483Z 119 │ void refreshNotifications(); 2026-10-23T23:34:17.9344598Z ·  ──────────┬───────── 2026-10-23T23:34:17.9344820Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T23:34:17.9344996Z 120 │ const subscription = AppState.addEventListener("change", (state) => { 2026-10-23T23:34:17.9345055Z ╰──── 2026-10-23T23:34:17.9345759Z  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-23T23:34:17.9346145Z  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-23T23:34:17.9346149Z 2026-10-23T23:34:17.9346458Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T23:34:17.9346878Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:128:7] 2026-10-23T23:34:17.9347084Z 125 │ 2026-10-23T23:34:17.9347179Z 126 │ useEffect(() => { 2026-10-23T23:34:17.9347269Z ·  ────┬──── 2026-10-23T23:34:17.9347427Z · ╰── This is the containing effect 2026-10-23T23:34:17.9347515Z 127 │ if (!isLoaded) { 2026-10-23T23:34:17.9347631Z 128 │ setLiveActivityStatus("checking"); 2026-10-23T23:34:17.9347762Z ·  ──────────┬────────── 2026-10-23T23:34:17.9348031Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T23:34:17.9348110Z 129 │ return; 2026-10-23T23:34:17.9348177Z ╰──── 2026-10-23T23:34:17.9348884Z  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-23T23:34:17.9349275Z  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-23T23:34:17.9349278Z 2026-10-23T23:34:17.9349579Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T23:34:17.9349738Z ╭─[apps/mobile/src/components/ProjectFavicon.tsx:158:5] 2026-10-23T23:34:17.9349976Z 153 │ const [activeFaviconRequest, setActiveFaviconRequest] = useState(null); 2026-10-23T23:34:17.9350067Z 154 │ useLayoutEffect(() => { 2026-10-23T23:34:17.9350164Z ·  ───────┬─────── 2026-10-23T23:34:17.9350326Z · ╰── This is the containing effect 2026-10-23T23:34:17.9350488Z 155 │ if (faviconRequest === null) return; 2026-10-23T23:34:17.9350564Z 156 │ 2026-10-23T23:34:17.9350717Z 157 │ const endRequest = beginProjectFaviconRequest(faviconRequest); 2026-10-23T23:34:17.9350833Z 158 │ setActiveFaviconRequest(faviconRequest); 2026-10-23T23:34:17.9350949Z ·  ───────────┬─────────── 2026-10-23T23:34:17.9351160Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T23:34:17.9351241Z 159 │ return endRequest; 2026-10-23T23:34:17.9351309Z ╰──── 2026-10-23T23:34:17.9352023Z  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-23T23:34:17.9352407Z  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-23T23:34:17.9352410Z 2026-10-23T23:34:17.9352853Z ⚠ 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-23T23:34:17.9353007Z ╭─[apps/server/src/auth/RpcAuthorization.ts:237:17] 2026-10-23T23:34:17.9353175Z 236 │ const requiredScopesForSettingsUpdate = (payload: unknown) => { 2026-10-23T23:34:17.9353440Z 237 │ const input = Schema.decodeUnknownSync(SettingsUpdate)(payload); 2026-10-23T23:34:17.9353678Z ·  ──────────────────────── 2026-10-23T23:34:17.9353852Z 238 │ const scopes = requiredScopesForServerSettingsPatch(input.patch); 2026-10-23T23:34:17.9353913Z ╰──── 2026-10-23T23:34:17.9353916Z 2026-10-23T23:34:17.9354414Z ⚠ 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-23T23:34:17.9354584Z ╭─[apps/server/src/auth/RpcAuthorization.ts:256:26] 2026-10-23T23:34:17.9354710Z 255 │ if (method === WS_METHODS.assetsCreateUrl) { 2026-10-23T23:34:17.9354893Z 256 │ const { resource } = Schema.decodeUnknownSync(AssetCreateUrlInput)(payload); 2026-10-23T23:34:17.9355046Z ·  ──────────────────────── 2026-10-23T23:34:17.9355136Z 257 │ return [ 2026-10-23T23:34:17.9355203Z ╰──── 2026-10-23T23:34:17.9355206Z 2026-10-23T23:34:17.9355506Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T23:34:17.9355674Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:68:5] 2026-10-23T23:34:17.9355814Z 66 │ const { id: attachmentId, fileUri } = attachment; 2026-10-23T23:34:17.9355903Z 67 │ useEffect(() => { 2026-10-23T23:34:17.9355995Z ·  ────┬──── 2026-10-23T23:34:17.9356154Z · ╰── This is the containing effect 2026-10-23T23:34:17.9356234Z 68 │ setUri(null); 2026-10-23T23:34:17.9356321Z ·  ───┬── 2026-10-23T23:34:17.9356524Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T23:34:17.9356608Z 69 │ setError(null); 2026-10-23T23:34:17.9356679Z ╰──── 2026-10-23T23:34:17.9357388Z  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-23T23:34:17.9357774Z  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-23T23:34:17.9357779Z 2026-10-23T23:34:17.9358034Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T23:34:17.9358209Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:91:7] 2026-10-23T23:34:17.9358287Z 90 │ }; 2026-10-23T23:34:17.9358384Z 91 │ }, [attachmentId, fileUri]); 2026-10-23T23:34:17.9358521Z ·  ──────┬───── ───┬─── 2026-10-23T23:34:17.9358743Z · │ ╰── Unnecessary dependency `fileUri` 2026-10-23T23:34:17.9358930Z · ╰── Unnecessary dependency `attachmentId` 2026-10-23T23:34:17.9359095Z 92 │ const mimeType = videoMimeType(attachment) ?? attachment.mimeType; 2026-10-23T23:34:17.9359157Z ╰──── 2026-10-23T23:34:17.9359507Z  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-23T23:34:17.9359983Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.9360041Z 2026-10-23T23:34:17.9360397Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-23T23:34:17.9360579Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:213:34] 2026-10-23T23:34:17.9360659Z 212 │ useEffect(() => { 2026-10-23T23:34:17.9360809Z 213 │ if (!isFocused && hasSource) props.onRequestClose(); 2026-10-23T23:34:17.9360992Z ·  ──┬── 2026-10-23T23:34:17.9361202Z · ╰── Missing dependency `props` 2026-10-23T23:34:17.9361327Z 214 │ }, [isFocused, hasSource, props.onRequestClose]); 2026-10-23T23:34:17.9361463Z ·  ──────────┬───────── 2026-10-23T23:34:17.9361742Z · ╰── Overly precise dependency `props.onRequestClose`, use `props` instead 2026-10-23T23:34:17.9361844Z 215 │ const { source } = props; 2026-10-23T23:34:17.9361911Z ╰──── 2026-10-23T23:34:17.9362427Z  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-23T23:34:17.9362812Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.9362815Z 2026-10-23T23:34:17.9363058Z ⚠ eslint(no-unused-vars): Identifier 'identity' is imported but never used. 2026-10-23T23:34:17.9363198Z ╭─[apps/server/src/auth/http.ts:28:10] 2026-10-23T23:34:17.9363306Z 27 │ import * as Schema from "effect/Schema"; 2026-10-23T23:34:17.9363426Z 28 │ import { identity } from "effect/Function"; 2026-10-23T23:34:17.9363526Z ·  ────┬─── 2026-10-23T23:34:17.9363693Z · ╰── 'identity' is imported here 2026-10-23T23:34:17.9363791Z 29 │ import * as Layer from "effect/Layer"; 2026-10-23T23:34:17.9363860Z ╰──── 2026-10-23T23:34:17.9363983Z  help: Consider removing this import. 2026-10-23T23:34:17.9363986Z 2026-10-23T23:34:17.9364296Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T23:34:17.9364465Z ╭─[apps/mobile/src/features/files/FileTreeBrowser.tsx:155:5] 2026-10-23T23:34:17.9364538Z 150 │ 2026-10-23T23:34:17.9364636Z 151 │ useEffect(() => { 2026-10-23T23:34:17.9364733Z ·  ────┬──── 2026-10-23T23:34:17.9364885Z · ╰── This is the containing effect 2026-10-23T23:34:17.9364994Z 152 │ if (!controlledSelectedPath) { 2026-10-23T23:34:17.9365074Z 153 │ return; 2026-10-23T23:34:17.9365149Z 154 │ } 2026-10-23T23:34:17.9365249Z 155 │ setExpandedPaths((current) => { 2026-10-23T23:34:17.9365356Z ·  ────────┬─────── 2026-10-23T23:34:17.9365569Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T23:34:17.9365718Z 156 │ const ancestors = ancestorPaths(controlledSelectedPath); 2026-10-23T23:34:17.9365779Z ╰──── 2026-10-23T23:34:17.9366604Z  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-23T23:34:17.9367101Z  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-23T23:34:17.9367105Z 2026-10-23T23:34:17.9367340Z ⚠ eslint(no-unused-vars): Identifier 'Fiber' is imported but never used. 2026-10-23T23:34:17.9367462Z ╭─[apps/server/src/ws.ts:10:13] 2026-10-23T23:34:17.9367625Z  9 │ import * as Effect from "effect/Effect"; 2026-10-23T23:34:17.9367740Z 10 │ import * as Fiber from "effect/Fiber"; 2026-10-23T23:34:17.9367834Z ·  ──┬── 2026-10-23T23:34:17.9367999Z · ╰── 'Fiber' is imported here 2026-10-23T23:34:17.9368121Z 11 │ import * as FileSystem from "effect/FileSystem"; 2026-10-23T23:34:17.9368192Z ╰──── 2026-10-23T23:34:17.9368311Z  help: Consider removing this import. 2026-10-23T23:34:17.9368314Z 2026-10-23T23:34:17.9368553Z ⚠ eslint(no-unused-vars): Identifier 'Schedule' is imported but never used. 2026-10-23T23:34:17.9368664Z ╭─[apps/server/src/ws.ts:17:13] 2026-10-23T23:34:17.9368763Z 16 │ import * as Ref from "effect/Ref"; 2026-10-23T23:34:17.9368876Z 17 │ import * as Schedule from "effect/Schedule"; 2026-10-23T23:34:17.9368977Z ·  ────┬─── 2026-10-23T23:34:17.9369138Z · ╰── 'Schedule' is imported here 2026-10-23T23:34:17.9369252Z 18 │ import * as Schema from "effect/Schema"; 2026-10-23T23:34:17.9369323Z ╰──── 2026-10-23T23:34:17.9369449Z  help: Consider removing this import. 2026-10-23T23:34:17.9369452Z 2026-10-23T23:34:17.9369803Z ⚠ eslint(no-unused-vars): Variable 'projectSetupScriptRunner' is declared but never used. Unused variables should start with a '_'. 2026-10-23T23:34:17.9369927Z ╭─[apps/server/src/ws.ts:1285:13] 2026-10-23T23:34:17.9370120Z 1284 │ const usageLimitSources = yield* UsageLimitSources.UsageLimitSources; 2026-10-23T23:34:17.9370404Z 1285 │ const projectSetupScriptRunner = yield* ProjectSetupScriptRunner.ProjectSetupScriptRunner; 2026-10-23T23:34:17.9370543Z ·  ────────────┬─────────── 2026-10-23T23:34:17.9370771Z · ╰── 'projectSetupScriptRunner' is declared here 2026-10-23T23:34:17.9371129Z 1286 │ const worktreeSetupTracker = yield* WorktreeSetupTracker.WorktreeSetupTracker; 2026-10-23T23:34:17.9371373Z ╰──── 2026-10-23T23:34:17.9371524Z  help: Consider removing this declaration. 2026-10-23T23:34:17.9371527Z 2026-10-23T23:34:17.9371719Z ⚠ react(refs): Cannot access refs during render 2026-10-23T23:34:17.9371909Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:152:27] 2026-10-23T23:34:17.9372203Z 151 │ 2026-10-23T23:34:17.9372324Z 152 │ {props.children(open)} 2026-10-23T23:34:17.9372450Z ·  ──┬─ 2026-10-23T23:34:17.9372659Z · ╰── Cannot access ref value during render 2026-10-23T23:34:17.9372764Z 153 │ 2026-10-23T23:34:17.9372828Z ╰──── 2026-10-23T23:34:17.9373399Z  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-23T23:34:17.9373748Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T23:34:17.9373751Z 2026-10-23T23:34:17.9374004Z ⚠ react(memo-dependencies): Found missing/extra memoization dependencies 2026-10-23T23:34:17.9374195Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:140:9] 2026-10-23T23:34:17.9374297Z 139 │ if (action.id !== undefined) { 2026-10-23T23:34:17.9374415Z 140 │ props.onPressAction?.({ 2026-10-23T23:34:17.9374512Z ·  ──┬── 2026-10-23T23:34:17.9374682Z · ╰── Missing dependency `props` 2026-10-23T23:34:17.9374792Z 141 │ nativeEvent: { event: action.id }, 2026-10-23T23:34:17.9374974Z 142 │ } as Parameters>[0]); 2026-10-23T23:34:17.9375044Z 143 │ } 2026-10-23T23:34:17.9375122Z 144 │ }, 2026-10-23T23:34:17.9375221Z 145 │ [close, props.onPressAction], 2026-10-23T23:34:17.9375346Z ·  ─────────┬───────── 2026-10-23T23:34:17.9375612Z · ╰── Overly precise dependency `props.onPressAction`, use `props` instead 2026-10-23T23:34:17.9375684Z 146 │ ); 2026-10-23T23:34:17.9375746Z ╰──── 2026-10-23T23:34:17.9376331Z  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-23T23:34:17.9376714Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.9376719Z 2026-10-23T23:34:17.9376967Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T23:34:17.9377162Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:257:7] 2026-10-23T23:34:17.9377279Z 256 │ return () => cancelAnimationFrame(frame); 2026-10-23T23:34:17.9377374Z 257 │ }, [props.path, targetIndex]); 2026-10-23T23:34:17.9377474Z ·  ─────┬──── 2026-10-23T23:34:17.9377747Z · ╰── Unnecessary dependency `props.path` 2026-10-23T23:34:17.9377860Z 258 │ 2026-10-23T23:34:17.9377975Z ╰──── 2026-10-23T23:34:17.9378337Z  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-23T23:34:17.9378766Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.9378770Z 2026-10-23T23:34:17.9379016Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T23:34:17.9379196Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:293:23] 2026-10-23T23:34:17.9379291Z 292 │ 2026-10-23T23:34:17.9380668Z ·  ─────────── 2026-10-23T23:34:17.9380751Z 310 │ {body} 2026-10-23T23:34:17.9380829Z ╰──── 2026-10-23T23:34:17.9381005Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-23T23:34:17.9381008Z 2026-10-23T23:34:17.9381705Z ⚠ 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-23T23:34:17.9381920Z ╭─[apps/mobile/src/features/agent-awareness/remoteRegistration.test.ts:223:5] 2026-10-23T23:34:17.9382009Z 222 │ let idlePasses = 0; 2026-10-23T23:34:17.9382185Z 223 │ ╭─▶ for (;;) { 2026-10-23T23:34:17.9382351Z 224 │ │ yield* Effect.promise(() => Promise.resolve()); 2026-10-23T23:34:17.9382528Z 225 │ │ const pending = backgroundRuntime.pending.shift(); 2026-10-23T23:34:17.9382653Z 226 │ │ if (!pending) { 2026-10-23T23:34:17.9382768Z 227 │ │ idlePasses++; 2026-10-23T23:34:17.9382898Z 228 │ │ if (idlePasses >= 3) { 2026-10-23T23:34:17.9382997Z 229 │ │ return; 2026-10-23T23:34:17.9383104Z 230 │ │ } 2026-10-23T23:34:17.9383219Z 231 │ │ continue; 2026-10-23T23:34:17.9383311Z 232 │ │ } 2026-10-23T23:34:17.9383421Z 233 │ │ idlePasses = 0; 2026-10-23T23:34:17.9383566Z 234 │ │ const exit = yield* Effect.exit( 2026-10-23T23:34:17.9383962Z 235 │ │ pending.operation as Effect.Effect, 2026-10-23T23:34:17.9384226Z 236 │ │ ); 2026-10-23T23:34:17.9384361Z 237 │ │ yield* Effect.sync(() => { 2026-10-23T23:34:17.9384492Z 238 │ │ pending.resolve(exit); 2026-10-23T23:34:17.9384591Z 239 │ │ }); 2026-10-23T23:34:17.9384748Z 240 │ ╰─▶ } 2026-10-23T23:34:17.9384815Z 241 │ }, 2026-10-23T23:34:17.9384916Z ╰──── 2026-10-23T23:34:17.9384921Z 2026-10-23T23:34:17.9385214Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T23:34:17.9385407Z ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:215:7] 2026-10-23T23:34:17.9385474Z 214 │ } 2026-10-23T23:34:17.9385570Z 215 │ }, [wrappedRender]); 2026-10-23T23:34:17.9385676Z ·  ──────┬────── 2026-10-23T23:34:17.9385859Z · ╰── Unnecessary dependency `wrappedRender` 2026-10-23T23:34:17.9385921Z 216 │ 2026-10-23T23:34:17.9385986Z ╰──── 2026-10-23T23:34:17.9386341Z  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-23T23:34:17.9386709Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.9386714Z 2026-10-23T23:34:17.9387000Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-23T23:34:17.9387195Z ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:817:35] 2026-10-23T23:34:17.9387268Z 816 │ > 2026-10-23T23:34:17.9387400Z 817 │ 2026-10-23T23:34:17.9387542Z ·  ──────────────────── 2026-10-23T23:34:17.9387655Z 818 │ 2026-10-23T23:34:17.9388865Z 832 │ 2026-10-23T23:34:17.9389003Z ·  ──────────────────── 2026-10-23T23:34:17.9389124Z 833 │ 2026-10-23T23:34:17.9389186Z ╰──── 2026-10-23T23:34:17.9389447Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-23T23:34:17.9389606Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-23T23:34:17.9389615Z 2026-10-23T23:34:17.9389853Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-23T23:34:17.9390154Z ╭─[apps/web/src/components/settings/ProviderSettingsPanel.logic.ts:4:8] 2026-10-23T23:34:17.9390329Z 3 │ AuthProvidersManageScope, 2026-10-23T23:34:17.9390471Z 4 │ type AuthSessionState, 2026-10-23T23:34:17.9390567Z ·  ────────┬─────── 2026-10-23T23:34:17.9390747Z · ╰── 'AuthSessionState' is imported here 2026-10-23T23:34:17.9390833Z 5 │ type EnvironmentId, 2026-10-23T23:34:17.9390897Z ╰──── 2026-10-23T23:34:17.9391047Z  help: Consider removing this import. 2026-10-23T23:34:17.9391051Z 2026-10-23T23:34:17.9391616Z ⚠ 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-23T23:34:17.9391810Z ╭─[apps/server/src/provider/acp/AntigravityProtocol.ts:263:20] 2026-10-23T23:34:17.9391919Z 262 │ ...(update._meta !== undefined 2026-10-23T23:34:17.9392118Z 263 │ ? { _meta: Schema.is(Schema.Record(Schema.String, Schema.Json))(meta) ? meta : null } 2026-10-23T23:34:17.9392243Z ·  ───────── 2026-10-23T23:34:17.9392326Z 264 │ : {}), 2026-10-23T23:34:17.9392394Z ╰──── 2026-10-23T23:34:17.9392396Z 2026-10-23T23:34:17.9392642Z ⚠ eslint(no-unused-vars): Function 'describeSchedule' is declared but never used. 2026-10-23T23:34:17.9392810Z ╭─[apps/server/src/scheduledTasks/Schedule.ts:79:10] 2026-10-23T23:34:17.9392886Z 78 │ 2026-10-23T23:34:17.9393054Z 79 │ function describeSchedule(schedule: ScheduledTaskSchedule): string { 2026-10-23T23:34:17.9393161Z ·  ────────┬─────── 2026-10-23T23:34:17.9393356Z · ╰── 'describeSchedule' is declared here 2026-10-23T23:34:17.9393492Z 80 │ if (schedule.type === "webhook") return "On webhook"; 2026-10-23T23:34:17.9393564Z ╰──── 2026-10-23T23:34:17.9393684Z  help: Consider removing this declaration. 2026-10-23T23:34:17.9393688Z 2026-10-23T23:34:17.9393874Z ⚠ react(immutability): This value cannot be modified 2026-10-23T23:34:17.9394072Z ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:42:5] 2026-10-23T23:34:17.9394139Z 35 │ 2026-10-23T23:34:17.9394300Z 36 │ const inspectorProgress = useSharedValue(inspectorVisible ? 1 : 0); 2026-10-23T23:34:17.9394407Z ·  ────────┬──────── 2026-10-23T23:34:17.9394583Z · ╰── `inspectorProgress` originates here 2026-10-23T23:34:17.9394702Z 37 │ const { renderedInspectorWidth } = props; 2026-10-23T23:34:17.9394858Z 38 │ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0); 2026-10-23T23:34:17.9394921Z 39 │ 2026-10-23T23:34:17.9395018Z 40 │ const onClosed = props.onClosed; 2026-10-23T23:34:17.9395101Z 41 │ useEffect(() => { 2026-10-23T23:34:17.9395205Z 42 │ inspectorProgress.value = withTiming( 2026-10-23T23:34:17.9395304Z ·  ────────┬──────── 2026-10-23T23:34:17.9395479Z · ╰── `inspectorProgress` cannot be modified 2026-10-23T23:34:17.9395573Z 43 │ inspectorVisible ? 1 : 0, 2026-10-23T23:34:17.9395632Z ╰──── 2026-10-23T23:34:17.9395947Z  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-23T23:34:17.9396400Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T23:34:17.9396449Z 2026-10-23T23:34:17.9396688Z ⚠ react(immutability): This value cannot be modified 2026-10-23T23:34:17.9396878Z ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:67:7] 2026-10-23T23:34:17.9396985Z 37 │ const { renderedInspectorWidth } = props; 2026-10-23T23:34:17.9397140Z 38 │ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0); 2026-10-23T23:34:17.9397262Z ·  ──────────┬───────── 2026-10-23T23:34:17.9397524Z · ╰── `renderedContentWidth` originates here 2026-10-23T23:34:17.9397589Z 39 │ 2026-10-23T23:34:17.9397686Z 40 │ const onClosed = props.onClosed; 2026-10-23T23:34:17.9397778Z 41 │ useEffect(() => { 2026-10-23T23:34:17.9397884Z 42 │ inspectorProgress.value = withTiming( 2026-10-23T23:34:17.9397980Z 43 │ inspectorVisible ? 1 : 0, 2026-10-23T23:34:17.9398070Z 44 │ WORKSPACE_PANE_TIMING, 2026-10-23T23:34:17.9398155Z 45 │ (finished) => { 2026-10-23T23:34:17.9398318Z 46 │ if (finished === true && !inspectorVisible && onClosed !== undefined) { 2026-10-23T23:34:17.9398411Z 47 │ runOnJS(onClosed)(); 2026-10-23T23:34:17.9398489Z 48 │ } 2026-10-23T23:34:17.9398564Z 49 │ }, 2026-10-23T23:34:17.9398628Z 50 │ ); 2026-10-23T23:34:17.9398786Z 51 │ const targetWidth = inspectorVisible ? (inspectorWidth ?? 0) : 0; 2026-10-23T23:34:17.9398883Z 52 │ renderedInspectorWidth.set( 2026-10-23T23:34:17.9399059Z 53 │ resizing ? targetWidth : withTiming(targetWidth, WORKSPACE_PANE_TIMING), 2026-10-23T23:34:17.9399128Z 54 │ ); 2026-10-23T23:34:17.9399201Z 55 │ }, [ 2026-10-23T23:34:17.9399287Z 56 │ inspectorProgress, 2026-10-23T23:34:17.9399368Z 57 │ inspectorVisible, 2026-10-23T23:34:17.9399441Z 58 │ inspectorWidth, 2026-10-23T23:34:17.9399517Z 59 │ onClosed, 2026-10-23T23:34:17.9399610Z 60 │ renderedInspectorWidth, 2026-10-23T23:34:17.9399680Z 61 │ resizing, 2026-10-23T23:34:17.9399748Z 62 │ ]); 2026-10-23T23:34:17.9399814Z 63 │ 2026-10-23T23:34:17.9399895Z 64 │ useEffect(() => { 2026-10-23T23:34:17.9400002Z 65 │ const targetWidth = inspectorWidth ?? 0; 2026-10-23T23:34:17.9400115Z 66 │ if (!inspectorVisible || resizing) { 2026-10-23T23:34:17.9400243Z 67 │ renderedContentWidth.value = targetWidth; 2026-10-23T23:34:17.9400406Z ·  ──────────┬───────── 2026-10-23T23:34:17.9400736Z · ╰── `renderedContentWidth` cannot be modified 2026-10-23T23:34:17.9400894Z 68 │ return; 2026-10-23T23:34:17.9400995Z ╰──── 2026-10-23T23:34:17.9401312Z  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-23T23:34:17.9401729Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T23:34:17.9401740Z 2026-10-23T23:34:17.9402303Z ⚠ 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-23T23:34:17.9402531Z ╭─[apps/server/src/scheduledTasks/ScheduledTaskService.webhook.test.ts:521:13] 2026-10-23T23:34:17.9402624Z 520 │ })).delivery; 2026-10-23T23:34:17.9402864Z 521 │ ╭─▶ while (delivery.outcome === "accepted") { 2026-10-23T23:34:17.9402998Z 522 │ │ yield* Effect.yieldNow; 2026-10-23T23:34:17.9403174Z 523 │ │ delivery = (yield* service.getWebhookDelivery({ 2026-10-23T23:34:17.9403300Z 524 │ │ id: task.id, 2026-10-23T23:34:17.9403440Z 525 │ │ deliveryId: deliveryId!, 2026-10-23T23:34:17.9403554Z 526 │ │ })).delivery; 2026-10-23T23:34:17.9403722Z 527 │ ╰─▶ } 2026-10-23T23:34:17.9403872Z 528 │ assert.equal(delivery.outcome, "dispatch_failed"); 2026-10-23T23:34:17.9403942Z ╰──── 2026-10-23T23:34:17.9403945Z 2026-10-23T23:34:17.9404157Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-23T23:34:17.9404384Z ╭─[apps/mobile/src/features/keyboard/HardwareKeyboardCommandProvider.tsx:116:34] 2026-10-23T23:34:17.9404467Z 115 │ return [...commands]; 2026-10-23T23:34:17.9404629Z 116 │ }, [activeThreadRef, pathname, registrationVersion, navigation]); 2026-10-23T23:34:17.9404766Z ·  ─────────┬───────── 2026-10-23T23:34:17.9404983Z · ╰── Unnecessary dependency `registrationVersion` 2026-10-23T23:34:17.9405048Z 117 │ 2026-10-23T23:34:17.9405114Z ╰──── 2026-10-23T23:34:17.9405496Z  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-23T23:34:17.9405869Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.9405872Z 2026-10-23T23:34:17.9406122Z ⚠ typescript(no-extraneous-class): Unexpected class with only a constructor. 2026-10-23T23:34:17.9406273Z ╭─[apps/desktop/src/preview/Manager.test.ts:158:18] 2026-10-23T23:34:17.9406401Z 157 │ BrowserWindow: browserWindowConstructor, 2026-10-23T23:34:17.9406588Z 158 │ ╭─▶ ClipboardItem: class { 2026-10-23T23:34:17.9406757Z 159 │ │ constructor(data: Record) { 2026-10-23T23:34:17.9406991Z 160 │ │ clipboardItemConstructor(data); 2026-10-23T23:34:17.9407209Z 161 │ │ } 2026-10-23T23:34:17.9407360Z 162 │ ╰─▶ }, 2026-10-23T23:34:17.9407446Z 163 │ clipboard: { 2026-10-23T23:34:17.9407515Z ╰──── 2026-10-23T23:34:17.9407723Z  help: Try replacing this class with a standalone function or deleting it entirely 2026-10-23T23:34:17.9407727Z 2026-10-23T23:34:17.9407906Z ⚠ react(refs): Cannot access refs during render 2026-10-23T23:34:17.9414987Z ╭─[apps/mobile/src/components/ui/Menu.tsx:54:36] 2026-10-23T23:34:17.9415262Z 53 │ const child = children as ReactElement>; 2026-10-23T23:34:17.9415494Z 54 │ ╭─▶ children = cloneElement(child, { 2026-10-23T23:34:17.9415629Z 55 │ │ onTouchStart: (event) => { 2026-10-23T23:34:17.9415826Z 56 │ │ // Reset for a new touch, not onPressIn, which also fires when a 2026-10-23T23:34:17.9416017Z 57 │ │ // finger moves out of the row and back during the same gesture. 2026-10-23T23:34:17.9416275Z 58 │ │ menuPress.current.isPreparing = false; 2026-10-23T23:34:17.9416556Z 59 │ │ menuPress.current.suppressPress = menuPress.current.isOpen; 2026-10-23T23:34:17.9416706Z 60 │ │ pendingPress.current = null; 2026-10-23T23:34:17.9416852Z 61 │ │ child.props.onTouchStart?.(event); 2026-10-23T23:34:17.9416951Z 62 │ │ }, 2026-10-23T23:34:17.9417084Z 63 │ │ onPress: (event) => { 2026-10-23T23:34:17.9417298Z 64 │ │ // Accessibility clicks have no touch identifier and must not inherit 2026-10-23T23:34:17.9417469Z 65 │ │ // cancellation from a previous physical gesture. 2026-10-23T23:34:17.9417672Z 66 │ │ const isTouch = typeof event.nativeEvent.identifier === "number"; 2026-10-23T23:34:17.9417901Z 67 │ │ if (isTouch ? menuPress.current.suppressPress : menuPress.current.isOpen) { 2026-10-23T23:34:17.9418002Z 68 │ │ return; 2026-10-23T23:34:17.9418096Z 69 │ │ } 2026-10-23T23:34:17.9418267Z 70 │ │ if (isTouch && menuPress.current.isPreparing) { 2026-10-23T23:34:17.9418479Z 71 │ │ // A release can arrive between native menu preparation and display. 2026-10-23T23:34:17.9418680Z 72 │ │ // Let UIKit's display/cancel callback decide this press's outcome. 2026-10-23T23:34:17.9418801Z 73 │ │ event.persist(); 2026-10-23T23:34:17.9418996Z 74 │ │ pendingPress.current = () => child.props.onPress?.(event); 2026-10-23T23:34:17.9419097Z 75 │ │ return; 2026-10-23T23:34:17.9419186Z 76 │ │ } 2026-10-23T23:34:17.9419323Z 77 │ │ child.props.onPress?.(event); 2026-10-23T23:34:17.9419422Z 78 │ │ }, 2026-10-23T23:34:17.9419579Z 79 │ ├─▶ }); 2026-10-23T23:34:17.9420026Z · ╰──── Passing a ref to a function may read its value during render 2026-10-23T23:34:17.9420288Z 80 │ menuProps.onMenuInteractionStart = () => { 2026-10-23T23:34:17.9420448Z ╰──── 2026-10-23T23:34:17.9421058Z  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-23T23:34:17.9421465Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T23:34:17.9421475Z 2026-10-23T23:34:17.9422000Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-23T23:34:17.9422185Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:773:7] 2026-10-23T23:34:17.9422310Z 772 │ if (settingsSheetPresentation.isActive) { 2026-10-23T23:34:17.9422463Z 773 │ settingsRoutePresentation.present(settingsRouteSession); 2026-10-23T23:34:17.9422575Z ·  ────────────┬──────────── 2026-10-23T23:34:17.9422782Z · ╰── Missing dependency `settingsRoutePresentation` 2026-10-23T23:34:17.9422856Z 774 │ } 2026-10-23T23:34:17.9423095Z 775 │ }, [settingsRoutePresentation.present, settingsRouteSession, settingsSheetPresentation.isActive]); 2026-10-23T23:34:17.9423223Z ·  ────────────────┬──────────────── 2026-10-23T23:34:17.9423553Z · ╰── Overly precise dependency `settingsRoutePresentation.present`, use `settingsRoutePresentation` instead 2026-10-23T23:34:17.9423623Z 776 │ 2026-10-23T23:34:17.9423699Z ╰──── 2026-10-23T23:34:17.9424183Z  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-23T23:34:17.9424546Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.9424549Z 2026-10-23T23:34:17.9424733Z ⚠ react(immutability): This value cannot be modified 2026-10-23T23:34:17.9424899Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:391:5] 2026-10-23T23:34:17.9425087Z 387 │ typeof props.style.borderRadius === "number" ? props.style.borderRadius : 0; 2026-10-23T23:34:17.9425242Z 388 │ const animatedBorderRadius = useSharedValue(targetBorderRadius); 2026-10-23T23:34:17.9425368Z ·  ──────────┬───────── 2026-10-23T23:34:17.9425553Z · ╰── `animatedBorderRadius` originates here 2026-10-23T23:34:17.9425739Z 389 │ const shouldAnimate = props.animateLayout !== false && Platform.OS !== "android"; 2026-10-23T23:34:17.9425820Z 390 │ useLayoutEffect(() => { 2026-10-23T23:34:17.9425940Z 391 │ animatedBorderRadius.value = shouldAnimate 2026-10-23T23:34:17.9426045Z ·  ──────────┬───────── 2026-10-23T23:34:17.9426227Z · ╰── `animatedBorderRadius` cannot be modified 2026-10-23T23:34:17.9426328Z 392 │ ? withTiming(targetBorderRadius, { 2026-10-23T23:34:17.9426395Z ╰──── 2026-10-23T23:34:17.9426870Z  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-23T23:34:17.9427393Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T23:34:17.9427396Z 2026-10-23T23:34:17.9427613Z ⚠ eslint(no-unused-vars): Type 'Scope' is imported but never used. 2026-10-23T23:34:17.9427804Z ╭─[apps/server/src/provider/ProviderAuthService.ts:15:18] 2026-10-23T23:34:17.9427950Z 14 │ import * as Layer from "effect/Layer"; 2026-10-23T23:34:17.9428061Z 15 │ import type * as Scope from "effect/Scope"; 2026-10-23T23:34:17.9428162Z ·  ──┬── 2026-10-23T23:34:17.9428314Z · ╰── 'Scope' is imported here 2026-10-23T23:34:17.9428421Z 16 │ import * as Stream from "effect/Stream"; 2026-10-23T23:34:17.9428492Z ╰──── 2026-10-23T23:34:17.9428613Z  help: Consider removing this import. 2026-10-23T23:34:17.9428616Z 2026-10-23T23:34:17.9428896Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-23T23:34:17.9429081Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:290:50] 2026-10-23T23:34:17.9429156Z 289 │ return ( 2026-10-23T23:34:17.9429317Z 290 │ 2026-10-23T23:34:17.9429455Z ·  ───────────── 2026-10-23T23:34:17.9429543Z 291 │ {props.children} 2026-10-23T23:34:17.9429609Z ╰──── 2026-10-23T23:34:17.9429871Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-23T23:34:17.9430041Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-23T23:34:17.9430047Z 2026-10-23T23:34:17.9430332Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-23T23:34:17.9430588Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:654:44] 2026-10-23T23:34:17.9430668Z 653 │ return ( 2026-10-23T23:34:17.9430805Z 654 │ 2026-10-23T23:34:17.9430941Z ·  ───────────── 2026-10-23T23:34:17.9431025Z 655 │ {props.children} 2026-10-23T23:34:17.9431089Z ╰──── 2026-10-23T23:34:17.9431338Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-23T23:34:17.9431505Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-23T23:34:17.9431511Z 2026-10-23T23:34:17.9431784Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-23T23:34:17.9431967Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:1462:55] 2026-10-23T23:34:17.9432042Z 1461 │ return ( 2026-10-23T23:34:17.9432228Z 1462 │ 2026-10-23T23:34:17.9432384Z ·  ──────────────────── 2026-10-23T23:34:17.9432504Z 1463 │ props.onEnd(y, success)); 2026-10-23T23:34:17.9433986Z 602 │ const gesture = Gesture.Pan() 2026-10-23T23:34:17.9434139Z ·  ─┬─ 2026-10-23T23:34:17.9434380Z · ╰── `Pan` may be a component 2026-10-23T23:34:17.9434504Z 603 │ .enabled(!props.disabled) 2026-10-23T23:34:17.9434600Z ╰──── 2026-10-23T23:34:17.9434978Z  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-23T23:34:17.9435508Z  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-23T23:34:17.9435512Z 2026-10-23T23:34:17.9435817Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T23:34:17.9436003Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:285:5] 2026-10-23T23:34:17.9436146Z 283 │ const [snoozeWakeTick, bumpSnoozeWakeTick] = useState(0); 2026-10-23T23:34:17.9436225Z 284 │ useEffect(() => { 2026-10-23T23:34:17.9436315Z ·  ────┬──── 2026-10-23T23:34:17.9436465Z · ╰── This is the containing effect 2026-10-23T23:34:17.9436571Z 285 │ setNow(new Date().toISOString()); 2026-10-23T23:34:17.9436659Z ·  ───┬── 2026-10-23T23:34:17.9436860Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T23:34:17.9437019Z 286 │ const id = setInterval(() => setNow(new Date().toISOString()), 60_000); 2026-10-23T23:34:17.9437088Z ╰──── 2026-10-23T23:34:17.9437795Z  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-23T23:34:17.9438183Z  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-23T23:34:17.9438188Z 2026-10-23T23:34:17.9438427Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T23:34:17.9438618Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:365:25] 2026-10-23T23:34:17.9438784Z 364 │ // range) the boundary string is identical and the chain would die. 2026-10-23T23:34:17.9438898Z 365 │ }, [nextSnoozeWakeAt, snoozeWakeTick]); 2026-10-23T23:34:17.9439020Z ·  ───────┬────── 2026-10-23T23:34:17.9439210Z · ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-23T23:34:17.9439454Z 366 │ const listItems = ((): readonly SidebarListItem[] => { 2026-10-23T23:34:17.9439584Z ╰──── 2026-10-23T23:34:17.9439928Z  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-23T23:34:17.9440288Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.9440294Z 2026-10-23T23:34:17.9440566Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T23:34:17.9440763Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:356:53] 2026-10-23T23:34:17.9440878Z 355 │ if (Number.isNaN(wakeAtMs)) return; 2026-10-23T23:34:17.9441078Z 356 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647); 2026-10-23T23:34:17.9441222Z ·  ─────┬──── 2026-10-23T23:34:17.9441425Z · ╰── Cannot call impure function 2026-10-23T23:34:17.9441534Z 357 │ const id = setTimeout(() => { 2026-10-23T23:34:17.9441606Z ╰──── 2026-10-23T23:34:17.9441933Z  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-23T23:34:17.9442278Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T23:34:17.9442281Z 2026-10-23T23:34:17.9442591Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T23:34:17.9442776Z ╭─[apps/mobile/src/features/threads/use-worktree-setup.ts:30:40] 2026-10-23T23:34:17.9442964Z 28 │ const snapshot = resolveWorktreeSetupSnapshot(input.threadId, query.data, live); 2026-10-23T23:34:17.9443038Z 29 │ useEffect(() => { 2026-10-23T23:34:17.9443135Z ·  ────┬──── 2026-10-23T23:34:17.9443293Z · ╰── This is the containing effect 2026-10-23T23:34:17.9443444Z 30 │ if (snapshot && snapshot !== live) setHeld({ key, snapshot }); 2026-10-23T23:34:17.9443566Z ·  ───┬─── 2026-10-23T23:34:17.9443793Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T23:34:17.9443883Z 31 │ }, [key, live, snapshot]); 2026-10-23T23:34:17.9443948Z ╰──── 2026-10-23T23:34:17.9444715Z  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-23T23:34:17.9445154Z  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-23T23:34:17.9445157Z 2026-10-23T23:34:17.9445488Z ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'. 2026-10-23T23:34:17.9445648Z ╭─[apps/server/src/provider/AntigravityAuth.ts:285:20] 2026-10-23T23:34:17.9445728Z 284 │ }, 2026-10-23T23:34:17.9445827Z 285 │ (effect, flow, stopSessions) => 2026-10-23T23:34:17.9445940Z ·  ──────┬───── 2026-10-23T23:34:17.9446113Z · ╰── 'stopSessions' is declared here 2026-10-23T23:34:17.9446195Z 286 │ effect.pipe( 2026-10-23T23:34:17.9446254Z ╰──── 2026-10-23T23:34:17.9446379Z  help: Consider removing this parameter. 2026-10-23T23:34:17.9446382Z 2026-10-23T23:34:17.9446679Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T23:34:17.9446899Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:107:5] 2026-10-23T23:34:17.9446958Z 104 │ 2026-10-23T23:34:17.9447037Z 105 │ useEffect(() => { 2026-10-23T23:34:17.9447125Z ·  ────┬──── 2026-10-23T23:34:17.9447286Z · ╰── This is the containing effect 2026-10-23T23:34:17.9447379Z 106 │ clearReviewCommentTarget(); 2026-10-23T23:34:17.9447503Z 107 │ setPendingNativeCommentSelection(null); 2026-10-23T23:34:17.9447635Z ·  ────────────────┬─────────────── 2026-10-23T23:34:17.9447841Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T23:34:17.9447927Z 108 │ }, [selectedSection?.id]); 2026-10-23T23:34:17.9447994Z ╰──── 2026-10-23T23:34:17.9448697Z  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-23T23:34:17.9449084Z  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-23T23:34:17.9449087Z 2026-10-23T23:34:17.9449391Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T23:34:17.9449605Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:112:7] 2026-10-23T23:34:17.9449679Z 109 │ 2026-10-23T23:34:17.9449764Z 110 │ useEffect(() => { 2026-10-23T23:34:17.9449857Z ·  ────┬──── 2026-10-23T23:34:17.9450009Z · ╰── This is the containing effect 2026-10-23T23:34:17.9450117Z 111 │ if (activeCommentTarget === null) { 2026-10-23T23:34:17.9450384Z 112 │ setPendingNativeCommentSelection(null); 2026-10-23T23:34:17.9450587Z ·  ────────────────┬─────────────── 2026-10-23T23:34:17.9450796Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T23:34:17.9450866Z 113 │ } 2026-10-23T23:34:17.9450931Z ╰──── 2026-10-23T23:34:17.9451623Z  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-23T23:34:17.9451993Z  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-23T23:34:17.9452002Z 2026-10-23T23:34:17.9452244Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T23:34:17.9452472Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:108:7] 2026-10-23T23:34:17.9452600Z 107 │ setPendingNativeCommentSelection(null); 2026-10-23T23:34:17.9452696Z 108 │ }, [selectedSection?.id]); 2026-10-23T23:34:17.9452802Z ·  ─────────┬───────── 2026-10-23T23:34:17.9453004Z · ╰── Unnecessary dependency `selectedSection?.id` 2026-10-23T23:34:17.9453079Z 109 │ 2026-10-23T23:34:17.9453152Z ╰──── 2026-10-23T23:34:17.9453500Z  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-23T23:34:17.9453889Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.9453895Z 2026-10-23T23:34:17.9454099Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-23T23:34:17.9454278Z ╭─[apps/server/src/provider/Drivers/CodexDriver.test.ts:466:14] 2026-10-23T23:34:17.9454336Z 465 │ 2026-10-23T23:34:17.9454469Z 466 │ for (const {} of ["direct", "wrapper"] as const) { 2026-10-23T23:34:17.9454562Z ·  ── 2026-10-23T23:34:17.9454631Z 467 │ } 2026-10-23T23:34:17.9454693Z ╰──── 2026-10-23T23:34:17.9454971Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-23T23:34:17.9454974Z 2026-10-23T23:34:17.9455226Z ⚠ eslint(no-unused-vars): Type 'ThreadRunSummary' is imported but never used. 2026-10-23T23:34:17.9455346Z ╭─[apps/web/src/types.ts:22:3] 2026-10-23T23:34:17.9455431Z 21 │ EnvironmentThreadShell, 2026-10-23T23:34:17.9455515Z 22 │ ThreadRunSummary, 2026-10-23T23:34:17.9455613Z ·  ────────┬─────── 2026-10-23T23:34:17.9455790Z · ╰── 'ThreadRunSummary' is imported here 2026-10-23T23:34:17.9455869Z 23 │ ThreadRuntimeSummary, 2026-10-23T23:34:17.9455937Z ╰──── 2026-10-23T23:34:17.9456061Z  help: Consider removing this import. 2026-10-23T23:34:17.9456064Z 2026-10-23T23:34:17.9456451Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T23:34:17.9456758Z ╭─[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:60:5] 2026-10-23T23:34:17.9456879Z 55 │ 2026-10-23T23:34:17.9456961Z 56 │ useEffect(() => { 2026-10-23T23:34:17.9457050Z ·  ────┬──── 2026-10-23T23:34:17.9457203Z · ╰── This is the containing effect 2026-10-23T23:34:17.9457288Z 57 │ scheduler.reset(); 2026-10-23T23:34:17.9457413Z 58 │ highlightedRowIdsRef.current = new Set(); 2026-10-23T23:34:17.9457525Z 59 │ visibleChunkIndexRef.current = 0; 2026-10-23T23:34:17.9457659Z 60 │ setVisibleRange({ firstRowIndex: 0, lastRowIndex: 80 }); 2026-10-23T23:34:17.9457761Z ·  ───────┬─────── 2026-10-23T23:34:17.9457963Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T23:34:17.9458102Z 61 │ setTokensPatchJson(createEmptyTokenPatch(resetKey)); 2026-10-23T23:34:17.9458171Z ╰──── 2026-10-23T23:34:17.9458874Z  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-23T23:34:17.9459251Z  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-23T23:34:17.9459254Z 2026-10-23T23:34:17.9459494Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T23:34:17.9459710Z ╭─[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:63:7] 2026-10-23T23:34:17.9459805Z 62 │ return () => scheduler.cancel(); 2026-10-23T23:34:17.9459933Z 63 │ }, [enabled, resetKey, rows.length, scheduler]); 2026-10-23T23:34:17.9460091Z ·  ───┬─── ─────┬───── 2026-10-23T23:34:17.9460332Z · │ ╰── Unnecessary dependency `rows.length` 2026-10-23T23:34:17.9460589Z · ╰── Unnecessary dependency `enabled` 2026-10-23T23:34:17.9460656Z 64 │ 2026-10-23T23:34:17.9460726Z ╰──── 2026-10-23T23:34:17.9461075Z  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-23T23:34:17.9461439Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.9461449Z 2026-10-23T23:34:17.9461788Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T23:34:17.9461973Z ╭─[apps/mobile/src/features/review/ReviewCommentCard.tsx:223:31] 2026-10-23T23:34:17.9462108Z 222 │ ? snippetTokens.map((line, lineIndex) => ( 2026-10-23T23:34:17.9462228Z 223 │ 2026-10-23T23:34:17.9462352Z ·  ─────────────── 2026-10-23T23:34:17.9462475Z 224 │ {lineIndex > 0 ? "\n" : ""} 2026-10-23T23:34:17.9462548Z ╰──── 2026-10-23T23:34:17.9462729Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-23T23:34:17.9462733Z 2026-10-23T23:34:17.9463113Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T23:34:17.9463365Z ╭─[apps/mobile/src/features/review/ReviewCommentCard.tsx:227:25] 2026-10-23T23:34:17.9463460Z 226 │ { 2026-10-23T23:34:17.9464783Z ·  ────┬──── 2026-10-23T23:34:17.9464947Z · ╰── This is the containing effect 2026-10-23T23:34:17.9465078Z 102 │ if (!target || selectedLines.length === 0) { 2026-10-23T23:34:17.9465195Z 103 │ setHighlightedLinesById({}); 2026-10-23T23:34:17.9465304Z ·  ───────────┬─────────── 2026-10-23T23:34:17.9465519Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T23:34:17.9465602Z 104 │ return; 2026-10-23T23:34:17.9465671Z ╰──── 2026-10-23T23:34:17.9466382Z  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-23T23:34:17.9466764Z  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-23T23:34:17.9466767Z 2026-10-23T23:34:17.9467012Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T23:34:17.9467185Z ╭─[apps/mobile/src/features/review/ReviewSheet.tsx:454:7] 2026-10-23T23:34:17.9467296Z 453 │ showAuxiliaryPane("inspector"); 2026-10-23T23:34:17.9467425Z 454 │ }, [environmentId, showAuxiliaryPane, threadId]); 2026-10-23T23:34:17.9467605Z ·  ──────┬────── ────┬─── 2026-10-23T23:34:17.9467963Z · │ ╰── Unnecessary dependency `threadId` 2026-10-23T23:34:17.9468238Z · ╰── Unnecessary dependency `environmentId` 2026-10-23T23:34:17.9468321Z 455 │ const { 2026-10-23T23:34:17.9468386Z ╰──── 2026-10-23T23:34:17.9468746Z  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-23T23:34:17.9469119Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T23:34:17.9469122Z 2026-10-23T23:34:17.9469357Z ⚠ react(static-components): Cannot create components during render 2026-10-23T23:34:17.9469535Z ╭─[apps/mobile/src/features/review/ReviewSheet.tsx:725:20] 2026-10-23T23:34:17.9469615Z 492 │ // same check. 2026-10-23T23:34:17.9469774Z 493 │ const NativeReviewDiffView = resolveNativeReviewDiffView(); 2026-10-23T23:34:17.9469919Z ·  ─────────────┬───────────── 2026-10-23T23:34:17.9470143Z · ╰── The component is created during render here 2026-10-23T23:34:17.9470321Z 494 │ const nativeReviewDiffViewRef = useRef(null); 2026-10-23T23:34:17.9470536Z 495 │ const showcasedReviewDrawRef = useRef(null); 2026-10-23T23:34:17.9470715Z 496 │ const [isPullRefreshing, setIsPullRefreshing] = useState(false); 2026-10-23T23:34:17.9470832Z 497 │ const handlePullToRefresh = async () => { 2026-10-23T23:34:17.9470928Z 498 │ setIsPullRefreshing(true); 2026-10-23T23:34:17.9471044Z 499 │ await refreshSelectedSection(); 2026-10-23T23:34:17.9471144Z 500 │ setIsPullRefreshing(false); 2026-10-23T23:34:17.9471216Z 501 │ }; 2026-10-23T23:34:17.9471391Z 502 │ const reviewFileNavigatorRef = useRef(null); 2026-10-23T23:34:17.9471570Z 503 │ const reviewFiles = parsedDiff.kind === "files" ? parsedDiff.files : []; 2026-10-23T23:34:17.9471706Z 504 │ const fileVisibility = useReviewFileVisibility({ 2026-10-23T23:34:17.9471819Z 505 │ threadKey: reviewCache.threadKey, 2026-10-23T23:34:17.9471928Z 506 │ sectionId: selectedSection?.id ?? null, 2026-10-23T23:34:17.9472012Z 507 │ files: reviewFiles, 2026-10-23T23:34:17.9472141Z 508 │ cachedExpandedFileIds: selectedSection?.id 2026-10-23T23:34:17.9472304Z 509 │ ? reviewCache.expandedFileIdsBySection[selectedSection.id] 2026-10-23T23:34:17.9472379Z 510 │ : undefined, 2026-10-23T23:34:17.9472502Z 511 │ cachedViewedFileIds: selectedSection?.id 2026-10-23T23:34:17.9472656Z 512 │ ? reviewCache.viewedFileIdsBySection[selectedSection.id] 2026-10-23T23:34:17.9472733Z 513 │ : undefined, 2026-10-23T23:34:17.9472795Z 514 │ }); 2026-10-23T23:34:17.9473029Z 515 │ const { collapsedFileIds, toggleExpandedFile, toggleViewedFile, viewedFileIds } = fileVisibility; 2026-10-23T23:34:17.9473184Z 516 │ const commentSelection = useReviewCommentSelectionController({ 2026-10-23T23:34:17.9473262Z 517 │ environmentId, 2026-10-23T23:34:17.9473336Z 518 │ threadId, 2026-10-23T23:34:17.9473419Z 519 │ selectedSection, 2026-10-23T23:34:17.9473510Z 520 │ nativeReviewDiffData, 2026-10-23T23:34:17.9473573Z 521 │ }); 2026-10-23T23:34:17.9473705Z 522 │ const nativeBridge = useNativeReviewDiffBridge({ 2026-10-23T23:34:17.9473963Z 523 │ threadKey: reviewCache.threadKey, 2026-10-23T23:34:17.9474134Z 524 │ sectionId: selectedSection?.id ?? null, 2026-10-23T23:34:17.9474224Z 525 │ diff: selectedSection?.diff, 2026-10-23T23:34:17.9474332Z 526 │ data: nativeReviewDiffData, 2026-10-23T23:34:17.9474418Z 527 │ collapsedFileIds, 2026-10-23T23:34:17.9474498Z 528 │ viewedFileIds, 2026-10-23T23:34:17.9474627Z 529 │ selectedRowIds: commentSelection.selectedRowIds, 2026-10-23T23:34:17.9474750Z 530 │ canHighlight: parsedDiff.kind === "files", 2026-10-23T23:34:17.9474821Z 531 │ }); 2026-10-23T23:34:17.9474919Z 532 │ const showcaseReviewKey = 2026-10-23T23:34:17.9475080Z 533 │ SHOWCASE_ENABLED && parsedDiff.kind === "files" && selectedSection 2026-10-23T23:34:17.9475332Z 534 │ ? `${reviewCache.threadKey}:${selectedSection.id}:${nativeBridge.tokensResetKey}:${nativeBridge.themeId}` 2026-10-23T23:34:17.9475412Z 535 │ : null; 2026-10-23T23:34:17.9475623Z 536 │ const handleNativeDebug = (event: NativeSyntheticEvent>) => { 2026-10-23T23:34:17.9475719Z 537 │ nativeBridge.onDebug(event); 2026-10-23T23:34:17.9475795Z 538 │ if ( 2026-10-23T23:34:17.9475896Z 539 │ showcaseReviewKey === null || 2026-10-23T23:34:17.9476052Z 540 │ showcasedReviewDrawRef.current === showcaseReviewKey || 2026-10-23T23:34:17.9476181Z 541 │ !isNativeReviewDiffDrawEvent(event.nativeEvent) 2026-10-23T23:34:17.9476262Z 542 │ ) { 2026-10-23T23:34:17.9476339Z 543 │ return; 2026-10-23T23:34:17.9476411Z 544 │ } 2026-10-23T23:34:17.9476541Z 545 │ showcasedReviewDrawRef.current = showcaseReviewKey; 2026-10-23T23:34:17.9476741Z 546 │ reportShowcaseSceneRendered({ scene: "review", themeId: nativeBridge.themeId }); 2026-10-23T23:34:17.9476810Z 547 │ }; 2026-10-23T23:34:17.9476871Z 548 │ 2026-10-23T23:34:17.9477029Z 549 │ const handleSelectFile = async (fileId: string | null) => { 2026-10-23T23:34:17.9477133Z 550 │ loadVisibleFile(fileId, true); 2026-10-23T23:34:17.9477252Z 551 │ commentSelection.clearSelection(); 2026-10-23T23:34:17.9477398Z 552 │ if (fileId !== null && collapsedFileIds.includes(fileId)) { 2026-10-23T23:34:17.9477498Z 553 │ toggleExpandedFile(fileId); 2026-10-23T23:34:17.9477567Z 554 │ } 2026-10-23T23:34:17.9477702Z 555 │ const nativeView = nativeReviewDiffViewRef.current; 2026-10-23T23:34:17.9477786Z 556 │ if (!nativeView) return; 2026-10-23T23:34:17.9477901Z 557 │ const result = await settlePromise(() => 2026-10-23T23:34:17.9478113Z 558 │ fileId === null ? nativeView.scrollToTop(true) : nativeView.scrollToFile(fileId, true), 2026-10-23T23:34:17.9478197Z 559 │ ); 2026-10-23T23:34:17.9478307Z 560 │ if (AsyncResult.isFailure(result)) { 2026-10-23T23:34:17.9478532Z 561 │ console.error("[review] Failed to navigate to diff file", squashAtomCommandFailure(result)); 2026-10-23T23:34:17.9478606Z 562 │ } 2026-10-23T23:34:17.9478678Z 563 │ }; 2026-10-23T23:34:17.9478775Z 564 │ const handleVisibleFileChange = ( 2026-10-23T23:34:17.9478941Z 565 │ event: NativeSyntheticEvent<{ readonly fileId?: string | null }>, 2026-10-23T23:34:17.9479017Z 566 │ ) => { 2026-10-23T23:34:17.9479161Z 567 │ loadVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-23T23:34:17.9479363Z 568 │ reviewFileNavigatorRef.current?.setVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-23T23:34:17.9479442Z 569 │ }; 2026-10-23T23:34:17.9479542Z 570 │ const renderInspector = () => ( 2026-10-23T23:34:17.9479633Z 571 │ void handleSelectFile(fileId)} 2026-10-23T23:34:17.9480459Z 577 │ /> 2026-10-23T23:34:17.9480528Z 578 │ ); 2026-10-23T23:34:17.9480598Z 579 │ 2026-10-23T23:34:17.9480829Z 580 │ const handleNativeToggleFile = (event: NativeSyntheticEvent<{ readonly fileId?: string }>) => { 2026-10-23T23:34:17.9480944Z 581 │ const { fileId } = event.nativeEvent; 2026-10-23T23:34:17.9481025Z 582 │ if (fileId) { 2026-10-23T23:34:17.9481121Z 583 │ loadVisibleFile(fileId, true); 2026-10-23T23:34:17.9481218Z 584 │ toggleExpandedFile(fileId); 2026-10-23T23:34:17.9481288Z 585 │ } 2026-10-23T23:34:17.9481361Z 586 │ }; 2026-10-23T23:34:17.9481422Z 587 │ 2026-10-23T23:34:17.9481534Z 588 │ const handleNativeToggleViewedFile = ( 2026-10-23T23:34:17.9481678Z 589 │ event: NativeSyntheticEvent<{ readonly fileId?: string }>, 2026-10-23T23:34:17.9481751Z 590 │ ) => { 2026-10-23T23:34:17.9481852Z 591 │ const { fileId } = event.nativeEvent; 2026-10-23T23:34:17.9481930Z 592 │ if (fileId) { 2026-10-23T23:34:17.9482026Z 593 │ toggleViewedFile(fileId); 2026-10-23T23:34:17.9482097Z 594 │ } 2026-10-23T23:34:17.9482160Z 595 │ }; 2026-10-23T23:34:17.9482230Z 596 │ 2026-10-23T23:34:17.9482324Z 597 │ const parsedDiffNotice = 2026-10-23T23:34:17.9482510Z 598 │ parsedDiff.kind === "files" || parsedDiff.kind === "raw" ? parsedDiff.notice : null; 2026-10-23T23:34:17.9482655Z 599 │ const hasCachedSelectedDiff = selectedSection?.diff != null; 2026-10-23T23:34:17.9482853Z 600 │ const hasAnyCachedDiff = reviewSections.some((section) => section.diff != null); 2026-10-23T23:34:17.9483005Z 601 │ const sectionMenu = buildReviewSectionMenu(reviewSections); 2026-10-23T23:34:17.9483204Z 602 │ const { showConnectionNotice, showSectionToolbar } = resolveReviewAvailability({ 2026-10-23T23:34:17.9483333Z 603 │ hasEnvironmentPresentation: environment.isReady, 2026-10-23T23:34:17.9483462Z 604 │ isEnvironmentConnected: isEnvironmentReady, 2026-10-23T23:34:17.9483552Z 605 │ hasCachedSelectedDiff, 2026-10-23T23:34:17.9483635Z 606 │ hasAnyCachedDiff, 2026-10-23T23:34:17.9483703Z 607 │ }); 2026-10-23T23:34:17.9483815Z 608 │ const handleRetryEnvironment = () => { 2026-10-23T23:34:17.9483929Z 609 │ void retryEnvironment(environmentId); 2026-10-23T23:34:17.9483993Z 610 │ }; 2026-10-23T23:34:17.9484108Z 611 │ const handleReturnToThread = () => { 2026-10-23T23:34:17.9484223Z 612 │ if (navigation.canGoBack()) { 2026-10-23T23:34:17.9484320Z 613 │ navigation.goBack(); 2026-10-23T23:34:17.9484395Z 614 │ return; 2026-10-23T23:34:17.9484469Z 615 │ } 2026-10-23T23:34:17.9484574Z 616 │ navigation.navigate("Thread", { 2026-10-23T23:34:17.9484690Z 617 │ environmentId: String(environmentId), 2026-10-23T23:34:17.9484782Z 618 │ threadId: String(threadId), 2026-10-23T23:34:17.9484864Z 619 │ }); 2026-10-23T23:34:17.9484942Z 620 │ }; 2026-10-23T23:34:17.9485051Z 621 │ const androidHeaderSubtitle = [ 2026-10-23T23:34:17.9485138Z 622 │ selectedSection?.title, 2026-10-23T23:34:17.9485240Z 623 │ headerDiffSummary.additions, 2026-10-23T23:34:17.9485343Z 624 │ headerDiffSummary.deletions, 2026-10-23T23:34:17.9485413Z 625 │ ] 2026-10-23T23:34:17.9485536Z 626 │ .filter((part): part is string => Boolean(part)) 2026-10-23T23:34:17.9485719Z 627 │ .join(" · "); 2026-10-23T23:34:17.9485849Z 628 │ 2026-10-23T23:34:17.9485943Z 629 │ const showChangedFilesPane = 2026-10-23T23:34:17.9486042Z 630 │ !showConnectionNotice && 2026-10-23T23:34:17.9486143Z 631 │ selectedSection !== null && 2026-10-23T23:34:17.9486240Z 632 │ parsedDiff.kind === "files" && 2026-10-23T23:34:17.9486331Z 633 │ NativeReviewDiffView !== null; 2026-10-23T23:34:17.9486542Z 634 │ useRegisterWorkspaceInspector(showChangedFilesPane ? renderInspector : undefined); 2026-10-23T23:34:17.9486755Z 635 │ const showChangedFilesToggle = panes.supportsAuxiliaryPane && showChangedFilesPane; 2026-10-23T23:34:17.9486825Z 636 │ 2026-10-23T23:34:17.9486915Z 637 │ const listHeader = (() => { 2026-10-23T23:34:17.9487022Z 638 │ const children: ReactElement[] = []; 2026-10-23T23:34:17.9487091Z 639 │ 2026-10-23T23:34:17.9487184Z 640 │ if (error) { 2026-10-23T23:34:17.9487265Z 641 │ children.push( 2026-10-23T23:34:17.9487355Z 642 │ 2026-10-23T23:34:17.9488174Z 649 │ Review unavailable 2026-10-23T23:34:17.9488368Z 650 │ {error} 2026-10-23T23:34:17.9488446Z 651 │ , 2026-10-23T23:34:17.9488514Z 652 │ ); 2026-10-23T23:34:17.9488595Z 653 │ } 2026-10-23T23:34:17.9488663Z 654 │ 2026-10-23T23:34:17.9488754Z 655 │ if (parsedDiffNotice) { 2026-10-23T23:34:17.9488943Z 656 │ children.push(); 2026-10-23T23:34:17.9489016Z 657 │ } 2026-10-23T23:34:17.9489083Z 658 │ 2026-10-23T23:34:17.9489182Z 659 │ if (children.length === 0) { 2026-10-23T23:34:17.9489256Z 660 │ return null; 2026-10-23T23:34:17.9489321Z 661 │ } 2026-10-23T23:34:17.9489384Z 662 │ 2026-10-23T23:34:17.9489471Z 663 │ return <>{children}; 2026-10-23T23:34:17.9489535Z 664 │ })(); 2026-10-23T23:34:17.9489626Z 665 │ const headerSubtitle = [ 2026-10-23T23:34:17.9489728Z 666 │ headerDiffSummary.additions, 2026-10-23T23:34:17.9489819Z 667 │ headerDiffSummary.deletions, 2026-10-23T23:34:17.9489929Z 668 │ pendingReviewCommentCount > 0 2026-10-23T23:34:17.9490151Z 669 │ ? `${pendingReviewCommentCount} comment${pendingReviewCommentCount === 1 ? "" : "s"}` 2026-10-23T23:34:17.9490233Z 670 │ : null, 2026-10-23T23:34:17.9490294Z 671 │ ] 2026-10-23T23:34:17.9490408Z 672 │ .filter(Boolean) 2026-10-23T23:34:17.9490503Z 673 │ .join(" · "); 2026-10-23T23:34:17.9490666Z 674 │ const headerTitleText = selectedSection?.title ?? "Review changes"; 2026-10-23T23:34:17.9490729Z 675 │ 2026-10-23T23:34:17.9490807Z 676 │ return ( 2026-10-23T23:34:17.9490879Z 677 │ <> 2026-10-23T23:34:17.9490964Z 678 │ 2026-10-23T23:34:17.9492754Z 694 │ 2026-10-23T23:34:17.9492846Z 695 │ 2026-10-23T23:34:17.9493007Z 696 │ 2026-10-23T23:34:17.9493108Z 697 │ {showConnectionNotice ? ( 2026-10-23T23:34:17.9493276Z 698 │ 2026-10-23T23:34:17.9493386Z 699 │ 2026-10-23T23:34:17.9494622Z 711 │ 2026-10-23T23:34:17.9494811Z 712 │ ) : selectedSection && parsedDiff.kind === "files" && NativeReviewDiffView ? ( 2026-10-23T23:34:17.9494886Z 713 │ 2026-10-23T23:34:17.9495412Z 719 │ 2026-10-23T23:34:17.9495856Z 723 │ {listHeader} 2026-10-23T23:34:17.9496002Z 724 │ 2026-10-23T23:34:17.9496102Z 725 │ { 2026-10-23T23:34:17.9499678Z 181 │ const wire = Schema.encodeUnknownSync(Schema.toCodecJson(OrchestrationMessageContext))({ 2026-10-23T23:34:17.9499808Z ·  ──────────────────────── 2026-10-23T23:34:17.9499893Z 182 │ version: 1, 2026-10-23T23:34:17.9499965Z ╰──── 2026-10-23T23:34:17.9499968Z 2026-10-23T23:34:17.9500213Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable. 2026-10-23T23:34:17.9500439Z ╭─[apps/web/src/contextMenuFallback.test.ts:38:9] 2026-10-23T23:34:17.9500527Z 37 │ get isConnected() { 2026-10-23T23:34:17.9500643Z 38 │ let current: FakeElement | null = this; 2026-10-23T23:34:17.9500728Z ·  ─────── 2026-10-23T23:34:17.9500821Z 39 │ while (current?.parent) { 2026-10-23T23:34:17.9500890Z ╰──── 2026-10-23T23:34:17.9501212Z  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-23T23:34:17.9501215Z 2026-10-23T23:34:17.9501438Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T23:34:17.9501701Z ╭─[apps/mobile/modules/t3-source-text/src/SourceText.tsx:36:9] 2026-10-23T23:34:17.9501813Z 35 │ { 2026-10-23T23:34:17.9503475Z 17 │ expect(Schema.decodeUnknownSync(AuthEnvironmentScopes)(["review:write"])).toEqual([ 2026-10-23T23:34:17.9503591Z ·  ──────────────────────── 2026-10-23T23:34:17.9503674Z 18 │ "review:write", 2026-10-23T23:34:17.9503740Z ╰──── 2026-10-23T23:34:17.9503743Z 2026-10-23T23:34:17.9504168Z ⚠ 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-23T23:34:17.9504304Z ╭─[packages/contracts/src/auth.test.ts:20:18] 2026-10-23T23:34:17.9504368Z 19 │ ]); 2026-10-23T23:34:17.9504566Z 20 │ expect(() => Schema.decodeUnknownSync(AuthGrantScopes)(["review:write"])).toThrow(); 2026-10-23T23:34:17.9504694Z ·  ──────────────────────── 2026-10-23T23:34:17.9504860Z 21 │ expect(AuthStandardClientScopes).not.toContain("review:write"); 2026-10-23T23:34:17.9504922Z ╰──── 2026-10-23T23:34:17.9504926Z 2026-10-23T23:34:17.9505351Z ⚠ 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-23T23:34:17.9505484Z ╭─[packages/contracts/src/auth.test.ts:58:21] 2026-10-23T23:34:17.9505689Z 57 │ it("ignores unknown response permissions without falling back to broader scopes", () => { 2026-10-23T23:34:17.9505831Z 58 │ const session = Schema.decodeUnknownSync(AuthSessionState)({ 2026-10-23T23:34:17.9505963Z ·  ──────────────────────── 2026-10-23T23:34:17.9506050Z 59 │ authenticated: true, 2026-10-23T23:34:17.9506116Z ╰──── 2026-10-23T23:34:17.9506119Z 2026-10-23T23:34:17.9506334Z ⚠ unicorn(no-new-array): Do not use `new Array(singleArgument)`. 2026-10-23T23:34:17.9506482Z ╭─[apps/web/src/terminal/ghostty/core.ts:194:19] 2026-10-23T23:34:17.9506633Z 193 │ const count = Math.min(CHUNK_SIZE, graphemeLength - start); 2026-10-23T23:34:17.9506749Z 194 │ const codes = new Array(count); 2026-10-23T23:34:17.9506877Z ·  ──────────────────────── 2026-10-23T23:34:17.9507010Z 195 │ for (let index = 0; index < count; index += 1) { 2026-10-23T23:34:17.9507082Z ╰──── 2026-10-23T23:34:17.9507598Z  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-23T23:34:17.9507602Z 2026-10-23T23:34:17.9507955Z ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed 2026-10-23T23:34:17.9508153Z ╭─[packages/contracts/src/rpc.ts:297:8] 2026-10-23T23:34:17.9508240Z 296 │ } from "./device.ts"; 2026-10-23T23:34:17.9508353Z 297 │ import {} from "./previewAutomation.ts"; 2026-10-23T23:34:17.9508443Z ·  ── 2026-10-23T23:34:17.9508509Z 298 │ import { 2026-10-23T23:34:17.9508579Z ╰──── 2026-10-23T23:34:17.9508681Z  help: Remove empty braces 2026-10-23T23:34:17.9508684Z 2026-10-23T23:34:17.9508968Z ⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence. 2026-10-23T23:34:17.9509126Z ╭─[apps/web/src/components/chat/useComposerSend.ts:985:13] 2026-10-23T23:34:17.9509278Z 984 │ const changedBeforeDecline = draftChangedSinceSend(); 2026-10-23T23:34:17.9509568Z 985 │ ╭─▶ const pendingIdsBeforeDecline = pendingApprovalsRef.current.map( 2026-10-23T23:34:17.9509716Z 986 │ │ (approval) => approval.requestId, 2026-10-23T23:34:17.9509873Z 987 │ ╰─▶ ); 2026-10-23T23:34:17.9510041Z 988 │ const approvalResponding = approvalsToDecline.some((approval) => 2026-10-23T23:34:17.9510112Z ╰──── 2026-10-23T23:34:17.9510209Z  help: Switch to `Set` 2026-10-23T23:34:17.9510212Z 2026-10-23T23:34:17.9510457Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T23:34:17.9510624Z ╭─[apps/web/src/components/CommandPalette.tsx:1996:20] 2026-10-23T23:34:17.9510773Z 1995 │ title: inferProjectTitleFromPath(destinationPath), 2026-10-23T23:34:17.9510891Z 1996 │ createdAt: new Date().toISOString(), 2026-10-23T23:34:17.9510999Z ·  ─────┬──── 2026-10-23T23:34:17.9511175Z · ╰── Cannot call impure function 2026-10-23T23:34:17.9511306Z 1997 │ remoteUrl: addProjectCloneFlow.remoteUrl, 2026-10-23T23:34:17.9511377Z ╰──── 2026-10-23T23:34:17.9511702Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-23T23:34:17.9512057Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T23:34:17.9512060Z 2026-10-23T23:34:17.9512405Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-23T23:34:17.9512611Z ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:473:19] 2026-10-23T23:34:17.9512687Z 472 │ onFilters, 2026-10-23T23:34:17.9512767Z 473 │ authorOptions = [], 2026-10-23T23:34:17.9512864Z ·  ── 2026-10-23T23:34:17.9512953Z 474 │ labelOptions = [], 2026-10-23T23:34:17.9513021Z ╰──── 2026-10-23T23:34:17.9513389Z  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-23T23:34:17.9513393Z 2026-10-23T23:34:17.9513723Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-23T23:34:17.9513998Z ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:474:18] 2026-10-23T23:34:17.9514125Z 473 │ authorOptions = [], 2026-10-23T23:34:17.9514237Z 474 │ labelOptions = [], 2026-10-23T23:34:17.9514415Z ·  ── 2026-10-23T23:34:17.9514546Z 475 │ optionScope, 2026-10-23T23:34:17.9514627Z ╰──── 2026-10-23T23:34:17.9515008Z  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-23T23:34:17.9515023Z 2026-10-23T23:34:17.9515601Z ⚠ 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-23T23:34:17.9515849Z ╭─[packages/contracts/src/baseSchemas.test.ts:39:9] 2026-10-23T23:34:17.9515980Z 38 │ JSON.stringify( 2026-10-23T23:34:17.9516196Z 39 │ Schema.encodeUnknownSync(Schema.toCodecJson(Named))([ 2026-10-23T23:34:17.9516362Z ·  ──────────────────────── 2026-10-23T23:34:17.9516482Z 40 │ { name: "a" }, 2026-10-23T23:34:17.9516585Z ╰──── 2026-10-23T23:34:17.9516590Z 2026-10-23T23:34:17.9516942Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T23:34:17.9517262Z ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:555:70] 2026-10-23T23:34:17.9517412Z 554 │ assert.deepStrictEqual( 2026-10-23T23:34:17.9517711Z 555 │ (yield* Ref.get(fixture.syncCommands)).map(({ commandId: _, ...rest }) => rest), 2026-10-23T23:34:17.9517947Z ·  ┬ 2026-10-23T23:34:17.9518254Z · ╰── '_' is declared here 2026-10-23T23:34:17.9518376Z 556 │ [ 2026-10-23T23:34:17.9518474Z ╰──── 2026-10-23T23:34:17.9518677Z  help: Consider removing this parameter. 2026-10-23T23:34:17.9518682Z 2026-10-23T23:34:17.9519023Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T23:34:17.9519368Z ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:1155:70] 2026-10-23T23:34:17.9519532Z 1154 │ assert.deepStrictEqual( 2026-10-23T23:34:17.9519854Z 1155 │ (yield* Ref.get(fixture.linkCommands)).map(({ commandId: _, ...rest }) => rest), 2026-10-23T23:34:17.9520101Z ·  ┬ 2026-10-23T23:34:17.9520491Z · ╰── '_' is declared here 2026-10-23T23:34:17.9520620Z 1156 │ [ 2026-10-23T23:34:17.9520725Z ╰──── 2026-10-23T23:34:17.9520907Z  help: Consider removing this parameter. 2026-10-23T23:34:17.9520917Z 2026-10-23T23:34:17.9521304Z ⚠ eslint(no-unused-vars): Identifier 'HostProcess' is imported but never used. 2026-10-23T23:34:17.9521628Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:25:13] 2026-10-23T23:34:17.9521810Z 24 │ import * as Schema from "effect/Schema"; 2026-10-23T23:34:17.9522041Z 25 │ import * as HostProcess from "@t3tools/shared/HostProcess"; 2026-10-23T23:34:17.9522193Z ·  ─────┬───── 2026-10-23T23:34:17.9522750Z · ╰── 'HostProcess' is imported here 2026-10-23T23:34:17.9522983Z 26 │ 2026-10-23T23:34:17.9523107Z ╰──── 2026-10-23T23:34:17.9523285Z  help: Consider removing this import. 2026-10-23T23:34:17.9523290Z 2026-10-23T23:34:17.9523856Z ⚠ eslint(no-unused-vars): Variable 'serverConfig' is declared but never used. Unused variables should start with a '_'. 2026-10-23T23:34:17.9524187Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:124:11] 2026-10-23T23:34:17.9524334Z 123 │ const path = yield* Path.Path; 2026-10-23T23:34:17.9524545Z 124 │ const serverConfig = yield* ServerConfig.ServerConfig; 2026-10-23T23:34:17.9524699Z ·  ──────┬───── 2026-10-23T23:34:17.9524978Z · ╰── 'serverConfig' is declared here 2026-10-23T23:34:17.9525254Z 125 │ const serverSettings = yield* ServerSettings.ServerSettingsService; 2026-10-23T23:34:17.9525344Z ╰──── 2026-10-23T23:34:17.9525552Z  help: Consider removing this declaration. 2026-10-23T23:34:17.9525556Z 2026-10-23T23:34:17.9526089Z ⚠ eslint(no-unused-vars): Variable 'serverSettings' is declared but never used. Unused variables should start with a '_'. 2026-10-23T23:34:17.9526408Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:125:11] 2026-10-23T23:34:17.9526625Z 124 │ const serverConfig = yield* ServerConfig.ServerConfig; 2026-10-23T23:34:17.9526892Z 125 │ const serverSettings = yield* ServerSettings.ServerSettingsService; 2026-10-23T23:34:17.9527050Z ·  ───────┬────── 2026-10-23T23:34:17.9527343Z · ╰── 'serverSettings' is declared here 2026-10-23T23:34:17.9527620Z 126 │ const gitWorkflow = yield* GitWorkflowService.GitWorkflowService; 2026-10-23T23:34:17.9527731Z ╰──── 2026-10-23T23:34:17.9527938Z  help: Consider removing this declaration. 2026-10-23T23:34:17.9527943Z 2026-10-23T23:34:17.9528312Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T23:34:17.9528530Z ╭─[packages/shared/src/qrCode.ts:458:44] 2026-10-23T23:34:17.9528656Z 457 │ ): Array { 2026-10-23T23:34:17.9528869Z 458 │ let result: Array = divisor.map((_) => 0); 2026-10-23T23:34:17.9529074Z ·  ┬ 2026-10-23T23:34:17.9529368Z · ╰── '_' is declared here 2026-10-23T23:34:17.9529522Z 459 │ for (const b of data) { 2026-10-23T23:34:17.9529630Z ╰──── 2026-10-23T23:34:17.9529831Z  help: Consider removing this parameter. 2026-10-23T23:34:17.9529836Z 2026-10-23T23:34:17.9530163Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T23:34:17.9530498Z ╭─[apps/web/src/components/chat/useThreadLifecycle.tsx:178:58] 2026-10-23T23:34:17.9530726Z 177 │ if (snoozeClockState.shell !== activeThreadShell) { 2026-10-23T23:34:17.9531058Z 178 │ setSnoozeClockState({ shell: activeThreadShell, now: new Date().toISOString() }); 2026-10-23T23:34:17.9531309Z ·  ─────┬──── 2026-10-23T23:34:17.9531654Z · ╰── Cannot call impure function 2026-10-23T23:34:17.9531938Z 179 │ } 2026-10-23T23:34:17.9532125Z ╰──── 2026-10-23T23:34:17.9532695Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-23T23:34:17.9533278Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T23:34:17.9533284Z 2026-10-23T23:34:17.9533790Z ⚠ unicorn(prefer-add-event-listener): Prefer `addEventListener()` over their `on`-function counterparts. 2026-10-23T23:34:17.9534098Z ╭─[apps/web/src/components/device/deviceHubApi.test.ts:12:14] 2026-10-23T23:34:17.9534412Z 11 │ addEventListener(_type: string, listener: (event: { data: string }) => void) { 2026-10-23T23:34:17.9534574Z 12 │ this.onmessage = listener; 2026-10-23T23:34:17.9534733Z ·  ───────── 2026-10-23T23:34:17.9534852Z 13 │ } 2026-10-23T23:34:17.9534953Z ╰──── 2026-10-23T23:34:17.9535550Z  help: `addEventListener()` can register multiple handlers and accepts options such as `{ once: true }`; assigning to `on` replaces any previously registered handler. 2026-10-23T23:34:17.9535554Z 2026-10-23T23:34:17.9535929Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable. 2026-10-23T23:34:17.9536186Z ╭─[apps/web/src/components/device/deviceHubApi.test.ts:16:9] 2026-10-23T23:34:17.9536312Z 15 │ constructor() { 2026-10-23T23:34:17.9536427Z 16 │ source = this; 2026-10-23T23:34:17.9536549Z ·  ────── 2026-10-23T23:34:17.9536649Z 17 │ } 2026-10-23T23:34:17.9536752Z ╰──── 2026-10-23T23:34:17.9537269Z  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-23T23:34:17.9537280Z 2026-10-23T23:34:17.9537772Z ⚠ eslint(no-unused-vars): Variable 'claudeCaps' is declared but never used. Unused variables should start with a '_'. 2026-10-23T23:34:17.9537970Z ╭─[packages/shared/src/model.test.ts:36:7] 2026-10-23T23:34:17.9538071Z 35 │ 2026-10-23T23:34:17.9538312Z 36 │ const claudeCaps: ModelCapabilities = createModelCapabilities({ 2026-10-23T23:34:17.9538439Z ·  ─────┬──── 2026-10-23T23:34:17.9538692Z · ╰── 'claudeCaps' is declared here 2026-10-23T23:34:17.9538818Z 37 │ optionDescriptors: [ 2026-10-23T23:34:17.9538919Z ╰──── 2026-10-23T23:34:17.9539112Z  help: Consider removing this declaration. 2026-10-23T23:34:17.9539121Z 2026-10-23T23:34:17.9539513Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-23T23:34:17.9539775Z ╭─[packages/shared/src/composerContextLegacySend.ts:19:45] 2026-10-23T23:34:17.9540006Z 18 │ const occurrences = collectComposerContextReferences(text); 2026-10-23T23:34:17.9540200Z 19 │ for (const occurrence of [...occurrences].reverse()) { 2026-10-23T23:34:17.9540470Z ·  ─────── 2026-10-23T23:34:17.9540678Z 20 │ const record = recordsById.get(occurrence.contextId); 2026-10-23T23:34:17.9540774Z ╰──── 2026-10-23T23:34:17.9541250Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-23T23:34:17.9541263Z 2026-10-23T23:34:17.9542571Z ⚠ 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-23T23:34:17.9542908Z ╭─[packages/shared/src/atomicWrite.test.ts:139:5] 2026-10-23T23:34:17.9543052Z 138 │ Effect.gen(function* () { 2026-10-23T23:34:17.9543607Z 139 │ ╭─▶ while (fiber.pollUnsafe() === undefined) { 2026-10-23T23:34:17.9544013Z 140 │ │ yield* TestClock.adjust("100 millis"); 2026-10-23T23:34:17.9544614Z 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-23T23:34:17.9544987Z 142 │ │ yield* Effect.promise(() => new Promise((resolve) => setImmediate(resolve))); 2026-10-23T23:34:17.9545298Z 143 │ ╰─▶ } 2026-10-23T23:34:17.9545463Z 144 │ return yield* Fiber.join(fiber); 2026-10-23T23:34:17.9545569Z ╰──── 2026-10-23T23:34:17.9545574Z 2026-10-23T23:34:17.9546048Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-23T23:34:17.9546331Z ╭─[packages/shared/src/serverSettings.ts:346:9] 2026-10-23T23:34:17.9546524Z 345 │ const entry: ProjectSettingsOverrides = { 2026-10-23T23:34:17.9546812Z 346 │ ...(entries.get(projectId) ?? currentEntries[projectId] ?? {}), 2026-10-23T23:34:17.9547104Z ·  ────────────────────────────────────────────────────────────── 2026-10-23T23:34:17.9547289Z 347 │ }; 2026-10-23T23:34:17.9547395Z ╰──── 2026-10-23T23:34:17.9547941Z  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-23T23:34:17.9547947Z 2026-10-23T23:34:17.9548359Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in Array.prototype.reduce() 2026-10-23T23:34:17.9548580Z ╭─[packages/shared/src/serverSettings.ts:448:24] 2026-10-23T23:34:17.9548703Z 447 │ const favorites = 2026-10-23T23:34:17.9548920Z 448 │ setModelFavorites?.reduce((current, change) => { 2026-10-23T23:34:17.9549107Z ·  ───┬── 2026-10-23T23:34:17.9549332Z · ╰── For this reduce 2026-10-23T23:34:17.9549518Z 449 │ const exists = current.some( 2026-10-23T23:34:17.9549863Z 450 │ (favorite) => favorite.provider === change.provider && favorite.model === change.model, 2026-10-23T23:34:17.9549971Z 451 │ ); 2026-10-23T23:34:17.9550103Z 452 │ return change.favorite 2026-10-23T23:34:17.9550220Z 453 │ ? exists 2026-10-23T23:34:17.9550457Z 454 │ ? current 2026-10-23T23:34:17.9550704Z 455 │ : [...current, { provider: change.provider, model: change.model }] 2026-10-23T23:34:17.9550892Z ·  ─────┬──── 2026-10-23T23:34:17.9551141Z · ╰── From this spread 2026-10-23T23:34:17.9551263Z 456 │ : current.filter( 2026-10-23T23:34:17.9551362Z ╰──── 2026-10-23T23:34:17.9551734Z  help: Consider using `Object.assign()` or `Array.prototype.push()` to mutate the accumulator instead. 2026-10-23T23:34:17.9552265Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-23T23:34:17.9552338Z 2026-10-23T23:34:17.9552739Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-23T23:34:17.9552959Z ╭─[packages/shared/src/serverSettings.ts:466:3] 2026-10-23T23:34:17.9553073Z 464 │ null; 2026-10-23T23:34:17.9553287Z 465 │ let nextModelPreferences = initialModelPreferences; 2026-10-23T23:34:17.9553443Z ·  ──────────┬───────── 2026-10-23T23:34:17.9553720Z · ╰── From this accumulator 2026-10-23T23:34:17.9553925Z 466 │ for (const change of setModelsHidden ?? []) { 2026-10-23T23:34:17.9554049Z ·  ─┬─ 2026-10-23T23:34:17.9554237Z · ╰── For this loop 2026-10-23T23:34:17.9554496Z 467 │ const preferences = nextModelPreferences?.[change.provider] ?? { 2026-10-23T23:34:17.9554659Z 468 │ hiddenModels: [], 2026-10-23T23:34:17.9554806Z 469 │ modelOrder: [], 2026-10-23T23:34:17.9554904Z 470 │ }; 2026-10-23T23:34:17.9555233Z 471 │ const hiddenModels = preferences.hiddenModels.filter((model) => model !== change.model); 2026-10-23T23:34:17.9555458Z 472 │ if (change.hidden) hiddenModels.push(change.model); 2026-10-23T23:34:17.9555617Z 473 │ nextModelPreferences = { 2026-10-23T23:34:17.9555750Z 474 │ ...nextModelPreferences, 2026-10-23T23:34:17.9555928Z ·  ───────────┬─────────── 2026-10-23T23:34:17.9556210Z · ╰── From this spread 2026-10-23T23:34:17.9556410Z 475 │ [change.provider]: { ...preferences, hiddenModels }, 2026-10-23T23:34:17.9556510Z ╰──── 2026-10-23T23:34:17.9556856Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-23T23:34:17.9557156Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-23T23:34:17.9557160Z 2026-10-23T23:34:17.9557642Z ⚠ eslint(no-unneeded-ternary): Unnecessary use of boolean literals in conditional expression 2026-10-23T23:34:17.9557925Z ╭─[packages/shared/src/serverSettings.test.ts:35:7] 2026-10-23T23:34:17.9558325Z 34 │ const fallback = fallbackTextGenerationModelSelection(providerInstances, (instanceId) => 2026-10-23T23:34:17.9558512Z 35 │ instanceId === configured ? true : false, 2026-10-23T23:34:17.9558774Z ·  ──────────────────────────────────────── 2026-10-23T23:34:17.9558879Z 36 │ ); 2026-10-23T23:34:17.9558979Z ╰──── 2026-10-23T23:34:17.9559337Z  help: Remove this ternary operator 2026-10-23T23:34:17.9559397Z 2026-10-23T23:34:17.9559549Z Found 0 errors and 362 warnings in 5402 files (10.3s, 8 threads) 2026-10-23T23:34:18.0553442Z Post job cleanup. 2026-10-23T23:34:18.1576204Z Cache hit occurred on the primary key electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309, not saving cache. 2026-10-23T23:34:18.1695337Z Post job cleanup. 2026-10-23T23:34:18.1710626Z ##[start-action display=Cache full pnpm store;id=__7c134bdb-fe29-4dbf-9c1c-47b5b34377cb.__actions_cache] 2026-10-23T23:34:18.2167897Z Post job cleanup. 2026-10-23T23:34:18.3080111Z Cache hit occurred on the primary key pnpm-full-v1-Linux-X64-3cb0b4d7cff93dc8fe33f2ea73cac71ca25a36270fcb648b9b4a9320151012ef, not saving cache. 2026-10-23T23:34:18.3137333Z ##[end-action id=__7c134bdb-fe29-4dbf-9c1c-47b5b34377cb.__actions_cache;outcome=success;conclusion=success;duration_ms=142] 2026-10-23T23:34:18.3140394Z ##[start-action display=Cache Vite+;id=__7c134bdb-fe29-4dbf-9c1c-47b5b34377cb.vp_cache] 2026-10-23T23:34:18.3174635Z Post job cleanup. 2026-10-23T23:34:18.4102431Z 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-23T23:34:18.4143325Z ##[end-action id=__7c134bdb-fe29-4dbf-9c1c-47b5b34377cb.vp_cache;outcome=success;conclusion=success;duration_ms=100] 2026-10-23T23:34:18.4197091Z Post job cleanup. 2026-10-23T23:34:18.4775607Z [command]/usr/local/bin/git version 2026-10-23T23:34:18.4819613Z git version 2.55.0 2026-10-23T23:34:18.4845305Z Temporarily overriding HOME='/home/runner/_work/_temp/fe62f529-ec85-4043-b9dc-1a8ff2de0ea4' before making global git config changes 2026-10-23T23:34:18.4845908Z Adding repository directory to the temporary git global config as a safe directory 2026-10-23T23:34:18.4849971Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code 2026-10-23T23:34:18.4889316Z Removing SSH command configuration 2026-10-23T23:34:18.4895603Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand 2026-10-23T23:34:18.4938547Z [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-23T23:34:18.5129773Z fatal: No url found for submodule path '.repos/alchemy-effect/submodules/distilled' in .gitmodules 2026-10-23T23:34:18.5167974Z ##[warning]The process '/usr/local/bin/git' failed with exit code 128 2026-10-23T23:34:18.5246676Z A job completed hook has been configured by the self-hosted runner administrator 2026-10-23T23:34:18.5270308Z ##[group]Run '/job_completed.sh' 2026-10-23T23:34:18.5279859Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-23T23:34:18.5280075Z env: 2026-10-23T23:34:18.5280256Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 192 2026-10-23T23:34:18.5280524Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 391 2026-10-23T23:34:18.5280824Z BLACKSMITH_CHECK_RUN_ID: 120709611033 2026-10-23T23:34:18.5280990Z BLACKSMITH_JOB_DISPLAY_NAME: Lint 2026-10-23T23:34:18.5281171Z GITHUB_ACTIONS_CACHE_MODE: write 2026-10-23T23:34:18.5281331Z ##[endgroup] 2026-10-23T23:34:18.5419113Z Docker container cache not activated, skipping hash computation. 2026-10-23T23:34:18.6130113Z No active SSH sessions detected. Proceeding with shutdown immediately. 2026-10-23T23:34:18.6233738Z Cleaning up orphan processes