2026-10-23T06:59:23.2914540Z Current runner version: '2.337.0' 2026-10-23T06:59:23.2917762Z Runner name: 'blacksmith-8vcpu-ubuntu-2404-zmmkrd3q72eziuif' 2026-10-23T06:59:23.2918381Z Runner group name: 'blacksmith scale sets - blacksmith-8vcpu-ubuntu-2404' 2026-10-23T06:59:23.2919090Z Machine name: 'ip-172-31-73-130' 2026-10-23T06:59:23.2920610Z ##[group]GITHUB_TOKEN Permissions 2026-10-23T06:59:23.2921851Z Contents: read 2026-10-23T06:59:23.2922245Z Metadata: read 2026-10-23T06:59:23.2922684Z ##[endgroup] 2026-10-23T06:59:23.2924022Z Secret source: None 2026-10-23T06:59:23.2924617Z Cache mode: write 2026-10-23T06:59:23.2925128Z Prepare workflow directory 2026-10-23T06:59:23.3095693Z Prepare all required actions 2026-10-23T06:59:23.3120576Z Getting action download info 2026-10-23T06:59:23.4443216Z Download action repository 'actions/checkout@v6' (SHA:d23441a48e516b6c34aea4fa41551a30e30af803) 2026-10-23T06:59:23.4785659Z Download action repository 'actions/cache@v6' (SHA:55cc8345863c7cc4c66a329aec7e433d2d1c52a9) 2026-10-23T06:59:23.5833367Z Setting BLACKSMITH_ACTIONS_RESULTS_URL to https://results-receiver.actions.githubusercontent.com/ 2026-10-23T06:59:23.5869750Z Complete job name: Lint 2026-10-23T06:59:23.6176312Z A job started hook has been configured by the self-hosted runner administrator 2026-10-23T06:59:23.6249501Z ##[group]Run '/setup.sh' 2026-10-23T06:59:23.6258813Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-23T06:59:23.6259209Z env: 2026-10-23T06:59:23.6259427Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 224 2026-10-23T06:59:23.6259712Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 399 2026-10-23T06:59:23.6259984Z BLACKSMITH_CHECK_RUN_ID: 120286090319 2026-10-23T06:59:23.6260257Z BLACKSMITH_JOB_DISPLAY_NAME: Lint 2026-10-23T06:59:23.6260526Z GITHUB_ACTIONS_CACHE_MODE: write 2026-10-23T06:59:23.6260778Z ##[endgroup] 2026-10-23T06:59:23.6462505Z Logging daemon started (blacksmithd for logs) 2026-10-23T06:59:23.6538636Z Results daemon started (blacksmithd for results) 2026-10-23T06:59:23.6661589Z Background adoption and SSH setup started (PID: 3132) 2026-10-23T06:59:23.6666021Z 2026-10-23T06:59:23.6667919Z ---------------------------------------- 2026-10-23T06:59:23.6668413Z View this job: https://app.blacksmith.sh/pingdotgg/runs/39914880690/jobs/120286090319 2026-10-23T06:59:23.6668812Z SSH Access (using your GitHub SSH key): 2026-10-23T06:59:23.6669234Z ssh -p 64002 runner@blacksmith-8vcpu-ubuntu-2404-zmmkrd3q72eziuif.vm.blacksmith.sh 2026-10-23T06:59:23.6669532Z 2026-10-23T06:59:23.6669639Z No GitHub SSH key? Add one at: 2026-10-23T06:59:23.6670118Z https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account 2026-10-23T06:59:23.6670507Z 2026-10-23T06:59:23.6670611Z ---------------------------------------- 2026-10-23T06:59:23.6670783Z 2026-10-23T06:59:23.6670918Z VM ID: blacksmith-8vcpu-ubuntu-2404-zmmkrd3q72eziuif 2026-10-23T06:59:23.6671229Z Host: production-152.236.30.111-x8664 2026-10-23T06:59:23.6671494Z Host Agent PID: 2912567 2026-10-23T06:59:23.6671729Z Host Agent Git SHA: af74fd76b 2026-10-23T06:59:23.6671987Z Host CPU Manufacturer: AuthenticAMD 2026-10-23T06:59:23.6672260Z Blacksmith Host Generation: gen 2 2026-10-23T06:59:23.6672922Z Petname: production-possible-buzzard-e78dbada 2026-10-23T06:59:23.6673256Z Region: us-east 2026-10-23T06:59:23.6673485Z Rootfs Version: ubuntu24-full-x64-081926 2026-10-23T06:59:23.6675896Z OS Version: Ubuntu 24.04.4 LTS 2026-10-23T06:59:23.6676466Z 2026-10-23T06:59:23.6676581Z Enabling Blacksmith transparent cache 2026-10-23T06:59:23.6937789Z ##[group]Run actions/checkout@v6 2026-10-23T06:59:23.6938086Z with: 2026-10-23T06:59:23.6938403Z sparse-checkout: /* !/.repos/ !/apps/mobile/modules/t3-terminal/Vendor/**/*.a 2026-10-23T06:59:23.6938787Z sparse-checkout-cone-mode: false 2026-10-23T06:59:23.6939053Z repository: pingdotgg/t3code 2026-10-23T06:59:23.6940828Z token: *** 2026-10-23T06:59:23.6941031Z ssh-strict: true 2026-10-23T06:59:23.6941244Z ssh-user: git 2026-10-23T06:59:23.6941460Z persist-credentials: true 2026-10-23T06:59:23.6941890Z clean: true 2026-10-23T06:59:23.6942092Z fetch-depth: 1 2026-10-23T06:59:23.6942355Z fetch-tags: false 2026-10-23T06:59:23.6942927Z show-progress: true 2026-10-23T06:59:23.6943176Z lfs: false 2026-10-23T06:59:23.6943382Z submodules: false 2026-10-23T06:59:23.6943601Z set-safe-directory: true 2026-10-23T06:59:23.6943854Z allow-unsafe-pr-checkout: false 2026-10-23T06:59:23.6944102Z env: 2026-10-23T06:59:23.6944348Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 224 2026-10-23T06:59:23.6944626Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 399 2026-10-23T06:59:23.6944903Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T06:59:23.6945160Z ##[endgroup] 2026-10-23T06:59:23.8103053Z Syncing repository: pingdotgg/t3code 2026-10-23T06:59:23.8103942Z ##[group]Getting Git version info 2026-10-23T06:59:23.8104267Z Working directory is '/home/runner/_work/t3code/t3code' 2026-10-23T06:59:23.8104727Z [command]/usr/local/bin/git version 2026-10-23T06:59:23.8164733Z git version 2.55.0 2026-10-23T06:59:23.8178253Z ##[endgroup] 2026-10-23T06:59:23.8184698Z Temporarily overriding HOME='/home/runner/_work/_temp/77ac8eda-8762-4248-9c7c-4b71d4c8b579' before making global git config changes 2026-10-23T06:59:23.8185336Z Adding repository directory to the temporary git global config as a safe directory 2026-10-23T06:59:23.8187695Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code 2026-10-23T06:59:23.8213704Z Deleting the contents of '/home/runner/_work/t3code/t3code' 2026-10-23T06:59:23.8215304Z ##[group]Determining repository object format 2026-10-23T06:59:23.8216423Z ##[endgroup] 2026-10-23T06:59:23.8216766Z ##[group]Initializing the repository 2026-10-23T06:59:23.8218533Z [command]/usr/local/bin/git init /home/runner/_work/t3code/t3code 2026-10-23T06:59:23.8250388Z hint: Using 'master' as the name for the initial branch. This default branch name 2026-10-23T06:59:23.8250846Z hint: will change to "main" in Git 3.0. To configure the initial branch name 2026-10-23T06:59:23.8251298Z hint: to use in all of your new repositories, which will suppress this warning, 2026-10-23T06:59:23.8251652Z hint: call: 2026-10-23T06:59:23.8251845Z hint: 2026-10-23T06:59:23.8252105Z hint: git config --global init.defaultBranch 2026-10-23T06:59:23.8252446Z hint: 2026-10-23T06:59:23.8252725Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and 2026-10-23T06:59:23.8253253Z hint: 'development'. The just-created branch can be renamed via this command: 2026-10-23T06:59:23.8253771Z hint: 2026-10-23T06:59:23.8254040Z hint: git branch -m 2026-10-23T06:59:23.8254266Z hint: 2026-10-23T06:59:23.8254566Z hint: Disable this message with "git config set advice.defaultBranchName false" 2026-10-23T06:59:23.8255040Z Initialized empty Git repository in /home/runner/_work/t3code/t3code/.git/ 2026-10-23T06:59:23.8256122Z [command]/usr/local/bin/git remote add origin https://github.com/pingdotgg/t3code 2026-10-23T06:59:23.8276832Z ##[endgroup] 2026-10-23T06:59:23.8277191Z ##[group]Disabling automatic garbage collection 2026-10-23T06:59:23.8279153Z [command]/usr/local/bin/git config --local gc.auto 0 2026-10-23T06:59:23.8298064Z ##[endgroup] 2026-10-23T06:59:23.8298400Z ##[group]Setting up auth 2026-10-23T06:59:23.8298650Z Removing SSH command configuration 2026-10-23T06:59:23.8301962Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand 2026-10-23T06:59:23.8322043Z [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-23T06:59:23.8442513Z Removing HTTP extra header 2026-10-23T06:59:23.8445572Z [command]/usr/local/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader 2026-10-23T06:59:23.8465143Z [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-23T06:59:23.8558931Z Removing includeIf entries pointing to credentials config files 2026-10-23T06:59:23.8563728Z [command]/usr/local/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir: 2026-10-23T06:59:23.8583819Z [command]/usr/local/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url 2026-10-23T06:59:23.8676215Z [command]/usr/local/bin/git config --file /home/runner/_work/_temp/git-credentials-6db43ad4-c617-4e8c-b827-ddb398d55db3.config http.https://github.com/.extraheader AUTHORIZATION: basic *** 2026-10-23T06:59:23.8733128Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git.path /home/runner/_work/_temp/git-credentials-6db43ad4-c617-4e8c-b827-ddb398d55db3.config 2026-10-23T06:59:23.8751763Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git/worktrees/*.path /home/runner/_work/_temp/git-credentials-6db43ad4-c617-4e8c-b827-ddb398d55db3.config 2026-10-23T06:59:23.8769935Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git.path /github/runner_temp/git-credentials-6db43ad4-c617-4e8c-b827-ddb398d55db3.config 2026-10-23T06:59:23.8787521Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git/worktrees/*.path /github/runner_temp/git-credentials-6db43ad4-c617-4e8c-b827-ddb398d55db3.config 2026-10-23T06:59:23.8804146Z ##[endgroup] 2026-10-23T06:59:23.8804516Z ##[group]Fetching the repository 2026-10-23T06:59:23.8808373Z [command]/usr/local/bin/git -c protocol.version=2 fetch --no-tags --prune --no-recurse-submodules --filter=blob:none --depth=1 origin +d596d5c02e986d47843916c012f0d382bf530f14:refs/remotes/pull/23970/merge 2026-10-23T06:59:24.2058414Z From https://github.com/pingdotgg/t3code 2026-10-23T06:59:24.2059381Z * [new ref] d596d5c02e986d47843916c012f0d382bf530f14 -> pull/23970/merge 2026-10-23T06:59:24.2078536Z ##[endgroup] 2026-10-23T06:59:24.2079296Z ##[group]Determining the checkout info 2026-10-23T06:59:24.2080076Z ##[endgroup] 2026-10-23T06:59:24.2080719Z ##[group]Setting up sparse checkout 2026-10-23T06:59:24.2082295Z [command]/usr/local/bin/git config core.sparseCheckout true 2026-10-23T06:59:24.2106502Z [command]/usr/local/bin/git rev-parse --git-path info/sparse-checkout 2026-10-23T06:59:24.2121233Z .git/info/sparse-checkout 2026-10-23T06:59:24.2125715Z ##[endgroup] 2026-10-23T06:59:24.2126451Z ##[group]Checking out the ref 2026-10-23T06:59:24.2128300Z [command]/usr/local/bin/git checkout --progress --force refs/remotes/pull/23970/merge 2026-10-23T06:59:32.7118697Z Updating files: 0% (1/6312) 2026-10-23T06:59:32.7147316Z Updating files: 1% (64/6312) 2026-10-23T06:59:32.7163762Z Updating files: 2% (127/6312) 2026-10-23T06:59:32.7184689Z Updating files: 3% (190/6312) 2026-10-23T06:59:32.7204822Z Updating files: 4% (253/6312) 2026-10-23T06:59:32.7234348Z Updating files: 5% (316/6312) 2026-10-23T06:59:32.7254370Z Updating files: 6% (379/6312) 2026-10-23T06:59:32.7309267Z Updating files: 7% (442/6312) 2026-10-23T06:59:32.7338142Z Updating files: 8% (505/6312) 2026-10-23T06:59:32.7359574Z Updating files: 9% (569/6312) 2026-10-23T06:59:32.7629054Z Updating files: 10% (632/6312) 2026-10-23T06:59:32.7644451Z Updating files: 11% (695/6312) 2026-10-23T06:59:32.7654787Z Updating files: 12% (758/6312) 2026-10-23T06:59:32.7669068Z Updating files: 13% (821/6312) 2026-10-23T06:59:32.7684394Z Updating files: 14% (884/6312) 2026-10-23T06:59:32.7701624Z Updating files: 15% (947/6312) 2026-10-23T06:59:32.7719863Z Updating files: 16% (1010/6312) 2026-10-23T06:59:32.7734372Z Updating files: 17% (1074/6312) 2026-10-23T06:59:32.7751939Z Updating files: 18% (1137/6312) 2026-10-23T06:59:32.7768463Z Updating files: 19% (1200/6312) 2026-10-23T06:59:32.7791298Z Updating files: 20% (1263/6312) 2026-10-23T06:59:32.7808655Z Updating files: 21% (1326/6312) 2026-10-23T06:59:32.7826465Z Updating files: 22% (1389/6312) 2026-10-23T06:59:32.7839527Z Updating files: 23% (1452/6312) 2026-10-23T06:59:32.7852266Z Updating files: 24% (1515/6312) 2026-10-23T06:59:32.7867573Z Updating files: 25% (1578/6312) 2026-10-23T06:59:32.7880521Z Updating files: 26% (1642/6312) 2026-10-23T06:59:32.7894624Z Updating files: 27% (1705/6312) 2026-10-23T06:59:32.7913608Z Updating files: 28% (1768/6312) 2026-10-23T06:59:32.7945683Z Updating files: 29% (1831/6312) 2026-10-23T06:59:32.7967454Z Updating files: 30% (1894/6312) 2026-10-23T06:59:32.7989688Z Updating files: 31% (1957/6312) 2026-10-23T06:59:32.8018897Z Updating files: 32% (2020/6312) 2026-10-23T06:59:32.8047590Z Updating files: 33% (2083/6312) 2026-10-23T06:59:32.8113312Z Updating files: 34% (2147/6312) 2026-10-23T06:59:32.8168829Z Updating files: 35% (2210/6312) 2026-10-23T06:59:32.8200527Z Updating files: 36% (2273/6312) 2026-10-23T06:59:32.8235003Z Updating files: 37% (2336/6312) 2026-10-23T06:59:32.8276141Z Updating files: 38% (2399/6312) 2026-10-23T06:59:32.8303181Z Updating files: 39% (2462/6312) 2026-10-23T06:59:32.8334163Z Updating files: 40% (2525/6312) 2026-10-23T06:59:32.8365537Z Updating files: 41% (2588/6312) 2026-10-23T06:59:32.8385548Z Updating files: 42% (2652/6312) 2026-10-23T06:59:32.8396194Z Updating files: 43% (2715/6312) 2026-10-23T06:59:32.8416684Z Updating files: 44% (2778/6312) 2026-10-23T06:59:32.8448151Z Updating files: 45% (2841/6312) 2026-10-23T06:59:32.8471226Z Updating files: 46% (2904/6312) 2026-10-23T06:59:32.8500187Z Updating files: 47% (2967/6312) 2026-10-23T06:59:32.8528066Z Updating files: 48% (3030/6312) 2026-10-23T06:59:32.8557571Z Updating files: 49% (3093/6312) 2026-10-23T06:59:32.8595278Z Updating files: 50% (3156/6312) 2026-10-23T06:59:32.8612867Z Updating files: 51% (3220/6312) 2026-10-23T06:59:32.8645610Z Updating files: 52% (3283/6312) 2026-10-23T06:59:32.8671686Z Updating files: 53% (3346/6312) 2026-10-23T06:59:32.8691755Z Updating files: 54% (3409/6312) 2026-10-23T06:59:32.8714878Z Updating files: 55% (3472/6312) 2026-10-23T06:59:32.8732685Z Updating files: 56% (3535/6312) 2026-10-23T06:59:32.8748860Z Updating files: 57% (3598/6312) 2026-10-23T06:59:32.8767516Z Updating files: 58% (3661/6312) 2026-10-23T06:59:32.9134459Z Updating files: 59% (3725/6312) 2026-10-23T06:59:32.9148625Z Updating files: 60% (3788/6312) 2026-10-23T06:59:32.9165005Z Updating files: 61% (3851/6312) 2026-10-23T06:59:32.9182844Z Updating files: 62% (3914/6312) 2026-10-23T06:59:32.9203385Z Updating files: 63% (3977/6312) 2026-10-23T06:59:32.9229562Z Updating files: 64% (4040/6312) 2026-10-23T06:59:32.9250556Z Updating files: 65% (4103/6312) 2026-10-23T06:59:32.9266705Z Updating files: 66% (4166/6312) 2026-10-23T06:59:32.9290338Z Updating files: 67% (4230/6312) 2026-10-23T06:59:32.9303330Z Updating files: 68% (4293/6312) 2026-10-23T06:59:32.9321254Z Updating files: 69% (4356/6312) 2026-10-23T06:59:32.9333486Z Updating files: 70% (4419/6312) 2026-10-23T06:59:32.9349417Z Updating files: 71% (4482/6312) 2026-10-23T06:59:32.9365558Z Updating files: 72% (4545/6312) 2026-10-23T06:59:32.9392196Z Updating files: 73% (4608/6312) 2026-10-23T06:59:32.9646800Z Updating files: 74% (4671/6312) 2026-10-23T06:59:32.9833803Z Updating files: 75% (4734/6312) 2026-10-23T06:59:32.9855011Z Updating files: 76% (4798/6312) 2026-10-23T06:59:32.9875134Z Updating files: 77% (4861/6312) 2026-10-23T06:59:32.9900517Z Updating files: 78% (4924/6312) 2026-10-23T06:59:32.9920101Z Updating files: 79% (4987/6312) 2026-10-23T06:59:32.9941433Z Updating files: 80% (5050/6312) 2026-10-23T06:59:32.9957942Z Updating files: 81% (5113/6312) 2026-10-23T06:59:32.9977214Z Updating files: 82% (5176/6312) 2026-10-23T06:59:32.9995571Z Updating files: 83% (5239/6312) 2026-10-23T06:59:33.0016559Z Updating files: 84% (5303/6312) 2026-10-23T06:59:33.0035411Z Updating files: 85% (5366/6312) 2026-10-23T06:59:33.0058302Z Updating files: 86% (5429/6312) 2026-10-23T06:59:33.0127268Z Updating files: 87% (5492/6312) 2026-10-23T06:59:33.0157966Z Updating files: 88% (5555/6312) 2026-10-23T06:59:33.0176087Z Updating files: 89% (5618/6312) 2026-10-23T06:59:33.0199895Z Updating files: 90% (5681/6312) 2026-10-23T06:59:33.0233227Z Updating files: 91% (5744/6312) 2026-10-23T06:59:33.0248587Z Updating files: 92% (5808/6312) 2026-10-23T06:59:33.0264211Z Updating files: 93% (5871/6312) 2026-10-23T06:59:33.0286828Z Updating files: 94% (5934/6312) 2026-10-23T06:59:33.0308898Z Updating files: 95% (5997/6312) 2026-10-23T06:59:33.0361230Z Updating files: 96% (6060/6312) 2026-10-23T06:59:33.0386701Z Updating files: 97% (6123/6312) 2026-10-23T06:59:33.0432192Z Updating files: 98% (6186/6312) 2026-10-23T06:59:33.0450793Z Updating files: 99% (6249/6312) 2026-10-23T06:59:33.0451113Z Updating files: 100% (6312/6312) 2026-10-23T06:59:33.0451443Z Updating files: 100% (6312/6312), done. 2026-10-23T06:59:33.0601141Z Note: switching to 'refs/remotes/pull/23970/merge'. 2026-10-23T06:59:33.0601543Z 2026-10-23T06:59:33.0601711Z You are in 'detached HEAD' state. You can look around, make experimental 2026-10-23T06:59:33.0602075Z changes and commit them, and you can discard any commits you make in this 2026-10-23T06:59:33.0602460Z state without impacting any branches by switching back to a branch. 2026-10-23T06:59:33.0602692Z 2026-10-23T06:59:33.0602845Z If you want to create a new branch to retain commits you create, you may 2026-10-23T06:59:33.0603225Z do so (now or later) by using -c with the switch command. Example: 2026-10-23T06:59:33.0603432Z 2026-10-23T06:59:33.0603520Z git switch -c 2026-10-23T06:59:33.0603698Z 2026-10-23T06:59:33.0603901Z Or undo this operation with: 2026-10-23T06:59:33.0604093Z 2026-10-23T06:59:33.0604172Z git switch - 2026-10-23T06:59:33.0604299Z 2026-10-23T06:59:33.0604476Z Turn off this advice by setting config variable advice.detachedHead to false 2026-10-23T06:59:33.0604709Z 2026-10-23T06:59:33.0604974Z HEAD is now at d596d5c Merge 7660c118ab860ee6841c7445c5333e1e53c47dcd into 56c365cc29de58746d9888567aed1a71f07d9370 2026-10-23T06:59:33.0615022Z ##[endgroup] 2026-10-23T06:59:33.0646785Z [command]/usr/local/bin/git log -1 --format=%H 2026-10-23T06:59:33.0665239Z d596d5c02e986d47843916c012f0d382bf530f14 2026-10-23T06:59:33.0737986Z ##[group]Run files="$(git ls-files .github/pr-assets)" 2026-10-23T06:59:33.0738229Z files="$(git ls-files .github/pr-assets)" 2026-10-23T06:59:33.0738411Z if test -n "$files"; then 2026-10-23T06:59:33.0738679Z  printf 'PR evidence must be uploaded to GitHub, not committed:\n%s\n' "$files" >&2 2026-10-23T06:59:33.0739004Z  exit 1 2026-10-23T06:59:33.0739177Z fi 2026-10-23T06:59:33.0750817Z shell: /usr/bin/bash -e {0} 2026-10-23T06:59:33.0750952Z env: 2026-10-23T06:59:33.0751077Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 224 2026-10-23T06:59:33.0751231Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 399 2026-10-23T06:59:33.0751380Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T06:59:33.0751511Z ##[endgroup] 2026-10-23T06:59:33.0891205Z Prepare all required actions 2026-10-23T06:59:33.0891656Z Getting action download info 2026-10-23T06:59:33.2003075Z Download action repository 'voidzero-dev/setup-vp@v1' (SHA:250f29ce396baf5e8f24498e17c0dfdebabc26eb) 2026-10-23T06:59:33.3155728Z ##[group]Run ./.github/actions/setup-ci-deps 2026-10-23T06:59:33.3155893Z env: 2026-10-23T06:59:33.3156005Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 224 2026-10-23T06:59:33.3156151Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 399 2026-10-23T06:59:33.3156296Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T06:59:33.3156431Z ##[endgroup] 2026-10-23T06:59:33.4499796Z ##[start-action display=Resolve Vite+ version;id=__self.vp] 2026-10-23T06:59:33.4514599Z ##[group]Run echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-23T06:59:33.4515069Z echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-23T06:59:33.4515362Z echo "node=$(jq -r '.engines.node' package.json)" >> "$GITHUB_OUTPUT" 2026-10-23T06:59:33.4515601Z echo "pnpm=$(jq -r '.packageManager' package.json)" >> "$GITHUB_OUTPUT" 2026-10-23T06:59:33.4527317Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-23T06:59:33.4527487Z env: 2026-10-23T06:59:33.4527600Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 224 2026-10-23T06:59:33.4527744Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 399 2026-10-23T06:59:33.4527882Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T06:59:33.4528017Z ##[endgroup] 2026-10-23T06:59:33.4592521Z ##[end-action id=__self.vp;outcome=success;conclusion=success;duration_ms=9] 2026-10-23T06:59:33.4593866Z ##[start-action display=Cache Vite+;id=__self.vp_cache] 2026-10-23T06:59:33.4633898Z ##[group]Run actions/cache@v6 2026-10-23T06:59:33.4634047Z with: 2026-10-23T06:59:33.4634151Z path: ~/.vite-plus 2026-10-23T06:59:33.4634311Z key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-23T06:59:33.4634507Z enableCrossOsArchive: false 2026-10-23T06:59:33.4634634Z fail-on-cache-miss: false 2026-10-23T06:59:33.4634759Z lookup-only: false 2026-10-23T06:59:33.4634868Z save-always: false 2026-10-23T06:59:33.4634975Z env: 2026-10-23T06:59:33.4635080Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 224 2026-10-23T06:59:33.4635222Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 399 2026-10-23T06:59:33.4635362Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T06:59:33.4635491Z ##[endgroup] 2026-10-23T06:59:33.6564026Z Cache hit for: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-23T06:59:34.0234442Z Received 170349591 of 170349591 (100.0%), 468.2 MBs/sec 2026-10-23T06:59:34.0235230Z Cache Size: ~162 MB (170349591 B) 2026-10-23T06:59:34.0258336Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/01efd680-1af1-4668-96a8-be4c48e4f5dd/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-23T06:59:34.6699934Z Cache restored successfully 2026-10-23T06:59:34.6831678Z Cache restored from key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-23T06:59:34.6905538Z ##[end-action id=__self.vp_cache;outcome=success;conclusion=success;duration_ms=1231] 2026-10-23T06:59:34.6907798Z ##[start-action display=Use cached Vite+;id=__self.__run] 2026-10-23T06:59:34.6927737Z ##[group]Run echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-23T06:59:34.6927947Z echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-23T06:59:34.6928116Z "$HOME/.vite-plus/bin/vp" env use "26.12.1" 2026-10-23T06:59:34.6939693Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-23T06:59:34.6939857Z env: 2026-10-23T06:59:34.6939967Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 224 2026-10-23T06:59:34.6940109Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 399 2026-10-23T06:59:34.6940249Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T06:59:34.6940393Z ##[endgroup] 2026-10-23T06:59:34.6975686Z Using Node.js v26.12.1 (resolved from 26.12.1) 2026-10-23T06:59:34.6982325Z ##[end-action id=__self.__run;outcome=success;conclusion=success;duration_ms=7] 2026-10-23T06:59:34.6983560Z ##[start-action display=Setup Vite+;id=__self.__voidzero-dev_setup-vp] 2026-10-23T06:59:34.6986949Z ##[end-action id=__self.__voidzero-dev_setup-vp;outcome=skipped;conclusion=skipped;duration_ms=0] 2026-10-23T06:59:34.6987986Z ##[start-action display=Resolve pnpm store path;id=__self.pnpm_store] 2026-10-23T06:59:34.6999194Z ##[group]Run store_path="$(vp pm cache dir)" 2026-10-23T06:59:34.6999401Z store_path="$(vp pm cache dir)" 2026-10-23T06:59:34.6999647Z echo "path=$store_path" >> "$GITHUB_OUTPUT" 2026-10-23T06:59:34.7010397Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-23T06:59:34.7010619Z env: 2026-10-23T06:59:34.7010775Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 224 2026-10-23T06:59:34.7010973Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 399 2026-10-23T06:59:34.7011262Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T06:59:34.7011457Z ##[endgroup] 2026-10-23T06:59:34.7163207Z ##[end-action id=__self.pnpm_store;outcome=success;conclusion=success;duration_ms=17] 2026-10-23T06:59:34.7164932Z ##[start-action display=Cache full pnpm store;id=__self.__actions_cache] 2026-10-23T06:59:34.7676453Z ##[group]Run actions/cache@v6 2026-10-23T06:59:34.7676585Z with: 2026-10-23T06:59:34.7676706Z path: /home/runner/.local/share/pnpm/store/v11 2026-10-23T06:59:34.7676962Z key: pnpm-full-v1-Linux-X64-00e587c1edf31fe669c96bc4768c0e07a969fff8e8228235fb75ec6c0abf4161 2026-10-23T06:59:34.7677210Z restore-keys: pnpm-full-v1-Linux-X64- 2026-10-23T06:59:34.7677353Z enableCrossOsArchive: false 2026-10-23T06:59:34.7677482Z fail-on-cache-miss: false 2026-10-23T06:59:34.7677602Z lookup-only: false 2026-10-23T06:59:34.7677709Z save-always: false 2026-10-23T06:59:34.7677811Z env: 2026-10-23T06:59:34.7677916Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 224 2026-10-23T06:59:34.7678068Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 399 2026-10-23T06:59:34.7678202Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T06:59:34.7678332Z ##[endgroup] 2026-10-23T06:59:34.9643105Z Cache hit for: pnpm-full-v1-Linux-X64-00e587c1edf31fe669c96bc4768c0e07a969fff8e8228235fb75ec6c0abf4161 2026-10-23T06:59:35.9992858Z Received 671088640 of 995198885 (67.4%), 626.8 MBs/sec 2026-10-23T06:59:36.4452216Z Received 995198885 of 995198885 (100.0%), 647.4 MBs/sec 2026-10-23T06:59:36.4452697Z Cache Size: ~949 MB (995198885 B) 2026-10-23T06:59:36.4493485Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/53dd6e26-0696-4956-8a74-ad8cec7b598a/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-23T06:59:41.4894798Z Cache restored successfully 2026-10-23T06:59:41.5377546Z Cache restored from key: pnpm-full-v1-Linux-X64-00e587c1edf31fe669c96bc4768c0e07a969fff8e8228235fb75ec6c0abf4161 2026-10-23T06:59:41.5486014Z ##[end-action id=__self.__actions_cache;outcome=success;conclusion=success;duration_ms=6832] 2026-10-23T06:59:41.5489499Z ##[start-action display=Install dependencies;id=__self.__run_2] 2026-10-23T06:59:41.5516778Z ##[group]Run vp install 2026-10-23T06:59:41.5517008Z vp install 2026-10-23T06:59:41.5537814Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-23T06:59:41.5538079Z env: 2026-10-23T06:59:41.5538290Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 224 2026-10-23T06:59:41.5538535Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 399 2026-10-23T06:59:41.5538788Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T06:59:41.5539011Z ##[endgroup] 2026-10-23T06:59:41.5997977Z Scope: all 33 workspace projects 2026-10-23T06:59:41.7044893Z ? Verifying lockfile against supply-chain policies (2088 entries)... 2026-10-23T06:59:41.9440665Z Packages are hard linked from the content-addressable store to the virtual store. 2026-10-23T06:59:41.9441313Z Content-addressable store is at: /home/runner/.local/share/pnpm/store/v11 2026-10-23T06:59:41.9441778Z Virtual store is at: node_modules/.pnpm 2026-10-23T06:59:44.1063456Z ✓ Lockfile passes supply-chain policies (2088 entries in 2.4s) 2026-10-23T06:59:44.1063707Z Lockfile is up to date, resolution step is skipped 2026-10-23T06:59:44.1219463Z Packages: +1721 2026-10-23T06:59:44.1219632Z ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2026-10-23T06:59:44.1496211Z Progress: resolved 1721, reused 1718, downloaded 0, added 1721, done 2026-10-23T06:59:45.0127186Z . prepare$ vp config --no-agent 2026-10-23T06:59:45.1102386Z . prepare: Done 2026-10-23T06:59:45.1114546Z 2026-10-23T06:59:45.1114770Z devDependencies: 2026-10-23T06:59:45.1114973Z + @coderabbitai/config 1.1.0 2026-10-23T06:59:45.1115177Z + @shadcn/lint 0.1.5 2026-10-23T06:59:45.1115398Z + @types/node 24.12.4 2026-10-23T06:59:45.1115579Z + knip 6.34.0 2026-10-23T06:59:45.1115777Z + typescript <- @tsc-rs/typescript 0.8.0 2026-10-23T06:59:45.1115996Z + vite-plus 1.3.0 2026-10-23T06:59:45.1116098Z 2026-10-23T06:59:45.1131124Z Done in 3.5s using pnpm v12.14.0 2026-10-23T06:59:45.1271613Z ##[end-action id=__self.__run_2;outcome=success;conclusion=success;duration_ms=3578] 2026-10-23T06:59:45.1774617Z ##[group]Run actions/cache@v6 2026-10-23T06:59:45.1774784Z with: 2026-10-23T06:59:45.1774899Z path: ~/.cache/electron 2026-10-23T06:59:45.1775119Z key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-23T06:59:45.1775344Z enableCrossOsArchive: false 2026-10-23T06:59:45.1775472Z fail-on-cache-miss: false 2026-10-23T06:59:45.1775591Z lookup-only: false 2026-10-23T06:59:45.1775699Z save-always: false 2026-10-23T06:59:45.1775801Z env: 2026-10-23T06:59:45.1775906Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 224 2026-10-23T06:59:45.1776047Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 399 2026-10-23T06:59:45.1776197Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T06:59:45.1776326Z ##[endgroup] 2026-10-23T06:59:45.3666380Z Cache hit for: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-23T06:59:45.5136032Z Received 122906203 of 122906203 (100.0%), 881.3 MBs/sec 2026-10-23T06:59:45.5136340Z Cache Size: ~117 MB (122906203 B) 2026-10-23T06:59:45.5175204Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/3c494462-55aa-4ddc-99c5-6b5662648747/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-23T06:59:45.5755517Z Cache restored successfully 2026-10-23T06:59:45.5870406Z Cache restored from key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-23T06:59:45.5954600Z ##[group]Run vp run --filter @t3tools/desktop ensure:electron 2026-10-23T06:59:45.5954911Z vp run --filter @t3tools/desktop ensure:electron 2026-10-23T06:59:45.5966519Z shell: /usr/bin/bash -e {0} 2026-10-23T06:59:45.5966646Z env: 2026-10-23T06:59:45.5966884Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 224 2026-10-23T06:59:45.5967031Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 399 2026-10-23T06:59:45.5967171Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T06:59:45.5967304Z ##[endgroup] 2026-10-23T06:59:45.7467782Z ~/apps/desktop$ node scripts/ensure-electron-runtime.mjs ⊘ cache disabled 2026-10-23T06:59:46.2947000Z /home/runner/_work/t3code/t3code/node_modules/.pnpm/electron@44.9.3_supports-color@8.1.1/node_modules/electron/dist/electron 2026-10-23T06:59:46.2962401Z 2026-10-23T06:59:46.3036235Z ##[group]Run vp run knip:check 2026-10-23T06:59:46.3036416Z vp run knip:check 2026-10-23T06:59:46.3047664Z shell: /usr/bin/bash -e {0} 2026-10-23T06:59:46.3047793Z env: 2026-10-23T06:59:46.3047904Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 224 2026-10-23T06:59:46.3048049Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 399 2026-10-23T06:59:46.3048196Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T06:59:46.3048326Z ##[endgroup] 2026-10-23T06:59:46.4471683Z $ knip --include files,dependencies --no-config-hints ⊘ cache disabled 2026-10-23T06:59:49.9688748Z 2026-10-23T06:59:49.9691896Z $ 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-23T07:00:16.8481256Z 2026-10-23T07:00:16.8482401Z --- 2026-10-23T07:00:16.8482727Z vp run: 2/2 successful. (Run `vp run --last-details` for full details) 2026-10-23T07:00:16.8556499Z ##[group]Run vp run --filter @t3tools/source-control-github generate --check 2026-10-23T07:00:16.8556962Z vp run --filter @t3tools/source-control-github generate --check 2026-10-23T07:00:16.8570321Z shell: /usr/bin/bash -e {0} 2026-10-23T07:00:16.8570484Z env: 2026-10-23T07:00:16.8570595Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 224 2026-10-23T07:00:16.8570748Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 399 2026-10-23T07:00:16.8570888Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T07:00:16.8571043Z ##[endgroup] 2026-10-23T07:00:16.9962328Z ~/packages/source-control-github$ graphqlgen --check ⊘ cache disabled 2026-10-23T07:00:17.1712033Z 2026-10-23T07:00:17.1775516Z ##[group]Run vp run --filter t3 generate --check 2026-10-23T07:00:17.1775737Z vp run --filter t3 generate --check 2026-10-23T07:00:17.1787189Z shell: /usr/bin/bash -e {0} 2026-10-23T07:00:17.1787315Z env: 2026-10-23T07:00:17.1787436Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 224 2026-10-23T07:00:17.1787580Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 399 2026-10-23T07:00:17.1787718Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T07:00:17.1787851Z ##[endgroup] 2026-10-23T07:00:17.3168948Z ~/apps/server$ graphqlgen --check ⊘ cache disabled 2026-10-23T07:00:17.4604729Z 2026-10-23T07:00:17.4670308Z ##[group]Run vp check 2026-10-23T07:00:17.4670525Z vp check 2026-10-23T07:00:17.4682650Z shell: /usr/bin/bash -e {0} 2026-10-23T07:00:17.4682793Z env: 2026-10-23T07:00:17.4682905Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 224 2026-10-23T07:00:17.4683052Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 399 2026-10-23T07:00:17.4683194Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T07:00:17.4683335Z ##[endgroup] 2026-10-23T07:00:17.9739141Z pass: All 5670 files are correctly formatted (372ms, 8 threads) 2026-10-23T07:00:22.8101873Z warn: Lint warnings found 2026-10-23T07:00:22.8103832Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-23T07:00:22.8104211Z ╭─[apps/mobile/src/lib/markdownDocument.ts:138:28] 2026-10-23T07:00:22.8104437Z 137 │ visit(parser.parse(markdown)); 2026-10-23T07:00:22.8104662Z 138 │ for (const edit of edits.reverse()) 2026-10-23T07:00:22.8104894Z ·  ─────── 2026-10-23T07:00:22.8105210Z 139 │ markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end); 2026-10-23T07:00:22.8105432Z ╰──── 2026-10-23T07:00:22.8105757Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-23T07:00:22.8106005Z 2026-10-23T07:00:22.8106237Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-23T07:00:22.8106566Z ╭─[apps/mobile/src/lib/markdownDocument.ts:169:28] 2026-10-23T07:00:22.8106779Z 168 │ visit(parser.parse(markdown)); 2026-10-23T07:00:22.8107037Z 169 │ for (const edit of edits.reverse()) 2026-10-23T07:00:22.8107234Z ·  ─────── 2026-10-23T07:00:22.8107498Z 170 │ markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end); 2026-10-23T07:00:22.8107713Z ╰──── 2026-10-23T07:00:22.8108015Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-23T07:00:22.8108258Z 2026-10-23T07:00:22.8108463Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-23T07:00:22.8108780Z ╭─[apps/mobile/src/lib/markdownDocument.ts:223:38] 2026-10-23T07:00:22.8108994Z 222 │ visit(parser.parse(markdown)); 2026-10-23T07:00:22.8109191Z 223 │ for (const lineStart of lineStarts.reverse()) { 2026-10-23T07:00:22.8109423Z ·  ─────── 2026-10-23T07:00:22.8109690Z 224 │ // The header row may be a lazy line without its container markers (`>` or list indent), 2026-10-23T07:00:22.8109903Z ╰──── 2026-10-23T07:00:22.8110205Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-23T07:00:22.8110445Z 2026-10-23T07:00:22.8110633Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T07:00:22.8110914Z ╭─[packages/shared/src/qrCode.ts:458:44] 2026-10-23T07:00:22.8111110Z 457 │ ): Array { 2026-10-23T07:00:22.8111301Z 458 │ let result: Array = divisor.map((_) => 0); 2026-10-23T07:00:22.8111522Z ·  ┬ 2026-10-23T07:00:22.8111778Z · ╰── '_' is declared here 2026-10-23T07:00:22.8111995Z 459 │ for (const b of data) { 2026-10-23T07:00:22.8112134Z ╰──── 2026-10-23T07:00:22.8112286Z  help: Consider removing this parameter. 2026-10-23T07:00:22.8112405Z 2026-10-23T07:00:22.8112609Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-23T07:00:22.8112934Z ╭─[apps/web/src/lib/composerContextReferences.ts:90:40] 2026-10-23T07:00:22.8113150Z 89 │ let cursor = prompt.length; 2026-10-23T07:00:22.8113492Z 90 │ for (const occurrence of occurrences.reverse()) { 2026-10-23T07:00:22.8113753Z ·  ─────── 2026-10-23T07:00:22.8113944Z 91 │ let { start, end } = occurrence; 2026-10-23T07:00:22.8114100Z ╰──── 2026-10-23T07:00:22.8114407Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-23T07:00:22.8114684Z 2026-10-23T07:00:22.8115048Z ⚠ 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-23T07:00:22.8115484Z ╭─[packages/contracts/src/auth.test.ts:17:12] 2026-10-23T07:00:22.8115774Z 16 │ it("decodes legacy review credentials without offering them in new grants", () => { 2026-10-23T07:00:22.8116106Z 17 │ expect(Schema.decodeUnknownSync(AuthEnvironmentScopes)(["review:write"])).toEqual([ 2026-10-23T07:00:22.8116378Z ·  ──────────────────────── 2026-10-23T07:00:22.8116552Z 18 │ "review:write", 2026-10-23T07:00:22.8116688Z ╰──── 2026-10-23T07:00:22.8116741Z 2026-10-23T07:00:22.8117098Z ⚠ 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-23T07:00:22.8117528Z ╭─[packages/contracts/src/auth.test.ts:20:18] 2026-10-23T07:00:22.8117704Z 19 │ ]); 2026-10-23T07:00:22.8117932Z 20 │ expect(() => Schema.decodeUnknownSync(AuthGrantScopes)(["review:write"])).toThrow(); 2026-10-23T07:00:22.8118198Z ·  ──────────────────────── 2026-10-23T07:00:22.8118443Z 21 │ expect(AuthStandardClientScopes).not.toContain("review:write"); 2026-10-23T07:00:22.8118638Z ╰──── 2026-10-23T07:00:22.8118693Z 2026-10-23T07:00:22.8119044Z ⚠ 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-23T07:00:22.8119490Z ╭─[packages/contracts/src/auth.test.ts:58:21] 2026-10-23T07:00:22.8119772Z 57 │ it("ignores unknown response permissions without falling back to broader scopes", () => { 2026-10-23T07:00:22.8120062Z 58 │ const session = Schema.decodeUnknownSync(AuthSessionState)({ 2026-10-23T07:00:22.8120296Z ·  ──────────────────────── 2026-10-23T07:00:22.8120479Z 59 │ authenticated: true, 2026-10-23T07:00:22.8120614Z ╰──── 2026-10-23T07:00:22.8120674Z 2026-10-23T07:00:22.8120883Z ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed 2026-10-23T07:00:22.8121183Z ╭─[packages/contracts/src/rpc.ts:295:8] 2026-10-23T07:00:22.8121366Z 294 │ } from "./device.ts"; 2026-10-23T07:00:22.8121538Z 295 │ import {} from "./previewAutomation.ts"; 2026-10-23T07:00:22.8121715Z ·  ── 2026-10-23T07:00:22.8121860Z 296 │ import { 2026-10-23T07:00:22.8121982Z ╰──── 2026-10-23T07:00:22.8122115Z  help: Remove empty braces 2026-10-23T07:00:22.8122217Z 2026-10-23T07:00:22.8122446Z ⚠ eslint(no-unneeded-ternary): Unnecessary use of boolean literals in conditional expression 2026-10-23T07:00:22.8122784Z ╭─[packages/shared/src/serverSettings.test.ts:35:7] 2026-10-23T07:00:22.8123088Z 34 │ const fallback = fallbackTextGenerationModelSelection(providerInstances, (instanceId) => 2026-10-23T07:00:22.8123450Z 35 │ instanceId === configured ? true : false, 2026-10-23T07:00:22.8123716Z ·  ──────────────────────────────────────── 2026-10-23T07:00:22.8124155Z 36 │ ); 2026-10-23T07:00:22.8124270Z ╰──── 2026-10-23T07:00:22.8124420Z  help: Remove this ternary operator 2026-10-23T07:00:22.8124531Z 2026-10-23T07:00:22.8124760Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-23T07:00:22.8125097Z ╭─[packages/shared/src/composerContextLegacySend.ts:19:45] 2026-10-23T07:00:22.8125361Z 18 │ const occurrences = collectComposerContextReferences(text); 2026-10-23T07:00:22.8125600Z 19 │ for (const occurrence of [...occurrences].reverse()) { 2026-10-23T07:00:22.8125826Z ·  ─────── 2026-10-23T07:00:22.8126056Z 20 │ const record = recordsById.get(occurrence.contextId); 2026-10-23T07:00:22.8126230Z ╰──── 2026-10-23T07:00:22.8126537Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-23T07:00:22.8126781Z 2026-10-23T07:00:22.8127031Z ⚠ eslint(no-unused-vars): Function 'normalizeTerminalContextSelection' is declared but never used. 2026-10-23T07:00:22.8127370Z ╭─[apps/web/src/lib/terminalContext.ts:56:10] 2026-10-23T07:00:22.8127542Z 55 │ 2026-10-23T07:00:22.8127696Z 56 │ function normalizeTerminalContextSelection( 2026-10-23T07:00:22.8127917Z ·  ────────────────┬──────────────── 2026-10-23T07:00:22.8128210Z · ╰── 'normalizeTerminalContextSelection' is declared here 2026-10-23T07:00:22.8128480Z 57 │ selection: TerminalContextSelection, 2026-10-23T07:00:22.8128635Z ╰──── 2026-10-23T07:00:22.8128792Z  help: Consider removing this declaration. 2026-10-23T07:00:22.8128914Z 2026-10-23T07:00:22.8129105Z ⚠ eslint(no-unused-vars): Identifier 'Image' is imported but never used. 2026-10-23T07:00:22.8129433Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:17:10] 2026-10-23T07:00:22.8129711Z 16 │ import type { NativeSyntheticEvent, ViewProps } from "react-native"; 2026-10-23T07:00:22.8129964Z 17 │ import { Image, Platform, StyleSheet } from "react-native"; 2026-10-23T07:00:22.8130161Z ·  ──┬── 2026-10-23T07:00:22.8130373Z · ╰── 'Image' is imported here 2026-10-23T07:00:22.8130552Z 18 │ 2026-10-23T07:00:22.8130662Z ╰──── 2026-10-23T07:00:22.8130817Z  help: Consider removing this import. 2026-10-23T07:00:22.8130936Z 2026-10-23T07:00:22.8131134Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-23T07:00:22.8131468Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:227:6] 2026-10-23T07:00:22.8131775Z 223 │ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents( 2026-10-23T07:00:22.8132036Z 224 │ nativeEventSnapshotsRef.current, 2026-10-23T07:00:22.8132233Z ·  ───────────┬─────────── 2026-10-23T07:00:22.8133179Z · ╰── 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-23T07:00:22.8133903Z 225 │ mostRecentEventCount, 2026-10-23T07:00:22.8134102Z 226 │ ); 2026-10-23T07:00:22.8134290Z 227 │ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]); 2026-10-23T07:00:22.8134554Z ·  ──────────────────────────┬────────────────────────── 2026-10-23T07:00:22.8134915Z · ╰── This dependency list is missing values used by the callback 2026-10-23T07:00:22.8135182Z 228 │ const assumedValue = props.value; 2026-10-23T07:00:22.8135331Z ╰──── 2026-10-23T07:00:22.8135552Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-23T07:00:22.8136047Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8136346Z 2026-10-23T07:00:22.8136568Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-23T07:00:22.8136917Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:235:7] 2026-10-23T07:00:22.8137216Z 234 │ nativeEventSnapshotsRef.current = assumeComposerControlledState( 2026-10-23T07:00:22.8137457Z 235 │ nativeEventSnapshotsRef.current, 2026-10-23T07:00:22.8137658Z ·  ───────────┬─────────── 2026-10-23T07:00:22.8138212Z · ╰── 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-23T07:00:22.8138696Z 236 │ controlledEventCount, 2026-10-23T07:00:22.8138851Z 237 │ assumedValue, 2026-10-23T07:00:22.8138994Z 238 │ ); 2026-10-23T07:00:22.8139327Z 239 │ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]); 2026-10-23T07:00:22.8139633Z ·  ───────────┬────────── 2026-10-23T07:00:22.8139978Z · ╰── Unnecessary dependency `controlledDocumentJson` 2026-10-23T07:00:22.8140257Z 240 │ const acceptNativeEvent = useCallback( 2026-10-23T07:00:22.8140422Z ╰──── 2026-10-23T07:00:22.8140895Z  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-23T07:00:22.8141645Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8141973Z 2026-10-23T07:00:22.8142116Z ⚠ react(refs): Cannot access refs during render 2026-10-23T07:00:22.8142417Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:160:29] 2026-10-23T07:00:22.8142692Z 159 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-23T07:00:22.8142949Z 160 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-23T07:00:22.8143196Z ·  ─────────────┬──────────── 2026-10-23T07:00:22.8143487Z · ╰── Cannot access ref value during render 2026-10-23T07:00:22.8143700Z 161 │ }); 2026-10-23T07:00:22.8143823Z ╰──── 2026-10-23T07:00:22.8144346Z  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-23T07:00:22.8145426Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T07:00:22.8145727Z 2026-10-23T07:00:22.8145906Z ⚠ react(refs): Cannot access refs during render 2026-10-23T07:00:22.8146236Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:160:29] 2026-10-23T07:00:22.8146524Z 159 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-23T07:00:22.8146785Z 160 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-23T07:00:22.8147043Z ·  ─────────────┬──────────── 2026-10-23T07:00:22.8147402Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T07:00:22.8147665Z 161 │ }); 2026-10-23T07:00:22.8147797Z ╰──── 2026-10-23T07:00:22.8148332Z  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-23T07:00:22.8149062Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T07:00:22.8149338Z 2026-10-23T07:00:22.8149488Z ⚠ react(refs): Cannot access refs during render 2026-10-23T07:00:22.8149798Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:23] 2026-10-23T07:00:22.8150009Z 161 │ }); 2026-10-23T07:00:22.8150172Z 162 │ confirmedTokensRef.current = tokens; 2026-10-23T07:00:22.8150410Z ·  ─────────┬────────────┬─── 2026-10-23T07:00:22.8150731Z · │ ╰── Cannot update ref value during render 2026-10-23T07:00:22.8151030Z · ╰── This value is a ref 2026-10-23T07:00:22.8151233Z 163 │ return JSON.stringify( 2026-10-23T07:00:22.8151377Z ╰──── 2026-10-23T07:00:22.8151897Z  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-23T07:00:22.8152756Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T07:00:22.8153077Z 2026-10-23T07:00:22.8153226Z ⚠ react(refs): Cannot access refs during render 2026-10-23T07:00:22.8153524Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:204:5] 2026-10-23T07:00:22.8153752Z 203 │ mostRecentEventCount, 2026-10-23T07:00:22.8153933Z 204 │ nativeEventSnapshotsRef.current, 2026-10-23T07:00:22.8154151Z ·  ───────────────┬─────────────── 2026-10-23T07:00:22.8154455Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T07:00:22.8154724Z 205 │ ); 2026-10-23T07:00:22.8154847Z ╰──── 2026-10-23T07:00:22.8155371Z  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-23T07:00:22.8156081Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T07:00:22.8156360Z 2026-10-23T07:00:22.8156502Z ⚠ react(refs): Cannot access refs during render 2026-10-23T07:00:22.8156796Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:210:5] 2026-10-23T07:00:22.8157013Z 209 │ mostRecentEventCount, 2026-10-23T07:00:22.8157194Z 210 │ nativeEventSnapshotsRef.current, 2026-10-23T07:00:22.8157403Z ·  ───────────────┬─────────────── 2026-10-23T07:00:22.8157702Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T07:00:22.8157937Z 211 │ ); 2026-10-23T07:00:22.8158053Z ╰──── 2026-10-23T07:00:22.8158566Z  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-23T07:00:22.8159265Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T07:00:22.8159542Z 2026-10-23T07:00:22.8159729Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-23T07:00:22.8160059Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:195:6] 2026-10-23T07:00:22.8160337Z 159 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-23T07:00:22.8160598Z 160 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-23T07:00:22.8160838Z ·  ─────────┬──────── 2026-10-23T07:00:22.8161428Z · ╰── 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-23T07:00:22.8161887Z 161 │ }); 2026-10-23T07:00:22.8162049Z 162 │ confirmedTokensRef.current = tokens; 2026-10-23T07:00:22.8162230Z 163 │ return JSON.stringify( 2026-10-23T07:00:22.8162485Z 164 │ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => { 2026-10-23T07:00:22.8162726Z 165 │ const record = 2026-10-23T07:00:22.8162953Z 166 │ token.type === "context" 2026-10-23T07:00:22.8163258Z 167 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-23T07:00:22.8163511Z 168 │ : undefined; 2026-10-23T07:00:22.8163842Z 169 │ const presentation = contextChipPresentation( 2026-10-23T07:00:22.8164078Z 170 │ token.type === "context" ? token.kind : token.type, 2026-10-23T07:00:22.8164280Z 171 │ record, 2026-10-23T07:00:22.8164423Z 172 │ ); 2026-10-23T07:00:22.8164623Z 173 │ const icon = contextChipIcon( 2026-10-23T07:00:22.8164795Z 174 │ presentation, 2026-10-23T07:00:22.8165031Z 175 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-23T07:00:22.8165242Z 176 │ ); 2026-10-23T07:00:22.8165381Z 177 │ return { 2026-10-23T07:00:22.8165537Z 178 │ type: token.type, 2026-10-23T07:00:22.8165709Z 179 │ source: token.source, 2026-10-23T07:00:22.8165886Z 180 │ start: token.start, 2026-10-23T07:00:22.8166041Z 181 │ end: token.end, 2026-10-23T07:00:22.8166216Z 182 │ accent: presentation.accent, 2026-10-23T07:00:22.8166386Z 183 │ label: 2026-10-23T07:00:22.8166545Z 184 │ token.type === "skill" 2026-10-23T07:00:22.8166749Z 185 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-23T07:00:22.8166961Z 186 │ : token.type === "context" 2026-10-23T07:00:22.8167298Z 187 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-23T07:00:22.8167609Z 188 │ : basename(token.value), 2026-10-23T07:00:22.8167858Z 189 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-23T07:00:22.8183613Z 190 │ iconUri: contextChipIconUri(icon), 2026-10-23T07:00:22.8183869Z 191 │ tintsIcon: icon.kind === "chip", 2026-10-23T07:00:22.8184043Z 192 │ }; 2026-10-23T07:00:22.8184179Z 193 │ }), 2026-10-23T07:00:22.8184311Z 194 │ ); 2026-10-23T07:00:22.8184485Z 195 │ }, [props.value, props.context, skillLabels]); 2026-10-23T07:00:22.8184787Z ·  ────────────────────┬──────────────────── 2026-10-23T07:00:22.8185117Z · ╰── This dependency list is missing values used by the callback 2026-10-23T07:00:22.8185447Z 196 │ // Every render resolves against the snapshot history, so a render whose 2026-10-23T07:00:22.8185649Z ╰──── 2026-10-23T07:00:22.8185925Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-23T07:00:22.8186450Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8186747Z 2026-10-23T07:00:22.8186934Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-23T07:00:22.8187257Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:257:5] 2026-10-23T07:00:22.8187532Z 249 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-23T07:00:22.8187770Z 250 │ nativeEventSnapshotsRef.current.push({ 2026-10-23T07:00:22.8187976Z ·  ───────────┬─────────── 2026-10-23T07:00:22.8188658Z · ╰── 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-23T07:00:22.8189202Z 251 │ eventCount: acknowledgedEventCount, 2026-10-23T07:00:22.8189370Z 252 │ value, 2026-10-23T07:00:22.8189522Z 253 │ selection: nextSelection, 2026-10-23T07:00:22.8189680Z 254 │ }); 2026-10-23T07:00:22.8189833Z 255 │ return acknowledgedEventCount; 2026-10-23T07:00:22.8189985Z 256 │ }, 2026-10-23T07:00:22.8190101Z 257 │ [], 2026-10-23T07:00:22.8190232Z ·  ─┬ 2026-10-23T07:00:22.8190488Z · ╰── This dependency list is missing values used by the callback 2026-10-23T07:00:22.8190712Z 258 │ ); 2026-10-23T07:00:22.8190825Z ╰──── 2026-10-23T07:00:22.8191091Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-23T07:00:22.8191601Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8191889Z 2026-10-23T07:00:22.8192257Z ⚠ 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-23T07:00:22.8192712Z ╭─[packages/shared/src/otelEnvironment.ts:146:14] 2026-10-23T07:00:22.8192902Z 145 │ name, 2026-10-23T07:00:22.8193113Z 146 │ (raw) => Schema.decodeUnknownOption(OtlpProtocol)(raw.toLowerCase()), 2026-10-23T07:00:22.8193367Z ·  ────────────────────────── 2026-10-23T07:00:22.8193602Z 147 │ `${name} is not http/protobuf or http/json, ${NOT_EXPORTED}`, 2026-10-23T07:00:22.8193789Z ╰──── 2026-10-23T07:00:22.8193850Z 2026-10-23T07:00:22.8194048Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T07:00:22.8194371Z ╭─[apps/mobile/src/components/ComposerEditor.tsx:82:6] 2026-10-23T07:00:22.8194596Z 81 │ }, 2026-10-23T07:00:22.8194724Z 82 │ [draftKey], 2026-10-23T07:00:22.8194877Z ·  ────┬─── 2026-10-23T07:00:22.8195103Z · ╰── Unnecessary dependency `draftKey` 2026-10-23T07:00:22.8195294Z 83 │ ); 2026-10-23T07:00:22.8195411Z ╰──── 2026-10-23T07:00:22.8195755Z  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-23T07:00:22.8196343Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8196640Z 2026-10-23T07:00:22.8196895Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T07:00:22.8197286Z ╭─[apps/mobile/src/components/VideoPreviewModal.ios.tsx:63:55] 2026-10-23T07:00:22.8197495Z 61 │ }, []); 2026-10-23T07:00:22.8197632Z 62 │ useEffect(() => { 2026-10-23T07:00:22.8197788Z ·  ────┬──── 2026-10-23T07:00:22.8198003Z · ╰── This is the containing effect 2026-10-23T07:00:22.8198281Z 63 │ if (playbackUrl === null && resolvedUrl !== null) setPlaybackUrl(resolvedUrl); 2026-10-23T07:00:22.8198558Z ·  ───────┬────── 2026-10-23T07:00:22.8198943Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T07:00:22.8199239Z 64 │ }, [playbackUrl, resolvedUrl]); 2026-10-23T07:00:22.8199392Z ╰──── 2026-10-23T07:00:22.8200038Z  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-23T07:00:22.8200876Z  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-23T07:00:22.8201179Z 2026-10-23T07:00:22.8201387Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-23T07:00:22.8201720Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:229:6] 2026-10-23T07:00:22.8202030Z 225 │ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents( 2026-10-23T07:00:22.8202294Z 226 │ nativeEventSnapshotsRef.current, 2026-10-23T07:00:22.8202497Z ·  ───────────┬─────────── 2026-10-23T07:00:22.8203052Z · ╰── 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-23T07:00:22.8203528Z 227 │ mostRecentEventCount, 2026-10-23T07:00:22.8204036Z 228 │ ); 2026-10-23T07:00:22.8204235Z 229 │ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]); 2026-10-23T07:00:22.8204511Z ·  ──────────────────────────┬────────────────────────── 2026-10-23T07:00:22.8204878Z · ╰── This dependency list is missing values used by the callback 2026-10-23T07:00:22.8205152Z 230 │ const assumedValue = props.value; 2026-10-23T07:00:22.8205306Z ╰──── 2026-10-23T07:00:22.8205533Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-23T07:00:22.8206009Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8206303Z 2026-10-23T07:00:22.8206520Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-23T07:00:22.8206939Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:237:7] 2026-10-23T07:00:22.8207288Z 236 │ nativeEventSnapshotsRef.current = assumeComposerControlledState( 2026-10-23T07:00:22.8207533Z 237 │ nativeEventSnapshotsRef.current, 2026-10-23T07:00:22.8207743Z ·  ───────────┬─────────── 2026-10-23T07:00:22.8208301Z · ╰── 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-23T07:00:22.8208784Z 238 │ controlledEventCount, 2026-10-23T07:00:22.8208943Z 239 │ assumedValue, 2026-10-23T07:00:22.8209088Z 240 │ ); 2026-10-23T07:00:22.8209308Z 241 │ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]); 2026-10-23T07:00:22.8209621Z ·  ───────────┬────────── 2026-10-23T07:00:22.8209971Z · ╰── Unnecessary dependency `controlledDocumentJson` 2026-10-23T07:00:22.8210258Z 242 │ const acceptNativeEvent = useCallback( 2026-10-23T07:00:22.8210418Z ╰──── 2026-10-23T07:00:22.8210890Z  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-23T07:00:22.8211568Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8211865Z 2026-10-23T07:00:22.8212018Z ⚠ react(refs): Cannot access refs during render 2026-10-23T07:00:22.8212310Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:162:29] 2026-10-23T07:00:22.8212585Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-23T07:00:22.8212835Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-23T07:00:22.8213089Z ·  ─────────────┬──────────── 2026-10-23T07:00:22.8213381Z · ╰── Cannot access ref value during render 2026-10-23T07:00:22.8213602Z 163 │ }); 2026-10-23T07:00:22.8213722Z ╰──── 2026-10-23T07:00:22.8214244Z  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-23T07:00:22.8214999Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T07:00:22.8215276Z 2026-10-23T07:00:22.8215423Z ⚠ react(refs): Cannot access refs during render 2026-10-23T07:00:22.8215712Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:162:29] 2026-10-23T07:00:22.8215982Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-23T07:00:22.8216229Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-23T07:00:22.8216479Z ·  ─────────────┬──────────── 2026-10-23T07:00:22.8216810Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T07:00:22.8217124Z 163 │ }); 2026-10-23T07:00:22.8217272Z ╰──── 2026-10-23T07:00:22.8217786Z  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-23T07:00:22.8218486Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T07:00:22.8218763Z 2026-10-23T07:00:22.8218909Z ⚠ react(refs): Cannot access refs during render 2026-10-23T07:00:22.8219195Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:23] 2026-10-23T07:00:22.8219399Z 163 │ }); 2026-10-23T07:00:22.8219556Z 164 │ confirmedTokensRef.current = tokens; 2026-10-23T07:00:22.8219802Z ·  ─────────┬────────────┬─── 2026-10-23T07:00:22.8220118Z · │ ╰── Cannot update ref value during render 2026-10-23T07:00:22.8220419Z · ╰── This value is a ref 2026-10-23T07:00:22.8220616Z 165 │ return JSON.stringify( 2026-10-23T07:00:22.8220760Z ╰──── 2026-10-23T07:00:22.8221274Z  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-23T07:00:22.8221978Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T07:00:22.8222256Z 2026-10-23T07:00:22.8222406Z ⚠ react(refs): Cannot access refs during render 2026-10-23T07:00:22.8222698Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:206:5] 2026-10-23T07:00:22.8222914Z 205 │ mostRecentEventCount, 2026-10-23T07:00:22.8223102Z 206 │ nativeEventSnapshotsRef.current, 2026-10-23T07:00:22.8223319Z ·  ───────────────┬─────────────── 2026-10-23T07:00:22.8223623Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T07:00:22.8223865Z 207 │ ); 2026-10-23T07:00:22.8223983Z ╰──── 2026-10-23T07:00:22.8224506Z  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-23T07:00:22.8225248Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T07:00:22.8225526Z 2026-10-23T07:00:22.8225675Z ⚠ react(refs): Cannot access refs during render 2026-10-23T07:00:22.8225962Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:212:5] 2026-10-23T07:00:22.8226184Z 211 │ mostRecentEventCount, 2026-10-23T07:00:22.8226363Z 212 │ nativeEventSnapshotsRef.current, 2026-10-23T07:00:22.8226579Z ·  ───────────────┬─────────────── 2026-10-23T07:00:22.8226876Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T07:00:22.8227115Z 213 │ ); 2026-10-23T07:00:22.8227285Z ╰──── 2026-10-23T07:00:22.8227829Z  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-23T07:00:22.8228526Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T07:00:22.8228803Z 2026-10-23T07:00:22.8228991Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-23T07:00:22.8229310Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:197:6] 2026-10-23T07:00:22.8229578Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-23T07:00:22.8229826Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-23T07:00:22.8230071Z ·  ─────────┬──────── 2026-10-23T07:00:22.8230653Z · ╰── 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-23T07:00:22.8231120Z 163 │ }); 2026-10-23T07:00:22.8231279Z 164 │ confirmedTokensRef.current = tokens; 2026-10-23T07:00:22.8231462Z 165 │ return JSON.stringify( 2026-10-23T07:00:22.8231718Z 166 │ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => { 2026-10-23T07:00:22.8231959Z 167 │ const record = 2026-10-23T07:00:22.8232124Z 168 │ token.type === "context" 2026-10-23T07:00:22.8232397Z 169 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-23T07:00:22.8232634Z 170 │ : undefined; 2026-10-23T07:00:22.8232831Z 171 │ const presentation = contextChipPresentation( 2026-10-23T07:00:22.8233065Z 172 │ token.type === "context" ? token.kind : token.type, 2026-10-23T07:00:22.8233254Z 173 │ record, 2026-10-23T07:00:22.8233396Z 174 │ ); 2026-10-23T07:00:22.8233552Z 175 │ const icon = contextChipIcon( 2026-10-23T07:00:22.8233727Z 176 │ presentation, 2026-10-23T07:00:22.8234004Z 177 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-23T07:00:22.8234219Z 178 │ ); 2026-10-23T07:00:22.8234354Z 179 │ return { 2026-10-23T07:00:22.8234505Z 180 │ type: token.type, 2026-10-23T07:00:22.8234703Z 181 │ source: token.source, 2026-10-23T07:00:22.8234881Z 182 │ start: token.start, 2026-10-23T07:00:22.8235049Z 183 │ end: token.end, 2026-10-23T07:00:22.8235221Z 184 │ accent: presentation.accent, 2026-10-23T07:00:22.8235393Z 185 │ label: 2026-10-23T07:00:22.8235549Z 186 │ token.type === "skill" 2026-10-23T07:00:22.8235760Z 187 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-23T07:00:22.8235968Z 188 │ : token.type === "context" 2026-10-23T07:00:22.8236307Z 189 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-23T07:00:22.8236615Z 190 │ : basename(token.value), 2026-10-23T07:00:22.8236863Z 191 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-23T07:00:22.8237113Z 192 │ iconUri: contextChipIconUri(icon), 2026-10-23T07:00:22.8237372Z 193 │ tintsIcon: icon.kind === "chip", 2026-10-23T07:00:22.8237568Z 194 │ }; 2026-10-23T07:00:22.8237697Z 195 │ }), 2026-10-23T07:00:22.8237826Z 196 │ ); 2026-10-23T07:00:22.8237995Z 197 │ }, [props.value, props.context, skillLabels]); 2026-10-23T07:00:22.8238240Z ·  ────────────────────┬──────────────────── 2026-10-23T07:00:22.8238557Z · ╰── This dependency list is missing values used by the callback 2026-10-23T07:00:22.8238886Z 198 │ // Every render resolves against the snapshot history, so a render whose 2026-10-23T07:00:22.8239088Z ╰──── 2026-10-23T07:00:22.8239354Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-23T07:00:22.8239873Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8240173Z 2026-10-23T07:00:22.8240360Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-23T07:00:22.8240681Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:259:5] 2026-10-23T07:00:22.8240957Z 251 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-23T07:00:22.8241200Z 252 │ nativeEventSnapshotsRef.current.push({ 2026-10-23T07:00:22.8241414Z ·  ───────────┬─────────── 2026-10-23T07:00:22.8241976Z · ╰── 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-23T07:00:22.8242483Z 253 │ eventCount: acknowledgedEventCount, 2026-10-23T07:00:22.8242656Z 254 │ value, 2026-10-23T07:00:22.8242810Z 255 │ selection: nextSelection, 2026-10-23T07:00:22.8242964Z 256 │ }); 2026-10-23T07:00:22.8243114Z 257 │ return acknowledgedEventCount; 2026-10-23T07:00:22.8243272Z 258 │ }, 2026-10-23T07:00:22.8243391Z 259 │ [], 2026-10-23T07:00:22.8243533Z ·  ─┬ 2026-10-23T07:00:22.8243854Z · ╰── This dependency list is missing values used by the callback 2026-10-23T07:00:22.8244087Z 260 │ ); 2026-10-23T07:00:22.8244199Z ╰──── 2026-10-23T07:00:22.8244459Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-23T07:00:22.8245112Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8245450Z 2026-10-23T07:00:22.8245597Z ⚠ react(refs): Cannot access refs during render 2026-10-23T07:00:22.8245866Z ╭─[apps/mobile/src/native/StackHeader.tsx:184:9] 2026-10-23T07:00:22.8246065Z 183 │ "options", 2026-10-23T07:00:22.8246241Z 184 │ latestOptionFunctionsRef.current, 2026-10-23T07:00:22.8246462Z ·  ────────────────┬─────────────── 2026-10-23T07:00:22.8246769Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T07:00:22.8247048Z 185 │ optionFunctionWrappersRef.current, 2026-10-23T07:00:22.8247209Z ╰──── 2026-10-23T07:00:22.8247725Z  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-23T07:00:22.8248432Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T07:00:22.8248708Z 2026-10-23T07:00:22.8248856Z ⚠ react(refs): Cannot access refs during render 2026-10-23T07:00:22.8249120Z ╭─[apps/mobile/src/native/StackHeader.tsx:185:9] 2026-10-23T07:00:22.8249343Z 184 │ latestOptionFunctionsRef.current, 2026-10-23T07:00:22.8249542Z 185 │ optionFunctionWrappersRef.current, 2026-10-23T07:00:22.8249770Z ·  ────────────────┬──────────────── 2026-10-23T07:00:22.8250085Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T07:00:22.8250362Z 186 │ ) as NativeStackNavigationOptions) 2026-10-23T07:00:22.8250522Z ╰──── 2026-10-23T07:00:22.8251032Z  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-23T07:00:22.8251732Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T07:00:22.8252010Z 2026-10-23T07:00:22.8252239Z ⚠ eslint(no-unused-vars): Function 'assertUserMessagesExclude' is declared but never used. 2026-10-23T07:00:22.8252622Z ╭─[apps/server/src/orchestration-v2/testkit/fixtures/shared.ts:1398:10] 2026-10-23T07:00:22.8252846Z 1397 │ 2026-10-23T07:00:22.8252996Z 1398 │ function assertUserMessagesExclude( 2026-10-23T07:00:22.8253210Z ·  ────────────┬──────────── 2026-10-23T07:00:22.8253488Z · ╰── 'assertUserMessagesExclude' is declared here 2026-10-23T07:00:22.8253757Z 1399 │ projection: OrchestrationV2ThreadProjection, 2026-10-23T07:00:22.8253932Z ╰──── 2026-10-23T07:00:22.8254094Z  help: Consider removing this declaration. 2026-10-23T07:00:22.8254216Z 2026-10-23T07:00:22.8254387Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-23T07:00:22.8254783Z ╭─[packages/provider-opencode/src/server/OpenCodeRuntime.environment.test.ts:53:14] 2026-10-23T07:00:22.8255027Z 52 │ 2026-10-23T07:00:22.8255149Z 53 │ for (const {} of [ 2026-10-23T07:00:22.8255362Z ·  ── 2026-10-23T07:00:22.8255544Z 54 │ { healthy: true }, 2026-10-23T07:00:22.8255682Z ╰──── 2026-10-23T07:00:22.8255964Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-23T07:00:22.8256189Z 2026-10-23T07:00:22.8256444Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-23T07:00:22.8256833Z ╭─[packages/provider-opencode/src/server/adapter.ts:3755:7] 2026-10-23T07:00:22.8257034Z 3754 │ 2026-10-23T07:00:22.8257306Z 3755 │ const layer: Layer.Layer = 2026-10-23T07:00:22.8257584Z ·  ──┬── 2026-10-23T07:00:22.8257808Z · ╰── 'layer' is declared here 2026-10-23T07:00:22.8258009Z 3756 │ Layer.effect( 2026-10-23T07:00:22.8258146Z ╰──── 2026-10-23T07:00:22.8258308Z  help: Consider removing this declaration. 2026-10-23T07:00:22.8258429Z 2026-10-23T07:00:22.8258645Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-23T07:00:22.8258952Z ╭─[apps/mobile/src/Stack.tsx:1044:21] 2026-10-23T07:00:22.8259134Z 1043 │ } 2026-10-23T07:00:22.8259631Z ·  ───────────────────────────────────────────── 2026-10-23T07:00:22.8259837Z 1045 │ screenListeners={{ 2026-10-23T07:00:22.8259976Z ╰──── 2026-10-23T07:00:22.8260401Z  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-23T07:00:22.8260735Z 2026-10-23T07:00:22.8260918Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-23T07:00:22.8261291Z ╭─[apps/mobile/src/features/keyboard/HardwareKeyboardCommandProvider.tsx:116:34] 2026-10-23T07:00:22.8261545Z 115 │ return [...commands]; 2026-10-23T07:00:22.8261767Z 116 │ }, [activeThreadRef, pathname, registrationVersion, navigation]); 2026-10-23T07:00:22.8262024Z ·  ─────────┬───────── 2026-10-23T07:00:22.8262330Z · ╰── Unnecessary dependency `registrationVersion` 2026-10-23T07:00:22.8262555Z 117 │ 2026-10-23T07:00:22.8262678Z ╰──── 2026-10-23T07:00:22.8263053Z  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-23T07:00:22.8263660Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8263959Z 2026-10-23T07:00:22.8264179Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-23T07:00:22.8264521Z ╭─[packages/shared/src/serverSettings.ts:346:9] 2026-10-23T07:00:22.8264779Z 345 │ const entry: ProjectSettingsOverrides = { 2026-10-23T07:00:22.8265028Z 346 │ ...(entries.get(projectId) ?? currentEntries[projectId] ?? {}), 2026-10-23T07:00:22.8265380Z ·  ────────────────────────────────────────────────────────────── 2026-10-23T07:00:22.8265616Z 347 │ }; 2026-10-23T07:00:22.8265732Z ╰──── 2026-10-23T07:00:22.8266053Z  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-23T07:00:22.8266304Z 2026-10-23T07:00:22.8266525Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in Array.prototype.reduce() 2026-10-23T07:00:22.8266856Z ╭─[packages/shared/src/serverSettings.ts:448:24] 2026-10-23T07:00:22.8267053Z 447 │ const favorites = 2026-10-23T07:00:22.8267246Z 448 │ setModelFavorites?.reduce((current, change) => { 2026-10-23T07:00:22.8267458Z ·  ───┬── 2026-10-23T07:00:22.8267696Z · ╰── For this reduce 2026-10-23T07:00:22.8267911Z 449 │ const exists = current.some( 2026-10-23T07:00:22.8268185Z 450 │ (favorite) => favorite.provider === change.provider && favorite.model === change.model, 2026-10-23T07:00:22.8268419Z 451 │ ); 2026-10-23T07:00:22.8268561Z 452 │ return change.favorite 2026-10-23T07:00:22.8268723Z 453 │ ? exists 2026-10-23T07:00:22.8268862Z 454 │ ? current 2026-10-23T07:00:22.8269076Z 455 │ : [...current, { provider: change.provider, model: change.model }] 2026-10-23T07:00:22.8269310Z ·  ─────┬──── 2026-10-23T07:00:22.8269532Z · ╰── From this spread 2026-10-23T07:00:22.8269730Z 456 │ : current.filter( 2026-10-23T07:00:22.8269872Z ╰──── 2026-10-23T07:00:22.8270142Z  help: Consider using `Object.assign()` or `Array.prototype.push()` to mutate the accumulator instead. 2026-10-23T07:00:22.8270508Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-23T07:00:22.8270673Z 2026-10-23T07:00:22.8270861Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-23T07:00:22.8271165Z ╭─[packages/shared/src/serverSettings.ts:466:3] 2026-10-23T07:00:22.8271354Z 464 │ null; 2026-10-23T07:00:22.8271544Z 465 │ let nextModelPreferences = initialModelPreferences; 2026-10-23T07:00:22.8271766Z ·  ──────────┬───────── 2026-10-23T07:00:22.8271998Z · ╰── From this accumulator 2026-10-23T07:00:22.8272231Z 466 │ for (const change of setModelsHidden ?? []) { 2026-10-23T07:00:22.8272418Z ·  ─┬─ 2026-10-23T07:00:22.8272612Z · ╰── For this loop 2026-10-23T07:00:22.8272871Z 467 │ const preferences = nextModelPreferences?.[change.provider] ?? { 2026-10-23T07:00:22.8273088Z 468 │ hiddenModels: [], 2026-10-23T07:00:22.8273247Z 469 │ modelOrder: [], 2026-10-23T07:00:22.8273389Z 470 │ }; 2026-10-23T07:00:22.8273639Z 471 │ const hiddenModels = preferences.hiddenModels.filter((model) => model !== change.model); 2026-10-23T07:00:22.8273937Z 472 │ if (change.hidden) hiddenModels.push(change.model); 2026-10-23T07:00:22.8274137Z 473 │ nextModelPreferences = { 2026-10-23T07:00:22.8274312Z 474 │ ...nextModelPreferences, 2026-10-23T07:00:22.8274508Z ·  ───────────┬─────────── 2026-10-23T07:00:22.8274778Z · ╰── From this spread 2026-10-23T07:00:22.8275075Z 475 │ [change.provider]: { ...preferences, hiddenModels }, 2026-10-23T07:00:22.8275291Z ╰──── 2026-10-23T07:00:22.8275502Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-23T07:00:22.8275823Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-23T07:00:22.8275984Z 2026-10-23T07:00:22.8276190Z ⚠ eslint(no-unused-vars): Type 'ThreadRunSummary' is imported but never used. 2026-10-23T07:00:22.8276483Z ╭─[apps/web/src/types.ts:22:3] 2026-10-23T07:00:22.8276666Z 21 │ EnvironmentThreadShell, 2026-10-23T07:00:22.8276827Z 22 │ ThreadRunSummary, 2026-10-23T07:00:22.8276992Z ·  ────────┬─────── 2026-10-23T07:00:22.8277231Z · ╰── 'ThreadRunSummary' is imported here 2026-10-23T07:00:22.8277453Z 23 │ ThreadRuntimeSummary, 2026-10-23T07:00:22.8277600Z ╰──── 2026-10-23T07:00:22.8277762Z  help: Consider removing this import. 2026-10-23T07:00:22.8277880Z 2026-10-23T07:00:22.8278082Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T07:00:22.8278433Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:257:7] 2026-10-23T07:00:22.8278688Z 256 │ return () => cancelAnimationFrame(frame); 2026-10-23T07:00:22.8278888Z 257 │ }, [props.path, targetIndex]); 2026-10-23T07:00:22.8279069Z ·  ─────┬──── 2026-10-23T07:00:22.8279312Z · ╰── Unnecessary dependency `props.path` 2026-10-23T07:00:22.8279515Z 258 │ 2026-10-23T07:00:22.8279629Z ╰──── 2026-10-23T07:00:22.8279986Z  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-23T07:00:22.8280576Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8280874Z 2026-10-23T07:00:22.8281071Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T07:00:22.8281415Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:293:23] 2026-10-23T07:00:22.8281645Z 292 │ 2026-10-23T07:00:22.8284375Z ·  ─────────── 2026-10-23T07:00:22.8284554Z 310 │ {body} 2026-10-23T07:00:22.8284730Z ╰──── 2026-10-23T07:00:22.8284931Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-23T07:00:22.8285087Z 2026-10-23T07:00:22.8285352Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T07:00:22.8285740Z ╭─[apps/mobile/src/features/files/FileTreeBrowser.tsx:155:5] 2026-10-23T07:00:22.8285946Z 150 │ 2026-10-23T07:00:22.8286074Z 151 │ useEffect(() => { 2026-10-23T07:00:22.8286232Z ·  ────┬──── 2026-10-23T07:00:22.8286451Z · ╰── This is the containing effect 2026-10-23T07:00:22.8286670Z 152 │ if (!controlledSelectedPath) { 2026-10-23T07:00:22.8286839Z 153 │ return; 2026-10-23T07:00:22.8286970Z 154 │ } 2026-10-23T07:00:22.8287124Z 155 │ setExpandedPaths((current) => { 2026-10-23T07:00:22.8287308Z ·  ────────┬─────── 2026-10-23T07:00:22.8287578Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T07:00:22.8287876Z 156 │ const ancestors = ancestorPaths(controlledSelectedPath); 2026-10-23T07:00:22.8288069Z ╰──── 2026-10-23T07:00:22.8288722Z  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-23T07:00:22.8289573Z  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-23T07:00:22.8289878Z 2026-10-23T07:00:22.8290081Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T07:00:22.8290425Z ╭─[apps/mobile/src/state/use-thread-outbox-drain.ts:1315:5] 2026-10-23T07:00:22.8290661Z 1314 │ queuedMessagesByThreadKey, 2026-10-23T07:00:22.8290830Z 1315 │ retryTick, 2026-10-23T07:00:22.8290984Z ·  ────┬──── 2026-10-23T07:00:22.8291215Z · ╰── Unnecessary dependency `retryTick` 2026-10-23T07:00:22.8291436Z 1316 │ restoreQueuedMessage, 2026-10-23T07:00:22.8291580Z ╰──── 2026-10-23T07:00:22.8291926Z  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-23T07:00:22.8292510Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8292807Z 2026-10-23T07:00:22.8292955Z ⚠ react(refs): Cannot access refs during render 2026-10-23T07:00:22.8293339Z ╭─[apps/mobile/src/features/diffs/nativeReviewDiffSurface.ts:277:39] 2026-10-23T07:00:22.8293606Z 276 │ 2026-10-23T07:00:22.8293856Z 277 │ ╭─▶ return createElement(RawNativeView, { 2026-10-23T07:00:22.8294129Z 278 │ │ ...nativeProps, 2026-10-23T07:00:22.8294384Z 279 │ │ refreshEnabled: props.onPullToRefresh !== undefined, 2026-10-23T07:00:22.8294673Z 280 │ │ ref: nativeRef, 2026-10-23T07:00:22.8294910Z 281 │ ├─▶ }); 2026-10-23T07:00:22.8295283Z · ╰──── Passing a ref to a function may read its value during render 2026-10-23T07:00:22.8295555Z 282 │ } 2026-10-23T07:00:22.8295676Z ╰──── 2026-10-23T07:00:22.8296204Z  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-23T07:00:22.8296917Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T07:00:22.8297197Z 2026-10-23T07:00:22.8297342Z ⚠ react(refs): Cannot access refs during render 2026-10-23T07:00:22.8297648Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:152:27] 2026-10-23T07:00:22.8297990Z 151 │ 2026-10-23T07:00:22.8298258Z 152 │ {props.children(open)} 2026-10-23T07:00:22.8298454Z ·  ──┬─ 2026-10-23T07:00:22.8298723Z · ╰── Cannot access ref value during render 2026-10-23T07:00:22.8298943Z 153 │ 2026-10-23T07:00:22.8299077Z ╰──── 2026-10-23T07:00:22.8299592Z  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-23T07:00:22.8300306Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T07:00:22.8300587Z 2026-10-23T07:00:22.8300782Z ⚠ react(memo-dependencies): Found missing/extra memoization dependencies 2026-10-23T07:00:22.8301131Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:140:9] 2026-10-23T07:00:22.8301372Z 139 │ if (action.id !== undefined) { 2026-10-23T07:00:22.8301557Z 140 │ props.onPressAction?.({ 2026-10-23T07:00:22.8301728Z ·  ──┬── 2026-10-23T07:00:22.8301955Z · ╰── Missing dependency `props` 2026-10-23T07:00:22.8302187Z 141 │ nativeEvent: { event: action.id }, 2026-10-23T07:00:22.8302448Z 142 │ } as Parameters>[0]); 2026-10-23T07:00:22.8302661Z 143 │ } 2026-10-23T07:00:22.8302783Z 144 │ }, 2026-10-23T07:00:22.8302934Z 145 │ [close, props.onPressAction], 2026-10-23T07:00:22.8303132Z ·  ─────────┬───────── 2026-10-23T07:00:22.8303512Z · ╰── Overly precise dependency `props.onPressAction`, use `props` instead 2026-10-23T07:00:22.8303802Z 146 │ ); 2026-10-23T07:00:22.8303920Z ╰──── 2026-10-23T07:00:22.8304454Z  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-23T07:00:22.8305241Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8305539Z 2026-10-23T07:00:22.8305683Z ⚠ react(refs): Cannot access refs during render 2026-10-23T07:00:22.8305958Z ╭─[apps/mobile/src/components/ui/Menu.tsx:54:36] 2026-10-23T07:00:22.8306270Z 53 │ const child = children as ReactElement>; 2026-10-23T07:00:22.8306634Z 54 │ ╭─▶ children = cloneElement(child, { 2026-10-23T07:00:22.8306908Z 55 │ │ onTouchStart: (event) => { 2026-10-23T07:00:22.8307190Z 56 │ │ // Reset for a new touch, not onPressIn, which also fires when a 2026-10-23T07:00:22.8307506Z 57 │ │ // finger moves out of the row and back during the same gesture. 2026-10-23T07:00:22.8307797Z 58 │ │ menuPress.current.isPreparing = false; 2026-10-23T07:00:22.8308103Z 59 │ │ menuPress.current.suppressPress = menuPress.current.isOpen; 2026-10-23T07:00:22.8308388Z 60 │ │ pendingPress.current = null; 2026-10-23T07:00:22.8308642Z 61 │ │ child.props.onTouchStart?.(event); 2026-10-23T07:00:22.8308854Z 62 │ │ }, 2026-10-23T07:00:22.8309047Z 63 │ │ onPress: (event) => { 2026-10-23T07:00:22.8309333Z 64 │ │ // Accessibility clicks have no touch identifier and must not inherit 2026-10-23T07:00:22.8309646Z 65 │ │ // cancellation from a previous physical gesture. 2026-10-23T07:00:22.8309962Z 66 │ │ const isTouch = typeof event.nativeEvent.identifier === "number"; 2026-10-23T07:00:22.8310320Z 67 │ │ if (isTouch ? menuPress.current.suppressPress : menuPress.current.isOpen) { 2026-10-23T07:00:22.8310600Z 68 │ │ return; 2026-10-23T07:00:22.8310781Z 69 │ │ } 2026-10-23T07:00:22.8311021Z 70 │ │ if (isTouch && menuPress.current.isPreparing) { 2026-10-23T07:00:22.8311344Z 71 │ │ // A release can arrive between native menu preparation and display. 2026-10-23T07:00:22.8311678Z 72 │ │ // Let UIKit's display/cancel callback decide this press's outcome. 2026-10-23T07:00:22.8311948Z 73 │ │ event.persist(); 2026-10-23T07:00:22.8312221Z 74 │ │ pendingPress.current = () => child.props.onPress?.(event); 2026-10-23T07:00:22.8312476Z 75 │ │ return; 2026-10-23T07:00:22.8312657Z 76 │ │ } 2026-10-23T07:00:22.8312870Z 77 │ │ child.props.onPress?.(event); 2026-10-23T07:00:22.8313074Z 78 │ │ }, 2026-10-23T07:00:22.8313360Z 79 │ ├─▶ }); 2026-10-23T07:00:22.8313761Z · ╰──── Passing a ref to a function may read its value during render 2026-10-23T07:00:22.8314084Z 80 │ menuProps.onMenuInteractionStart = () => { 2026-10-23T07:00:22.8314258Z ╰──── 2026-10-23T07:00:22.8314806Z  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-23T07:00:22.8315513Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T07:00:22.8315794Z 2026-10-23T07:00:22.8316061Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T07:00:22.8316435Z ╭─[apps/mobile/src/state/use-vcs-action-state.ts:86:5] 2026-10-23T07:00:22.8316689Z 83 │ const [nowMs, setNowMs] = useState(() => Date.now()); 2026-10-23T07:00:22.8316877Z 84 │ useEffect(() => { 2026-10-23T07:00:22.8317039Z ·  ────┬──── 2026-10-23T07:00:22.8317259Z · ╰── This is the containing effect 2026-10-23T07:00:22.8317487Z 85 │ if (!actionState.isRunning) return; 2026-10-23T07:00:22.8317661Z 86 │ setNowMs(Date.now()); 2026-10-23T07:00:22.8317820Z ·  ────┬─── 2026-10-23T07:00:22.8318077Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T07:00:22.8318375Z 87 │ const interval = setInterval(() => setNowMs(Date.now()), 1000); 2026-10-23T07:00:22.8318570Z ╰──── 2026-10-23T07:00:22.8319219Z  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-23T07:00:22.8320070Z  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-23T07:00:22.8320378Z 2026-10-23T07:00:22.8320841Z ⚠ 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-23T07:00:22.8321383Z ╭─[packages/contracts/src/baseSchemas.test.ts:39:9] 2026-10-23T07:00:22.8321593Z 38 │ JSON.stringify( 2026-10-23T07:00:22.8321800Z 39 │ Schema.encodeUnknownSync(Schema.toCodecJson(Named))([ 2026-10-23T07:00:22.8322036Z ·  ──────────────────────── 2026-10-23T07:00:22.8322214Z 40 │ { name: "a" }, 2026-10-23T07:00:22.8322355Z ╰──── 2026-10-23T07:00:22.8322414Z 2026-10-23T07:00:22.8322611Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T07:00:22.8322952Z ╭─[apps/mobile/src/components/ComposerContextSheet.tsx:267:25] 2026-10-23T07:00:22.8323220Z 266 │ {record.elements?.map((element, index) => ( 2026-10-23T07:00:22.8323513Z 267 │ 2026-10-23T07:00:22.8323979Z ·  ─────────────────────────────────────────────────────── 2026-10-23T07:00:22.8324249Z 268 │ { 2026-10-23T07:00:22.8332233Z ·  ────┬──── 2026-10-23T07:00:22.8332454Z · ╰── This is the containing effect 2026-10-23T07:00:22.8332655Z 68 │ setUri(null); 2026-10-23T07:00:22.8332810Z ·  ───┬── 2026-10-23T07:00:22.8333061Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T07:00:22.8333293Z 69 │ setError(null); 2026-10-23T07:00:22.8333429Z ╰──── 2026-10-23T07:00:22.8334135Z  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-23T07:00:22.8335052Z  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-23T07:00:22.8335361Z 2026-10-23T07:00:22.8335566Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T07:00:22.8335900Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:91:7] 2026-10-23T07:00:22.8336105Z 90 │ }; 2026-10-23T07:00:22.8336247Z 91 │ }, [attachmentId, fileUri]); 2026-10-23T07:00:22.8336467Z ·  ──────┬───── ───┬─── 2026-10-23T07:00:22.8336775Z · │ ╰── Unnecessary dependency `fileUri` 2026-10-23T07:00:22.8337106Z · ╰── Unnecessary dependency `attachmentId` 2026-10-23T07:00:22.8337393Z 92 │ const mimeType = videoMimeType(attachment) ?? attachment.mimeType; 2026-10-23T07:00:22.8337593Z ╰──── 2026-10-23T07:00:22.8337941Z  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-23T07:00:22.8338534Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8338827Z 2026-10-23T07:00:22.8339048Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-23T07:00:22.8339405Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:213:34] 2026-10-23T07:00:22.8339621Z 212 │ useEffect(() => { 2026-10-23T07:00:22.8339823Z 213 │ if (!isFocused && hasSource) props.onRequestClose(); 2026-10-23T07:00:22.8340052Z ·  ──┬── 2026-10-23T07:00:22.8340312Z · ╰── Missing dependency `props` 2026-10-23T07:00:22.8340573Z 214 │ }, [isFocused, hasSource, props.onRequestClose]); 2026-10-23T07:00:22.8340808Z ·  ──────────┬───────── 2026-10-23T07:00:22.8341160Z · ╰── Overly precise dependency `props.onRequestClose`, use `props` instead 2026-10-23T07:00:22.8341505Z 215 │ const { source } = props; 2026-10-23T07:00:22.8341690Z ╰──── 2026-10-23T07:00:22.8342167Z  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-23T07:00:22.8342859Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8343154Z 2026-10-23T07:00:22.8343413Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T07:00:22.8343795Z ╭─[apps/mobile/src/components/ProjectFavicon.tsx:158:5] 2026-10-23T07:00:22.8344127Z 153 │ const [activeFaviconRequest, setActiveFaviconRequest] = useState(null); 2026-10-23T07:00:22.8344402Z 154 │ useLayoutEffect(() => { 2026-10-23T07:00:22.8344600Z ·  ───────┬─────── 2026-10-23T07:00:22.8344836Z · ╰── This is the containing effect 2026-10-23T07:00:22.8345065Z 155 │ if (faviconRequest === null) return; 2026-10-23T07:00:22.8345232Z 156 │ 2026-10-23T07:00:22.8345430Z 157 │ const endRequest = beginProjectFaviconRequest(faviconRequest); 2026-10-23T07:00:22.8345674Z 158 │ setActiveFaviconRequest(faviconRequest); 2026-10-23T07:00:22.8345883Z ·  ───────────┬─────────── 2026-10-23T07:00:22.8346160Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T07:00:22.8346399Z 159 │ return endRequest; 2026-10-23T07:00:22.8346544Z ╰──── 2026-10-23T07:00:22.8347199Z  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-23T07:00:22.8348054Z  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-23T07:00:22.8348359Z 2026-10-23T07:00:22.8348614Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T07:00:22.8348998Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:60:5] 2026-10-23T07:00:22.8349199Z 57 │ 2026-10-23T07:00:22.8349328Z 58 │ useEffect(() => { 2026-10-23T07:00:22.8349489Z ·  ────┬──── 2026-10-23T07:00:22.8349709Z · ╰── This is the containing effect 2026-10-23T07:00:22.8349940Z 59 │ const controller = new AbortController(); 2026-10-23T07:00:22.8350126Z 60 │ setLoadState("pending"); 2026-10-23T07:00:22.8350297Z ·  ──────┬───── 2026-10-23T07:00:22.8350556Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T07:00:22.8350883Z 61 │ // A renewed signature is used on Retry, not as a reason to reset the native player. 2026-10-23T07:00:22.8351101Z ╰──── 2026-10-23T07:00:22.8351803Z  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-23T07:00:22.8352679Z  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-23T07:00:22.8352984Z 2026-10-23T07:00:22.8353192Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T07:00:22.8353536Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:71:7] 2026-10-23T07:00:22.8353762Z 70 │ return () => controller.abort(); 2026-10-23T07:00:22.8353966Z 71 │ }, [player, props.playRequested, attempt]); 2026-10-23T07:00:22.8354256Z ·  ───┬── ─────────┬───────── ───┬─── 2026-10-23T07:00:22.8354681Z · │ │ ╰── Unnecessary dependency `attempt` 2026-10-23T07:00:22.8355093Z · │ ╰── Unnecessary dependency `props.playRequested` 2026-10-23T07:00:22.8355420Z · ╰── Unnecessary dependency `player_0` 2026-10-23T07:00:22.8355622Z 72 │ 2026-10-23T07:00:22.8355736Z ╰──── 2026-10-23T07:00:22.8356087Z  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-23T07:00:22.8362567Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8362867Z 2026-10-23T07:00:22.8363100Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-23T07:00:22.8363456Z ╭─[apps/mobile/src/state/use-model-option-memory.ts:21:7] 2026-10-23T07:00:22.8363732Z 20 │ [instanceId]: { 2026-10-23T07:00:22.8363893Z 21 │ ...(state[instanceId] ?? {}), 2026-10-23T07:00:22.8364446Z ·  ──────────────────────────── 2026-10-23T07:00:22.8364675Z 22 │ [model]: options, 2026-10-23T07:00:22.8364812Z ╰──── 2026-10-23T07:00:22.8365127Z  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-23T07:00:22.8365382Z 2026-10-23T07:00:22.8365585Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-23T07:00:22.8365944Z ╭─[apps/web/src/components/settings/ProviderSettingsPanel.logic.ts:4:8] 2026-10-23T07:00:22.8366196Z 3 │ AuthProvidersManageScope, 2026-10-23T07:00:22.8366362Z 4 │ type AuthSessionState, 2026-10-23T07:00:22.8366533Z ·  ────────┬─────── 2026-10-23T07:00:22.8366782Z · ╰── 'AuthSessionState' is imported here 2026-10-23T07:00:22.8366996Z 5 │ type EnvironmentId, 2026-10-23T07:00:22.8367135Z ╰──── 2026-10-23T07:00:22.8367288Z  help: Consider removing this import. 2026-10-23T07:00:22.8367407Z 2026-10-23T07:00:22.8367580Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T07:00:22.8367870Z ╭─[apps/web/src/hooks/useThreadActions.ts:821:56] 2026-10-23T07:00:22.8368113Z 820 │ const resolved = resolveThreadTarget(target); 2026-10-23T07:00:22.8368390Z 821 │ if (resolved && !canSnooze(resolved.thread, { now: new Date().toISOString() })) { 2026-10-23T07:00:22.8368802Z ·  ─────┬──── 2026-10-23T07:00:22.8369143Z · ╰── Cannot call impure function 2026-10-23T07:00:22.8369387Z 822 │ return AsyncResult.failure( 2026-10-23T07:00:22.8369540Z ╰──── 2026-10-23T07:00:22.8369876Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-23T07:00:22.8370430Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T07:00:22.8370710Z 2026-10-23T07:00:22.8370879Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T07:00:22.8371173Z ╭─[apps/web/src/hooks/useThreadActions.ts:709:46] 2026-10-23T07:00:22.8371381Z 708 │ const wokeAt = resolved 2026-10-23T07:00:22.8371610Z 709 │ ? threadWokeAt(resolved.thread, { now: new Date().toISOString() }) 2026-10-23T07:00:22.8371875Z ·  ─────┬──── 2026-10-23T07:00:22.8372155Z · ╰── Cannot call impure function 2026-10-23T07:00:22.8372373Z 710 │ : null; 2026-10-23T07:00:22.8372501Z ╰──── 2026-10-23T07:00:22.8372830Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-23T07:00:22.8373390Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T07:00:22.8373671Z 2026-10-23T07:00:22.8373873Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T07:00:22.8374201Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:542:25] 2026-10-23T07:00:22.8374475Z 541 │ // range) the boundary string is identical and the chain would die. 2026-10-23T07:00:22.8374752Z 542 │ }, [nextSnoozeWakeAt, snoozeWakeTick]); 2026-10-23T07:00:22.8374965Z ·  ───────┬────── 2026-10-23T07:00:22.8375247Z · ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-23T07:00:22.8375546Z 543 │ const v2SearchQuery = props.searchQuery.trim().toLocaleLowerCase(); 2026-10-23T07:00:22.8375755Z ╰──── 2026-10-23T07:00:22.8376108Z  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-23T07:00:22.8376699Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8376995Z 2026-10-23T07:00:22.8377161Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T07:00:22.8377460Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:533:53] 2026-10-23T07:00:22.8377685Z 532 │ if (Number.isNaN(wakeAtMs)) return; 2026-10-23T07:00:22.8377954Z 533 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647); 2026-10-23T07:00:22.8378236Z ·  ─────┬──── 2026-10-23T07:00:22.8378584Z · ╰── Cannot call impure function 2026-10-23T07:00:22.8378851Z 534 │ const id = setTimeout(() => { 2026-10-23T07:00:22.8379006Z ╰──── 2026-10-23T07:00:22.8379342Z  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-23T07:00:22.8379902Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T07:00:22.8380180Z 2026-10-23T07:00:22.8380400Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-23T07:00:22.8380753Z ╭─[apps/mobile/src/state/use-composer-drafts.ts:1022:15] 2026-10-23T07:00:22.8380962Z 1021 │ instanceId, 2026-10-23T07:00:22.8381203Z 1022 │ { ...(persisted.modelOptionMemory[instanceId] ?? {}), ...models }, 2026-10-23T07:00:22.8381497Z ·  ────────────────────────────────────────────────── 2026-10-23T07:00:22.8381701Z 1023 │ ]), 2026-10-23T07:00:22.8381831Z ╰──── 2026-10-23T07:00:22.8382153Z  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-23T07:00:22.8382405Z 2026-10-23T07:00:22.8382610Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable. 2026-10-23T07:00:22.8382933Z ╭─[apps/web/src/contextMenuFallback.test.ts:38:9] 2026-10-23T07:00:22.8383134Z 37 │ get isConnected() { 2026-10-23T07:00:22.8383316Z 38 │ let current: FakeElement | null = this; 2026-10-23T07:00:22.8383506Z ·  ─────── 2026-10-23T07:00:22.8383674Z 39 │ while (current?.parent) { 2026-10-23T07:00:22.8383816Z ╰──── 2026-10-23T07:00:22.8384138Z  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-23T07:00:22.8384395Z 2026-10-23T07:00:22.8384549Z ⚠ react(refs): Cannot access refs during render 2026-10-23T07:00:22.8384881Z ╭─[apps/mobile/src/features/home/thread-swipe-actions.tsx:494:27] 2026-10-23T07:00:22.8385103Z 493 │ > 2026-10-23T07:00:22.8385253Z 494 │ {props.children(close)} 2026-10-23T07:00:22.8385445Z ·  ──┬── 2026-10-23T07:00:22.8385708Z · ╰── Cannot access ref value during render 2026-10-23T07:00:22.8386001Z 495 │ 2026-10-23T07:00:22.8386185Z ╰──── 2026-10-23T07:00:22.8386710Z  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-23T07:00:22.8387417Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T07:00:22.8387696Z 2026-10-23T07:00:22.8387900Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T07:00:22.8388211Z ╭─[apps/mobile/src/state/thread-order.ts:29:7] 2026-10-23T07:00:22.8388418Z 28 │ getPendingThreadOrder(); 2026-10-23T07:00:22.8388641Z 29 │ }, [nowMinute, snoozeWakeTick]); 2026-10-23T07:00:22.8388869Z ·  ────┬──── ───────┬────── 2026-10-23T07:00:22.8389187Z · │ ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-23T07:00:22.8389584Z · ╰── Unnecessary dependency `nowMinute` 2026-10-23T07:00:22.8389795Z 30 │ return pending; 2026-10-23T07:00:22.8389932Z ╰──── 2026-10-23T07:00:22.8390280Z  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-23T07:00:22.8390866Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8391163Z 2026-10-23T07:00:22.8391360Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-23T07:00:22.8391671Z ╭─[apps/mobile/src/lib/useHoverGesture.ts:8:15] 2026-10-23T07:00:22.8391858Z 7 │ () => 2026-10-23T07:00:22.8391995Z 8 │ Gesture.Hover() 2026-10-23T07:00:22.8392158Z ·  ──┬── 2026-10-23T07:00:22.8392386Z · ╰── `Hover` may be a component 2026-10-23T07:00:22.8392603Z 9 │ .manualActivation(true) 2026-10-23T07:00:22.8392750Z ╰──── 2026-10-23T07:00:22.8393083Z  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-23T07:00:22.8393800Z  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-23T07:00:22.8394211Z 2026-10-23T07:00:22.8394434Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-23T07:00:22.8394810Z ╭─[scripts/lib/cli-external-packages.test.ts:114:11] 2026-10-23T07:00:22.8395021Z 113 │ const declared = { 2026-10-23T07:00:22.8395204Z 114 │ ...(manifest.dependencies ?? {}), 2026-10-23T07:00:22.8395431Z ·  ──────────────────────────────── 2026-10-23T07:00:22.8395655Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-23T07:00:22.8395832Z ╰──── 2026-10-23T07:00:22.8396151Z  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-23T07:00:22.8396461Z 2026-10-23T07:00:22.8396753Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-23T07:00:22.8397096Z ╭─[scripts/lib/cli-external-packages.test.ts:115:11] 2026-10-23T07:00:22.8397328Z 114 │ ...(manifest.dependencies ?? {}), 2026-10-23T07:00:22.8397540Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-23T07:00:22.8397787Z ·  ──────────────────────────────────────── 2026-10-23T07:00:22.8398016Z 116 │ ...(manifest.peerDependencies ?? {}), 2026-10-23T07:00:22.8398186Z ╰──── 2026-10-23T07:00:22.8398504Z  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-23T07:00:22.8398760Z 2026-10-23T07:00:22.8398984Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-23T07:00:22.8399325Z ╭─[scripts/lib/cli-external-packages.test.ts:116:11] 2026-10-23T07:00:22.8399566Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-23T07:00:22.8399782Z 116 │ ...(manifest.peerDependencies ?? {}), 2026-10-23T07:00:22.8400019Z ·  ──────────────────────────────────── 2026-10-23T07:00:22.8400203Z 117 │ }; 2026-10-23T07:00:22.8400327Z ╰──── 2026-10-23T07:00:22.8400649Z  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-23T07:00:22.8400905Z 2026-10-23T07:00:22.8401073Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T07:00:22.8401386Z ╭─[apps/web/src/components/CustomSnoozeDialog.tsx:140:58] 2026-10-23T07:00:22.8401666Z 139 │ {...(weekStartsOn === undefined ? {} : { weekStartsOn })} 2026-10-23T07:00:22.8401956Z 140 │ disabled={{ before: new Date(new Date().setHours(0, 0, 0, 0)) }} 2026-10-23T07:00:22.8402232Z ·  ─────┬──── 2026-10-23T07:00:22.8402535Z · ╰── Cannot call impure function 2026-10-23T07:00:22.8402796Z 141 │ onSelect={(selected) => { 2026-10-23T07:00:22.8402963Z ╰──── 2026-10-23T07:00:22.8403295Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-23T07:00:22.8404072Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T07:00:22.8404357Z 2026-10-23T07:00:22.8404614Z ⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence. 2026-10-23T07:00:22.8405006Z ╭─[apps/web/src/components/pullRequest/pullRequestList.logic.ts:187:9] 2026-10-23T07:00:22.8405240Z 186 │ ): boolean { 2026-10-23T07:00:22.8405469Z 187 │ const labels = entry.labels.map((label) => label.name.trim().toLowerCase()); 2026-10-23T07:00:22.8405798Z ·  ───────────────────────────────────────────────────────────────────── 2026-10-23T07:00:22.8406102Z 188 │ const holds = (label: string) => labels.includes(label.trim().toLowerCase()); 2026-10-23T07:00:22.8406309Z ╰──── 2026-10-23T07:00:22.8406442Z  help: Switch to `Set` 2026-10-23T07:00:22.8406612Z 2026-10-23T07:00:22.8406845Z ⚠ eslint(no-unused-vars): Identifier 'Fiber' is imported but never used. 2026-10-23T07:00:22.8407134Z ╭─[apps/server/src/ws.ts:10:13] 2026-10-23T07:00:22.8407332Z  9 │ import * as Effect from "effect/Effect"; 2026-10-23T07:00:22.8407525Z 10 │ import * as Fiber from "effect/Fiber"; 2026-10-23T07:00:22.8407702Z ·  ──┬── 2026-10-23T07:00:22.8407927Z · ╰── 'Fiber' is imported here 2026-10-23T07:00:22.8408162Z 11 │ import * as FileSystem from "effect/FileSystem"; 2026-10-23T07:00:22.8408330Z ╰──── 2026-10-23T07:00:22.8408484Z  help: Consider removing this import. 2026-10-23T07:00:22.8408600Z 2026-10-23T07:00:22.8408804Z ⚠ eslint(no-unused-vars): Identifier 'Schedule' is imported but never used. 2026-10-23T07:00:22.8409093Z ╭─[apps/server/src/ws.ts:17:13] 2026-10-23T07:00:22.8409279Z 16 │ import * as Ref from "effect/Ref"; 2026-10-23T07:00:22.8409473Z 17 │ import * as Schedule from "effect/Schedule"; 2026-10-23T07:00:22.8409668Z ·  ────┬─── 2026-10-23T07:00:22.8409899Z · ╰── 'Schedule' is imported here 2026-10-23T07:00:22.8410122Z 18 │ import * as Schema from "effect/Schema"; 2026-10-23T07:00:22.8410281Z ╰──── 2026-10-23T07:00:22.8410433Z  help: Consider removing this import. 2026-10-23T07:00:22.8410547Z 2026-10-23T07:00:22.8410849Z ⚠ eslint(no-unused-vars): Variable 'projectSetupScriptRunner' is declared but never used. Unused variables should start with a '_'. 2026-10-23T07:00:22.8411226Z ╭─[apps/server/src/ws.ts:1290:13] 2026-10-23T07:00:22.8411502Z 1289 │ const usageLimitSources = yield* UsageLimitSources.UsageLimitSources; 2026-10-23T07:00:22.8411873Z 1290 │ const projectSetupScriptRunner = yield* ProjectSetupScriptRunner.ProjectSetupScriptRunner; 2026-10-23T07:00:22.8412184Z ·  ────────────┬─────────── 2026-10-23T07:00:22.8412467Z · ╰── 'projectSetupScriptRunner' is declared here 2026-10-23T07:00:22.8412806Z 1291 │ const worktreeSetupTracker = yield* WorktreeSetupTracker.WorktreeSetupTracker; 2026-10-23T07:00:22.8413035Z ╰──── 2026-10-23T07:00:22.8413198Z  help: Consider removing this declaration. 2026-10-23T07:00:22.8413316Z 2026-10-23T07:00:22.8413793Z ⚠ 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-23T07:00:22.8414377Z ╭─[packages/client-runtime/src/connection/supervisor.test.ts:135:3] 2026-10-23T07:00:22.8414665Z 134 │ let lastState = yield* SubscriptionRef.get(state); 2026-10-23T07:00:22.8415040Z 135 │ ╭─▶ for (let iteration = 0; iteration < 100; iteration += 1) { 2026-10-23T07:00:22.8415377Z 136 │ │ lastState = yield* SubscriptionRef.get(state); 2026-10-23T07:00:22.8415632Z 137 │ │ if (predicate(lastState)) { 2026-10-23T07:00:22.8415854Z 138 │ │ return lastState; 2026-10-23T07:00:22.8416044Z 139 │ │ } 2026-10-23T07:00:22.8416239Z 140 │ │ yield* Effect.yieldNow; 2026-10-23T07:00:22.8416536Z 141 │ ╰─▶ } 2026-10-23T07:00:22.8416781Z 142 │ return yield* Effect.die( 2026-10-23T07:00:22.8416927Z ╰──── 2026-10-23T07:00:22.8416986Z 2026-10-23T07:00:22.8417181Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T07:00:22.8417538Z ╭─[apps/web/src/components/pullRequest/PullRequestSummaryTab.tsx:814:17] 2026-10-23T07:00:22.8417775Z 813 │
{ 2026-10-23T07:00:22.8426868Z ·  ────┬──── 2026-10-23T07:00:22.8427008Z · ╰── This is the containing effect 2026-10-23T07:00:22.8427097Z 512 │ setKeyboardStateSuspect(false); 2026-10-23T07:00:22.8427189Z ·  ───────────┬─────────── 2026-10-23T07:00:22.8427360Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T07:00:22.8427464Z 513 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-23T07:00:22.8427517Z ╰──── 2026-10-23T07:00:22.8428111Z  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-23T07:00:22.8428435Z  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-23T07:00:22.8428441Z 2026-10-23T07:00:22.8428696Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T07:00:22.8428847Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:872:7] 2026-10-23T07:00:22.8429004Z 869 │ const [lastKnownKeyboardHeight, setLastKnownKeyboardHeight] = useState(0); 2026-10-23T07:00:22.8429071Z 870 │ useEffect(() => { 2026-10-23T07:00:22.8429142Z ·  ────┬──── 2026-10-23T07:00:22.8429273Z · ╰── This is the containing effect 2026-10-23T07:00:22.8429432Z 871 │ if (liveKeyboardHeight > 0 && liveKeyboardHeight !== lastKnownKeyboardHeight) { 2026-10-23T07:00:22.8429602Z 872 │ setLastKnownKeyboardHeight(liveKeyboardHeight); 2026-10-23T07:00:22.8429730Z ·  ─────────────┬──────────── 2026-10-23T07:00:22.8429906Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T07:00:22.8429963Z 873 │ } 2026-10-23T07:00:22.8430016Z ╰──── 2026-10-23T07:00:22.8430604Z  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-23T07:00:22.8430923Z  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-23T07:00:22.8430926Z 2026-10-23T07:00:22.8431184Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T07:00:22.8431347Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1119:5] 2026-10-23T07:00:22.8431404Z 1117 │ 2026-10-23T07:00:22.8431468Z 1118 │ useEffect(() => { 2026-10-23T07:00:22.8431544Z ·  ────┬──── 2026-10-23T07:00:22.8431676Z · ╰── This is the containing effect 2026-10-23T07:00:22.8431756Z 1119 │ setAnchorMessageId(null); 2026-10-23T07:00:22.8431841Z ·  ─────────┬──────── 2026-10-23T07:00:22.8432014Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T07:00:22.8432095Z 1120 │ setSubmittedMessageId(null); 2026-10-23T07:00:22.8432149Z ╰──── 2026-10-23T07:00:22.8432741Z  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-23T07:00:22.8433061Z  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-23T07:00:22.8433064Z 2026-10-23T07:00:22.8433263Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T07:00:22.8433415Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:513:7] 2026-10-23T07:00:22.8433501Z 512 │ setKeyboardStateSuspect(false); 2026-10-23T07:00:22.8433603Z 513 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-23T07:00:22.8433749Z ·  ────────┬──────── ─────────┬──────── 2026-10-23T07:00:22.8433959Z · │ ╰── Unnecessary dependency `liveKeyboardHeight` 2026-10-23T07:00:22.8434119Z · ╰── Unnecessary dependency `isKeyboardVisible` 2026-10-23T07:00:22.8434245Z 514 │ const handleOwnedInputFocusChange = (focused: boolean) => { 2026-10-23T07:00:22.8434299Z ╰──── 2026-10-23T07:00:22.8434615Z  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-23T07:00:22.8434971Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8435004Z 2026-10-23T07:00:22.8435201Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T07:00:22.8435358Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1067:7] 2026-10-23T07:00:22.8435445Z 1066 │ userInputInsetProgress.set(1); 2026-10-23T07:00:22.8435607Z 1067 │ }, [activeUserInputRequestId, userInputCardProgress, userInputInsetProgress]); 2026-10-23T07:00:22.8435706Z ·  ────────────┬─────────── 2026-10-23T07:00:22.8435883Z · ╰── Unnecessary dependency `activeUserInputRequestId` 2026-10-23T07:00:22.8435990Z 1068 │ const showContent = props.showContent ?? true; 2026-10-23T07:00:22.8436044Z ╰──── 2026-10-23T07:00:22.8436338Z  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-23T07:00:22.8436644Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8436646Z 2026-10-23T07:00:22.8436846Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T07:00:22.8437004Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1125:15] 2026-10-23T07:00:22.8437072Z 1124 │ freeze.set(false); 2026-10-23T07:00:22.8437154Z 1125 │ }, [freeze, selectedThreadKey]); 2026-10-23T07:00:22.8437249Z ·  ────────┬──────── 2026-10-23T07:00:22.8437418Z · ╰── Unnecessary dependency `selectedThreadKey` 2026-10-23T07:00:22.8437476Z 1126 │ 2026-10-23T07:00:22.8437527Z ╰──── 2026-10-23T07:00:22.8437815Z  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-23T07:00:22.8438121Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8438123Z 2026-10-23T07:00:22.8438279Z ⚠ react(immutability): This value cannot be modified 2026-10-23T07:00:22.8438431Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:955:5] 2026-10-23T07:00:22.8438540Z 950 │ const composerPopoverHeight = useSharedValue(0); 2026-10-23T07:00:22.8438646Z 951 │ const floatingControlCoverage = useSharedValue( 2026-10-23T07:00:22.8438749Z ·  ───────────┬─────────── 2026-10-23T07:00:22.8438913Z · ╰── `floatingControlCoverage` originates here 2026-10-23T07:00:22.8439038Z 952 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-23T07:00:22.8439095Z 953 │ ); 2026-10-23T07:00:22.8439161Z 954 │ useEffect(() => { 2026-10-23T07:00:22.8439266Z 955 │ floatingControlCoverage.value = withTiming( 2026-10-23T07:00:22.8439355Z ·  ───────────┬─────────── 2026-10-23T07:00:22.8439517Z · ╰── `floatingControlCoverage` cannot be modified 2026-10-23T07:00:22.8439643Z 956 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-23T07:00:22.8439700Z ╰──── 2026-10-23T07:00:22.8440013Z  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-23T07:00:22.8440340Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T07:00:22.8440342Z 2026-10-23T07:00:22.8440497Z ⚠ react(immutability): This value cannot be modified 2026-10-23T07:00:22.8440649Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:973:7] 2026-10-23T07:00:22.8440831Z 963 │ const userInputCoverageApplies = Platform.OS === "ios" && activeUserInputRequestId !== null; 2026-10-23T07:00:22.8440952Z 964 │ const combinedContentInsetEndAdjustment = useSharedValue( 2026-10-23T07:00:22.8441065Z ·  ────────────────┬──────────────── 2026-10-23T07:00:22.8441255Z · ╰── `combinedContentInsetEndAdjustment` originates here 2026-10-23T07:00:22.8441387Z 965 │ Math.max(0, estimatedOverlayHeight - nativeInsetOvercount), 2026-10-23T07:00:22.8441442Z 966 │ ); 2026-10-23T07:00:22.8441513Z 967 │ useAnimatedReaction( 2026-10-23T07:00:22.8441574Z 968 │ () => 2026-10-23T07:00:22.8441663Z 969 │ contentInsetEndAdjustment.value + 2026-10-23T07:00:22.8441751Z 970 │ floatingControlCoverage.value + 2026-10-23T07:00:22.8441947Z 971 │ (userInputCoverageApplies ? userInputInsetProgress.value * userInputCardCoverage.value : 0), 2026-10-23T07:00:22.8442012Z 972 │ (value) => { 2026-10-23T07:00:22.8442124Z 973 │ combinedContentInsetEndAdjustment.value = value; 2026-10-23T07:00:22.8442236Z ·  ────────────────┬──────────────── 2026-10-23T07:00:22.8442432Z · ╰── `combinedContentInsetEndAdjustment` cannot be modified 2026-10-23T07:00:22.8442494Z 974 │ }, 2026-10-23T07:00:22.8442547Z ╰──── 2026-10-23T07:00:22.8442809Z  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-23T07:00:22.8443110Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T07:00:22.8443112Z 2026-10-23T07:00:22.8443350Z ⚠ unicorn(prefer-string-starts-ends-with): Prefer String#startsWith over a regex with a caret. 2026-10-23T07:00:22.8443476Z ╭─[apps/server/src/vcs/GitVcsDriverCore.ts:509:11] 2026-10-23T07:00:22.8443574Z 508 │ GIT_DIAGNOSTIC_LINE_PATTERN.test(line) || 2026-10-23T07:00:22.8443817Z 509 │ (!/^remote:/.test(line) && SSH_TRANSPORT_REFUSAL_PATTERN.test(line)), 2026-10-23T07:00:22.8443945Z ·  ─────────────── 2026-10-23T07:00:22.8444002Z 510 │ ) 2026-10-23T07:00:22.8444053Z ╰──── 2026-10-23T07:00:22.8444206Z  help: Replace `/^remote:/.test(line)` with `line.startsWith('remote:')`. 2026-10-23T07:00:22.8444209Z 2026-10-23T07:00:22.8444410Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T07:00:22.8444604Z ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:215:7] 2026-10-23T07:00:22.8444659Z 214 │ } 2026-10-23T07:00:22.8444732Z 215 │ }, [wrappedRender]); 2026-10-23T07:00:22.8444814Z ·  ──────┬────── 2026-10-23T07:00:22.8444964Z · ╰── Unnecessary dependency `wrappedRender` 2026-10-23T07:00:22.8445023Z 216 │ 2026-10-23T07:00:22.8445079Z ╰──── 2026-10-23T07:00:22.8445367Z  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-23T07:00:22.8445676Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8445678Z 2026-10-23T07:00:22.8445919Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-23T07:00:22.8446078Z ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:817:35] 2026-10-23T07:00:22.8446134Z 816 │ > 2026-10-23T07:00:22.8446244Z 817 │ 2026-10-23T07:00:22.8446368Z ·  ──────────────────── 2026-10-23T07:00:22.8446464Z 818 │ 2026-10-23T07:00:22.8447470Z 832 │ 2026-10-23T07:00:22.8447596Z ·  ──────────────────── 2026-10-23T07:00:22.8447700Z 833 │ 2026-10-23T07:00:22.8447755Z ╰──── 2026-10-23T07:00:22.8447975Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-23T07:00:22.8448109Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-23T07:00:22.8448115Z 2026-10-23T07:00:22.8448301Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-23T07:00:22.8448456Z ╭─[apps/mobile/src/features/threads/ThreadQueueControl.tsx:602:27] 2026-10-23T07:00:22.8448623Z 601 │ const onEnd = useEffectEvent((y: number, success: boolean) => props.onEnd(y, success)); 2026-10-23T07:00:22.8448758Z 602 │ const gesture = Gesture.Pan() 2026-10-23T07:00:22.8448872Z ·  ─┬─ 2026-10-23T07:00:22.8449016Z · ╰── `Pan` may be a component 2026-10-23T07:00:22.8449094Z 603 │ .enabled(!props.disabled) 2026-10-23T07:00:22.8449147Z ╰──── 2026-10-23T07:00:22.8449416Z  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-23T07:00:22.8449863Z  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-23T07:00:22.8449865Z 2026-10-23T07:00:22.8450225Z ⚠ 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-23T07:00:22.8450365Z ╭─[apps/server/src/vcs/GitVcsDriverCore.test.ts:1786:34] 2026-10-23T07:00:22.8450502Z 1785 │ const stat = branch.files!.find((file) => file.path === path)!; 2026-10-23T07:00:22.8450648Z 1786 │ const request = yield* Schema.decodeEffect(ReviewDiffPreviewInput)({ 2026-10-23T07:00:22.8450768Z ·  ─────────────────── 2026-10-23T07:00:22.8450834Z 1787 │ cwd, 2026-10-23T07:00:22.8450888Z ╰──── 2026-10-23T07:00:22.8450890Z 2026-10-23T07:00:22.8451146Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T07:00:22.8451283Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2109:5] 2026-10-23T07:00:22.8451347Z 2107 │ ); 2026-10-23T07:00:22.8451419Z 2108 │ useEffect(() => { 2026-10-23T07:00:22.8451492Z ·  ────┬──── 2026-10-23T07:00:22.8451624Z · ╰── This is the containing effect 2026-10-23T07:00:22.8451702Z 2109 │ setExpandedVideo(null); 2026-10-23T07:00:22.8451785Z ·  ────────┬─────── 2026-10-23T07:00:22.8451954Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T07:00:22.8452029Z 2110 │ setExpandedFile(null); 2026-10-23T07:00:22.8452083Z ╰──── 2026-10-23T07:00:22.8452678Z  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-23T07:00:22.8452997Z  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-23T07:00:22.8453003Z 2026-10-23T07:00:22.8453228Z ⚠ eslint(no-unused-vars): Identifier 'isMarkdownFileLinkLabel' is imported but never used. 2026-10-23T07:00:22.8453363Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:62:10] 2026-10-23T07:00:22.8453509Z 61 │ import { resolveAssetUrl } from "@t3tools/client-runtime/state/assets"; 2026-10-23T07:00:22.8453648Z 62 │ import { isMarkdownFileLinkLabel } from "@t3tools/shared/markdownLinks"; 2026-10-23T07:00:22.8453745Z ·  ───────────┬─────────── 2026-10-23T07:00:22.8453956Z · ╰── 'isMarkdownFileLinkLabel' is imported here 2026-10-23T07:00:22.8454143Z 63 │ import { formatAttachmentSize } from "@t3tools/client-runtime/state/attachments"; 2026-10-23T07:00:22.8454196Z ╰──── 2026-10-23T07:00:22.8454293Z  help: Consider removing this import. 2026-10-23T07:00:22.8454296Z 2026-10-23T07:00:22.8454501Z ⚠ eslint(no-unused-vars): Identifier 'createContext' is imported but never used. 2026-10-23T07:00:22.8454661Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:88:3] 2026-10-23T07:00:22.8454723Z 87 │ import { 2026-10-23T07:00:22.8454787Z 88 │ createContext, 2026-10-23T07:00:22.8454864Z ·  ──────┬────── 2026-10-23T07:00:22.8455001Z · ╰── 'createContext' is imported here 2026-10-23T07:00:22.8455059Z 89 │ memo, 2026-10-23T07:00:22.8455109Z ╰──── 2026-10-23T07:00:22.8455215Z  help: Consider removing this import. 2026-10-23T07:00:22.8455220Z 2026-10-23T07:00:22.8455432Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-23T07:00:22.8455567Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:103:3] 2026-10-23T07:00:22.8455624Z 102 │ import { 2026-10-23T07:00:22.8455694Z 103 │ ActivityIndicator, 2026-10-23T07:00:22.8455777Z ·  ────────┬──────── 2026-10-23T07:00:22.8455921Z · ╰── 'ActivityIndicator' is imported here 2026-10-23T07:00:22.8455979Z 104 │ Image, 2026-10-23T07:00:22.8456032Z ╰──── 2026-10-23T07:00:22.8456129Z  help: Consider removing this import. 2026-10-23T07:00:22.8456132Z 2026-10-23T07:00:22.8456335Z ⚠ eslint(no-unused-vars): Identifier 'ScrollView' is imported but never used. 2026-10-23T07:00:22.8456469Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:110:3] 2026-10-23T07:00:22.8456536Z 109 │ Pressable, 2026-10-23T07:00:22.8456602Z 110 │ ScrollView, 2026-10-23T07:00:22.8456677Z ·  ─────┬──── 2026-10-23T07:00:22.8456805Z · ╰── 'ScrollView' is imported here 2026-10-23T07:00:22.8456870Z 111 │ StyleSheet, 2026-10-23T07:00:22.8456923Z ╰──── 2026-10-23T07:00:22.8457021Z  help: Consider removing this import. 2026-10-23T07:00:22.8457024Z 2026-10-23T07:00:22.8457220Z ⚠ eslint(no-unused-vars): Identifier 'NativeText' is imported but never used. 2026-10-23T07:00:22.8457356Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:112:11] 2026-10-23T07:00:22.8457424Z 111 │ StyleSheet, 2026-10-23T07:00:22.8457496Z 112 │ Text as NativeText, 2026-10-23T07:00:22.8457574Z ·  ─────┬──── 2026-10-23T07:00:22.8457710Z · ╰── 'NativeText' is imported here 2026-10-23T07:00:22.8457778Z 113 │ type ColorValue, 2026-10-23T07:00:22.8457830Z ╰──── 2026-10-23T07:00:22.8457924Z  help: Consider removing this import. 2026-10-23T07:00:22.8457927Z 2026-10-23T07:00:22.8458140Z ⚠ eslint(no-unused-vars): Identifier 'tryOpenExternalUrl' is imported but never used. 2026-10-23T07:00:22.8458277Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:134:10] 2026-10-23T07:00:22.8458413Z 133 │ import { copyTextWithHaptic } from "../../lib/copyTextWithHaptic"; 2026-10-23T07:00:22.8458537Z 134 │ import { tryOpenExternalUrl } from "../../lib/openExternalUrl"; 2026-10-23T07:00:22.8458678Z ·  ─────────┬──────── 2026-10-23T07:00:22.8458866Z · ╰── 'tryOpenExternalUrl' is imported here 2026-10-23T07:00:22.8459014Z 135 │ import { downloadAndShareAttachment } from "../../lib/attachmentDownload"; 2026-10-23T07:00:22.8459064Z ╰──── 2026-10-23T07:00:22.8459161Z  help: Consider removing this import. 2026-10-23T07:00:22.8459164Z 2026-10-23T07:00:22.8459380Z ⚠ eslint(no-unused-vars): Identifier 'faviconUrlForOrigin' is imported but never used. 2026-10-23T07:00:22.8459513Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:137:10] 2026-10-23T07:00:22.8459647Z 136 │ import { hasWideMarkdownBlock } from "../../lib/wideMarkdownBlocks"; 2026-10-23T07:00:22.8459775Z 137 │ import { faviconUrlForOrigin } from "@t3tools/shared/favicon"; 2026-10-23T07:00:22.8459872Z ·  ─────────┬───────── 2026-10-23T07:00:22.8460027Z · ╰── 'faviconUrlForOrigin' is imported here 2026-10-23T07:00:22.8460087Z 138 │ import { 2026-10-23T07:00:22.8460138Z ╰──── 2026-10-23T07:00:22.8460234Z  help: Consider removing this import. 2026-10-23T07:00:22.8460236Z 2026-10-23T07:00:22.8460448Z ⚠ eslint(no-unused-vars): Identifier 'MediaVideoPlayer' is imported but never used. 2026-10-23T07:00:22.8460582Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:151:10] 2026-10-23T07:00:22.8460769Z 150 │ import { VideoAttachmentTile } from "../../components/VideoAttachmentTile"; 2026-10-23T07:00:22.8460906Z 151 │ import { MediaVideoPlayer } from "../../components/MediaVideoPlayer"; 2026-10-23T07:00:22.8460996Z ·  ────────┬─────── 2026-10-23T07:00:22.8461150Z · ╰── 'MediaVideoPlayer' is imported here 2026-10-23T07:00:22.8461290Z 152 │ import { resolveMarkdownMediaPreview } from "../../lib/markdownMedia"; 2026-10-23T07:00:22.8461345Z ╰──── 2026-10-23T07:00:22.8461442Z  help: Consider removing this import. 2026-10-23T07:00:22.8461444Z 2026-10-23T07:00:22.8461663Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoPreviewUri' is imported but never used. 2026-10-23T07:00:22.8461794Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:155:3] 2026-10-23T07:00:22.8461877Z 154 │ attachmentVideoPreviewSource, 2026-10-23T07:00:22.8461950Z 155 │ mediaVideoPreviewUri, 2026-10-23T07:00:22.8462036Z ·  ──────────┬───────── 2026-10-23T07:00:22.8462190Z · ╰── 'mediaVideoPreviewUri' is imported here 2026-10-23T07:00:22.8462265Z 156 │ mediaVideoThumbnailKey, 2026-10-23T07:00:22.8462317Z ╰──── 2026-10-23T07:00:22.8462413Z  help: Consider removing this import. 2026-10-23T07:00:22.8462416Z 2026-10-23T07:00:22.8462635Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoThumbnailKey' is imported but never used. 2026-10-23T07:00:22.8462766Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:156:3] 2026-10-23T07:00:22.8462837Z 155 │ mediaVideoPreviewUri, 2026-10-23T07:00:22.8462909Z 156 │ mediaVideoThumbnailKey, 2026-10-23T07:00:22.8462994Z ·  ───────────┬────────── 2026-10-23T07:00:22.8463149Z · ╰── 'mediaVideoThumbnailKey' is imported here 2026-10-23T07:00:22.8463230Z 157 │ type MediaVideoPreviewSource, 2026-10-23T07:00:22.8463283Z ╰──── 2026-10-23T07:00:22.8463429Z  help: Consider removing this import. 2026-10-23T07:00:22.8463466Z 2026-10-23T07:00:22.8463678Z ⚠ eslint(no-unused-vars): Type 'MediaVideoPreviewSource' is imported but never used. 2026-10-23T07:00:22.8463810Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:157:8] 2026-10-23T07:00:22.8463881Z 156 │ mediaVideoThumbnailKey, 2026-10-23T07:00:22.8463959Z 157 │ type MediaVideoPreviewSource, 2026-10-23T07:00:22.8464055Z ·  ───────────┬─────────── 2026-10-23T07:00:22.8464218Z · ╰── 'MediaVideoPreviewSource' is imported here 2026-10-23T07:00:22.8464307Z 158 │ } from "../../lib/videoPreviewSource"; 2026-10-23T07:00:22.8464358Z ╰──── 2026-10-23T07:00:22.8464455Z  help: Consider removing this import. 2026-10-23T07:00:22.8464463Z 2026-10-23T07:00:22.8464715Z ⚠ eslint(no-unused-vars): Type 'ReviewDiffTheme' is imported but never used. 2026-10-23T07:00:22.8464849Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:165:15] 2026-10-23T07:00:22.8465022Z 164 │ import { parseReviewCommentMessageSegments } from "../review/reviewCommentSelection"; 2026-10-23T07:00:22.8465162Z 165 │ import type { ReviewDiffTheme } from "../review/shikiReviewHighlighter"; 2026-10-23T07:00:22.8465254Z ·  ───────┬─────── 2026-10-23T07:00:22.8465402Z · ╰── 'ReviewDiffTheme' is imported here 2026-10-23T07:00:22.8465463Z 166 │ import { 2026-10-23T07:00:22.8465513Z ╰──── 2026-10-23T07:00:22.8465609Z  help: Consider removing this import. 2026-10-23T07:00:22.8465612Z 2026-10-23T07:00:22.8465846Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownFontSizes' is imported but never used. 2026-10-23T07:00:22.8465982Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:180:3] 2026-10-23T07:00:22.8466038Z 179 │ import { 2026-10-23T07:00:22.8466114Z 180 │ resolveMarkdownFontSizes, 2026-10-23T07:00:22.8466206Z ·  ────────────┬─────────── 2026-10-23T07:00:22.8466363Z · ╰── 'resolveMarkdownFontSizes' is imported here 2026-10-23T07:00:22.8466449Z 181 │ resolveNativeMarkdownTypography, 2026-10-23T07:00:22.8466501Z ╰──── 2026-10-23T07:00:22.8466596Z  help: Consider removing this import. 2026-10-23T07:00:22.8466599Z 2026-10-23T07:00:22.8466820Z ⚠ eslint(no-unused-vars): Identifier 'markdownLinkIconSource' is imported but never used. 2026-10-23T07:00:22.8466997Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:185:10] 2026-10-23T07:00:22.8467160Z 184 │ import { PierreEntryIcon } from "../../components/PierreEntryIcon"; 2026-10-23T07:00:22.8467296Z 185 │ import { markdownLinkIconSource } from "../../lib/markdownLinkIcons"; 2026-10-23T07:00:22.8467392Z ·  ───────────┬────────── 2026-10-23T07:00:22.8467549Z · ╰── 'markdownLinkIconSource' is imported here 2026-10-23T07:00:22.8467608Z 186 │ import { 2026-10-23T07:00:22.8467659Z ╰──── 2026-10-23T07:00:22.8467754Z  help: Consider removing this import. 2026-10-23T07:00:22.8467756Z 2026-10-23T07:00:22.8468013Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownInlineCodePresentation' is imported but never used. 2026-10-23T07:00:22.8468151Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:188:3] 2026-10-23T07:00:22.8468231Z 187 │ normalizeNativeMarkdownUrl, 2026-10-23T07:00:22.8468326Z 188 │ resolveMarkdownInlineCodePresentation, 2026-10-23T07:00:22.8468435Z ·  ──────────────────┬────────────────── 2026-10-23T07:00:22.8468629Z · ╰── 'resolveMarkdownInlineCodePresentation' is imported here 2026-10-23T07:00:22.8468703Z 189 │ resolveMarkdownLinkIcon, 2026-10-23T07:00:22.8468755Z ╰──── 2026-10-23T07:00:22.8468847Z  help: Consider removing this import. 2026-10-23T07:00:22.8468849Z 2026-10-23T07:00:22.8469075Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownLinkIcon' is imported but never used. 2026-10-23T07:00:22.8469206Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:189:3] 2026-10-23T07:00:22.8469306Z 188 │ resolveMarkdownInlineCodePresentation, 2026-10-23T07:00:22.8469380Z 189 │ resolveMarkdownLinkIcon, 2026-10-23T07:00:22.8469472Z ·  ───────────┬─────────── 2026-10-23T07:00:22.8469628Z · ╰── 'resolveMarkdownLinkIcon' is imported here 2026-10-23T07:00:22.8469714Z 190 │ resolveMarkdownLinkPresentation, 2026-10-23T07:00:22.8469765Z ╰──── 2026-10-23T07:00:22.8469861Z  help: Consider removing this import. 2026-10-23T07:00:22.8469863Z 2026-10-23T07:00:22.8470091Z ⚠ eslint(no-unused-vars): Identifier 'useMarkdownCodeHighlight' is imported but never used. 2026-10-23T07:00:22.8470224Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:228:10] 2026-10-23T07:00:22.8470328Z 227 │ import { ThreadMcpApp } from "./McpAppWebView"; 2026-10-23T07:00:22.8470478Z 228 │ import { useMarkdownCodeHighlight } from "./markdownCodeHighlightState"; 2026-10-23T07:00:22.8470581Z ·  ────────────┬─────────── 2026-10-23T07:00:22.8470747Z · ╰── 'useMarkdownCodeHighlight' is imported here 2026-10-23T07:00:22.8470807Z 229 │ import { 2026-10-23T07:00:22.8470859Z ╰──── 2026-10-23T07:00:22.8470953Z  help: Consider removing this import. 2026-10-23T07:00:22.8470956Z 2026-10-23T07:00:22.8471164Z ⚠ eslint(no-unused-vars): Identifier 'useAssetUrlState' is imported but never used. 2026-10-23T07:00:22.8471295Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:232:3] 2026-10-23T07:00:22.8471359Z 231 │ useAssetUrl, 2026-10-23T07:00:22.8471428Z 232 │ useAssetUrlState, 2026-10-23T07:00:22.8471511Z ·  ────────┬─────── 2026-10-23T07:00:22.8471700Z · ╰── 'useAssetUrlState' is imported here 2026-10-23T07:00:22.8471796Z 233 │ useRefreshAssetUrl, 2026-10-23T07:00:22.8471849Z ╰──── 2026-10-23T07:00:22.8471943Z  help: Consider removing this import. 2026-10-23T07:00:22.8471946Z 2026-10-23T07:00:22.8472144Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T07:00:22.8472278Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2111:7] 2026-10-23T07:00:22.8472355Z 2110 │ setExpandedFile(null); 2026-10-23T07:00:22.8472512Z 2111 │ }, [props.environmentId, props.threadId, props.contentPresentation.kind]); 2026-10-23T07:00:22.8472734Z ·  ─────────┬───────── ───────┬────── ───────────────┬────────────── 2026-10-23T07:00:22.8473028Z · │ │ ╰── Unnecessary dependency `props.contentPresentation.kind` 2026-10-23T07:00:22.8473226Z · │ ╰── Unnecessary dependency `props.threadId` 2026-10-23T07:00:22.8473389Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-23T07:00:22.8473532Z 2112 │ const horizontalPadding = props.layoutVariant === "split" ? 20 : 16; 2026-10-23T07:00:22.8473584Z ╰──── 2026-10-23T07:00:22.8473878Z  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-23T07:00:22.8474194Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8474199Z 2026-10-23T07:00:22.8474400Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T07:00:22.8474536Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2578:7] 2026-10-23T07:00:22.8474664Z 2577 │ reportHeaderMaterialVisibility(false); 2026-10-23T07:00:22.8474787Z 2578 │ }, [feedThreadKey, reportHeaderMaterialVisibility]); 2026-10-23T07:00:22.8474871Z ·  ──────┬────── 2026-10-23T07:00:22.8475019Z · ╰── Unnecessary dependency `feedThreadKey` 2026-10-23T07:00:22.8475074Z 2579 │ 2026-10-23T07:00:22.8475128Z ╰──── 2026-10-23T07:00:22.8475423Z  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-23T07:00:22.8475735Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8475737Z 2026-10-23T07:00:22.8475938Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T07:00:22.8476072Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2594:7] 2026-10-23T07:00:22.8476132Z 2593 │ } 2026-10-23T07:00:22.8476264Z 2594 │ }, [listMountKey, props.contentInsetEndAdjustment, listRef]); 2026-10-23T07:00:22.8476345Z ·  ──────┬───── 2026-10-23T07:00:22.8476490Z · ╰── Unnecessary dependency `listMountKey` 2026-10-23T07:00:22.8476545Z 2595 │ 2026-10-23T07:00:22.8476650Z ╰──── 2026-10-23T07:00:22.8476966Z  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-23T07:00:22.8477269Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8477272Z 2026-10-23T07:00:22.8477469Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T07:00:22.8477604Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2751:7] 2026-10-23T07:00:22.8477662Z 2750 │ } 2026-10-23T07:00:22.8477841Z 2751 │ }, [expandedTurnIds, expandedWorkGroups, expandedWorkRows, settleDisclosureAfterLayout]); 2026-10-23T07:00:22.8478044Z ·  ───────┬─────── ─────────┬──────── ────────┬─────── 2026-10-23T07:00:22.8478297Z · │ │ ╰── Unnecessary dependency `expandedWorkRows` 2026-10-23T07:00:22.8478499Z · │ ╰── Unnecessary dependency `expandedWorkGroups` 2026-10-23T07:00:22.8478652Z · ╰── Unnecessary dependency `expandedTurnIds` 2026-10-23T07:00:22.8478705Z 2752 │ 2026-10-23T07:00:22.8478757Z ╰──── 2026-10-23T07:00:22.8479045Z  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-23T07:00:22.8479357Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8479362Z 2026-10-23T07:00:22.8479541Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-23T07:00:22.8479675Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:603:9] 2026-10-23T07:00:22.8479734Z 602 │ }; 2026-10-23T07:00:22.8479850Z 603 │ }, [props.environmentId, attachment.id, httpBaseUrl]), 2026-10-23T07:00:22.8480037Z ·  ─────────┬───────── ──────┬────── ─────┬───── 2026-10-23T07:00:22.8480273Z · │ │ ╰── Unnecessary dependency `httpBaseUrl` 2026-10-23T07:00:22.8480514Z · │ ╰── Unnecessary dependency `attachment.id` 2026-10-23T07:00:22.8480712Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-23T07:00:22.8480769Z 604 │ ); 2026-10-23T07:00:22.8480819Z ╰──── 2026-10-23T07:00:22.8481128Z  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-23T07:00:22.8481435Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8481437Z 2026-10-23T07:00:22.8481889Z ⚠ 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-23T07:00:22.8482022Z ╭─[apps/server/src/assets/AssetAccess.test.ts:1043:32] 2026-10-23T07:00:22.8482159Z 1042 │ expect(error._tag).toBe("AssetGitHubMediaUrlValidationError"); 2026-10-23T07:00:22.8482347Z 1043 │ const encoded = yield* Schema.encodeEffect(Schema.fromJsonString(AssetAccessError))(error); 2026-10-23T07:00:22.8482465Z ·  ─────────────────── 2026-10-23T07:00:22.8482562Z 1044 │ expect(encoded).not.toContain(url); 2026-10-23T07:00:22.8482613Z ╰──── 2026-10-23T07:00:22.8482616Z 2026-10-23T07:00:22.8482876Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T07:00:22.8483048Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:79:5] 2026-10-23T07:00:22.8483108Z 76 │ 2026-10-23T07:00:22.8483176Z 77 │ useEffect(() => { 2026-10-23T07:00:22.8483250Z ·  ────┬──── 2026-10-23T07:00:22.8483380Z · ╰── This is the containing effect 2026-10-23T07:00:22.8483509Z 78 │ const { host, code } = parsePairingUrl(connectionPairingUrl); 2026-10-23T07:00:22.8483578Z 79 │ setHostInput(host); 2026-10-23T07:00:22.8483711Z ·  ──────┬───── 2026-10-23T07:00:22.8483878Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T07:00:22.8483947Z 80 │ setCodeInput(code); 2026-10-23T07:00:22.8483997Z ╰──── 2026-10-23T07:00:22.8484638Z  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-23T07:00:22.8484965Z  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-23T07:00:22.8484968Z 2026-10-23T07:00:22.8485222Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T07:00:22.8485390Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:89:5] 2026-10-23T07:00:22.8485443Z 82 │ 2026-10-23T07:00:22.8485511Z 83 │ useEffect(() => { 2026-10-23T07:00:22.8485582Z ·  ────┬──── 2026-10-23T07:00:22.8485710Z · ╰── This is the containing effect 2026-10-23T07:00:22.8485860Z 84 │ if (routePairingUrl.length === 0) { 2026-10-23T07:00:22.8485984Z 85 │ return; 2026-10-23T07:00:22.8486041Z 86 │ } 2026-10-23T07:00:22.8486096Z 87 │ 2026-10-23T07:00:22.8486210Z 88 │ const { host, code } = parsePairingUrl(routePairingUrl); 2026-10-23T07:00:22.8486281Z 89 │ setHostInput(host); 2026-10-23T07:00:22.8486359Z ·  ──────┬───── 2026-10-23T07:00:22.8486526Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T07:00:22.8486593Z 90 │ setCodeInput(code); 2026-10-23T07:00:22.8486648Z ╰──── 2026-10-23T07:00:22.8487245Z  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-23T07:00:22.8487566Z  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-23T07:00:22.8487568Z 2026-10-23T07:00:22.8487822Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T07:00:22.8487993Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:95:7] 2026-10-23T07:00:22.8488049Z 92 │ 2026-10-23T07:00:22.8488114Z 93 │ useEffect(() => { 2026-10-23T07:00:22.8488183Z ·  ────┬──── 2026-10-23T07:00:22.8488310Z · ╰── This is the containing effect 2026-10-23T07:00:22.8488398Z 94 │ if (pairingConnectionError) { 2026-10-23T07:00:22.8488474Z 95 │ setIsSubmitting(false); 2026-10-23T07:00:22.8488554Z ·  ───────┬─────── 2026-10-23T07:00:22.8488724Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T07:00:22.8488782Z 96 │ } 2026-10-23T07:00:22.8488837Z ╰──── 2026-10-23T07:00:22.8489431Z  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-23T07:00:22.8489753Z  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-23T07:00:22.8489760Z 2026-10-23T07:00:22.8489934Z ⚠ react(immutability): This value cannot be modified 2026-10-23T07:00:22.8490102Z ╭─[apps/mobile/src/features/connection/ConnectionStatusDot.tsx:58:7] 2026-10-23T07:00:22.8490213Z 53 │ function usePulseAnimation(pulse: boolean) { 2026-10-23T07:00:22.8490309Z 54 │ const pulseProgress = useSharedValue(0); 2026-10-23T07:00:22.8490407Z ·  ──────┬────── 2026-10-23T07:00:22.8490555Z · ╰── `pulseProgress` originates here 2026-10-23T07:00:22.8490631Z 55 │ 2026-10-23T07:00:22.8490699Z 56 │ useEffect(() => { 2026-10-23T07:00:22.8490778Z 57 │ if (pulse) { 2026-10-23T07:00:22.8490885Z 58 │ pulseProgress.value = withRepeat( 2026-10-23T07:00:22.8490978Z ·  ──────┬────── 2026-10-23T07:00:22.8491197Z · ╰── `pulseProgress` cannot be modified 2026-10-23T07:00:22.8491340Z 59 │ withTiming(1, { 2026-10-23T07:00:22.8491405Z ╰──── 2026-10-23T07:00:22.8491677Z  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-23T07:00:22.8491987Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T07:00:22.8491989Z 2026-10-23T07:00:22.8492250Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T07:00:22.8492424Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5] 2026-10-23T07:00:22.8492495Z 259 │ .join("|"); 2026-10-23T07:00:22.8492570Z 260 │ useEffect(() => { 2026-10-23T07:00:22.8492646Z ·  ────┬──── 2026-10-23T07:00:22.8492781Z · ╰── This is the containing effect 2026-10-23T07:00:22.8492847Z 261 │ stop(); 2026-10-23T07:00:22.8492917Z ·  ──┬─ 2026-10-23T07:00:22.8493083Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T07:00:22.8493153Z 262 │ }, [orderVersion]); 2026-10-23T07:00:22.8493210Z ╰──── 2026-10-23T07:00:22.8493801Z  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-23T07:00:22.8494123Z  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-23T07:00:22.8494127Z 2026-10-23T07:00:22.8494346Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-23T07:00:22.8494509Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5] 2026-10-23T07:00:22.8494596Z 260 │ useEffect(() => { 2026-10-23T07:00:22.8494656Z 261 │ stop(); 2026-10-23T07:00:22.8494771Z ·  ──┬─ 2026-10-23T07:00:22.8494897Z · ╰── Missing dependency `stop` 2026-10-23T07:00:22.8494965Z 262 │ }, [orderVersion]); 2026-10-23T07:00:22.8495045Z ·  ──────┬───── 2026-10-23T07:00:22.8495199Z · ╰── Unnecessary dependency `orderVersion` 2026-10-23T07:00:22.8495266Z 263 │ useEffect( 2026-10-23T07:00:22.8495323Z ╰──── 2026-10-23T07:00:22.8495740Z  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-23T07:00:22.8496050Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8496053Z 2026-10-23T07:00:22.8496198Z ⚠ react(refs): Cannot access refs during render 2026-10-23T07:00:22.8496358Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:96:9] 2026-10-23T07:00:22.8496438Z 95 │ const latest = useRef(props); 2026-10-23T07:00:22.8496555Z 96 │ latest.current = props; 2026-10-23T07:00:22.8496693Z ·  ───┬──────┬─── 2026-10-23T07:00:22.8496872Z · │ ╰── Cannot update ref value during render 2026-10-23T07:00:22.8496987Z · ╰── This value is a ref 2026-10-23T07:00:22.8497056Z 97 │ const gesture = useMemo( 2026-10-23T07:00:22.8497110Z ╰──── 2026-10-23T07:00:22.8497573Z  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-23T07:00:22.8497868Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T07:00:22.8497873Z 2026-10-23T07:00:22.8498020Z ⚠ react(refs): Cannot access refs during render 2026-10-23T07:00:22.8498179Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:104:18] 2026-10-23T07:00:22.8498246Z 103 │ .runOnJS(true) 2026-10-23T07:00:22.8498349Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-23T07:00:22.8498468Z ·  ───────────────┬────────────── 2026-10-23T07:00:22.8498667Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T07:00:22.8498803Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-23T07:00:22.8498855Z ╰──── 2026-10-23T07:00:22.8499321Z  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-23T07:00:22.8499610Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T07:00:22.8499614Z 2026-10-23T07:00:22.8499756Z ⚠ react(refs): Cannot access refs during render 2026-10-23T07:00:22.8499915Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:105:19] 2026-10-23T07:00:22.8500017Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-23T07:00:22.8500149Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-23T07:00:22.8500340Z ·  ──────────────────────────┬───────────────────────── 2026-10-23T07:00:22.8500580Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T07:00:22.8500708Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-23T07:00:22.8500762Z ╰──── 2026-10-23T07:00:22.8501220Z  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-23T07:00:22.8501504Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T07:00:22.8501507Z 2026-10-23T07:00:22.8501655Z ⚠ react(refs): Cannot access refs during render 2026-10-23T07:00:22.8501815Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:106:16] 2026-10-23T07:00:22.8501944Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-23T07:00:22.8502066Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-23T07:00:22.8502207Z ·  ──────────────────────────┬───────────────────────── 2026-10-23T07:00:22.8502411Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T07:00:22.8502537Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-23T07:00:22.8502589Z ╰──── 2026-10-23T07:00:22.8503051Z  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-23T07:00:22.8503340Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T07:00:22.8503343Z 2026-10-23T07:00:22.8503486Z ⚠ react(refs): Cannot access refs during render 2026-10-23T07:00:22.8503645Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:107:21] 2026-10-23T07:00:22.8503767Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-23T07:00:22.8503893Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-23T07:00:22.8504031Z ·  ───────────────────────┬────────────────────── 2026-10-23T07:00:22.8504243Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T07:00:22.8504313Z 108 │ [props.disabled], 2026-10-23T07:00:22.8504366Z ╰──── 2026-10-23T07:00:22.8504866Z  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-23T07:00:22.8505153Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T07:00:22.8505155Z 2026-10-23T07:00:22.8505298Z ⚠ react(refs): Cannot access refs during render 2026-10-23T07:00:22.8505501Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:249:9] 2026-10-23T07:00:22.8505650Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-23T07:00:22.8505758Z 249 │ latest.current = { rows, planners, moveThread }; 2026-10-23T07:00:22.8505866Z ·  ───┬──────┬─── 2026-10-23T07:00:22.8506042Z · │ ╰── Cannot update ref value during render 2026-10-23T07:00:22.8506159Z · ╰── This value is a ref 2026-10-23T07:00:22.8506214Z 250 │ 2026-10-23T07:00:22.8506268Z ╰──── 2026-10-23T07:00:22.8506723Z  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-23T07:00:22.8507015Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T07:00:22.8507019Z 2026-10-23T07:00:22.8507164Z ⚠ react(refs): Cannot access refs during render 2026-10-23T07:00:22.8507323Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:247:22] 2026-10-23T07:00:22.8507444Z 246 │ const [preview, setPreview] = useState(null); 2026-10-23T07:00:22.8507556Z 247 │ const translateY = useRef(new Animated.Value(0)).current; 2026-10-23T07:00:22.8507682Z ·  ──────────────────┬────────────────── 2026-10-23T07:00:22.8507849Z · ╰── Cannot access ref value during render 2026-10-23T07:00:22.8507959Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-23T07:00:22.8508014Z ╰──── 2026-10-23T07:00:22.8508472Z  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-23T07:00:22.8508758Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T07:00:22.8508760Z 2026-10-23T07:00:22.8508930Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T07:00:22.8509090Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:324:16] 2026-10-23T07:00:22.8509154Z 323 │ update(0); 2026-10-23T07:00:22.8509235Z 324 │ let last = performance.now(); 2026-10-23T07:00:22.8509339Z ·  ────────┬──────── 2026-10-23T07:00:22.8509478Z · ╰── Cannot call impure function 2026-10-23T07:00:22.8509545Z 325 │ const tick = () => { 2026-10-23T07:00:22.8509598Z ╰──── 2026-10-23T07:00:22.8509896Z  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-23T07:00:22.8510184Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T07:00:22.8510186Z 2026-10-23T07:00:22.8510371Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-23T07:00:22.8510578Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:99:15] 2026-10-23T07:00:22.8510670Z  98 │ () => 2026-10-23T07:00:22.8510737Z  99 │ Gesture.Pan() 2026-10-23T07:00:22.8510813Z ·  ─┬─ 2026-10-23T07:00:22.8510943Z · ╰── `Pan` may be a component 2026-10-23T07:00:22.8511023Z 100 │ .enabled(!props.disabled) 2026-10-23T07:00:22.8511077Z ╰──── 2026-10-23T07:00:22.8511344Z  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-23T07:00:22.8511784Z  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-23T07:00:22.8511786Z 2026-10-23T07:00:22.8511977Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-23T07:00:22.8512137Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:108:5] 2026-10-23T07:00:22.8512208Z 103 │ .runOnJS(true) 2026-10-23T07:00:22.8512305Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-23T07:00:22.8512395Z ·  ───┬── 2026-10-23T07:00:22.8512824Z · ╰── 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-23T07:00:22.8512956Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-23T07:00:22.8513079Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-23T07:00:22.8513206Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-23T07:00:22.8513277Z 108 │ [props.disabled], 2026-10-23T07:00:22.8513359Z ·  ────────┬─────── 2026-10-23T07:00:22.8513543Z · ╰── This dependency list is missing values used by the callback 2026-10-23T07:00:22.8513602Z 109 │ ); 2026-10-23T07:00:22.8513653Z ╰──── 2026-10-23T07:00:22.8513858Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-23T07:00:22.8514164Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8514167Z 2026-10-23T07:00:22.8514425Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-23T07:00:22.8514556Z ╭─[packages/provider-pi/src/server/adapter.ts:3389:7] 2026-10-23T07:00:22.8514622Z 3388 │ 2026-10-23T07:00:22.8514850Z 3389 │ const layer: Layer.Layer = 2026-10-23T07:00:22.8514923Z ·  ──┬── 2026-10-23T07:00:22.8515049Z · ╰── 'layer' is declared here 2026-10-23T07:00:22.8515114Z 3390 │ Layer.effect( 2026-10-23T07:00:22.8515167Z ╰──── 2026-10-23T07:00:22.8515270Z  help: Consider removing this declaration. 2026-10-23T07:00:22.8515273Z 2026-10-23T07:00:22.8515788Z ⚠ 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-23T07:00:22.8515966Z ╭─[apps/server/src/background/HostPowerMonitor.test.ts:133:11] 2026-10-23T07:00:22.8516096Z 132 │ const monitor = yield* HostPowerMonitor.HostPowerMonitor; 2026-10-23T07:00:22.8516238Z 133 │ ╭─▶ for ( 2026-10-23T07:00:22.8516342Z 134 │ │ let attempt = 0; 2026-10-23T07:00:22.8516509Z 135 │ │ attempt < 100 && (yield* monitor.snapshot).onBattery !== "true"; 2026-10-23T07:00:22.8516609Z 136 │ │ attempt += 1 2026-10-23T07:00:22.8516691Z 137 │ │ ) { 2026-10-23T07:00:22.8516802Z 138 │ │ yield* Effect.yieldNow; 2026-10-23T07:00:22.8516944Z 139 │ ╰─▶ } 2026-10-23T07:00:22.8517074Z 140 │ expect((yield* monitor.snapshot).onBattery).toBe("true"); 2026-10-23T07:00:22.8517124Z ╰──── 2026-10-23T07:00:22.8517129Z 2026-10-23T07:00:22.8517387Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T07:00:22.8517547Z ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:40:5] 2026-10-23T07:00:22.8517662Z 37 │ const [initialized, setInitialized] = useState(false); 2026-10-23T07:00:22.8517732Z 38 │ useLayoutEffect(() => { 2026-10-23T07:00:22.8517809Z ·  ───────┬─────── 2026-10-23T07:00:22.8517941Z · ╰── This is the containing effect 2026-10-23T07:00:22.8518002Z 39 │ reset(); 2026-10-23T07:00:22.8518076Z 40 │ setInitialized(true); 2026-10-23T07:00:22.8518157Z ·  ───────┬────── 2026-10-23T07:00:22.8518324Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T07:00:22.8518386Z 41 │ }, [reset]); 2026-10-23T07:00:22.8518438Z ╰──── 2026-10-23T07:00:22.8519029Z  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-23T07:00:22.8519347Z  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-23T07:00:22.8519349Z 2026-10-23T07:00:22.8519607Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T07:00:22.8519772Z ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:93:5] 2026-10-23T07:00:22.8519826Z 88 │ 2026-10-23T07:00:22.8519891Z 89 │ useEffect(() => { 2026-10-23T07:00:22.8519961Z ·  ────┬──── 2026-10-23T07:00:22.8520094Z · ╰── This is the containing effect 2026-10-23T07:00:22.8520251Z 90 │ if (!needsPreparation || !initialProjectRef.branch || waitingForProject) return; 2026-10-23T07:00:22.8520353Z 91 │ const branchName = initialProjectRef.branch; 2026-10-23T07:00:22.8520419Z 92 │ let active = true; 2026-10-23T07:00:22.8520518Z 93 │ setPendingCheckouts((count) => count + 1); 2026-10-23T07:00:22.8520658Z ·  ─────────┬───────── 2026-10-23T07:00:22.8520861Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T07:00:22.8521016Z 94 │ // Serialize replacements: ignoring a stale result cannot undo its Git mutation. 2026-10-23T07:00:22.8521068Z ╰──── 2026-10-23T07:00:22.8521653Z  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-23T07:00:22.8521970Z  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-23T07:00:22.8521976Z 2026-10-23T07:00:22.8522231Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T07:00:22.8522383Z ╭─[apps/mobile/src/features/threads/use-worktree-setup.ts:30:40] 2026-10-23T07:00:22.8522541Z 28 │ const snapshot = resolveWorktreeSetupSnapshot(input.threadId, query.data, live); 2026-10-23T07:00:22.8522606Z 29 │ useEffect(() => { 2026-10-23T07:00:22.8522674Z ·  ────┬──── 2026-10-23T07:00:22.8522800Z · ╰── This is the containing effect 2026-10-23T07:00:22.8522926Z 30 │ if (snapshot && snapshot !== live) setHeld({ key, snapshot }); 2026-10-23T07:00:22.8523029Z ·  ───┬─── 2026-10-23T07:00:22.8523215Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T07:00:22.8523294Z 31 │ }, [key, live, snapshot]); 2026-10-23T07:00:22.8523349Z ╰──── 2026-10-23T07:00:22.8523991Z  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-23T07:00:22.8524305Z  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-23T07:00:22.8524310Z 2026-10-23T07:00:22.8524498Z ⚠ eslint(require-yield): This generator function does not have `yield` 2026-10-23T07:00:22.8524690Z ╭─[packages/provider-acp/src/server/mcpOverAcpBridge.ts:81:78] 2026-10-23T07:00:22.8524809Z  80 │ 2026-10-23T07:00:22.8525111Z  81 │ ╭─▶ export const makeAcpMcpOverAcpBridge = Effect.fn("AcpMcpOverAcpBridge.make")(function* ( 2026-10-23T07:00:22.8525231Z  82 │ │ options: AcpMcpOverAcpBridgeOptions, 2026-10-23T07:00:22.8525356Z  83 │ │ ): Effect.fn.Return { 2026-10-23T07:00:22.8525524Z  84 │ │ const fetchImplementation = options.fetchImplementation ?? fetch; 2026-10-23T07:00:22.8525662Z  85 │ │ const connections = new Map(); 2026-10-23T07:00:22.8525731Z  86 │ │ 2026-10-23T07:00:22.8525945Z  87 │ │ const connectionFor = (connectionId: string): Effect.Effect => 2026-10-23T07:00:22.8526053Z  88 │ │ Effect.suspend(() => { 2026-10-23T07:00:22.8526193Z  89 │ │ const connection = connections.get(connectionId); 2026-10-23T07:00:22.8526302Z  90 │ │ return connection === undefined 2026-10-23T07:00:22.8526516Z  91 │ │ ? Effect.fail(new AcpMcpOverAcpError(`Unknown MCP-over-ACP connection "${connectionId}".`)) 2026-10-23T07:00:22.8526629Z  92 │ │ : Effect.succeed(connection); 2026-10-23T07:00:22.8526708Z  93 │ │ }); 2026-10-23T07:00:22.8526774Z  94 │ │ 2026-10-23T07:00:22.8526869Z  95 │ │ const send = ( 2026-10-23T07:00:22.8526967Z  96 │ │ connection: Connection, 2026-10-23T07:00:22.8527058Z  97 │ │ message: unknown, 2026-10-23T07:00:22.8527220Z  98 │ │ ): Effect.Effect, AcpMcpOverAcpError> => 2026-10-23T07:00:22.8527339Z  99 │ │ connection.mutex.withPermits(1)( 2026-10-23T07:00:22.8527445Z 100 │ │ Effect.gen(function* () { 2026-10-23T07:00:22.8527568Z 101 │ │ const body = JSON.stringify(message); 2026-10-23T07:00:22.8527707Z 102 │ │ if (Buffer.byteLength(body) > MAX_MESSAGE_BYTES) { 2026-10-23T07:00:22.8527921Z 103 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("MCP-over-ACP message exceeds 8 MiB.")); 2026-10-23T07:00:22.8528000Z 104 │ │ } 2026-10-23T07:00:22.8528132Z 105 │ │ const response = yield* Effect.tryPromise({ 2026-10-23T07:00:22.8528231Z 106 │ │ try: (signal) => 2026-10-23T07:00:22.8528367Z 107 │ │ fetchImplementation(options.endpoint, { 2026-10-23T07:00:22.8528473Z 108 │ │ method: "POST", 2026-10-23T07:00:22.8528563Z 109 │ │ signal, 2026-10-23T07:00:22.8528660Z 110 │ │ headers: { 2026-10-23T07:00:22.8528786Z 111 │ │ "content-type": "application/json", 2026-10-23T07:00:22.8528929Z 112 │ │ accept: "application/json, text/event-stream", 2026-10-23T07:00:22.8529062Z 113 │ │ authorization: options.authorization, 2026-10-23T07:00:22.8529189Z 114 │ │ ...(connection.sessionId === null 2026-10-23T07:00:22.8529282Z 115 │ │ ? {} 2026-10-23T07:00:22.8529476Z 116 │ │ : { "mcp-session-id": connection.sessionId }), 2026-10-23T07:00:22.8529635Z 117 │ │ ...(connection.protocolVersion === null 2026-10-23T07:00:22.8529729Z 118 │ │ ? {} 2026-10-23T07:00:22.8529890Z 119 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-23T07:00:22.8529976Z 120 │ │ }, 2026-10-23T07:00:22.8530066Z 121 │ │ body, 2026-10-23T07:00:22.8530149Z 122 │ │ }), 2026-10-23T07:00:22.8530249Z 123 │ │ catch: bridgeError, 2026-10-23T07:00:22.8530332Z 124 │ │ }); 2026-10-23T07:00:22.8530550Z 125 │ │ connection.sessionId = response.headers.get("mcp-session-id") ?? connection.sessionId; 2026-10-23T07:00:22.8530655Z 126 │ │ if (!response.ok) { 2026-10-23T07:00:22.8530762Z 127 │ │ yield* Effect.promise( 2026-10-23T07:00:22.8566840Z 128 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-23T07:00:22.8567062Z 129 │ │ ); 2026-10-23T07:00:22.8567215Z 130 │ │ return yield* Effect.fail( 2026-10-23T07:00:22.8567453Z 131 │ │ new AcpMcpOverAcpError(`T3 Code MCP endpoint responded with HTTP ${response.status}.`), 2026-10-23T07:00:22.8567538Z 132 │ │ ); 2026-10-23T07:00:22.8567658Z 133 │ │ } 2026-10-23T07:00:22.8567880Z 134 │ │ const payloads = [...(yield* Stream.runCollect(responsePayloads(response, bridgeError)))]; 2026-10-23T07:00:22.8568033Z 135 │ │ for (const payload of payloads) { 2026-10-23T07:00:22.8568261Z 136 │ │ connection.protocolVersion = protocolVersionOf(payload) ?? connection.protocolVersion; 2026-10-23T07:00:22.8568339Z 137 │ │ } 2026-10-23T07:00:22.8568469Z 138 │ │ return payloads; 2026-10-23T07:00:22.8568605Z 139 │ │ }).pipe(Effect.mapError(bridgeError)), 2026-10-23T07:00:22.8568680Z 140 │ │ ); 2026-10-23T07:00:22.8568750Z 141 │ │ 2026-10-23T07:00:22.8568966Z 142 │ │ const disconnect = Effect.fn("mcpOverAcpBridge.disconnect")(function* ( 2026-10-23T07:00:22.8569097Z 143 │ │ request: AcpSchema.DisconnectMcpRequest, 2026-10-23T07:00:22.8569322Z 144 │ │ ): Effect.fn.Return { 2026-10-23T07:00:22.8569486Z 145 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-23T07:00:22.8569636Z 146 │ │ connections.delete(request.connectionId); 2026-10-23T07:00:22.8569774Z 147 │ │ const sessionId = connection.sessionId; 2026-10-23T07:00:22.8569876Z 148 │ │ if (sessionId !== null) { 2026-10-23T07:00:22.8570004Z 149 │ │ const response = yield* Effect.tryPromise({ 2026-10-23T07:00:22.8570147Z 150 │ │ try: (signal) => 2026-10-23T07:00:22.8570276Z 151 │ │ fetchImplementation(options.endpoint, { 2026-10-23T07:00:22.8570586Z 152 │ │ method: "DELETE", 2026-10-23T07:00:22.8570737Z 153 │ │ signal, 2026-10-23T07:00:22.8570833Z 154 │ │ headers: { 2026-10-23T07:00:22.8570989Z 155 │ │ authorization: options.authorization, 2026-10-23T07:00:22.8571123Z 156 │ │ "mcp-session-id": sessionId, 2026-10-23T07:00:22.8571256Z 157 │ │ ...(connection.protocolVersion === null 2026-10-23T07:00:22.8571376Z 158 │ │ ? {} 2026-10-23T07:00:22.8571553Z 159 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-23T07:00:22.8571637Z 160 │ │ }, 2026-10-23T07:00:22.8571717Z 161 │ │ }), 2026-10-23T07:00:22.8571852Z 162 │ │ catch: bridgeError, 2026-10-23T07:00:22.8571945Z 163 │ │ }); 2026-10-23T07:00:22.8572078Z 164 │ │ if (!response.ok && response.status !== 404) { 2026-10-23T07:00:22.8572214Z 165 │ │ return yield* Effect.fail( 2026-10-23T07:00:22.8572335Z 166 │ │ new AcpMcpOverAcpError( 2026-10-23T07:00:22.8572517Z 167 │ │ `T3 Code MCP endpoint rejected disconnect with HTTP ${response.status}.`, 2026-10-23T07:00:22.8572625Z 168 │ │ ), 2026-10-23T07:00:22.8572718Z 169 │ │ ); 2026-10-23T07:00:22.8572796Z 170 │ │ } 2026-10-23T07:00:22.8572897Z 171 │ │ yield* Effect.promise( 2026-10-23T07:00:22.8573124Z 172 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-23T07:00:22.8573206Z 173 │ │ ); 2026-10-23T07:00:22.8573280Z 174 │ │ } 2026-10-23T07:00:22.8573384Z 175 │ │ return {}; 2026-10-23T07:00:22.8573475Z 176 │ │ }); 2026-10-23T07:00:22.8573546Z 177 │ │ 2026-10-23T07:00:22.8573625Z 178 │ │ return { 2026-10-23T07:00:22.8573817Z 179 │ │ connect: Effect.fn("mcpOverAcpBridge.connect")(function* (request) { 2026-10-23T07:00:22.8573957Z 180 │ │ if (request.serverId !== "t3-code") { 2026-10-23T07:00:22.8574063Z 181 │ │ return yield* Effect.fail( 2026-10-23T07:00:22.8574276Z 182 │ │ new AcpMcpOverAcpError(`Unknown ACP MCP server "${request.serverId}".`), 2026-10-23T07:00:22.8574373Z 183 │ │ ); 2026-10-23T07:00:22.8574448Z 184 │ │ } 2026-10-23T07:00:22.8574582Z 185 │ │ if (connections.size >= MAX_CONNECTIONS) { 2026-10-23T07:00:22.8574844Z 186 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("Too many MCP-over-ACP connections.")); 2026-10-23T07:00:22.8574923Z 187 │ │ } 2026-10-23T07:00:22.8575102Z 188 │ │ const connectionId = yield* options.allocateConnectionId; 2026-10-23T07:00:22.8575233Z 189 │ │ connections.set(connectionId, { 2026-10-23T07:00:22.8575350Z 190 │ │ mutex: yield* Semaphore.make(1), 2026-10-23T07:00:22.8575535Z 191 │ │ sessionId: null, 2026-10-23T07:00:22.8575690Z 192 │ │ protocolVersion: null, 2026-10-23T07:00:22.8575789Z 193 │ │ nextRequestId: 0, 2026-10-23T07:00:22.8575866Z 194 │ │ }); 2026-10-23T07:00:22.8575996Z 195 │ │ return { connectionId }; 2026-10-23T07:00:22.8576087Z 196 │ │ }), 2026-10-23T07:00:22.8576255Z 197 │ │ message: Effect.fn("mcpOverAcpBridge.message")(function* (request) { 2026-10-23T07:00:22.8576442Z 198 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-23T07:00:22.8576579Z 199 │ │ const id = ++connection.nextRequestId; 2026-10-23T07:00:22.8576728Z 200 │ │ const payloads = yield* send(connection, { 2026-10-23T07:00:22.8576849Z 201 │ │ jsonrpc: "2.0", 2026-10-23T07:00:22.8576933Z 202 │ │ id, 2026-10-23T07:00:22.8577036Z 203 │ │ method: request.method, 2026-10-23T07:00:22.8577228Z 204 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-23T07:00:22.8577310Z 205 │ │ }); 2026-10-23T07:00:22.8577524Z 206 │ │ const response = payloads.find((payload) => asEnvelope(payload)?.id === id); 2026-10-23T07:00:22.8577660Z 207 │ │ const envelope = asEnvelope(response); 2026-10-23T07:00:22.8577759Z 208 │ │ if (envelope === null) { 2026-10-23T07:00:22.8577867Z 209 │ │ return yield* Effect.fail( 2026-10-23T07:00:22.8578052Z 210 │ │ new AcpMcpOverAcpError("MCP server did not return a matching response."), 2026-10-23T07:00:22.8578156Z 211 │ │ ); 2026-10-23T07:00:22.8578246Z 212 │ │ } 2026-10-23T07:00:22.8578362Z 213 │ │ if (envelope.error !== undefined) { 2026-10-23T07:00:22.8578554Z 214 │ │ return yield* Effect.fail(new AcpMcpOverAcpError(errorMessage(envelope.error))); 2026-10-23T07:00:22.8578627Z 215 │ │ } 2026-10-23T07:00:22.8578794Z 216 │ │ return (envelope.result ?? null) as AcpSchema.MessageMcpResponse; 2026-10-23T07:00:22.8578869Z 217 │ │ }), 2026-10-23T07:00:22.8579085Z 218 │ │ notification: Effect.fn("mcpOverAcpBridge.notification")(function* (request) { 2026-10-23T07:00:22.8579264Z 219 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-23T07:00:22.8579368Z 220 │ │ yield* send(connection, { 2026-10-23T07:00:22.8579492Z 221 │ │ jsonrpc: "2.0", 2026-10-23T07:00:22.8579608Z 222 │ │ method: request.method, 2026-10-23T07:00:22.8579786Z 223 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-23T07:00:22.8579881Z 224 │ │ }); 2026-10-23T07:00:22.8579956Z 225 │ │ }), 2026-10-23T07:00:22.8580042Z 226 │ │ disconnect, 2026-10-23T07:00:22.8580150Z 227 │ │ dispose: Effect.suspend(() => 2026-10-23T07:00:22.8580273Z 228 │ │ Effect.forEach( 2026-10-23T07:00:22.8580443Z 229 │ │ [...connections.keys()], 2026-10-23T07:00:22.8580704Z 230 │ │ (connectionId) => disconnect({ connectionId }).pipe(Effect.ignore), 2026-10-23T07:00:22.8580807Z 231 │ │ { discard: true }, 2026-10-23T07:00:22.8580882Z 232 │ │ ), 2026-10-23T07:00:22.8580980Z 233 │ │ ), 2026-10-23T07:00:22.8581072Z 234 │ │ }; 2026-10-23T07:00:22.8581200Z 235 │ ╰─▶ }); 2026-10-23T07:00:22.8581254Z ╰──── 2026-10-23T07:00:22.8581550Z  help: Add a `yield` expression inside the generator body, or convert it to a regular function if iteration behavior is not needed. 2026-10-23T07:00:22.8581556Z 2026-10-23T07:00:22.8581817Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-23T07:00:22.8581972Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:772:7] 2026-10-23T07:00:22.8582099Z 771 │ if (settingsSheetPresentation.isActive) { 2026-10-23T07:00:22.8582240Z 772 │ settingsRoutePresentation.present(settingsRouteSession); 2026-10-23T07:00:22.8582345Z ·  ────────────┬──────────── 2026-10-23T07:00:22.8582557Z · ╰── Missing dependency `settingsRoutePresentation` 2026-10-23T07:00:22.8582619Z 773 │ } 2026-10-23T07:00:22.8582841Z 774 │ }, [settingsRoutePresentation.present, settingsRouteSession, settingsSheetPresentation.isActive]); 2026-10-23T07:00:22.8582964Z ·  ────────────────┬──────────────── 2026-10-23T07:00:22.8583292Z · ╰── Overly precise dependency `settingsRoutePresentation.present`, use `settingsRoutePresentation` instead 2026-10-23T07:00:22.8583354Z 775 │ 2026-10-23T07:00:22.8583404Z ╰──── 2026-10-23T07:00:22.8583865Z  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-23T07:00:22.8584228Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8584232Z 2026-10-23T07:00:22.8584428Z ⚠ react(immutability): This value cannot be modified 2026-10-23T07:00:22.8584582Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:390:5] 2026-10-23T07:00:22.8584812Z 386 │ typeof props.style.borderRadius === "number" ? props.style.borderRadius : 0; 2026-10-23T07:00:22.8584964Z 387 │ const animatedBorderRadius = useSharedValue(targetBorderRadius); 2026-10-23T07:00:22.8585055Z ·  ──────────┬───────── 2026-10-23T07:00:22.8585247Z · ╰── `animatedBorderRadius` originates here 2026-10-23T07:00:22.8585405Z 388 │ const shouldAnimate = props.animateLayout !== false && Platform.OS !== "android"; 2026-10-23T07:00:22.8585499Z 389 │ useLayoutEffect(() => { 2026-10-23T07:00:22.8585615Z 390 │ animatedBorderRadius.value = shouldAnimate 2026-10-23T07:00:22.8585701Z ·  ──────────┬───────── 2026-10-23T07:00:22.8585879Z · ╰── `animatedBorderRadius` cannot be modified 2026-10-23T07:00:22.8585983Z 391 │ ? withTiming(targetBorderRadius, { 2026-10-23T07:00:22.8586036Z ╰──── 2026-10-23T07:00:22.8586396Z  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-23T07:00:22.8586783Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T07:00:22.8586788Z 2026-10-23T07:00:22.8587025Z ⚠ eslint(no-unused-vars): Function 'summarizePayload' is declared but never used. 2026-10-23T07:00:22.8587181Z ╭─[packages/provider-acp/src/server/nativeLogging.ts:22:10] 2026-10-23T07:00:22.8587234Z 21 │ 2026-10-23T07:00:22.8587419Z 22 │ function summarizePayload(payload: unknown): Readonly> { 2026-10-23T07:00:22.8587519Z ·  ────────┬─────── 2026-10-23T07:00:22.8587671Z · ╰── 'summarizePayload' is declared here 2026-10-23T07:00:22.8587821Z 23 │ if (payload === null) return { valueType: "null" }; 2026-10-23T07:00:22.8587872Z ╰──── 2026-10-23T07:00:22.8587976Z  help: Consider removing this declaration. 2026-10-23T07:00:22.8587979Z 2026-10-23T07:00:22.8588273Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T07:00:22.8588431Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:361:7] 2026-10-23T07:00:22.8588609Z 355 │ }, [cancelledIncomingShareId, navigation, props.incomingShareId]); 2026-10-23T07:00:22.8588675Z 356 │ useEffect(() => { 2026-10-23T07:00:22.8588746Z ·  ────┬──── 2026-10-23T07:00:22.8588918Z · ╰── This is the containing effect 2026-10-23T07:00:22.8589015Z 357 │ if (!isReturningToProjectPicker) { 2026-10-23T07:00:22.8589079Z 358 │ return; 2026-10-23T07:00:22.8589156Z 359 │ } 2026-10-23T07:00:22.8589271Z 360 │ if (requestedInitialProjectAvailable) { 2026-10-23T07:00:22.8589363Z 361 │ setIsReturningToProjectPicker(false); 2026-10-23T07:00:22.8589466Z ·  ──────────────┬────────────── 2026-10-23T07:00:22.8589684Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T07:00:22.8589745Z 362 │ return; 2026-10-23T07:00:22.8589794Z ╰──── 2026-10-23T07:00:22.8590537Z  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-23T07:00:22.8590930Z  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-23T07:00:22.8590934Z 2026-10-23T07:00:22.8591192Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T07:00:22.8591345Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:504:9] 2026-10-23T07:00:22.8591397Z 447 │ 2026-10-23T07:00:22.8591463Z 448 │ useEffect(() => { 2026-10-23T07:00:22.8591534Z ·  ────┬──── 2026-10-23T07:00:22.8591687Z · ╰── This is the containing effect 2026-10-23T07:00:22.8591802Z 449 │ if (props.pendingTaskId || props.draftId) { 2026-10-23T07:00:22.8591866Z 450 │ return; 2026-10-23T07:00:22.8591934Z 451 │ } 2026-10-23T07:00:22.8592074Z 452 │ if (lastInitialProjectRefRef.current !== props.initialProjectRef) { 2026-10-23T07:00:22.8592203Z 453 │ lastInitialProjectRefRef.current = props.initialProjectRef; 2026-10-23T07:00:22.8592315Z 454 │ appliedInitialProjectKeyRef.current = null; 2026-10-23T07:00:22.8592369Z 455 │ } 2026-10-23T07:00:22.8592550Z 456 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-23T07:00:22.8592684Z 457 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-23T07:00:22.8592787Z 458 │ if (initialEnvironmentId && initialProjectId) { 2026-10-23T07:00:22.8592858Z 459 │ const directProject = 2026-10-23T07:00:22.8592925Z 460 │ projects.find( 2026-10-23T07:00:22.8592988Z 461 │ (project) => 2026-10-23T07:00:22.8593205Z 462 │ project.environmentId === initialEnvironmentId && project.id === initialProjectId, 2026-10-23T07:00:22.8593275Z 463 │ ) ?? null; 2026-10-23T07:00:22.8593327Z 464 │ 2026-10-23T07:00:22.8593405Z 465 │ if (directProject) { 2026-10-23T07:00:22.8593544Z 466 │ // Apply the route's project once. Re-applying on every change would 2026-10-23T07:00:22.8593682Z 467 │ // instantly revert environment/project switches made in the picker. 2026-10-23T07:00:22.8593879Z 468 │ const directProjectKey = `${directProject.environmentId}:${directProject.id}`; 2026-10-23T07:00:22.8594017Z 469 │ if (appliedInitialProjectKeyRef.current === directProjectKey) { 2026-10-23T07:00:22.8594091Z 470 │ return; 2026-10-23T07:00:22.8594149Z 471 │ } 2026-10-23T07:00:22.8594247Z 472 │ if (props.initialProjectRef?.branch) { 2026-10-23T07:00:22.8594307Z 473 │ if ( 2026-10-23T07:00:22.8594457Z 474 │ selectedProject?.environmentId !== directProject.environmentId || 2026-10-23T07:00:22.8594609Z 475 │ selectedProject.id !== directProject.id 2026-10-23T07:00:22.8594700Z 476 │ ) { 2026-10-23T07:00:22.8594793Z 477 │ setProject(directProject); 2026-10-23T07:00:22.8594856Z 478 │ return; 2026-10-23T07:00:22.8594915Z 479 │ } 2026-10-23T07:00:22.8594994Z 480 │ if (!flow.draftKey) return; 2026-10-23T07:00:22.8595133Z 481 │ // The route completes checkout before mounting this composer. Local 2026-10-23T07:00:22.8595314Z 482 │ // mode reuses an existing worktree; worktree mode would create another. 2026-10-23T07:00:22.8595429Z 483 │ updateComposerDraftSettings(flow.draftKey, { 2026-10-23T07:00:22.8595517Z 484 │ workspaceSelection: { 2026-10-23T07:00:22.8595650Z 485 │ mode: "local", 2026-10-23T07:00:22.8595785Z 486 │ branch: props.initialProjectRef.branch, 2026-10-23T07:00:22.8595919Z 487 │ worktreePath: props.initialProjectRef.worktreePath ?? null, 2026-10-23T07:00:22.8596041Z 488 │ startFromOrigin: false, 2026-10-23T07:00:22.8596102Z 489 │ }, 2026-10-23T07:00:22.8596163Z 490 │ }); 2026-10-23T07:00:22.8596230Z 491 │ } 2026-10-23T07:00:22.8596357Z 492 │ appliedInitialProjectKeyRef.current = directProjectKey; 2026-10-23T07:00:22.8596416Z 493 │ if ( 2026-10-23T07:00:22.8596557Z 494 │ selectedProject?.environmentId === directProject.environmentId && 2026-10-23T07:00:22.8596685Z 495 │ selectedProject.id === directProject.id 2026-10-23T07:00:22.8596756Z 496 │ ) { 2026-10-23T07:00:22.8596820Z 497 │ return; 2026-10-23T07:00:22.8596894Z 498 │ } 2026-10-23T07:00:22.8596977Z 499 │ setProject(directProject); 2026-10-23T07:00:22.8597037Z 500 │ return; 2026-10-23T07:00:22.8597092Z 501 │ } 2026-10-23T07:00:22.8597143Z 502 │ 2026-10-23T07:00:22.8597223Z 503 │ if (projects.length > 0) { 2026-10-23T07:00:22.8597317Z 504 │ setIsReturningToProjectPicker(true); 2026-10-23T07:00:22.8597469Z ·  ──────────────┬────────────── 2026-10-23T07:00:22.8597662Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T07:00:22.8597718Z 505 │ } 2026-10-23T07:00:22.8597769Z ╰──── 2026-10-23T07:00:22.8598421Z  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-23T07:00:22.8598750Z  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-23T07:00:22.8598753Z 2026-10-23T07:00:22.8599048Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T07:00:22.8599216Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:604:5] 2026-10-23T07:00:22.8599270Z 545 │ 2026-10-23T07:00:22.8599335Z 546 │ useEffect(() => { 2026-10-23T07:00:22.8599408Z ·  ────┬──── 2026-10-23T07:00:22.8599556Z · ╰── This is the containing effect 2026-10-23T07:00:22.8599674Z 547 │ const shareId = props.incomingShareId; 2026-10-23T07:00:22.8599759Z 548 │ const draftKey = flow.draftKey; 2026-10-23T07:00:22.8599872Z 549 │ const destinationProject = selectedProject; 2026-10-23T07:00:22.8600008Z 550 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-23T07:00:22.8600133Z 551 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-23T07:00:22.8600221Z 552 │ const selectedProjectMatchesRoute = 2026-10-23T07:00:22.8600325Z 553 │ !initialEnvironmentId || 2026-10-23T07:00:22.8600409Z 554 │ !initialProjectId || 2026-10-23T07:00:22.8600548Z 555 │ (destinationProject?.environmentId === initialEnvironmentId && 2026-10-23T07:00:22.8600652Z 556 │ destinationProject.id === initialProjectId); 2026-10-23T07:00:22.8600709Z 557 │ if ( 2026-10-23T07:00:22.8600770Z 558 │ !shareId || 2026-10-23T07:00:22.8600897Z 559 │ !draftKey || 2026-10-23T07:00:22.8601032Z 560 │ !destinationProject || 2026-10-23T07:00:22.8601129Z 561 │ !selectedProjectMatchesRoute || 2026-10-23T07:00:22.8601217Z 562 │ cancelledIncomingShareId === shareId 2026-10-23T07:00:22.8601282Z 563 │ ) { 2026-10-23T07:00:22.8601343Z 564 │ return; 2026-10-23T07:00:22.8601397Z 565 │ } 2026-10-23T07:00:22.8601491Z 566 │ const importKey = `${shareId}:${draftKey}`; 2026-10-23T07:00:22.8601548Z 567 │ if ( 2026-10-23T07:00:22.8601659Z 568 │ startedShareImportKeyRef.current === importKey || 2026-10-23T07:00:22.8601813Z 569 │ cancellingShareImportKeyRef.current === importKey 2026-10-23T07:00:22.8601868Z 570 │ ) { 2026-10-23T07:00:22.8601929Z 571 │ return; 2026-10-23T07:00:22.8601993Z 572 │ } 2026-10-23T07:00:22.8602044Z 573 │ 2026-10-23T07:00:22.8602118Z 574 │ if (!incomingShare) { 2026-10-23T07:00:22.8602313Z 575 │ if (isIncomingShareUnavailable && alertedUnavailableIncomingShareIdRef.current !== shareId) { 2026-10-23T07:00:22.8602479Z 576 │ alertedUnavailableIncomingShareIdRef.current = shareId; 2026-10-23T07:00:22.8602548Z 577 │ Dialog.alert( 2026-10-23T07:00:22.8602642Z 578 │ "Shared content unavailable", 2026-10-23T07:00:22.8602815Z 579 │ "The shared content is no longer in the inbox. You can continue editing this task draft.", 2026-10-23T07:00:22.8602875Z 580 │ ); 2026-10-23T07:00:22.8602929Z 581 │ } 2026-10-23T07:00:22.8602989Z 582 │ return; 2026-10-23T07:00:22.8603042Z 583 │ } 2026-10-23T07:00:22.8603122Z 584 │ 2026-10-23T07:00:22.8603191Z 585 │ if ( 2026-10-23T07:00:22.8603367Z 586 │ incomingShare.attachments.some((attachment) => attachment.type === "file") && 2026-10-23T07:00:22.8603469Z 587 │ selectedEnvironmentServerConfig === null 2026-10-23T07:00:22.8603524Z 588 │ ) { 2026-10-23T07:00:22.8603584Z 589 │ return; 2026-10-23T07:00:22.8611072Z 590 │ } 2026-10-23T07:00:22.8611160Z 591 │ 2026-10-23T07:00:22.8611316Z 592 │ if (alertedUnavailableIncomingShareIdRef.current === shareId) { 2026-10-23T07:00:22.8611444Z 593 │ alertedUnavailableIncomingShareIdRef.current = null; 2026-10-23T07:00:22.8611499Z 594 │ } 2026-10-23T07:00:22.8611604Z 595 │ startedShareImportKeyRef.current = importKey; 2026-10-23T07:00:22.8611671Z 596 │ const draftBackup = 2026-10-23T07:00:22.8611896Z 597 │ shareImportDraftBackupRef.current.get(importKey) ?? getComposerDraftSnapshot(draftKey); 2026-10-23T07:00:22.8612054Z 598 │ shareImportDraftBackupRef.current.set(importKey, draftBackup); 2026-10-23T07:00:22.8612150Z 599 │ const importToken = Symbol(importKey); 2026-10-23T07:00:22.8612233Z 600 │ let didReserveShare = false; 2026-10-23T07:00:22.8612310Z 601 │ let didConsumeShare = false; 2026-10-23T07:00:22.8612390Z 602 │ let needsDraftRestore = false; 2026-10-23T07:00:22.8612537Z 603 │ activeShareImportTokenRef.current = importToken; 2026-10-23T07:00:22.8612623Z 604 │ setImportingShareKey(importKey); 2026-10-23T07:00:22.8612723Z ·  ──────────┬───────── 2026-10-23T07:00:22.8612898Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T07:00:22.8612966Z 605 │ void (async () => { 2026-10-23T07:00:22.8613017Z ╰──── 2026-10-23T07:00:22.8613769Z  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-23T07:00:22.8614195Z  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-23T07:00:22.8614198Z 2026-10-23T07:00:22.8614401Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T07:00:22.8614554Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:524:5] 2026-10-23T07:00:22.8614660Z 523 │ props.initialProjectRef, 2026-10-23T07:00:22.8614733Z 524 │ props.incomingShareId, 2026-10-23T07:00:22.8614820Z ·  ──────────┬────────── 2026-10-23T07:00:22.8615036Z · ╰── Unnecessary dependency `props.incomingShareId` 2026-10-23T07:00:22.8615120Z 525 │ props.pendingTaskId, 2026-10-23T07:00:22.8615173Z ╰──── 2026-10-23T07:00:22.8615466Z  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-23T07:00:22.8615816Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8615820Z 2026-10-23T07:00:22.8616049Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-23T07:00:22.8616198Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:543:5] 2026-10-23T07:00:22.8616313Z 542 │ loadedBranchesProjectKeyRef.current = projectKey; 2026-10-23T07:00:22.8616419Z 543 │ flow.loadBranches(); 2026-10-23T07:00:22.8616504Z ·  ──┬─ 2026-10-23T07:00:22.8616636Z · ╰── Missing dependency `flow` 2026-10-23T07:00:22.8616731Z 544 │ }, [flow.loadBranches, selectedProject]); 2026-10-23T07:00:22.8616818Z ·  ────────┬──────── 2026-10-23T07:00:22.8617043Z · ╰── Overly precise dependency `flow.loadBranches`, use `flow` instead 2026-10-23T07:00:22.8617101Z 545 │ 2026-10-23T07:00:22.8617165Z ╰──── 2026-10-23T07:00:22.8617596Z  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-23T07:00:22.8617951Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8617958Z 2026-10-23T07:00:22.8618173Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T07:00:22.8618322Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:766:5] 2026-10-23T07:00:22.8618393Z 765 │ flow.draftKey, 2026-10-23T07:00:22.8618499Z 766 │ hasImportedIncomingShare, 2026-10-23T07:00:22.8618606Z ·  ────────────┬─────────── 2026-10-23T07:00:22.8618790Z · ╰── Unnecessary dependency `hasImportedIncomingShare` 2026-10-23T07:00:22.8618856Z 767 │ incomingShare, 2026-10-23T07:00:22.8618937Z 768 │ isIncomingShareInboxLoading, 2026-10-23T07:00:22.8619135Z ·  ─────────────┬───────────── 2026-10-23T07:00:22.8619342Z · ╰── Unnecessary dependency `isIncomingShareInboxLoading` 2026-10-23T07:00:22.8619423Z 769 │ isIncomingShareUnavailable, 2026-10-23T07:00:22.8619498Z 770 │ props.incomingShareId, 2026-10-23T07:00:22.8619618Z 771 │ props.initialProjectRef?.environmentId, 2026-10-23T07:00:22.8619720Z 772 │ props.initialProjectRef?.projectId, 2026-10-23T07:00:22.8619795Z 773 │ releaseShareReservation, 2026-10-23T07:00:22.8619868Z 774 │ reserveShare, 2026-10-23T07:00:22.8619951Z 775 │ selectedEnvironmentServerConfig, 2026-10-23T07:00:22.8620022Z 776 │ selectedProject, 2026-10-23T07:00:22.8620095Z 777 │ shareImportAttempt, 2026-10-23T07:00:22.8620183Z ·  ─────────┬──────── 2026-10-23T07:00:22.8620394Z · ╰── Unnecessary dependency `shareImportAttempt` 2026-10-23T07:00:22.8620460Z 778 │ ]); 2026-10-23T07:00:22.8620513Z ╰──── 2026-10-23T07:00:22.8620814Z  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-23T07:00:22.8621161Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8621171Z 2026-10-23T07:00:22.8621442Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T07:00:22.8621617Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:215:7] 2026-10-23T07:00:22.8621674Z 211 │ }; 2026-10-23T07:00:22.8621768Z 212 │ useEffect(() => { 2026-10-23T07:00:22.8621857Z ·  ────┬──── 2026-10-23T07:00:22.8622002Z · ╰── This is the containing effect 2026-10-23T07:00:22.8622180Z 213 │ const inserted = ownerKey ? readComposerDraftSelection(ownerKey, draftMessage) : null; 2026-10-23T07:00:22.8622247Z 214 │ if (inserted) { 2026-10-23T07:00:22.8622323Z 215 │ setSelection((current) => 2026-10-23T07:00:22.8622405Z ·  ──────┬───── 2026-10-23T07:00:22.8622615Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T07:00:22.8622798Z 216 │ current.start === inserted.start && current.end === inserted.end ? current : inserted, 2026-10-23T07:00:22.8622849Z ╰──── 2026-10-23T07:00:22.8623492Z  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-23T07:00:22.8623832Z  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-23T07:00:22.8623835Z 2026-10-23T07:00:22.8624129Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T07:00:22.8624312Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:296:7] 2026-10-23T07:00:22.8624389Z 284 │ }, [hasWorkspaceSnapshot]); 2026-10-23T07:00:22.8624457Z 285 │ useEffect(() => { 2026-10-23T07:00:22.8624529Z ·  ────┬──── 2026-10-23T07:00:22.8624777Z · ╰── This is the containing effect 2026-10-23T07:00:22.8624975Z 286 │ if (!environmentId || !projectCwd || !selectedProviderInstanceId) return; 2026-10-23T07:00:22.8625137Z 287 │ const key = `${environmentId}:${selectedProviderInstanceId}:${projectCwd}`; 2026-10-23T07:00:22.8625212Z 288 │ const now = Date.now(); 2026-10-23T07:00:22.8625328Z 289 │ const lastRequest = workspaceRefreshKeyRef.current; 2026-10-23T07:00:22.8625385Z 290 │ if ( 2026-10-23T07:00:22.8625464Z 291 │ lastRequest?.key === key && 2026-10-23T07:00:22.8625644Z 292 │ now - lastRequest.requestedAt < PROVIDER_WORKSPACE_SNAPSHOT_TTL_MS 2026-10-23T07:00:22.8625703Z 293 │ ) 2026-10-23T07:00:22.8625765Z 294 │ return; 2026-10-23T07:00:22.8626003Z 295 │ if (hasCurrentProviderWorkspaceSnapshot(selectedProviderStatus, projectCwd, now)) { 2026-10-23T07:00:22.8626098Z 296 │ setWorkspaceRefreshRetry(null); 2026-10-23T07:00:22.8626199Z ·  ────────────┬─────────── 2026-10-23T07:00:22.8626415Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T07:00:22.8626483Z 297 │ return; 2026-10-23T07:00:22.8626536Z ╰──── 2026-10-23T07:00:22.8627212Z  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-23T07:00:22.8627568Z  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-23T07:00:22.8627578Z 2026-10-23T07:00:22.8627804Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T07:00:22.8627990Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:326:5] 2026-10-23T07:00:22.8628057Z 325 │ }, [ 2026-10-23T07:00:22.8628138Z 326 │ draftMessage, 2026-10-23T07:00:22.8628215Z ·  ──────┬───── 2026-10-23T07:00:22.8628362Z · ╰── Unnecessary dependency `draftMessage` 2026-10-23T07:00:22.8628427Z 327 │ environmentId, 2026-10-23T07:00:22.8628477Z ╰──── 2026-10-23T07:00:22.8628832Z  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-23T07:00:22.8629220Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8629250Z 2026-10-23T07:00:22.8629796Z ⚠ 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-23T07:00:22.8629956Z ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1228:7] 2026-10-23T07:00:22.8630075Z 1227 │ yield* harness.replaceSession; 2026-10-23T07:00:22.8630333Z 1228 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-23T07:00:22.8630487Z 1229 │ │ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) { 2026-10-23T07:00:22.8630582Z 1230 │ │ break; 2026-10-23T07:00:22.8630667Z 1231 │ │ } 2026-10-23T07:00:22.8630819Z 1232 │ │ yield* Effect.yieldNow; 2026-10-23T07:00:22.8630970Z 1233 │ ╰─▶ } 2026-10-23T07:00:22.8631058Z 1234 │ yield* Queue.offer( 2026-10-23T07:00:22.8631113Z ╰──── 2026-10-23T07:00:22.8631116Z 2026-10-23T07:00:22.8631617Z ⚠ 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-23T07:00:22.8631788Z ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1337:7] 2026-10-23T07:00:22.8631880Z 1336 │ yield* harness.replaceSession; 2026-10-23T07:00:22.8632090Z 1337 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-23T07:00:22.8632296Z 1338 │ │ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) break; 2026-10-23T07:00:22.8632417Z 1339 │ │ yield* Effect.yieldNow; 2026-10-23T07:00:22.8632550Z 1340 │ ╰─▶ } 2026-10-23T07:00:22.8632681Z 1341 │ expect(yield* Ref.get(harness.subscriptionCount)).toBe(2); 2026-10-23T07:00:22.8632732Z ╰──── 2026-10-23T07:00:22.8632737Z 2026-10-23T07:00:22.8633125Z ⚠ 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-23T07:00:22.8633280Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:50:18] 2026-10-23T07:00:22.8633446Z 49 │ for (const tool of ["sendMessage", "followupTask", "interruptAgent", "listAgents"]) { 2026-10-23T07:00:22.8633652Z 50 │ assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true); 2026-10-23T07:00:22.8633742Z ·  ───────── 2026-10-23T07:00:22.8633934Z 51 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true); 2026-10-23T07:00:22.8633989Z ╰──── 2026-10-23T07:00:22.8633991Z 2026-10-23T07:00:22.8634365Z ⚠ 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-23T07:00:22.8634524Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:51:18] 2026-10-23T07:00:22.8634808Z 50 │ assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true); 2026-10-23T07:00:22.8635012Z 51 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true); 2026-10-23T07:00:22.8635138Z ·  ───────── 2026-10-23T07:00:22.8635192Z 52 │ } 2026-10-23T07:00:22.8635245Z ╰──── 2026-10-23T07:00:22.8635247Z 2026-10-23T07:00:22.8635589Z ⚠ 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-23T07:00:22.8635758Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:55:5] 2026-10-23T07:00:22.8635841Z 54 │ assert.equal( 2026-10-23T07:00:22.8636019Z 55 │ Schema.is(CodexSchema.ServerNotification__CollabAgentToolCallStatus)("interrupted"), 2026-10-23T07:00:22.8636097Z ·  ───────── 2026-10-23T07:00:22.8636163Z 56 │ true, 2026-10-23T07:00:22.8636221Z ╰──── 2026-10-23T07:00:22.8636223Z 2026-10-23T07:00:22.8636587Z ⚠ 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-23T07:00:22.8636743Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:59:5] 2026-10-23T07:00:22.8636806Z 58 │ assert.equal( 2026-10-23T07:00:22.8636989Z 59 │ Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentToolCallStatus)("interrupted"), 2026-10-23T07:00:22.8637059Z ·  ───────── 2026-10-23T07:00:22.8637119Z 60 │ true, 2026-10-23T07:00:22.8637198Z ╰──── 2026-10-23T07:00:22.8637202Z 2026-10-23T07:00:22.8637560Z ⚠ 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-23T07:00:22.8637711Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:103:16] 2026-10-23T07:00:22.8637768Z 102 │ 2026-10-23T07:00:22.8637936Z 103 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse)(resumeResponse), true); 2026-10-23T07:00:22.8638021Z ·  ───────── 2026-10-23T07:00:22.8638075Z 104 │ }); 2026-10-23T07:00:22.8638158Z ╰──── 2026-10-23T07:00:22.8638162Z 2026-10-23T07:00:22.8638650Z ⚠ 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-23T07:00:22.8638799Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:169:7] 2026-10-23T07:00:22.8638896Z 168 │ }); 2026-10-23T07:00:22.8639116Z 169 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-23T07:00:22.8639309Z 170 │ │ if ((yield* SubscriptionRef.get(shellState)).status === "synchronizing") break; 2026-10-23T07:00:22.8639416Z 171 │ │ yield* Effect.yieldNow; 2026-10-23T07:00:22.8639573Z 172 │ ╰─▶ } 2026-10-23T07:00:22.8639642Z 173 │ 2026-10-23T07:00:22.8639694Z ╰──── 2026-10-23T07:00:22.8639696Z 2026-10-23T07:00:22.8640162Z ⚠ 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-23T07:00:22.8640403Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:178:7] 2026-10-23T07:00:22.8640552Z 177 │ yield* Deferred.succeed(releaseSave, undefined); 2026-10-23T07:00:22.8640747Z 178 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-23T07:00:22.8640881Z 179 │ │ if ((yield* Ref.get(saved)).length > 0) break; 2026-10-23T07:00:22.8640985Z 180 │ │ yield* Effect.yieldNow; 2026-10-23T07:00:22.8641157Z 181 │ ╰─▶ } 2026-10-23T07:00:22.8641218Z 182 │ 2026-10-23T07:00:22.8641280Z ╰──── 2026-10-23T07:00:22.8641283Z 2026-10-23T07:00:22.8641769Z ⚠ 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-23T07:00:22.8641936Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:307:7] 2026-10-23T07:00:22.8642073Z 306 │ yield* Deferred.succeed(releaseUnenrichedSave, undefined); 2026-10-23T07:00:22.8642264Z 307 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-23T07:00:22.8642388Z 308 │ │ const values = yield* Ref.get(saved); 2026-10-23T07:00:22.8642624Z 309 │ │ if (values.length > 0 && values.at(-1)?.projects[0]?.repositoryIdentity != null) { 2026-10-23T07:00:22.8642715Z 310 │ │ break; 2026-10-23T07:00:22.8642806Z 311 │ │ } 2026-10-23T07:00:22.8642917Z 312 │ │ yield* Effect.yieldNow; 2026-10-23T07:00:22.8643051Z 313 │ ╰─▶ } 2026-10-23T07:00:22.8643105Z 314 │ 2026-10-23T07:00:22.8643183Z ╰──── 2026-10-23T07:00:22.8643188Z 2026-10-23T07:00:22.8643420Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-23T07:00:22.8643554Z ╭─[packages/client-runtime/src/state/usageAccess.ts:3:8] 2026-10-23T07:00:22.8643628Z 2 │ AuthDiagnosticsReadScope, 2026-10-23T07:00:22.8643754Z 3 │ type AuthSessionState, 2026-10-23T07:00:22.8643858Z ·  ────────┬─────── 2026-10-23T07:00:22.8644038Z · ╰── 'AuthSessionState' is imported here 2026-10-23T07:00:22.8644112Z 4 │ sessionGrantsScope, 2026-10-23T07:00:22.8644181Z ╰──── 2026-10-23T07:00:22.8644283Z  help: Consider removing this import. 2026-10-23T07:00:22.8644286Z 2026-10-23T07:00:22.8644556Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T07:00:22.8644754Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:444:5] 2026-10-23T07:00:22.8644818Z 434 │ : null; 2026-10-23T07:00:22.8644884Z 435 │ useEffect(() => { 2026-10-23T07:00:22.8645001Z ·  ────┬──── 2026-10-23T07:00:22.8645132Z · ╰── This is the containing effect 2026-10-23T07:00:22.8645203Z 436 │ if ( 2026-10-23T07:00:22.8645282Z 437 │ props.active === false || 2026-10-23T07:00:22.8645360Z 438 │ activeDraftKey !== null || 2026-10-23T07:00:22.8645523Z 439 │ editingPendingTask !== null || 2026-10-23T07:00:22.8645658Z 440 │ selectedProject === null 2026-10-23T07:00:22.8645723Z 441 │ ) { 2026-10-23T07:00:22.8645798Z 442 │ return; 2026-10-23T07:00:22.8645852Z 443 │ } 2026-10-23T07:00:22.8645931Z 444 │ setActiveDraftKey( 2026-10-23T07:00:22.8646015Z ·  ────────┬──────── 2026-10-23T07:00:22.8646187Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T07:00:22.8646257Z 445 │ createNewTaskDraft({ 2026-10-23T07:00:22.8646311Z ╰──── 2026-10-23T07:00:22.8646963Z  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-23T07:00:22.8647340Z  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-23T07:00:22.8647344Z 2026-10-23T07:00:22.8647590Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-23T07:00:22.8647753Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:1244:36] 2026-10-23T07:00:22.8647889Z 1243 │ 2026-10-23T07:00:22.8648108Z 1244 │ {props.children} 2026-10-23T07:00:22.8648222Z ·  ───────────── 2026-10-23T07:00:22.8648295Z 1245 │ 2026-10-23T07:00:22.8648355Z ╰──── 2026-10-23T07:00:22.8648621Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-23T07:00:22.8648763Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-23T07:00:22.8648766Z 2026-10-23T07:00:22.8648947Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T07:00:22.8649080Z ╭─[apps/web/src/components/CommandPalette.tsx:1996:20] 2026-10-23T07:00:22.8649199Z 1995 │ title: inferProjectTitleFromPath(destinationPath), 2026-10-23T07:00:22.8649322Z 1996 │ createdAt: new Date().toISOString(), 2026-10-23T07:00:22.8649426Z ·  ─────┬──── 2026-10-23T07:00:22.8649586Z · ╰── Cannot call impure function 2026-10-23T07:00:22.8649695Z 1997 │ remoteUrl: addProjectCloneFlow.remoteUrl, 2026-10-23T07:00:22.8649749Z ╰──── 2026-10-23T07:00:22.8650093Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-23T07:00:22.8650406Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T07:00:22.8650409Z 2026-10-23T07:00:22.8650615Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-23T07:00:22.8650772Z ╭─[packages/client-runtime/src/state/shell.ts:189:5] 2026-10-23T07:00:22.8650898Z 186 │ let waiting = yield* Ref.get(awaitingCompletion); 2026-10-23T07:00:22.8650974Z 187 │ let next = initial; 2026-10-23T07:00:22.8651107Z ·  ──┬─ 2026-10-23T07:00:22.8651269Z · ╰── From this accumulator 2026-10-23T07:00:22.8651362Z 188 │ let receivedSnapshot = false; 2026-10-23T07:00:22.8651462Z 189 │ for (const item of items) { 2026-10-23T07:00:22.8651550Z ·  ─┬─ 2026-10-23T07:00:22.8651658Z · ╰── For this loop 2026-10-23T07:00:22.8651757Z 190 │ if (item.kind === "synchronized") { 2026-10-23T07:00:22.8651824Z 191 │ waiting = false; 2026-10-23T07:00:22.8651919Z 192 │ if (Option.isSome(next.snapshot)) { 2026-10-23T07:00:22.8652055Z 193 │ next = { ...next, status: "live", error: Option.none() }; 2026-10-23T07:00:22.8652169Z ·  ───┬─── 2026-10-23T07:00:22.8652320Z · ╰── From this spread 2026-10-23T07:00:22.8652383Z 194 │ } 2026-10-23T07:00:22.8652449Z ╰──── 2026-10-23T07:00:22.8652601Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-23T07:00:22.8652756Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-23T07:00:22.8652759Z 2026-10-23T07:00:22.8653040Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-23T07:00:22.8653213Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:290:50] 2026-10-23T07:00:22.8653275Z 289 │ return ( 2026-10-23T07:00:22.8653407Z 290 │ 2026-10-23T07:00:22.8653529Z ·  ───────────── 2026-10-23T07:00:22.8653605Z 291 │ {props.children} 2026-10-23T07:00:22.8653690Z ╰──── 2026-10-23T07:00:22.8653932Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-23T07:00:22.8654073Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-23T07:00:22.8654076Z 2026-10-23T07:00:22.8654313Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-23T07:00:22.8654509Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:654:44] 2026-10-23T07:00:22.8654585Z 653 │ return ( 2026-10-23T07:00:22.8654752Z 654 │ 2026-10-23T07:00:22.8654868Z ·  ───────────── 2026-10-23T07:00:22.8654997Z 655 │ {props.children} 2026-10-23T07:00:22.8655074Z ╰──── 2026-10-23T07:00:22.8655334Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-23T07:00:22.8655481Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-23T07:00:22.8655483Z 2026-10-23T07:00:22.8655721Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-23T07:00:22.8655908Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:1462:55] 2026-10-23T07:00:22.8655984Z 1461 │ return ( 2026-10-23T07:00:22.8656157Z 1462 │ 2026-10-23T07:00:22.8656295Z ·  ──────────────────── 2026-10-23T07:00:22.8656395Z 1463 │ void) { 2026-10-23T07:00:22.8657548Z 12 │ this.onmessage = listener; 2026-10-23T07:00:22.8657633Z ·  ───────── 2026-10-23T07:00:22.8657692Z 13 │ } 2026-10-23T07:00:22.8657744Z ╰──── 2026-10-23T07:00:22.8658103Z  help: `addEventListener()` can register multiple handlers and accepts options such as `{ once: true }`; assigning to `on` replaces any previously registered handler. 2026-10-23T07:00:22.8658107Z 2026-10-23T07:00:22.8658332Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable. 2026-10-23T07:00:22.8658477Z ╭─[apps/web/src/components/device/deviceHubApi.test.ts:16:9] 2026-10-23T07:00:22.8658542Z 15 │ constructor() { 2026-10-23T07:00:22.8658610Z 16 │ source = this; 2026-10-23T07:00:22.8658684Z ·  ────── 2026-10-23T07:00:22.8658763Z 17 │ } 2026-10-23T07:00:22.8658834Z ╰──── 2026-10-23T07:00:22.8659125Z  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-23T07:00:22.8659131Z 2026-10-23T07:00:22.8659334Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-23T07:00:22.8659490Z ╭─[packages/client-runtime/src/state/filesystem.ts:3:8] 2026-10-23T07:00:22.8659578Z 2 │ AuthFilesystemReadScope, 2026-10-23T07:00:22.8659648Z 3 │ type AuthSessionState, 2026-10-23T07:00:22.8659745Z ·  ────────┬─────── 2026-10-23T07:00:22.8659894Z · ╰── 'AuthSessionState' is imported here 2026-10-23T07:00:22.8659968Z 4 │ type FilesystemBrowseEntry, 2026-10-23T07:00:22.8660021Z ╰──── 2026-10-23T07:00:22.8660121Z  help: Consider removing this import. 2026-10-23T07:00:22.8660124Z 2026-10-23T07:00:22.8660408Z ⚠ eslint(no-unused-vars): Identifier 'Arr' is imported but never used. 2026-10-23T07:00:22.8660582Z ╭─[packages/client-runtime/src/state/threadSort.ts:4:13] 2026-10-23T07:00:22.8660701Z 3 │ import type { EnvironmentThreadShell } from "./models.ts"; 2026-10-23T07:00:22.8660784Z 4 │ import * as Arr from "effect/Array"; 2026-10-23T07:00:22.8660858Z ·  ─┬─ 2026-10-23T07:00:22.8661009Z · ╰── 'Arr' is imported here 2026-10-23T07:00:22.8661110Z 5 │ import * as Order from "effect/Order"; 2026-10-23T07:00:22.8661163Z ╰──── 2026-10-23T07:00:22.8661272Z  help: Consider removing this import. 2026-10-23T07:00:22.8661274Z 2026-10-23T07:00:22.8661465Z ⚠ eslint(no-unused-vars): Identifier 'Order' is imported but never used. 2026-10-23T07:00:22.8661602Z ╭─[packages/client-runtime/src/state/threadSort.ts:5:13] 2026-10-23T07:00:22.8661688Z 4 │ import * as Arr from "effect/Array"; 2026-10-23T07:00:22.8661771Z 5 │ import * as Order from "effect/Order"; 2026-10-23T07:00:22.8661844Z ·  ──┬── 2026-10-23T07:00:22.8661976Z · ╰── 'Order' is imported here 2026-10-23T07:00:22.8662045Z 6 │ 2026-10-23T07:00:22.8662121Z ╰──── 2026-10-23T07:00:22.8662231Z  help: Consider removing this import. 2026-10-23T07:00:22.8662234Z 2026-10-23T07:00:22.8662401Z ⚠ react(immutability): This value cannot be modified 2026-10-23T07:00:22.8662565Z ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:42:5] 2026-10-23T07:00:22.8662621Z 35 │ 2026-10-23T07:00:22.8662762Z 36 │ const inspectorProgress = useSharedValue(inspectorVisible ? 1 : 0); 2026-10-23T07:00:22.8662897Z ·  ────────┬──────── 2026-10-23T07:00:22.8663058Z · ╰── `inspectorProgress` originates here 2026-10-23T07:00:22.8663153Z 37 │ const { renderedInspectorWidth } = props; 2026-10-23T07:00:22.8663286Z 38 │ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0); 2026-10-23T07:00:22.8663340Z 39 │ 2026-10-23T07:00:22.8663421Z 40 │ const onClosed = props.onClosed; 2026-10-23T07:00:22.8663512Z 41 │ useEffect(() => { 2026-10-23T07:00:22.8663618Z 42 │ inspectorProgress.value = withTiming( 2026-10-23T07:00:22.8663701Z ·  ────────┬──────── 2026-10-23T07:00:22.8663860Z · ╰── `inspectorProgress` cannot be modified 2026-10-23T07:00:22.8663947Z 43 │ inspectorVisible ? 1 : 0, 2026-10-23T07:00:22.8664002Z ╰──── 2026-10-23T07:00:22.8664309Z  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-23T07:00:22.8664643Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T07:00:22.8664646Z 2026-10-23T07:00:22.8664834Z ⚠ react(immutability): This value cannot be modified 2026-10-23T07:00:22.8665018Z ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:67:7] 2026-10-23T07:00:22.8665130Z 37 │ const { renderedInspectorWidth } = props; 2026-10-23T07:00:22.8665274Z 38 │ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0); 2026-10-23T07:00:22.8665367Z ·  ──────────┬───────── 2026-10-23T07:00:22.8665588Z · ╰── `renderedContentWidth` originates here 2026-10-23T07:00:22.8665676Z 39 │ 2026-10-23T07:00:22.8665785Z 40 │ const onClosed = props.onClosed; 2026-10-23T07:00:22.8665867Z 41 │ useEffect(() => { 2026-10-23T07:00:22.8665957Z 42 │ inspectorProgress.value = withTiming( 2026-10-23T07:00:22.8666047Z 43 │ inspectorVisible ? 1 : 0, 2026-10-23T07:00:22.8666120Z 44 │ WORKSPACE_PANE_TIMING, 2026-10-23T07:00:22.8666189Z 45 │ (finished) => { 2026-10-23T07:00:22.8666327Z 46 │ if (finished === true && !inspectorVisible && onClosed !== undefined) { 2026-10-23T07:00:22.8666402Z 47 │ runOnJS(onClosed)(); 2026-10-23T07:00:22.8666483Z 48 │ } 2026-10-23T07:00:22.8666547Z 49 │ }, 2026-10-23T07:00:22.8666610Z 50 │ ); 2026-10-23T07:00:22.8666761Z 51 │ const targetWidth = inspectorVisible ? (inspectorWidth ?? 0) : 0; 2026-10-23T07:00:22.8666844Z 52 │ renderedInspectorWidth.set( 2026-10-23T07:00:22.8666990Z 53 │ resizing ? targetWidth : withTiming(targetWidth, WORKSPACE_PANE_TIMING), 2026-10-23T07:00:22.8667044Z 54 │ ); 2026-10-23T07:00:22.8667101Z 55 │ }, [ 2026-10-23T07:00:22.8667171Z 56 │ inspectorProgress, 2026-10-23T07:00:22.8667263Z 57 │ inspectorVisible, 2026-10-23T07:00:22.8667347Z 58 │ inspectorWidth, 2026-10-23T07:00:22.8667410Z 59 │ onClosed, 2026-10-23T07:00:22.8667495Z 60 │ renderedInspectorWidth, 2026-10-23T07:00:22.8667554Z 61 │ resizing, 2026-10-23T07:00:22.8667610Z 62 │ ]); 2026-10-23T07:00:22.8667662Z 63 │ 2026-10-23T07:00:22.8667727Z 64 │ useEffect(() => { 2026-10-23T07:00:22.8667818Z 65 │ const targetWidth = inspectorWidth ?? 0; 2026-10-23T07:00:22.8667912Z 66 │ if (!inspectorVisible || resizing) { 2026-10-23T07:00:22.8668056Z 67 │ renderedContentWidth.value = targetWidth; 2026-10-23T07:00:22.8668148Z ·  ──────────┬───────── 2026-10-23T07:00:22.8668319Z · ╰── `renderedContentWidth` cannot be modified 2026-10-23T07:00:22.8668380Z 68 │ return; 2026-10-23T07:00:22.8668433Z ╰──── 2026-10-23T07:00:22.8668724Z  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-23T07:00:22.8669054Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T07:00:22.8669057Z 2026-10-23T07:00:22.8669321Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T07:00:22.8669520Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:400:5] 2026-10-23T07:00:22.8669577Z 398 │ 2026-10-23T07:00:22.8669652Z 399 │ useEffect(() => { 2026-10-23T07:00:22.8669727Z ·  ────┬──── 2026-10-23T07:00:22.8669860Z · ╰── This is the containing effect 2026-10-23T07:00:22.8669953Z 400 │ setInspectorSelection((current) => { 2026-10-23T07:00:22.8670038Z ·  ──────────┬────────── 2026-10-23T07:00:22.8670253Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T07:00:22.8670367Z 401 │ if (props.renderInspector === undefined) { 2026-10-23T07:00:22.8670421Z ╰──── 2026-10-23T07:00:22.8671129Z  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-23T07:00:22.8671493Z  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-23T07:00:22.8671496Z 2026-10-23T07:00:22.8671752Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-23T07:00:22.8671922Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:528:24] 2026-10-23T07:00:22.8672083Z 527 │ const inspectorHeaderInset = Platform.OS === "ios" ? 0 : safeAreaInsets.top; 2026-10-23T07:00:22.8672257Z 528 │ ╭─▶ const GitInspector = () => ( 2026-10-23T07:00:22.8672384Z 529 │ │ 2026-10-23T07:00:22.8673034Z 534 │ ╰─▶ ); 2026-10-23T07:00:22.8673116Z 535 │ const FilesInspector = () => 2026-10-23T07:00:22.8673192Z ╰──── 2026-10-23T07:00:22.8673430Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-23T07:00:22.8673439Z 2026-10-23T07:00:22.8673673Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-23T07:00:22.8673828Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:535:26] 2026-10-23T07:00:22.8673888Z 534 │ ); 2026-10-23T07:00:22.8674079Z 535 │ ╭─▶ const FilesInspector = () => 2026-10-23T07:00:22.8674249Z 536 │ │ selectedThread !== null && selectedThreadCwd !== null ? ( 2026-10-23T07:00:22.8674370Z 537 │ │ 2026-10-23T07:00:22.8675448Z 545 │ ╰─▶ ) : null; 2026-10-23T07:00:22.8675599Z 546 │ const RouteInspector = () => props.renderInspector?.(inspectorHeaderInset); 2026-10-23T07:00:22.8675651Z ╰──── 2026-10-23T07:00:22.8675911Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-23T07:00:22.8675915Z 2026-10-23T07:00:22.8676253Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T07:00:22.8676484Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:643:5] 2026-10-23T07:00:22.8676556Z 638 │ 2026-10-23T07:00:22.8676622Z 639 │ useEffect(() => { 2026-10-23T07:00:22.8676709Z ·  ────┬──── 2026-10-23T07:00:22.8676841Z · ╰── This is the containing effect 2026-10-23T07:00:22.8676951Z 640 │ if (pendingLaunchEntry.key === launchTargetKey) { 2026-10-23T07:00:22.8677015Z 641 │ return; 2026-10-23T07:00:22.8677073Z 642 │ } 2026-10-23T07:00:22.8677174Z 643 │ setPendingLaunchEntry({ 2026-10-23T07:00:22.8677279Z ·  ──────────┬────────── 2026-10-23T07:00:22.8677470Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T07:00:22.8677546Z 644 │ key: launchTargetKey, 2026-10-23T07:00:22.8677599Z ╰──── 2026-10-23T07:00:22.8678241Z  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-23T07:00:22.8678568Z  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-23T07:00:22.8678571Z 2026-10-23T07:00:22.8678884Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T07:00:22.8679059Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:653:5] 2026-10-23T07:00:22.8679116Z 648 │ 2026-10-23T07:00:22.8679181Z 649 │ useEffect(() => { 2026-10-23T07:00:22.8679256Z ·  ────┬──── 2026-10-23T07:00:22.8679428Z · ╰── This is the containing effect 2026-10-23T07:00:22.8679546Z 650 │ if (initialAttachGridEntry.key === launchTargetKey) { 2026-10-23T07:00:22.8679619Z 651 │ return; 2026-10-23T07:00:22.8679677Z 652 │ } 2026-10-23T07:00:22.8679759Z 653 │ setInitialAttachGridEntry({ 2026-10-23T07:00:22.8679855Z ·  ────────────┬──────────── 2026-10-23T07:00:22.8680025Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T07:00:22.8680140Z 654 │ key: launchTargetKey, 2026-10-23T07:00:22.8680194Z ╰──── 2026-10-23T07:00:22.8680887Z  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-23T07:00:22.8681256Z  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-23T07:00:22.8681259Z 2026-10-23T07:00:22.8681536Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T07:00:22.8681725Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:746:7] 2026-10-23T07:00:22.8681782Z 743 │ 2026-10-23T07:00:22.8681862Z 744 │ useEffect(() => { 2026-10-23T07:00:22.8681934Z ·  ────┬──── 2026-10-23T07:00:22.8682065Z · ╰── This is the containing effect 2026-10-23T07:00:22.8682170Z 745 │ if (!routeEnvironmentId || !routeThreadId) { 2026-10-23T07:00:22.8682241Z 746 │ setLastGridSize({ 2026-10-23T07:00:22.8682350Z ·  ───────┬─────── 2026-10-23T07:00:22.8682535Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T07:00:22.8682629Z 747 │ cols: DEFAULT_TERMINAL_COLS, 2026-10-23T07:00:22.8682683Z ╰──── 2026-10-23T07:00:22.8683324Z  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-23T07:00:22.8683661Z  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-23T07:00:22.8683664Z 2026-10-23T07:00:22.8683951Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T07:00:22.8684138Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:538:24] 2026-10-23T07:00:22.8684195Z 537 │ }); 2026-10-23T07:00:22.8684320Z 538 │ }, [terminal.buffer, terminal.buffer.length, terminalKey]); 2026-10-23T07:00:22.8684433Z ·  ───────────┬────────── 2026-10-23T07:00:22.8684754Z · ╰── Overly precise dependency `terminal.buffer.length`, use `terminal.buffer` instead 2026-10-23T07:00:22.8684935Z 539 │ const cwd = terminal.summary?.cwd ?? selectedThreadProject?.workspaceRoot ?? null; 2026-10-23T07:00:22.8684986Z ╰──── 2026-10-23T07:00:22.8685306Z  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-23T07:00:22.8685645Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8685648Z 2026-10-23T07:00:22.8685849Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T07:00:22.8686016Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:709:7] 2026-10-23T07:00:22.8686189Z 708 │ sentInitialInputKeyRef.current = null; 2026-10-23T07:00:22.8686335Z 709 │ }, [terminalKey]); 2026-10-23T07:00:22.8686426Z ·  ─────┬───── 2026-10-23T07:00:22.8686584Z · ╰── Unnecessary dependency `terminalKey` 2026-10-23T07:00:22.8686636Z 710 │ 2026-10-23T07:00:22.8686692Z ╰──── 2026-10-23T07:00:22.8687007Z  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-23T07:00:22.8687342Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8687345Z 2026-10-23T07:00:22.8687542Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T07:00:22.8687717Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:800:52] 2026-10-23T07:00:22.8687810Z 799 │ }; 2026-10-23T07:00:22.8688012Z 800 │ }, [canOperateTerminal, isRunning, pasteSession, terminal.lifecycleVersion, terminalKey]); 2026-10-23T07:00:22.8688192Z ·  ────────────┬──────────── ─────┬───── 2026-10-23T07:00:22.8688423Z · │ ╰── Unnecessary dependency `terminalKey` 2026-10-23T07:00:22.8688677Z · ╰── Unnecessary dependency `terminal.lifecycleVersion` 2026-10-23T07:00:22.8688743Z 801 │ 2026-10-23T07:00:22.8688795Z ╰──── 2026-10-23T07:00:22.8689090Z  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-23T07:00:22.8689448Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8689452Z 2026-10-23T07:00:22.8689601Z ⚠ react(refs): Cannot access refs during render 2026-10-23T07:00:22.8689772Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:793:24] 2026-10-23T07:00:22.8689827Z 792 │ } 2026-10-23T07:00:22.8689964Z 793 │ const pasteSession = pasteSessionRef.current; 2026-10-23T07:00:22.8690092Z ·  ───────────┬─────────── 2026-10-23T07:00:22.8690272Z · ╰── Cannot access ref value during render 2026-10-23T07:00:22.8690325Z 794 │ 2026-10-23T07:00:22.8690380Z ╰──── 2026-10-23T07:00:22.8690895Z  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-23T07:00:22.8691190Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T07:00:22.8691193Z 2026-10-23T07:00:22.8691489Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T07:00:22.8691744Z ╭─[apps/mobile/src/features/threads/thread-inspector-content-stack.tsx:60:5] 2026-10-23T07:00:22.8691828Z 58 │ 2026-10-23T07:00:22.8691896Z 59 │ useEffect(() => { 2026-10-23T07:00:22.8691971Z ·  ────┬──── 2026-10-23T07:00:22.8692129Z · ╰── This is the containing effect 2026-10-23T07:00:22.8692228Z 60 │ setMountedModes((current) => { 2026-10-23T07:00:22.8692319Z ·  ───────┬─────── 2026-10-23T07:00:22.8692490Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T07:00:22.8692572Z 61 │ if (current.has(props.mode)) { 2026-10-23T07:00:22.8692625Z ╰──── 2026-10-23T07:00:22.8693270Z  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-23T07:00:22.8693622Z  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-23T07:00:22.8693626Z 2026-10-23T07:00:22.8693911Z ⚠ eslint(no-unused-vars): Function 'promptResponseHasMissingXAiStopReason' is declared but never used. 2026-10-23T07:00:22.8694063Z ╭─[packages/provider-grok/src/server/xaiAcpExtension.ts:1620:10] 2026-10-23T07:00:22.8694120Z 1619 │ 2026-10-23T07:00:22.8694363Z 1620 │ function promptResponseHasMissingXAiStopReason(response: EffectAcpSchema.PromptResponse): boolean { 2026-10-23T07:00:22.8694500Z ·  ──────────────────┬────────────────── 2026-10-23T07:00:22.8694748Z · ╰── 'promptResponseHasMissingXAiStopReason' is declared here 2026-10-23T07:00:22.8694834Z 1621 │ const meta = response._meta; 2026-10-23T07:00:22.8694888Z ╰──── 2026-10-23T07:00:22.8694999Z  help: Consider removing this declaration. 2026-10-23T07:00:22.8695001Z 2026-10-23T07:00:22.8695308Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T07:00:22.8695483Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:335:7] 2026-10-23T07:00:22.8695540Z 330 │ }; 2026-10-23T07:00:22.8695608Z 331 │ useEffect(() => { 2026-10-23T07:00:22.8695678Z ·  ────┬──── 2026-10-23T07:00:22.8695848Z · ╰── This is the containing effect 2026-10-23T07:00:22.8695959Z 332 │ if (!guidesEnabled && section === "guide") { 2026-10-23T07:00:22.8696069Z 333 │ requestedSection.current = "overview"; 2026-10-23T07:00:22.8696236Z 334 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-23T07:00:22.8696312Z 335 │ setSection("overview"); 2026-10-23T07:00:22.8696392Z ·  ─────┬──── 2026-10-23T07:00:22.8696601Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T07:00:22.8696660Z 336 │ } 2026-10-23T07:00:22.8696715Z ╰──── 2026-10-23T07:00:22.8697363Z  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-23T07:00:22.8697761Z  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-23T07:00:22.8697797Z 2026-10-23T07:00:22.8698033Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-23T07:00:22.8698229Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:337:6] 2026-10-23T07:00:22.8698332Z 332 │ if (!guidesEnabled && section === "guide") { 2026-10-23T07:00:22.8698430Z 333 │ requestedSection.current = "overview"; 2026-10-23T07:00:22.8698516Z ·  ────────┬─────── 2026-10-23T07:00:22.8699011Z · ╰── 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-23T07:00:22.8699184Z 334 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-23T07:00:22.8699336Z ·  ─────────┬───────── ──────┬────── 2026-10-23T07:00:22.8699885Z · │ ╰── 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-23T07:00:22.8700379Z · ╰── 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-23T07:00:22.8700477Z 335 │ setSection("overview"); 2026-10-23T07:00:22.8700535Z 336 │ } 2026-10-23T07:00:22.8700628Z 337 │ }, [guidesEnabled, section, insets.top]); 2026-10-23T07:00:22.8700743Z ·  ──────────────────┬───────────────── 2026-10-23T07:00:22.8700977Z · ╰── This dependency list is missing values used by the callback 2026-10-23T07:00:22.8701067Z 338 │ const tabContent = activityContent; 2026-10-23T07:00:22.8701132Z ╰──── 2026-10-23T07:00:22.8701303Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-23T07:00:22.8701644Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8701649Z 2026-10-23T07:00:22.8701882Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-23T07:00:22.8702063Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:873:6] 2026-10-23T07:00:22.8702125Z 856 │ if ( 2026-10-23T07:00:22.8702245Z 857 │ lastSelection.current.path === route.params.path && 2026-10-23T07:00:22.8702351Z ·  ──────┬────── 2026-10-23T07:00:22.8702817Z · ╰── 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-23T07:00:22.8702953Z 858 │ lastSelection.current.id === route.params.fileSelectionId 2026-10-23T07:00:22.8703014Z 859 │ ) 2026-10-23T07:00:22.8703105Z 860 │ return; 2026-10-23T07:00:22.8703366Z 861 │ lastSelection.current = { path: route.params.path, id: route.params.fileSelectionId }; 2026-10-23T07:00:22.8703540Z 862 │ if (route.params.focus) navigation.setParams({ focus: undefined }); 2026-10-23T07:00:22.8703631Z 863 │ setJumpPath(route.params.path); 2026-10-23T07:00:22.8703705Z 864 │ setSelectedRowId(null); 2026-10-23T07:00:22.8703814Z 865 │ jumpStarted.current = false; 2026-10-23T07:00:22.8703987Z 866 │ const file = data.files.find((entry) => entry.path === route.params.path); 2026-10-23T07:00:22.8704096Z 867 │ if (!file || !nativeView.current) return; 2026-10-23T07:00:22.8704187Z ·  ─────┬──── 2026-10-23T07:00:22.8704709Z · ╰── 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-23T07:00:22.8704862Z 868 │ setCollapsedIds((ids) => ids.filter((id) => id !== file.id)); 2026-10-23T07:00:22.8704945Z 869 │ jumpStarted.current = true; 2026-10-23T07:00:22.8705086Z 870 │ void nativeView.current.scrollToFile(file.id, false).catch(() => { 2026-10-23T07:00:22.8705168Z 871 │ jumpStarted.current = false; 2026-10-23T07:00:22.8705229Z 872 │ }); 2026-10-23T07:00:22.8705467Z 873 │ }, [route.params.path, route.params.fileSelectionId, route.params.focus, data.files, navigation]); 2026-10-23T07:00:22.8705686Z ·  ──────────────────────────────────────────────┬────────────────────────────────────────────── 2026-10-23T07:00:22.8705906Z · ╰── This dependency list is missing values used by the callback 2026-10-23T07:00:22.8706069Z 874 │ const appliedFilter = useRef(filter.hideTestFiles); 2026-10-23T07:00:22.8706136Z ╰──── 2026-10-23T07:00:22.8706318Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-23T07:00:22.8706630Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8706633Z 2026-10-23T07:00:22.8706947Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-23T07:00:22.8707086Z ╭─[packages/provider-grok/src/server/adapter.ts:408:7] 2026-10-23T07:00:22.8707146Z 407 │ 2026-10-23T07:00:22.8707217Z 408 │ const layer: Layer.Layer< 2026-10-23T07:00:22.8707293Z ·  ──┬── 2026-10-23T07:00:22.8707504Z · ╰── 'layer' is declared here 2026-10-23T07:00:22.8707655Z 409 │ ProviderAdapter.ProviderAdapterV2, 2026-10-23T07:00:22.8707708Z ╰──── 2026-10-23T07:00:22.8707827Z  help: Consider removing this declaration. 2026-10-23T07:00:22.8707830Z 2026-10-23T07:00:22.8708090Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T07:00:22.8708296Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:285:5] 2026-10-23T07:00:22.8708422Z 283 │ const [snoozeWakeTick, bumpSnoozeWakeTick] = useState(0); 2026-10-23T07:00:22.8708497Z 284 │ useEffect(() => { 2026-10-23T07:00:22.8708573Z ·  ────┬──── 2026-10-23T07:00:22.8708706Z · ╰── This is the containing effect 2026-10-23T07:00:22.8708802Z 285 │ setNow(new Date().toISOString()); 2026-10-23T07:00:22.8708876Z ·  ───┬── 2026-10-23T07:00:22.8709116Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T07:00:22.8709303Z 286 │ const id = setInterval(() => setNow(new Date().toISOString()), 60_000); 2026-10-23T07:00:22.8709388Z ╰──── 2026-10-23T07:00:22.8710040Z  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-23T07:00:22.8710639Z  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-23T07:00:22.8710643Z 2026-10-23T07:00:22.8710908Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T07:00:22.8711107Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:365:25] 2026-10-23T07:00:22.8711253Z 364 │ // range) the boundary string is identical and the chain would die. 2026-10-23T07:00:22.8711438Z 365 │ }, [nextSnoozeWakeAt, snoozeWakeTick]); 2026-10-23T07:00:22.8711600Z ·  ───────┬────── 2026-10-23T07:00:22.8711796Z · ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-23T07:00:22.8711922Z 366 │ const listItems = ((): readonly SidebarListItem[] => { 2026-10-23T07:00:22.8712021Z ╰──── 2026-10-23T07:00:22.8712409Z  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-23T07:00:22.8712789Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8712793Z 2026-10-23T07:00:22.8713020Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T07:00:22.8713197Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:356:53] 2026-10-23T07:00:22.8713324Z 355 │ if (Number.isNaN(wakeAtMs)) return; 2026-10-23T07:00:22.8713563Z 356 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647); 2026-10-23T07:00:22.8713728Z ·  ─────┬──── 2026-10-23T07:00:22.8713973Z · ╰── Cannot call impure function 2026-10-23T07:00:22.8714244Z 357 │ const id = setTimeout(() => { 2026-10-23T07:00:22.8714363Z ╰──── 2026-10-23T07:00:22.8714722Z  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-23T07:00:22.8715084Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T07:00:22.8715089Z 2026-10-23T07:00:22.8715273Z ⚠ react(refs): Cannot access refs during render 2026-10-23T07:00:22.8715483Z ╭─[apps/mobile/src/features/voice-input/useVoiceInputController.ts:27:14] 2026-10-23T07:00:22.8715605Z 26 │ const latestInput = useRef(input); 2026-10-23T07:00:22.8715723Z 27 │ latestInput.current = input; 2026-10-23T07:00:22.8715894Z ·  ─────┬─────────┬─── 2026-10-23T07:00:22.8716112Z · │ ╰── Cannot update ref value during render 2026-10-23T07:00:22.8716276Z · ╰── This value is a ref 2026-10-23T07:00:22.8716383Z 28 │ const mounted = useRef(true); 2026-10-23T07:00:22.8716454Z ╰──── 2026-10-23T07:00:22.8717011Z  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-23T07:00:22.8717379Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T07:00:22.8717389Z 2026-10-23T07:00:22.8717702Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T07:00:22.8718016Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:57:5] 2026-10-23T07:00:22.8718092Z 55 │ 2026-10-23T07:00:22.8718191Z 56 │ useEffect(() => { 2026-10-23T07:00:22.8718316Z ·  ────┬──── 2026-10-23T07:00:22.8718482Z · ╰── This is the containing effect 2026-10-23T07:00:22.8718565Z 57 │ setDecodedSize(null); 2026-10-23T07:00:22.8718703Z ·  ───────┬────── 2026-10-23T07:00:22.8718938Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T07:00:22.8719051Z 58 │ }, [props.sourceKey]); 2026-10-23T07:00:22.8719114Z ╰──── 2026-10-23T07:00:22.8719802Z  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-23T07:00:22.8720179Z  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-23T07:00:22.8720183Z 2026-10-23T07:00:22.8720521Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T07:00:22.8720709Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:61:5] 2026-10-23T07:00:22.8720791Z 59 │ 2026-10-23T07:00:22.8720960Z 60 │ useEffect(() => { 2026-10-23T07:00:22.8721130Z ·  ────┬──── 2026-10-23T07:00:22.8721398Z · ╰── This is the containing effect 2026-10-23T07:00:22.8721498Z 61 │ setFailedUri(null); 2026-10-23T07:00:22.8721587Z ·  ──────┬───── 2026-10-23T07:00:22.8721827Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T07:00:22.8721956Z 62 │ }, [props.uri]); 2026-10-23T07:00:22.8722039Z ╰──── 2026-10-23T07:00:22.8722698Z  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-23T07:00:22.8723064Z  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-23T07:00:22.8723070Z 2026-10-23T07:00:22.8723367Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-23T07:00:22.8723567Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:7:10] 2026-10-23T07:00:22.8723793Z 6 │ import { parse, SvgAst, type JsxAST } from "react-native-svg"; 2026-10-23T07:00:22.8724030Z 7 │ import { ActivityIndicator, Pressable, StyleSheet, View, type ViewStyle } from "react-native"; 2026-10-23T07:00:22.8724163Z ·  ────────┬──────── 2026-10-23T07:00:22.8724367Z · ╰── 'ActivityIndicator' is imported here 2026-10-23T07:00:22.8724450Z 8 │ 2026-10-23T07:00:22.8724522Z ╰──── 2026-10-23T07:00:22.8724733Z  help: Consider removing this import. 2026-10-23T07:00:22.8724737Z 2026-10-23T07:00:22.8724992Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T07:00:22.8725279Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:58:7] 2026-10-23T07:00:22.8725361Z 57 │ setDecodedSize(null); 2026-10-23T07:00:22.8725464Z 58 │ }, [props.sourceKey]); 2026-10-23T07:00:22.8725601Z ·  ───────┬─────── 2026-10-23T07:00:22.8725837Z · ╰── Unnecessary dependency `props.sourceKey` 2026-10-23T07:00:22.8725904Z 59 │ 2026-10-23T07:00:22.8725990Z ╰──── 2026-10-23T07:00:22.8726347Z  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-23T07:00:22.8726729Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8726732Z 2026-10-23T07:00:22.8726964Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T07:00:22.8727176Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:62:7] 2026-10-23T07:00:22.8727288Z 61 │ setFailedUri(null); 2026-10-23T07:00:22.8727376Z 62 │ }, [props.uri]); 2026-10-23T07:00:22.8727504Z ·  ────┬──── 2026-10-23T07:00:22.8727658Z · ╰── Unnecessary dependency `props.uri` 2026-10-23T07:00:22.8727776Z 63 │ 2026-10-23T07:00:22.8727876Z ╰──── 2026-10-23T07:00:22.8728394Z  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-23T07:00:22.8728823Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8728845Z 2026-10-23T07:00:22.8729118Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T07:00:22.8729365Z ╭─[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:60:5] 2026-10-23T07:00:22.8729447Z 55 │ 2026-10-23T07:00:22.8729578Z 56 │ useEffect(() => { 2026-10-23T07:00:22.8729662Z ·  ────┬──── 2026-10-23T07:00:22.8729821Z · ╰── This is the containing effect 2026-10-23T07:00:22.8729925Z 57 │ scheduler.reset(); 2026-10-23T07:00:22.8730121Z 58 │ highlightedRowIdsRef.current = new Set(); 2026-10-23T07:00:22.8730235Z 59 │ visibleChunkIndexRef.current = 0; 2026-10-23T07:00:22.8730393Z 60 │ setVisibleRange({ firstRowIndex: 0, lastRowIndex: 80 }); 2026-10-23T07:00:22.8730504Z ·  ───────┬─────── 2026-10-23T07:00:22.8730699Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T07:00:22.8730889Z 61 │ setTokensPatchJson(createEmptyTokenPatch(resetKey)); 2026-10-23T07:00:22.8730987Z ╰──── 2026-10-23T07:00:22.8731655Z  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-23T07:00:22.8732117Z  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-23T07:00:22.8732120Z 2026-10-23T07:00:22.8732405Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T07:00:22.8732617Z ╭─[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:63:7] 2026-10-23T07:00:22.8732728Z 62 │ return () => scheduler.cancel(); 2026-10-23T07:00:22.8732857Z 63 │ }, [enabled, resetKey, rows.length, scheduler]); 2026-10-23T07:00:22.8733055Z ·  ───┬─── ─────┬───── 2026-10-23T07:00:22.8733295Z · │ ╰── Unnecessary dependency `rows.length` 2026-10-23T07:00:22.8733473Z · ╰── Unnecessary dependency `enabled` 2026-10-23T07:00:22.8733556Z 64 │ 2026-10-23T07:00:22.8733643Z ╰──── 2026-10-23T07:00:22.8733983Z  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-23T07:00:22.8734370Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8734372Z 2026-10-23T07:00:22.8734660Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T07:00:22.8734880Z ╭─[apps/mobile/src/features/review/ReviewCommentCard.tsx:223:31] 2026-10-23T07:00:22.8735075Z 222 │ ? snippetTokens.map((line, lineIndex) => ( 2026-10-23T07:00:22.8735232Z 223 │ 2026-10-23T07:00:22.8735410Z ·  ─────────────── 2026-10-23T07:00:22.8735645Z 224 │ {lineIndex > 0 ? "\n" : ""} 2026-10-23T07:00:22.8735729Z ╰──── 2026-10-23T07:00:22.8735882Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-23T07:00:22.8735885Z 2026-10-23T07:00:22.8736166Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T07:00:22.8736364Z ╭─[apps/mobile/src/features/review/ReviewCommentCard.tsx:227:25] 2026-10-23T07:00:22.8736470Z 226 │ ) { 2026-10-23T07:00:22.8738226Z 160 │ │ clipboardItemConstructor(data); 2026-10-23T07:00:22.8738393Z 161 │ │ } 2026-10-23T07:00:22.8738644Z 162 │ ╰─▶ }, 2026-10-23T07:00:22.8738724Z 163 │ clipboard: { 2026-10-23T07:00:22.8738801Z ╰──── 2026-10-23T07:00:22.8739066Z  help: Try replacing this class with a standalone function or deleting it entirely 2026-10-23T07:00:22.8739070Z 2026-10-23T07:00:22.8739372Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T07:00:22.8739589Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:119:10] 2026-10-23T07:00:22.8739654Z 117 │ 2026-10-23T07:00:22.8739805Z 118 │ useEffect(() => { 2026-10-23T07:00:22.8739919Z ·  ────┬──── 2026-10-23T07:00:22.8740158Z · ╰── This is the containing effect 2026-10-23T07:00:22.8740289Z 119 │ void refreshNotifications(); 2026-10-23T07:00:22.8740401Z ·  ──────────┬───────── 2026-10-23T07:00:22.8740673Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T07:00:22.8740857Z 120 │ const subscription = AppState.addEventListener("change", (state) => { 2026-10-23T07:00:22.8740925Z ╰──── 2026-10-23T07:00:22.8741610Z  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-23T07:00:22.8742018Z  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-23T07:00:22.8742025Z 2026-10-23T07:00:22.8742419Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T07:00:22.8742668Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:128:7] 2026-10-23T07:00:22.8742752Z 125 │ 2026-10-23T07:00:22.8742840Z 126 │ useEffect(() => { 2026-10-23T07:00:22.8742974Z ·  ────┬──── 2026-10-23T07:00:22.8743134Z · ╰── This is the containing effect 2026-10-23T07:00:22.8743217Z 127 │ if (!isLoaded) { 2026-10-23T07:00:22.8743366Z 128 │ setLiveActivityStatus("checking"); 2026-10-23T07:00:22.8743525Z ·  ──────────┬────────── 2026-10-23T07:00:22.8743748Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T07:00:22.8743828Z 129 │ return; 2026-10-23T07:00:22.8743910Z ╰──── 2026-10-23T07:00:22.8744594Z  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-23T07:00:22.8745039Z  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-23T07:00:22.8745043Z 2026-10-23T07:00:22.8745353Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T07:00:22.8745581Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:107:5] 2026-10-23T07:00:22.8745686Z 104 │ 2026-10-23T07:00:22.8745789Z 105 │ useEffect(() => { 2026-10-23T07:00:22.8745999Z ·  ────┬──── 2026-10-23T07:00:22.8746142Z · ╰── This is the containing effect 2026-10-23T07:00:22.8746252Z 106 │ clearReviewCommentTarget(); 2026-10-23T07:00:22.8746421Z 107 │ setPendingNativeCommentSelection(null); 2026-10-23T07:00:22.8746590Z ·  ────────────────┬─────────────── 2026-10-23T07:00:22.8746784Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T07:00:22.8746886Z 108 │ }, [selectedSection?.id]); 2026-10-23T07:00:22.8747058Z ╰──── 2026-10-23T07:00:22.8747775Z  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-23T07:00:22.8748177Z  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-23T07:00:22.8748179Z 2026-10-23T07:00:22.8748449Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T07:00:22.8748713Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:112:7] 2026-10-23T07:00:22.8748811Z 109 │ 2026-10-23T07:00:22.8748931Z 110 │ useEffect(() => { 2026-10-23T07:00:22.8749036Z ·  ────┬──── 2026-10-23T07:00:22.8749179Z · ╰── This is the containing effect 2026-10-23T07:00:22.8749430Z 111 │ if (activeCommentTarget === null) { 2026-10-23T07:00:22.8749584Z 112 │ setPendingNativeCommentSelection(null); 2026-10-23T07:00:22.8749733Z ·  ────────────────┬─────────────── 2026-10-23T07:00:22.8749924Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T07:00:22.8750014Z 113 │ } 2026-10-23T07:00:22.8750140Z ╰──── 2026-10-23T07:00:22.8750835Z  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-23T07:00:22.8751203Z  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-23T07:00:22.8751224Z 2026-10-23T07:00:22.8751438Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T07:00:22.8751706Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:108:7] 2026-10-23T07:00:22.8751853Z 107 │ setPendingNativeCommentSelection(null); 2026-10-23T07:00:22.8751964Z 108 │ }, [selectedSection?.id]); 2026-10-23T07:00:22.8752065Z ·  ─────────┬───────── 2026-10-23T07:00:22.8752299Z · ╰── Unnecessary dependency `selectedSection?.id` 2026-10-23T07:00:22.8752395Z 109 │ 2026-10-23T07:00:22.8752507Z ╰──── 2026-10-23T07:00:22.8752815Z  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-23T07:00:22.8753222Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8753225Z 2026-10-23T07:00:22.8753546Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T07:00:22.8753760Z ╭─[apps/mobile/src/features/review/ReviewSheet.tsx:454:7] 2026-10-23T07:00:22.8753890Z 453 │ showAuxiliaryPane("inspector"); 2026-10-23T07:00:22.8754087Z 454 │ }, [environmentId, showAuxiliaryPane, threadId]); 2026-10-23T07:00:22.8754298Z ·  ──────┬────── ────┬─── 2026-10-23T07:00:22.8754564Z · │ ╰── Unnecessary dependency `threadId` 2026-10-23T07:00:22.8754845Z · ╰── Unnecessary dependency `environmentId` 2026-10-23T07:00:22.8754921Z 455 │ const { 2026-10-23T07:00:22.8755002Z ╰──── 2026-10-23T07:00:22.8755373Z  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-23T07:00:22.8755733Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8755736Z 2026-10-23T07:00:22.8756002Z ⚠ react(static-components): Cannot create components during render 2026-10-23T07:00:22.8756174Z ╭─[apps/mobile/src/features/review/ReviewSheet.tsx:725:20] 2026-10-23T07:00:22.8756281Z 492 │ // same check. 2026-10-23T07:00:22.8756430Z 493 │ const NativeReviewDiffView = resolveNativeReviewDiffView(); 2026-10-23T07:00:22.8756619Z ·  ─────────────┬───────────── 2026-10-23T07:00:22.8756864Z · ╰── The component is created during render here 2026-10-23T07:00:22.8757147Z 494 │ const nativeReviewDiffViewRef = useRef(null); 2026-10-23T07:00:22.8757299Z 495 │ const showcasedReviewDrawRef = useRef(null); 2026-10-23T07:00:22.8757476Z 496 │ const [isPullRefreshing, setIsPullRefreshing] = useState(false); 2026-10-23T07:00:22.8757622Z 497 │ const handlePullToRefresh = async () => { 2026-10-23T07:00:22.8757750Z 498 │ setIsPullRefreshing(true); 2026-10-23T07:00:22.8757876Z 499 │ await refreshSelectedSection(); 2026-10-23T07:00:22.8757978Z 500 │ setIsPullRefreshing(false); 2026-10-23T07:00:22.8758064Z 501 │ }; 2026-10-23T07:00:22.8758246Z 502 │ const reviewFileNavigatorRef = useRef(null); 2026-10-23T07:00:22.8758463Z 503 │ const reviewFiles = parsedDiff.kind === "files" ? parsedDiff.files : []; 2026-10-23T07:00:22.8758614Z 504 │ const fileVisibility = useReviewFileVisibility({ 2026-10-23T07:00:22.8758711Z 505 │ threadKey: reviewCache.threadKey, 2026-10-23T07:00:22.8758851Z 506 │ sectionId: selectedSection?.id ?? null, 2026-10-23T07:00:22.8758950Z 507 │ files: reviewFiles, 2026-10-23T07:00:22.8759117Z 508 │ cachedExpandedFileIds: selectedSection?.id 2026-10-23T07:00:22.8759289Z 509 │ ? reviewCache.expandedFileIdsBySection[selectedSection.id] 2026-10-23T07:00:22.8765319Z 510 │ : undefined, 2026-10-23T07:00:22.8765474Z 511 │ cachedViewedFileIds: selectedSection?.id 2026-10-23T07:00:22.8765605Z 512 │ ? reviewCache.viewedFileIdsBySection[selectedSection.id] 2026-10-23T07:00:22.8765672Z 513 │ : undefined, 2026-10-23T07:00:22.8765730Z 514 │ }); 2026-10-23T07:00:22.8765960Z 515 │ const { collapsedFileIds, toggleExpandedFile, toggleViewedFile, viewedFileIds } = fileVisibility; 2026-10-23T07:00:22.8766111Z 516 │ const commentSelection = useReviewCommentSelectionController({ 2026-10-23T07:00:22.8766178Z 517 │ environmentId, 2026-10-23T07:00:22.8766243Z 518 │ threadId, 2026-10-23T07:00:22.8766308Z 519 │ selectedSection, 2026-10-23T07:00:22.8766382Z 520 │ nativeReviewDiffData, 2026-10-23T07:00:22.8766556Z 521 │ }); 2026-10-23T07:00:22.8766763Z 522 │ const nativeBridge = useNativeReviewDiffBridge({ 2026-10-23T07:00:22.8766850Z 523 │ threadKey: reviewCache.threadKey, 2026-10-23T07:00:22.8766955Z 524 │ sectionId: selectedSection?.id ?? null, 2026-10-23T07:00:22.8767036Z 525 │ diff: selectedSection?.diff, 2026-10-23T07:00:22.8767116Z 526 │ data: nativeReviewDiffData, 2026-10-23T07:00:22.8767184Z 527 │ collapsedFileIds, 2026-10-23T07:00:22.8767251Z 528 │ viewedFileIds, 2026-10-23T07:00:22.8767388Z 529 │ selectedRowIds: commentSelection.selectedRowIds, 2026-10-23T07:00:22.8767509Z 530 │ canHighlight: parsedDiff.kind === "files", 2026-10-23T07:00:22.8767568Z 531 │ }); 2026-10-23T07:00:22.8767655Z 532 │ const showcaseReviewKey = 2026-10-23T07:00:22.8767790Z 533 │ SHOWCASE_ENABLED && parsedDiff.kind === "files" && selectedSection 2026-10-23T07:00:22.8768003Z 534 │ ? `${reviewCache.threadKey}:${selectedSection.id}:${nativeBridge.tokensResetKey}:${nativeBridge.themeId}` 2026-10-23T07:00:22.8768094Z 535 │ : null; 2026-10-23T07:00:22.8768280Z 536 │ const handleNativeDebug = (event: NativeSyntheticEvent>) => { 2026-10-23T07:00:22.8768371Z 537 │ nativeBridge.onDebug(event); 2026-10-23T07:00:22.8768428Z 538 │ if ( 2026-10-23T07:00:22.8768512Z 539 │ showcaseReviewKey === null || 2026-10-23T07:00:22.8768635Z 540 │ showcasedReviewDrawRef.current === showcaseReviewKey || 2026-10-23T07:00:22.8768750Z 541 │ !isNativeReviewDiffDrawEvent(event.nativeEvent) 2026-10-23T07:00:22.8768831Z 542 │ ) { 2026-10-23T07:00:22.8768910Z 543 │ return; 2026-10-23T07:00:22.8768969Z 544 │ } 2026-10-23T07:00:22.8769093Z 545 │ showcasedReviewDrawRef.current = showcaseReviewKey; 2026-10-23T07:00:22.8769263Z 546 │ reportShowcaseSceneRendered({ scene: "review", themeId: nativeBridge.themeId }); 2026-10-23T07:00:22.8769323Z 547 │ }; 2026-10-23T07:00:22.8769380Z 548 │ 2026-10-23T07:00:22.8769500Z 549 │ const handleSelectFile = async (fileId: string | null) => { 2026-10-23T07:00:22.8769608Z 550 │ loadVisibleFile(fileId, true); 2026-10-23T07:00:22.8769716Z 551 │ commentSelection.clearSelection(); 2026-10-23T07:00:22.8769852Z 552 │ if (fileId !== null && collapsedFileIds.includes(fileId)) { 2026-10-23T07:00:22.8769937Z 553 │ toggleExpandedFile(fileId); 2026-10-23T07:00:22.8769991Z 554 │ } 2026-10-23T07:00:22.8770108Z 555 │ const nativeView = nativeReviewDiffViewRef.current; 2026-10-23T07:00:22.8770183Z 556 │ if (!nativeView) return; 2026-10-23T07:00:22.8770279Z 557 │ const result = await settlePromise(() => 2026-10-23T07:00:22.8770501Z 558 │ fileId === null ? nativeView.scrollToTop(true) : nativeView.scrollToFile(fileId, true), 2026-10-23T07:00:22.8770572Z 559 │ ); 2026-10-23T07:00:22.8770664Z 560 │ if (AsyncResult.isFailure(result)) { 2026-10-23T07:00:22.8770847Z 561 │ console.error("[review] Failed to navigate to diff file", squashAtomCommandFailure(result)); 2026-10-23T07:00:22.8770902Z 562 │ } 2026-10-23T07:00:22.8770959Z 563 │ }; 2026-10-23T07:00:22.8771069Z 564 │ const handleVisibleFileChange = ( 2026-10-23T07:00:22.8771221Z 565 │ event: NativeSyntheticEvent<{ readonly fileId?: string | null }>, 2026-10-23T07:00:22.8771288Z 566 │ ) => { 2026-10-23T07:00:22.8771401Z 567 │ loadVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-23T07:00:22.8771571Z 568 │ reviewFileNavigatorRef.current?.setVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-23T07:00:22.8771625Z 569 │ }; 2026-10-23T07:00:22.8771800Z 570 │ const renderInspector = () => ( 2026-10-23T07:00:22.8772018Z 571 │ void handleSelectFile(fileId)} 2026-10-23T07:00:22.8772584Z 577 │ /> 2026-10-23T07:00:22.8772653Z 578 │ ); 2026-10-23T07:00:22.8772709Z 579 │ 2026-10-23T07:00:22.8772905Z 580 │ const handleNativeToggleFile = (event: NativeSyntheticEvent<{ readonly fileId?: string }>) => { 2026-10-23T07:00:22.8772994Z 581 │ const { fileId } = event.nativeEvent; 2026-10-23T07:00:22.8773060Z 582 │ if (fileId) { 2026-10-23T07:00:22.8773151Z 583 │ loadVisibleFile(fileId, true); 2026-10-23T07:00:22.8773259Z 584 │ toggleExpandedFile(fileId); 2026-10-23T07:00:22.8773321Z 585 │ } 2026-10-23T07:00:22.8773390Z 586 │ }; 2026-10-23T07:00:22.8773445Z 587 │ 2026-10-23T07:00:22.8773549Z 588 │ const handleNativeToggleViewedFile = ( 2026-10-23T07:00:22.8773669Z 589 │ event: NativeSyntheticEvent<{ readonly fileId?: string }>, 2026-10-23T07:00:22.8773729Z 590 │ ) => { 2026-10-23T07:00:22.8773820Z 591 │ const { fileId } = event.nativeEvent; 2026-10-23T07:00:22.8773882Z 592 │ if (fileId) { 2026-10-23T07:00:22.8773987Z 593 │ toggleViewedFile(fileId); 2026-10-23T07:00:22.8774062Z 594 │ } 2026-10-23T07:00:22.8774117Z 595 │ }; 2026-10-23T07:00:22.8774169Z 596 │ 2026-10-23T07:00:22.8774255Z 597 │ const parsedDiffNotice = 2026-10-23T07:00:22.8774428Z 598 │ parsedDiff.kind === "files" || parsedDiff.kind === "raw" ? parsedDiff.notice : null; 2026-10-23T07:00:22.8774556Z 599 │ const hasCachedSelectedDiff = selectedSection?.diff != null; 2026-10-23T07:00:22.8774774Z 600 │ const hasAnyCachedDiff = reviewSections.some((section) => section.diff != null); 2026-10-23T07:00:22.8774915Z 601 │ const sectionMenu = buildReviewSectionMenu(reviewSections); 2026-10-23T07:00:22.8775087Z 602 │ const { showConnectionNotice, showSectionToolbar } = resolveReviewAvailability({ 2026-10-23T07:00:22.8775199Z 603 │ hasEnvironmentPresentation: environment.isReady, 2026-10-23T07:00:22.8775302Z 604 │ isEnvironmentConnected: isEnvironmentReady, 2026-10-23T07:00:22.8775374Z 605 │ hasCachedSelectedDiff, 2026-10-23T07:00:22.8775446Z 606 │ hasAnyCachedDiff, 2026-10-23T07:00:22.8775532Z 607 │ }); 2026-10-23T07:00:22.8775631Z 608 │ const handleRetryEnvironment = () => { 2026-10-23T07:00:22.8775793Z 609 │ void retryEnvironment(environmentId); 2026-10-23T07:00:22.8775891Z 610 │ }; 2026-10-23T07:00:22.8775978Z 611 │ const handleReturnToThread = () => { 2026-10-23T07:00:22.8776057Z 612 │ if (navigation.canGoBack()) { 2026-10-23T07:00:22.8776131Z 613 │ navigation.goBack(); 2026-10-23T07:00:22.8776195Z 614 │ return; 2026-10-23T07:00:22.8776281Z 615 │ } 2026-10-23T07:00:22.8776377Z 616 │ navigation.navigate("Thread", { 2026-10-23T07:00:22.8776470Z 617 │ environmentId: String(environmentId), 2026-10-23T07:00:22.8776566Z 618 │ threadId: String(threadId), 2026-10-23T07:00:22.8776622Z 619 │ }); 2026-10-23T07:00:22.8776679Z 620 │ }; 2026-10-23T07:00:22.8776760Z 621 │ const androidHeaderSubtitle = [ 2026-10-23T07:00:22.8776835Z 622 │ selectedSection?.title, 2026-10-23T07:00:22.8776913Z 623 │ headerDiffSummary.additions, 2026-10-23T07:00:22.8777025Z 624 │ headerDiffSummary.deletions, 2026-10-23T07:00:22.8777100Z 625 │ ] 2026-10-23T07:00:22.8777210Z 626 │ .filter((part): part is string => Boolean(part)) 2026-10-23T07:00:22.8777287Z 627 │ .join(" · "); 2026-10-23T07:00:22.8777343Z 628 │ 2026-10-23T07:00:22.8777423Z 629 │ const showChangedFilesPane = 2026-10-23T07:00:22.8777499Z 630 │ !showConnectionNotice && 2026-10-23T07:00:22.8777575Z 631 │ selectedSection !== null && 2026-10-23T07:00:22.8777656Z 632 │ parsedDiff.kind === "files" && 2026-10-23T07:00:22.8777765Z 633 │ NativeReviewDiffView !== null; 2026-10-23T07:00:22.8777954Z 634 │ useRegisterWorkspaceInspector(showChangedFilesPane ? renderInspector : undefined); 2026-10-23T07:00:22.8778134Z 635 │ const showChangedFilesToggle = panes.supportsAuxiliaryPane && showChangedFilesPane; 2026-10-23T07:00:22.8778188Z 636 │ 2026-10-23T07:00:22.8778271Z 637 │ const listHeader = (() => { 2026-10-23T07:00:22.8778363Z 638 │ const children: ReactElement[] = []; 2026-10-23T07:00:22.8778415Z 639 │ 2026-10-23T07:00:22.8778509Z 640 │ if (error) { 2026-10-23T07:00:22.8778593Z 641 │ children.push( 2026-10-23T07:00:22.8778653Z 642 │ 2026-10-23T07:00:22.8779380Z 649 │ Review unavailable 2026-10-23T07:00:22.8779553Z 650 │ {error} 2026-10-23T07:00:22.8779618Z 651 │ , 2026-10-23T07:00:22.8779677Z 652 │ ); 2026-10-23T07:00:22.8779734Z 653 │ } 2026-10-23T07:00:22.8779786Z 654 │ 2026-10-23T07:00:22.8779862Z 655 │ if (parsedDiffNotice) { 2026-10-23T07:00:22.8780064Z 656 │ children.push(); 2026-10-23T07:00:22.8780126Z 657 │ } 2026-10-23T07:00:22.8780188Z 658 │ 2026-10-23T07:00:22.8780268Z 659 │ if (children.length === 0) { 2026-10-23T07:00:22.8780335Z 660 │ return null; 2026-10-23T07:00:22.8780389Z 661 │ } 2026-10-23T07:00:22.8780445Z 662 │ 2026-10-23T07:00:22.8780518Z 663 │ return <>{children}; 2026-10-23T07:00:22.8780577Z 664 │ })(); 2026-10-23T07:00:22.8780674Z 665 │ const headerSubtitle = [ 2026-10-23T07:00:22.8780840Z 666 │ headerDiffSummary.additions, 2026-10-23T07:00:22.8780972Z 667 │ headerDiffSummary.deletions, 2026-10-23T07:00:22.8781057Z 668 │ pendingReviewCommentCount > 0 2026-10-23T07:00:22.8781230Z 669 │ ? `${pendingReviewCommentCount} comment${pendingReviewCommentCount === 1 ? "" : "s"}` 2026-10-23T07:00:22.8781299Z 670 │ : null, 2026-10-23T07:00:22.8781356Z 671 │ ] 2026-10-23T07:00:22.8781425Z 672 │ .filter(Boolean) 2026-10-23T07:00:22.8781488Z 673 │ .join(" · "); 2026-10-23T07:00:22.8781656Z 674 │ const headerTitleText = selectedSection?.title ?? "Review changes"; 2026-10-23T07:00:22.8781726Z 675 │ 2026-10-23T07:00:22.8781786Z 676 │ return ( 2026-10-23T07:00:22.8781850Z 677 │ <> 2026-10-23T07:00:22.8781917Z 678 │ 2026-10-23T07:00:22.8783378Z 694 │ 2026-10-23T07:00:22.8783446Z 695 │ 2026-10-23T07:00:22.8783567Z 696 │ 2026-10-23T07:00:22.8783651Z 697 │ {showConnectionNotice ? ( 2026-10-23T07:00:22.8783832Z 698 │ 2026-10-23T07:00:22.8783927Z 699 │ 2026-10-23T07:00:22.8785058Z 711 │ 2026-10-23T07:00:22.8785257Z 712 │ ) : selectedSection && parsedDiff.kind === "files" && NativeReviewDiffView ? ( 2026-10-23T07:00:22.8785326Z 713 │ 2026-10-23T07:00:22.8785919Z 719 │ 2026-10-23T07:00:22.8786312Z 723 │ {listHeader} 2026-10-23T07:00:22.8786435Z 724 │ 2026-10-23T07:00:22.8786520Z 725 │ { 2026-10-23T07:00:22.8789516Z ·  ────┬──── 2026-10-23T07:00:22.8789683Z · ╰── This is the containing effect 2026-10-23T07:00:22.8789789Z 120 │ if (orientationSettled) return; 2026-10-23T07:00:22.8789919Z 121 │ const orientation = getNativeShowcaseOrientation(); 2026-10-23T07:00:22.8789994Z 122 │ if (orientation === null) { 2026-10-23T07:00:22.8790077Z 123 │ setOrientationSettled(true); 2026-10-23T07:00:22.8790170Z ·  ──────────┬────────── 2026-10-23T07:00:22.8790371Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T07:00:22.8790448Z 124 │ return; 2026-10-23T07:00:22.8790503Z ╰──── 2026-10-23T07:00:22.8791146Z  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-23T07:00:22.8791561Z  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-23T07:00:22.8791597Z 2026-10-23T07:00:22.8791882Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T07:00:22.8792070Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:304:7] 2026-10-23T07:00:22.8792138Z 292 │ 2026-10-23T07:00:22.8792207Z 293 │ useEffect(() => { 2026-10-23T07:00:22.8792280Z ·  ────┬──── 2026-10-23T07:00:22.8792410Z · ╰── This is the containing effect 2026-10-23T07:00:22.8792472Z 294 │ if ( 2026-10-23T07:00:22.8792541Z 295 │ scene === null || 2026-10-23T07:00:22.8792647Z 296 │ requestedScene === null || 2026-10-23T07:00:22.8792747Z 297 │ scene !== requestedScene || 2026-10-23T07:00:22.8792818Z 298 │ !hasFixture || 2026-10-23T07:00:22.8792905Z 299 │ !orientationSettled || 2026-10-23T07:00:22.8792972Z 300 │ !themeApplied || 2026-10-23T07:00:22.8793091Z 301 │ (scene === "agent-activity" && !agentActivityStaged) || 2026-10-23T07:00:22.8793228Z 302 │ !isShowcaseNativeContentReady({ scene, themeId, renderSignal }) 2026-10-23T07:00:22.8793288Z 303 │ ) { 2026-10-23T07:00:22.8793383Z 304 │ setReadyScene(null); 2026-10-23T07:00:22.8793484Z ·  ──────┬────── 2026-10-23T07:00:22.8793669Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T07:00:22.8793732Z 305 │ return; 2026-10-23T07:00:22.8793784Z ╰──── 2026-10-23T07:00:22.8794438Z  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-23T07:00:22.8794838Z  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-23T07:00:22.8794842Z 2026-10-23T07:00:22.8795143Z ⚠ eslint(no-unused-vars): Variable 'lastOutcome' is declared but never used. Unused variables should start with a '_'. 2026-10-23T07:00:22.8795319Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:128:9] 2026-10-23T07:00:22.8795388Z 127 │ let cancelled = false; 2026-10-23T07:00:22.8795487Z 128 │ let lastOutcome: string | null = null; 2026-10-23T07:00:22.8795614Z ·  ─────┬───── 2026-10-23T07:00:22.8795756Z · ╰── 'lastOutcome' is declared here 2026-10-23T07:00:22.8795948Z 129 │ void retryShowcaseOperation(async () => applyNativeShowcaseOrientation(orientation), { 2026-10-23T07:00:22.8796001Z ╰──── 2026-10-23T07:00:22.8796110Z  help: Consider removing this declaration. 2026-10-23T07:00:22.8796113Z 2026-10-23T07:00:22.8796409Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T07:00:22.8796594Z ╭─[apps/mobile/src/features/review/ReviewCommentComposerSheet.tsx:103:7] 2026-10-23T07:00:22.8796648Z 100 │ 2026-10-23T07:00:22.8796715Z 101 │ useEffect(() => { 2026-10-23T07:00:22.8796853Z ·  ────┬──── 2026-10-23T07:00:22.8797044Z · ╰── This is the containing effect 2026-10-23T07:00:22.8797166Z 102 │ if (!target || selectedLines.length === 0) { 2026-10-23T07:00:22.8797264Z 103 │ setHighlightedLinesById({}); 2026-10-23T07:00:22.8797359Z ·  ───────────┬─────────── 2026-10-23T07:00:22.8797533Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T07:00:22.8797598Z 104 │ return; 2026-10-23T07:00:22.8797652Z ╰──── 2026-10-23T07:00:22.8798312Z  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-23T07:00:22.8798680Z  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-23T07:00:22.8798684Z 2026-10-23T07:00:22.8798856Z ⚠ react(immutability): This value cannot be modified 2026-10-23T07:00:22.8799014Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-23T07:00:22.8799070Z  86 │ 2026-10-23T07:00:22.8799163Z  87 │ const cardCoverage = props.cardCoverage; 2026-10-23T07:00:22.8799272Z ·  ──────┬───── 2026-10-23T07:00:22.8799427Z · ╰── `cardCoverage` originates here 2026-10-23T07:00:22.8799519Z  88 │ const barHeightRef = useRef(0); 2026-10-23T07:00:22.8799606Z  89 │ const cardHeightRef = useRef(0); 2026-10-23T07:00:22.8799693Z  90 │ const cardHeight = useSharedValue(0); 2026-10-23T07:00:22.8799789Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-23T07:00:22.8799858Z  92 │ if (!cardCoverage) { 2026-10-23T07:00:22.8799921Z  93 │ return; 2026-10-23T07:00:22.8800005Z  94 │ } 2026-10-23T07:00:22.8800169Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-23T07:00:22.8800268Z  96 │ if (coverage === cardCoverage.value) { 2026-10-23T07:00:22.8800329Z  97 │ return; 2026-10-23T07:00:22.8800383Z  98 │ } 2026-10-23T07:00:22.8800465Z  99 │ if (cardCoverage.value === 0) { 2026-10-23T07:00:22.8800548Z 100 │ cardCoverage.value = coverage; 2026-10-23T07:00:22.8800629Z ·  ──────┬───── 2026-10-23T07:00:22.8800820Z · ╰── `cardCoverage` cannot be modified 2026-10-23T07:00:22.8800887Z 101 │ return; 2026-10-23T07:00:22.8800949Z ╰──── 2026-10-23T07:00:22.8801247Z  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-23T07:00:22.8801591Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T07:00:22.8801595Z 2026-10-23T07:00:22.8801769Z ⚠ react(immutability): This value cannot be modified 2026-10-23T07:00:22.8801927Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7] 2026-10-23T07:00:22.8802008Z  89 │ const cardHeightRef = useRef(0); 2026-10-23T07:00:22.8802116Z  90 │ const cardHeight = useSharedValue(0); 2026-10-23T07:00:22.8802282Z ·  ─────┬──── 2026-10-23T07:00:22.8802458Z · ╰── `cardHeight` originates here 2026-10-23T07:00:22.8802554Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-23T07:00:22.8802621Z  92 │ if (!cardCoverage) { 2026-10-23T07:00:22.8802681Z  93 │ return; 2026-10-23T07:00:22.8802736Z  94 │ } 2026-10-23T07:00:22.8802912Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-23T07:00:22.8803015Z  96 │ if (coverage === cardCoverage.value) { 2026-10-23T07:00:22.8803075Z  97 │ return; 2026-10-23T07:00:22.8803141Z  98 │ } 2026-10-23T07:00:22.8803221Z  99 │ if (cardCoverage.value === 0) { 2026-10-23T07:00:22.8803302Z 100 │ cardCoverage.value = coverage; 2026-10-23T07:00:22.8803364Z 101 │ return; 2026-10-23T07:00:22.8803424Z 102 │ } 2026-10-23T07:00:22.8803529Z 103 │ cardCoverage.value = withTiming(coverage, { 2026-10-23T07:00:22.8803657Z 104 │ duration: USER_INPUT_TOGGLE_DURATION_MS, 2026-10-23T07:00:22.8803806Z 105 │ easing: Easing.out(Easing.cubic), 2026-10-23T07:00:22.8803864Z 106 │ }); 2026-10-23T07:00:22.8803941Z 107 │ }, [cardCoverage]); 2026-10-23T07:00:22.8804028Z 108 │ const handleBarLayout = useCallback( 2026-10-23T07:00:22.8804109Z 109 │ (event: LayoutChangeEvent) => { 2026-10-23T07:00:22.8804236Z 110 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-23T07:00:22.8804303Z 111 │ notifyCoverage(); 2026-10-23T07:00:22.8804383Z 112 │ }, 2026-10-23T07:00:22.8804470Z 113 │ [notifyCoverage], 2026-10-23T07:00:22.8804525Z 114 │ ); 2026-10-23T07:00:22.8804618Z 115 │ const handleCardLayout = useCallback( 2026-10-23T07:00:22.8804746Z 116 │ (event: LayoutChangeEvent) => { 2026-10-23T07:00:22.8804880Z 117 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-23T07:00:22.8804995Z 118 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-23T07:00:22.8805072Z ·  ─────┬──── 2026-10-23T07:00:22.8805212Z · ╰── `cardHeight` cannot be modified 2026-10-23T07:00:22.8805306Z 119 │ notifyCoverage(); 2026-10-23T07:00:22.8805366Z ╰──── 2026-10-23T07:00:22.8805655Z  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-23T07:00:22.8805987Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T07:00:22.8805992Z 2026-10-23T07:00:22.8806217Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-23T07:00:22.8806386Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-23T07:00:22.8806475Z  90 │ const cardHeight = useSharedValue(0); 2026-10-23T07:00:22.8806566Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-23T07:00:22.8806699Z ·  ───┬─── 2026-10-23T07:00:22.8806970Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-23T07:00:22.8807040Z  92 │ if (!cardCoverage) { 2026-10-23T07:00:22.8807100Z  93 │ return; 2026-10-23T07:00:22.8807156Z  94 │ } 2026-10-23T07:00:22.8807418Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-23T07:00:22.8807571Z  96 │ if (coverage === cardCoverage.value) { 2026-10-23T07:00:22.8807629Z  97 │ return; 2026-10-23T07:00:22.8807695Z  98 │ } 2026-10-23T07:00:22.8807776Z  99 │ if (cardCoverage.value === 0) { 2026-10-23T07:00:22.8807857Z 100 │ cardCoverage.value = coverage; 2026-10-23T07:00:22.8807939Z ·  ──────┬───── 2026-10-23T07:00:22.8808075Z · ╰── This modifies `cardCoverage` 2026-10-23T07:00:22.8808165Z 101 │ return; 2026-10-23T07:00:22.8808231Z ╰──── 2026-10-23T07:00:22.8808584Z  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-23T07:00:22.8808934Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T07:00:22.8808941Z 2026-10-23T07:00:22.8809157Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-23T07:00:22.8809315Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-23T07:00:22.8809395Z  99 │ if (cardCoverage.value === 0) { 2026-10-23T07:00:22.8809479Z 100 │ cardCoverage.value = coverage; 2026-10-23T07:00:22.8809587Z ·  ──────┬───── 2026-10-23T07:00:22.8809738Z · ╰── This modifies `cardCoverage` 2026-10-23T07:00:22.8809807Z 101 │ return; 2026-10-23T07:00:22.8809863Z 102 │ } 2026-10-23T07:00:22.8809966Z 103 │ cardCoverage.value = withTiming(coverage, { 2026-10-23T07:00:22.8810068Z 104 │ duration: USER_INPUT_TOGGLE_DURATION_MS, 2026-10-23T07:00:22.8810155Z 105 │ easing: Easing.out(Easing.cubic), 2026-10-23T07:00:22.8810214Z 106 │ }); 2026-10-23T07:00:22.8810312Z 107 │ }, [cardCoverage]); 2026-10-23T07:00:22.8810405Z 108 │ const handleBarLayout = useCallback( 2026-10-23T07:00:22.8810497Z 109 │ (event: LayoutChangeEvent) => { 2026-10-23T07:00:22.8810606Z ·  ───────────────┬─────────────── 2026-10-23T07:00:22.8810833Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-23T07:00:22.8810979Z 110 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-23T07:00:22.8811047Z ╰──── 2026-10-23T07:00:22.8811454Z  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-23T07:00:22.8811827Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T07:00:22.8811831Z 2026-10-23T07:00:22.8812045Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-23T07:00:22.8812201Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7] 2026-10-23T07:00:22.8812289Z 115 │ const handleCardLayout = useCallback( 2026-10-23T07:00:22.8812400Z 116 │ (event: LayoutChangeEvent) => { 2026-10-23T07:00:22.8812519Z ·  ───────────────┬─────────────── 2026-10-23T07:00:22.8812750Z · ╰── This function may (indirectly) reassign or modify `cardHeight` after render 2026-10-23T07:00:22.8812882Z 117 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-23T07:00:22.8813001Z 118 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-23T07:00:22.8813107Z ·  ─────┬──── 2026-10-23T07:00:22.8813253Z · ╰── This modifies `cardHeight` 2026-10-23T07:00:22.8813332Z 119 │ notifyCoverage(); 2026-10-23T07:00:22.8813386Z ╰──── 2026-10-23T07:00:22.8813747Z  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-23T07:00:22.8814082Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T07:00:22.8814084Z 2026-10-23T07:00:22.8814630Z ⚠ 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-23T07:00:22.8814830Z ╭─[apps/mobile/src/features/agent-awareness/remoteRegistration.test.ts:223:5] 2026-10-23T07:00:22.8814905Z 222 │ let idlePasses = 0; 2026-10-23T07:00:22.8815057Z 223 │ ╭─▶ for (;;) { 2026-10-23T07:00:22.8815227Z 224 │ │ yield* Effect.promise(() => Promise.resolve()); 2026-10-23T07:00:22.8815391Z 225 │ │ const pending = backgroundRuntime.pending.shift(); 2026-10-23T07:00:22.8815500Z 226 │ │ if (!pending) { 2026-10-23T07:00:22.8815595Z 227 │ │ idlePasses++; 2026-10-23T07:00:22.8815706Z 228 │ │ if (idlePasses >= 3) { 2026-10-23T07:00:22.8815798Z 229 │ │ return; 2026-10-23T07:00:22.8815903Z 230 │ │ } 2026-10-23T07:00:22.8816007Z 231 │ │ continue; 2026-10-23T07:00:22.8816082Z 232 │ │ } 2026-10-23T07:00:22.8816188Z 233 │ │ idlePasses = 0; 2026-10-23T07:00:22.8816306Z 234 │ │ const exit = yield* Effect.exit( 2026-10-23T07:00:22.8816520Z 235 │ │ pending.operation as Effect.Effect, 2026-10-23T07:00:22.8816622Z 236 │ │ ); 2026-10-23T07:00:22.8816750Z 237 │ │ yield* Effect.sync(() => { 2026-10-23T07:00:22.8816928Z 238 │ │ pending.resolve(exit); 2026-10-23T07:00:22.8817041Z 239 │ │ }); 2026-10-23T07:00:22.8817169Z 240 │ ╰─▶ } 2026-10-23T07:00:22.8817228Z 241 │ }, 2026-10-23T07:00:22.8817283Z ╰──── 2026-10-23T07:00:22.8817285Z 2026-10-23T07:00:22.8817487Z ⚠ react(immutability): This value cannot be modified 2026-10-23T07:00:22.8817647Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:174:5] 2026-10-23T07:00:22.8817792Z 170 │ const expandedAngle = props.collapsedDirection === "right" ? 90 : 180; 2026-10-23T07:00:22.8817930Z 171 │ const rotation = useSharedValue(props.expanded ? expandedAngle : 0); 2026-10-23T07:00:22.8818010Z ·  ────┬─── 2026-10-23T07:00:22.8818192Z · ╰── `rotation` originates here 2026-10-23T07:00:22.8818248Z 172 │ 2026-10-23T07:00:22.8818330Z 173 │ useLayoutEffect(() => { 2026-10-23T07:00:22.8818467Z 174 │ rotation.value = withTiming(props.expanded ? expandedAngle : 0, { 2026-10-23T07:00:22.8818542Z ·  ────┬─── 2026-10-23T07:00:22.8818674Z · ╰── `rotation` cannot be modified 2026-10-23T07:00:22.8818804Z 175 │ duration: THREAD_DISCLOSURE_TRANSITION_MS, 2026-10-23T07:00:22.8818873Z ╰──── 2026-10-23T07:00:22.8819147Z  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-23T07:00:22.8819476Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T07:00:22.8819487Z 2026-10-23T07:00:22.8819703Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T07:00:22.8819868Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:1246:23] 2026-10-23T07:00:22.8819939Z 1245 │ { 2026-10-23T07:00:22.8821653Z 111 │ separationProgress.value = withTiming(props.showScrollToEnd ? 1 : 0, CONTROL_TIMING); 2026-10-23T07:00:22.8821757Z ·  ─────────┬──────── 2026-10-23T07:00:22.8821924Z · ╰── `separationProgress` cannot be modified 2026-10-23T07:00:22.8822032Z 112 │ }, [props.showScrollToEnd, separationProgress]); 2026-10-23T07:00:22.8822158Z ╰──── 2026-10-23T07:00:22.8822490Z  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-23T07:00:22.8822812Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T07:00:22.8822814Z 2026-10-23T07:00:22.8822972Z ⚠ react(immutability): This value cannot be modified 2026-10-23T07:00:22.8823173Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5] 2026-10-23T07:00:22.8823292Z 128 │ // and repeatedly retargets the animation as it grows. 2026-10-23T07:00:22.8823418Z 129 │ const capsuleWidth = useSharedValue(null); 2026-10-23T07:00:22.8823501Z ·  ──────┬───── 2026-10-23T07:00:22.8823643Z · ╰── `capsuleWidth` originates here 2026-10-23T07:00:22.8823779Z 130 │ const measuredWidthRef = useRef(null); 2026-10-23T07:00:22.8823915Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-23T07:00:22.8824023Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-23T07:00:22.8824129Z 133 │ if (width === measuredWidthRef.current) { 2026-10-23T07:00:22.8824194Z 134 │ return; 2026-10-23T07:00:22.8824252Z 135 │ } 2026-10-23T07:00:22.8824361Z 136 │ const first = measuredWidthRef.current === null; 2026-10-23T07:00:22.8824447Z 137 │ measuredWidthRef.current = width; 2026-10-23T07:00:22.8824659Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-23T07:00:22.8824743Z ·  ──────┬───── 2026-10-23T07:00:22.8824905Z · ╰── `capsuleWidth` cannot be modified 2026-10-23T07:00:22.8824962Z 139 │ }; 2026-10-23T07:00:22.8825016Z ╰──── 2026-10-23T07:00:22.8825319Z  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-23T07:00:22.8825640Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T07:00:22.8825643Z 2026-10-23T07:00:22.8825797Z ⚠ react(immutability): This value cannot be modified 2026-10-23T07:00:22.8825993Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7] 2026-10-23T07:00:22.8826121Z 128 │ // and repeatedly retargets the animation as it grows. 2026-10-23T07:00:22.8826251Z 129 │ const capsuleWidth = useSharedValue(null); 2026-10-23T07:00:22.8826333Z ·  ──────┬───── 2026-10-23T07:00:22.8826472Z · ╰── `capsuleWidth` originates here 2026-10-23T07:00:22.8826584Z 130 │ const measuredWidthRef = useRef(null); 2026-10-23T07:00:22.8826739Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-23T07:00:22.8826845Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-23T07:00:22.8826953Z 133 │ if (width === measuredWidthRef.current) { 2026-10-23T07:00:22.8827015Z 134 │ return; 2026-10-23T07:00:22.8827071Z 135 │ } 2026-10-23T07:00:22.8827176Z 136 │ const first = measuredWidthRef.current === null; 2026-10-23T07:00:22.8827262Z 137 │ measuredWidthRef.current = width; 2026-10-23T07:00:22.8827516Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-23T07:00:22.8827606Z 139 │ }; 2026-10-23T07:00:22.8827705Z 140 │ const hasStatus = props.status !== null; 2026-10-23T07:00:22.8827840Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-23T07:00:22.8827908Z 142 │ useEffect(() => { 2026-10-23T07:00:22.8827976Z 143 │ if (!hasStatus) { 2026-10-23T07:00:22.8828061Z 144 │ measuredWidthRef.current = null; 2026-10-23T07:00:22.8828142Z 145 │ capsuleWidth.value = null; 2026-10-23T07:00:22.8828222Z ·  ──────┬───── 2026-10-23T07:00:22.8828411Z · ╰── `capsuleWidth` cannot be modified 2026-10-23T07:00:22.8828467Z 146 │ } 2026-10-23T07:00:22.8828531Z ╰──── 2026-10-23T07:00:22.8828802Z  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-23T07:00:22.8829149Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T07:00:22.8829154Z 2026-10-23T07:00:22.8829369Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-23T07:00:22.8829536Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7] 2026-10-23T07:00:22.8829700Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-23T07:00:22.8829782Z 142 │ useEffect(() => { 2026-10-23T07:00:22.8829860Z ·  ───┬─── 2026-10-23T07:00:22.8830097Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-23T07:00:22.8830171Z 143 │ if (!hasStatus) { 2026-10-23T07:00:22.8830262Z 144 │ measuredWidthRef.current = null; 2026-10-23T07:00:22.8830366Z 145 │ capsuleWidth.value = null; 2026-10-23T07:00:22.8830459Z ·  ──────┬───── 2026-10-23T07:00:22.8830607Z · ╰── This modifies `capsuleWidth` 2026-10-23T07:00:22.8830665Z 146 │ } 2026-10-23T07:00:22.8830715Z ╰──── 2026-10-23T07:00:22.8831083Z  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-23T07:00:22.8831411Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T07:00:22.8831415Z 2026-10-23T07:00:22.8831619Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-23T07:00:22.8831825Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5] 2026-10-23T07:00:22.8831939Z 130 │ const measuredWidthRef = useRef(null); 2026-10-23T07:00:22.8832071Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-23T07:00:22.8832200Z ·  ───────────────┬─────────────── 2026-10-23T07:00:22.8832471Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-23T07:00:22.8832589Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-23T07:00:22.8832699Z 133 │ if (width === measuredWidthRef.current) { 2026-10-23T07:00:22.8832761Z 134 │ return; 2026-10-23T07:00:22.8832879Z 135 │ } 2026-10-23T07:00:22.8833012Z 136 │ const first = measuredWidthRef.current === null; 2026-10-23T07:00:22.8833100Z 137 │ measuredWidthRef.current = width; 2026-10-23T07:00:22.8833286Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-23T07:00:22.8833364Z ·  ──────┬───── 2026-10-23T07:00:22.8833508Z · ╰── This modifies `capsuleWidth` 2026-10-23T07:00:22.8833565Z 139 │ }; 2026-10-23T07:00:22.8833617Z ╰──── 2026-10-23T07:00:22.8833995Z  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-23T07:00:22.8834319Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T07:00:22.8834324Z 2026-10-23T07:00:22.8834513Z ⚠ eslint(no-unused-vars): Type 'Scope' is imported but never used. 2026-10-23T07:00:22.8834737Z ╭─[apps/server/src/provider/ProviderAuthService.ts:15:18] 2026-10-23T07:00:22.8834836Z 14 │ import * as Layer from "effect/Layer"; 2026-10-23T07:00:22.8834931Z 15 │ import type * as Scope from "effect/Scope"; 2026-10-23T07:00:22.8835011Z ·  ──┬── 2026-10-23T07:00:22.8835149Z · ╰── 'Scope' is imported here 2026-10-23T07:00:22.8835237Z 16 │ import * as Stream from "effect/Stream"; 2026-10-23T07:00:22.8835320Z ╰──── 2026-10-23T07:00:22.8835432Z  help: Consider removing this import. 2026-10-23T07:00:22.8835435Z 2026-10-23T07:00:22.8835624Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T07:00:22.8835788Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:697:76] 2026-10-23T07:00:22.8835997Z 696 │ const [snoozeGateClock, setSnoozeGateClock] = useState(() => ({ thread, now: Date.now() })); 2026-10-23T07:00:22.8836181Z 697 │ if (snoozeGateClock.thread !== thread) setSnoozeGateClock({ thread, now: Date.now() }); 2026-10-23T07:00:22.8836330Z ·  ─────┬──── 2026-10-23T07:00:22.8836516Z · ╰── Cannot call impure function 2026-10-23T07:00:22.8836679Z 698 │ const snoozeGateNow = new Date(snoozeGateClock.now).toISOString(); 2026-10-23T07:00:22.8836747Z ╰──── 2026-10-23T07:00:22.8837107Z  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-23T07:00:22.8837464Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T07:00:22.8837468Z 2026-10-23T07:00:22.8837660Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T07:00:22.8837821Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:718:71] 2026-10-23T07:00:22.8837900Z 717 │ const snoozePresets = useMemo( 2026-10-23T07:00:22.8838081Z 718 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-23T07:00:22.8838259Z ·  ─────┬──── 2026-10-23T07:00:22.8838456Z · ╰── Cannot call impure function 2026-10-23T07:00:22.8838579Z 719 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-23T07:00:22.8838635Z ╰──── 2026-10-23T07:00:22.8838951Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-23T07:00:22.8839262Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T07:00:22.8839265Z 2026-10-23T07:00:22.8839448Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-23T07:00:22.8839647Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:719:6] 2026-10-23T07:00:22.8839843Z 718 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-23T07:00:22.8839958Z 719 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-23T07:00:22.8840053Z ·  ────────────┬─────────── 2026-10-23T07:00:22.8840253Z · ╰── Unnecessary dependency `props.snoozePresetMinute` 2026-10-23T07:00:22.8840327Z 720 │ ); 2026-10-23T07:00:22.8840382Z ╰──── 2026-10-23T07:00:22.8840706Z  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-23T07:00:22.8841056Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8841066Z 2026-10-23T07:00:22.8841266Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-23T07:00:22.8841427Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:765:7] 2026-10-23T07:00:22.8841497Z 764 │ thread.pinnedAt, 2026-10-23T07:00:22.8841561Z 765 │ variant, 2026-10-23T07:00:22.8841659Z ·  ───┬─── 2026-10-23T07:00:22.8841815Z · ╰── Unnecessary dependency `variant` 2026-10-23T07:00:22.8841872Z 766 │ ], 2026-10-23T07:00:22.8841932Z ╰──── 2026-10-23T07:00:22.8842242Z  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-23T07:00:22.8842661Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8842694Z 2026-10-23T07:00:22.8842894Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T07:00:22.8843056Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:1215:21] 2026-10-23T07:00:22.8843226Z 1214 │ {providerDrivers.slice(0, -1).map((driver, index) => ( 2026-10-23T07:00:22.8843374Z 1215 │ 2026-10-23T07:00:22.8843490Z ·  ────────────────────────── 2026-10-23T07:00:22.8843601Z 1216 │ 2026-10-23T07:00:22.8843664Z ╰──── 2026-10-23T07:00:22.8844011Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-23T07:00:22.8844019Z 2026-10-23T07:00:22.8844201Z ⚠ eslint(no-control-regex): Unexpected control character 2026-10-23T07:00:22.8844397Z ╭─[apps/mobile/src/features/settings/SettingsProviderAccountsRouteScreen.tsx:220:46] 2026-10-23T07:00:22.8844557Z 219 │ 2026-10-23T07:00:22.8844754Z 220 │ {interaction.output.replace(/\x1b\[[0-?]*[ -/]*[@-~]/g, "")} 2026-10-23T07:00:22.8844873Z ·  ──┬─ 2026-10-23T07:00:22.8845040Z · ╰── 'U+001B' is a control character. 2026-10-23T07:00:22.8845103Z 221 │ 2026-10-23T07:00:22.8845156Z ╰──── 2026-10-23T07:00:22.8845434Z  help: Avoid matching control characters in regular expressions. If intentional, disable this rule for the expression. 2026-10-23T07:00:22.8845440Z 2026-10-23T07:00:22.8845707Z ⚠ eslint(no-unused-vars): Function 'layerClaudeAgentSdkReplayQueryRunner' is declared but never used. 2026-10-23T07:00:22.8845916Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.testkit.ts:960:10] 2026-10-23T07:00:22.8845975Z 959 │ 2026-10-23T07:00:22.8846100Z 960 │ function layerClaudeAgentSdkReplayQueryRunner( 2026-10-23T07:00:22.8846227Z ·  ──────────────────┬───────────────── 2026-10-23T07:00:22.8846429Z · ╰── 'layerClaudeAgentSdkReplayQueryRunner' is declared here 2026-10-23T07:00:22.8846532Z 961 │ transcript: ClaudeAgentSdkReplayTranscript, 2026-10-23T07:00:22.8846607Z ╰──── 2026-10-23T07:00:22.8846738Z  help: Consider removing this declaration. 2026-10-23T07:00:22.8846743Z 2026-10-23T07:00:22.8847090Z ⚠ eslint(no-unused-vars): Variable 'layerCodexAppServerClientFactoryCommand' is declared but never used. Unused variables should start with a '_'. 2026-10-23T07:00:22.8847255Z ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1444:7] 2026-10-23T07:00:22.8847338Z 1443 │ 2026-10-23T07:00:22.8847469Z 1444 │ const layerCodexAppServerClientFactoryCommand = ( 2026-10-23T07:00:22.8847599Z ·  ───────────────────┬─────────────────── 2026-10-23T07:00:22.8847804Z · ╰── 'layerCodexAppServerClientFactoryCommand' is declared here 2026-10-23T07:00:22.8847926Z 1445 │ options: CodexClient.CodexAppServerClientOptions & { 2026-10-23T07:00:22.8848004Z ╰──── 2026-10-23T07:00:22.8848204Z  help: Consider removing this declaration. 2026-10-23T07:00:22.8848258Z 2026-10-23T07:00:22.8848515Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-23T07:00:22.8848678Z ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1680:7] 2026-10-23T07:00:22.8848760Z 1679 │ 2026-10-23T07:00:22.8848850Z 1680 │ const layer: Layer.Layer< 2026-10-23T07:00:22.8848920Z ·  ──┬── 2026-10-23T07:00:22.8849059Z · ╰── 'layer' is declared here 2026-10-23T07:00:22.8849157Z 1681 │ ProviderAdapter.ProviderAdapterV2, 2026-10-23T07:00:22.8849210Z ╰──── 2026-10-23T07:00:22.8849312Z  help: Consider removing this declaration. 2026-10-23T07:00:22.8849317Z 2026-10-23T07:00:22.8849575Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-23T07:00:22.8849766Z ╭─[apps/mobile/src/features/threads/NewTaskContextPickerScreens.tsx:370:7] 2026-10-23T07:00:22.8849850Z 369 │ mountedRef.current = false; 2026-10-23T07:00:22.8849928Z 370 │ flow.setBranchQuery(""); 2026-10-23T07:00:22.8849998Z ·  ──┬─ 2026-10-23T07:00:22.8850151Z · ╰── Missing dependency `flow` 2026-10-23T07:00:22.8850225Z 371 │ }; 2026-10-23T07:00:22.8850299Z 372 │ }, [flow.setBranchQuery]); 2026-10-23T07:00:22.8850399Z ·  ─────────┬───────── 2026-10-23T07:00:22.8850605Z · ╰── Overly precise dependency `flow.setBranchQuery`, use `flow` instead 2026-10-23T07:00:22.8850659Z 373 │ 2026-10-23T07:00:22.8850716Z ╰──── 2026-10-23T07:00:22.8851140Z  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-23T07:00:22.8851456Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.8851459Z 2026-10-23T07:00:22.8851732Z ⚠ eslint(no-unused-vars): Variable 'useDragRegion' is declared but never used. Unused variables should start with a '_'. 2026-10-23T07:00:22.8851884Z ╭─[apps/web/src/components/preview/PreviewPanelShell.tsx:61:9] 2026-10-23T07:00:22.8851937Z 60 │ ) { 2026-10-23T07:00:22.8852112Z 61 │ const useDragRegion = isElectron && props.mode !== "sheet" && props.mode !== "embedded"; 2026-10-23T07:00:22.8852198Z ·  ──────┬────── 2026-10-23T07:00:22.8852341Z · ╰── 'useDragRegion' is declared here 2026-10-23T07:00:22.8852430Z 62 │ const isInline = props.mode === "inline"; 2026-10-23T07:00:22.8852483Z ╰──── 2026-10-23T07:00:22.8852588Z  help: Consider removing this declaration. 2026-10-23T07:00:22.8852590Z 2026-10-23T07:00:22.8852757Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-23T07:00:22.8852905Z ╭─[apps/server/src/provider/Drivers/CodexDriver.test.ts:466:14] 2026-10-23T07:00:22.8852963Z 465 │ 2026-10-23T07:00:22.8853071Z 466 │ for (const {} of ["direct", "wrapper"] as const) { 2026-10-23T07:00:22.8853146Z ·  ── 2026-10-23T07:00:22.8853200Z 467 │ } 2026-10-23T07:00:22.8853315Z ╰──── 2026-10-23T07:00:22.8853671Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-23T07:00:22.8853673Z 2026-10-23T07:00:22.8853853Z ⚠ unicorn(no-new-array): Do not use `new Array(singleArgument)`. 2026-10-23T07:00:22.8853976Z ╭─[apps/web/src/terminal/ghostty/core.ts:194:19] 2026-10-23T07:00:22.8854101Z 193 │ const count = Math.min(CHUNK_SIZE, graphemeLength - start); 2026-10-23T07:00:22.8854192Z 194 │ const codes = new Array(count); 2026-10-23T07:00:22.8854302Z ·  ──────────────────────── 2026-10-23T07:00:22.8854405Z 195 │ for (let index = 0; index < count; index += 1) { 2026-10-23T07:00:22.8854455Z ╰──── 2026-10-23T07:00:22.8854917Z  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-23T07:00:22.8854922Z 2026-10-23T07:00:22.8855148Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-23T07:00:22.8855323Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:1998:15] 2026-10-23T07:00:22.8855390Z 1997 │ assert.equal( 2026-10-23T07:00:22.8855539Z 1998 │ items.filter((item) => item.type === "assistant_message").at(-1)?.text, 2026-10-23T07:00:22.8855619Z ·  ────── 2026-10-23T07:00:22.8855697Z 1999 │ "authoritative answer", 2026-10-23T07:00:22.8855749Z ╰──── 2026-10-23T07:00:22.8855926Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-23T07:00:22.8855931Z 2026-10-23T07:00:22.8856406Z ⚠ 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-23T07:00:22.8856577Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:3951:7] 2026-10-23T07:00:22.8856758Z 3950 │ const closeFiber = yield* Scope.close(sessionScope, Exit.void).pipe(Effect.forkScoped); 2026-10-23T07:00:22.8856963Z 3951 │ ╭─▶ while (!responseLifecycle.includes("failed")) { 2026-10-23T07:00:22.8857075Z 3952 │ │ yield* Effect.yieldNow; 2026-10-23T07:00:22.8857216Z 3953 │ ╰─▶ } 2026-10-23T07:00:22.8857340Z 3954 │ const responseExit = yield* Fiber.join(responseFiber); 2026-10-23T07:00:22.8857393Z ╰──── 2026-10-23T07:00:22.8857395Z 2026-10-23T07:00:22.8857858Z ⚠ 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-23T07:00:22.8858029Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6062:9] 2026-10-23T07:00:22.8858120Z 6061 │ .pipe(Effect.forkScoped); 2026-10-23T07:00:22.8858304Z 6062 │ ╭─▶ while (promptGates.length < 1) { 2026-10-23T07:00:22.8858413Z 6063 │ │ yield* Effect.yieldNow; 2026-10-23T07:00:22.8858600Z 6064 │ ╰─▶ } 2026-10-23T07:00:22.8858805Z 6065 │ assert.isDefined(sessionUpdateHandler, "session update handler must be wired"); 2026-10-23T07:00:22.8858860Z ╰──── 2026-10-23T07:00:22.8858862Z 2026-10-23T07:00:22.8859319Z ⚠ 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-23T07:00:22.8859489Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6197:9] 2026-10-23T07:00:22.8859579Z 6196 │ .pipe(Effect.forkScoped); 2026-10-23T07:00:22.8859760Z 6197 │ ╭─▶ while (promptGates.length < 2) { 2026-10-23T07:00:22.8859871Z 6198 │ │ yield* Effect.yieldNow; 2026-10-23T07:00:22.8860008Z 6199 │ ╰─▶ } 2026-10-23T07:00:22.8860176Z 6200 │ if (sessionUpdateHandler === undefined || capturedMutation.current === null) { 2026-10-23T07:00:22.8860228Z ╰──── 2026-10-23T07:00:22.8860230Z 2026-10-23T07:00:22.8860399Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-23T07:00:22.8860519Z ╭─[apps/server/src/processRunner.test.ts:266:14] 2026-10-23T07:00:22.8860574Z 265 │ 2026-10-23T07:00:22.8860679Z 266 │ for (const {} of ["timeout", "success"] as const) { 2026-10-23T07:00:22.8860753Z ·  ── 2026-10-23T07:00:22.8860806Z 267 │ } 2026-10-23T07:00:22.8860860Z ╰──── 2026-10-23T07:00:22.8861095Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-23T07:00:22.8861099Z 2026-10-23T07:00:22.8861298Z ⚠ eslint(no-unsafe-optional-chaining): Unsafe usage of optional chaining 2026-10-23T07:00:22.8861465Z ╭─[apps/server/src/orchestration-v2/ThreadLaunchService.test.ts:1783:8] 2026-10-23T07:00:22.8861534Z 1782 │ assert.equal( 2026-10-23T07:00:22.8861680Z 1783 │ (stored.context?.records[0] as { attachmentId: string }).attachmentId, 2026-10-23T07:00:22.8861783Z ·  ────────────────────────── 2026-10-23T07:00:22.8861863Z 1784 │ stored.attachments[0]?.id, 2026-10-23T07:00:22.8861915Z ╰──── 2026-10-23T07:00:22.8862086Z  help: If this short-circuits with 'undefined' the evaluation will throw TypeError 2026-10-23T07:00:22.8862088Z 2026-10-23T07:00:22.8862396Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-23T07:00:22.8862590Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts:10566:7] 2026-10-23T07:00:22.8862649Z 10565 │ 2026-10-23T07:00:22.8862724Z 10566 │ const layer: Layer.Layer< 2026-10-23T07:00:22.8862797Z ·  ──┬── 2026-10-23T07:00:22.8862925Z · ╰── 'layer' is declared here 2026-10-23T07:00:22.8863022Z 10567 │ ProviderAdapter.ProviderAdapterV2, 2026-10-23T07:00:22.8863078Z ╰──── 2026-10-23T07:00:22.8863182Z  help: Consider removing this declaration. 2026-10-23T07:00:22.8863185Z 2026-10-23T07:00:22.8863368Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T07:00:22.8863544Z ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:555:70] 2026-10-23T07:00:22.8863630Z 554 │ assert.deepStrictEqual( 2026-10-23T07:00:22.8863796Z 555 │ (yield* Ref.get(fixture.syncCommands)).map(({ commandId: _, ...rest }) => rest), 2026-10-23T07:00:22.8863918Z ·  ┬ 2026-10-23T07:00:22.8864086Z · ╰── '_' is declared here 2026-10-23T07:00:22.8864149Z 556 │ [ 2026-10-23T07:00:22.8864201Z ╰──── 2026-10-23T07:00:22.8864303Z  help: Consider removing this parameter. 2026-10-23T07:00:22.8864305Z 2026-10-23T07:00:22.8864487Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T07:00:22.8864729Z ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:1155:70] 2026-10-23T07:00:22.8864817Z 1154 │ assert.deepStrictEqual( 2026-10-23T07:00:22.8864981Z 1155 │ (yield* Ref.get(fixture.linkCommands)).map(({ commandId: _, ...rest }) => rest), 2026-10-23T07:00:22.8865102Z ·  ┬ 2026-10-23T07:00:22.8865272Z · ╰── '_' is declared here 2026-10-23T07:00:22.8865335Z 1156 │ [ 2026-10-23T07:00:22.8865387Z ╰──── 2026-10-23T07:00:22.8865487Z  help: Consider removing this parameter. 2026-10-23T07:00:22.8865490Z 2026-10-23T07:00:22.8865956Z ⚠ 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-23T07:00:22.8866128Z ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:566:7] 2026-10-23T07:00:22.8866234Z 565 │ let afterSequence = created[0]!.sequence; 2026-10-23T07:00:22.8866427Z 566 │ ╭─▶ for (let index = 1; index <= 32; index += 1) { 2026-10-23T07:00:22.8866529Z 567 │ │ const nextEvent = { 2026-10-23T07:00:22.8866690Z 568 │ │ id: EventId.make(`event:foundation-stream-race:${index}`), 2026-10-23T07:00:22.8866823Z 569 │ │ type: "thread.metadata-updated" as const, 2026-10-23T07:00:22.8866917Z 570 │ │ threadId, 2026-10-23T07:00:22.8867070Z 571 │ │ providerInstanceId, 2026-10-23T07:00:22.8867200Z 572 │ │ occurredAt: now, 2026-10-23T07:00:22.8867348Z 573 │ │ payload: { ...thread, title: `Race update ${index}` }, 2026-10-23T07:00:22.8867479Z 574 │ │ } satisfies OrchestrationV2DomainEvent; 2026-10-23T07:00:22.8867592Z 575 │ │ const reader = yield* eventSink 2026-10-23T07:00:22.8867715Z 576 │ │ .stream({ threadId, afterSequence }) 2026-10-23T07:00:22.8867847Z 577 │ │ .pipe(Stream.runHead, Effect.forkChild); 2026-10-23T07:00:22.8867954Z 578 │ │ yield* Effect.yieldNow; 2026-10-23T07:00:22.8868115Z 579 │ │ const written = yield* eventSink.write({ events: [nextEvent] }); 2026-10-23T07:00:22.8868251Z 580 │ │ const received = yield* Fiber.join(reader); 2026-10-23T07:00:22.8868371Z 581 │ │ if (Option.isNone(received)) { 2026-10-23T07:00:22.8868585Z 582 │ │ return yield* Effect.die("The event stream ended before delivering the live event."); 2026-10-23T07:00:22.8868664Z 583 │ │ } 2026-10-23T07:00:22.8868826Z 584 │ │ assert.equal(received.value.sequence, written[0]?.sequence); 2026-10-23T07:00:22.8868971Z 585 │ │ assert.equal(received.value.event.id, nextEvent.id); 2026-10-23T07:00:22.8869100Z 586 │ │ afterSequence = received.value.sequence; 2026-10-23T07:00:22.8869230Z 587 │ ╰─▶ } 2026-10-23T07:00:22.8869299Z 588 │ }), 2026-10-23T07:00:22.8869356Z ╰──── 2026-10-23T07:00:22.8869359Z 2026-10-23T07:00:22.8869822Z ⚠ 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-23T07:00:22.8869996Z ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:2327:9] 2026-10-23T07:00:22.8870072Z 2326 │ let settled = false; 2026-10-23T07:00:22.8870232Z 2327 │ ╭─▶ while (!settled) { 2026-10-23T07:00:22.8870390Z 2328 │ │ settled = (yield* outbox.listByCommandId(commandId)).every( 2026-10-23T07:00:22.8870521Z 2329 │ │ (effect) => effect.status === "succeeded", 2026-10-23T07:00:22.8870607Z 2330 │ │ ); 2026-10-23T07:00:22.8870735Z 2331 │ │ if (!settled) yield* Effect.yieldNow; 2026-10-23T07:00:22.8870870Z 2332 │ ╰─▶ } 2026-10-23T07:00:22.8870989Z 2333 │ }).pipe(Effect.provide(layerWorker), Effect.scoped); 2026-10-23T07:00:22.8871041Z ╰──── 2026-10-23T07:00:22.8871043Z 2026-10-23T07:00:22.8871188Z ⚠ react(refs): Cannot access refs during render 2026-10-23T07:00:22.8871348Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:122:38] 2026-10-23T07:00:22.8871508Z 121 │ const audioLevelsRef = useRef(Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-23T07:00:22.8871631Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-23T07:00:22.8871801Z ·  ───────────┬────────── 2026-10-23T07:00:22.8872009Z · ╰── Cannot access ref value during render 2026-10-23T07:00:22.8872132Z 123 │ const sessionRef = useRef(null); 2026-10-23T07:00:22.8872184Z ╰──── 2026-10-23T07:00:22.8872656Z  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-23T07:00:22.8872951Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T07:00:22.8872954Z 2026-10-23T07:00:22.8873103Z ⚠ react(refs): Cannot access refs during render 2026-10-23T07:00:22.8873267Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:8] 2026-10-23T07:00:22.8873319Z 125 │ 2026-10-23T07:00:22.8873431Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-23T07:00:22.8873519Z ·  ─────────┬──────── 2026-10-23T07:00:22.8873669Z · ╰── Cannot access ref value during render 2026-10-23T07:00:22.8873769Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-23T07:00:22.8873822Z ╰──── 2026-10-23T07:00:22.8874286Z  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-23T07:00:22.8874612Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T07:00:22.8874618Z 2026-10-23T07:00:22.8874763Z ⚠ react(refs): Cannot access refs during render 2026-10-23T07:00:22.8874919Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:7] 2026-10-23T07:00:22.8874974Z 125 │ 2026-10-23T07:00:22.8875082Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-23T07:00:22.8875170Z ·  ─────────┬───────── 2026-10-23T07:00:22.8875315Z · ╰── Cannot access ref value during render 2026-10-23T07:00:22.8875417Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-23T07:00:22.8875470Z ╰──── 2026-10-23T07:00:22.8875938Z  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-23T07:00:22.8876226Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T07:00:22.8876231Z 2026-10-23T07:00:22.8876371Z ⚠ react(refs): Cannot access refs during render 2026-10-23T07:00:22.8876530Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:31] 2026-10-23T07:00:22.8876584Z 125 │ 2026-10-23T07:00:22.8876691Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-23T07:00:22.8876803Z ·  ─────────┬───────── 2026-10-23T07:00:22.8877026Z · ╰── Cannot access ref value during render 2026-10-23T07:00:22.8877158Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-23T07:00:22.8877211Z ╰──── 2026-10-23T07:00:22.8877672Z  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-23T07:00:22.8877963Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T07:00:22.8877966Z 2026-10-23T07:00:22.8878108Z ⚠ react(refs): Cannot access refs during render 2026-10-23T07:00:22.8878270Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:30] 2026-10-23T07:00:22.8878324Z 125 │ 2026-10-23T07:00:22.8878431Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-23T07:00:22.8878545Z ·  ──────────┬───────── 2026-10-23T07:00:22.8878711Z · ╰── Cannot access ref value during render 2026-10-23T07:00:22.8878812Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-23T07:00:22.8878863Z ╰──── 2026-10-23T07:00:22.8879327Z  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-23T07:00:22.8879620Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T07:00:22.8879625Z 2026-10-23T07:00:22.8879768Z ⚠ react(refs): Cannot access refs during render 2026-10-23T07:00:22.8879923Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:127:46] 2026-10-23T07:00:22.8880036Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-23T07:00:22.8880228Z 127 │ ╭─▶ const recorder = createLazyVoiceRecorder({ 2026-10-23T07:00:22.8880403Z 128 │ │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-23T07:00:22.8880527Z 129 │ │ onStatus: (status: RecordingStatus) => { 2026-10-23T07:00:22.8880678Z 130 │ │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-23T07:00:22.8880802Z 131 │ │ isFinished: status.isFinished, 2026-10-23T07:00:22.8880981Z 132 │ │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-23T07:00:22.8881085Z 133 │ │ error: status.error, 2026-10-23T07:00:22.8881181Z 134 │ │ url: status.url, 2026-10-23T07:00:22.8881267Z 135 │ │ }); 2026-10-23T07:00:22.8881346Z 136 │ │ }, 2026-10-23T07:00:22.8881543Z 137 │ │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-23T07:00:22.8881650Z 138 │ │ selectInput: (inputs) => { 2026-10-23T07:00:22.8881807Z 139 │ │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-23T07:00:22.8881999Z 140 │ │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-23T07:00:22.8882194Z 141 │ │ const known = microphoneOrder(preferences.value.microphones); 2026-10-23T07:00:22.8882331Z 142 │ │ const order = rememberMicrophones(known, inputs); 2026-10-23T07:00:22.8882434Z 143 │ │ if (order !== known) { 2026-10-23T07:00:22.8882575Z 144 │ │ registry.set(updateMobilePreferencesAtom, { 2026-10-23T07:00:22.8882691Z 145 │ │ transform: (current) => ({ 2026-10-23T07:00:22.8882896Z 146 │ │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-23T07:00:22.8882985Z 147 │ │ }), 2026-10-23T07:00:22.8883074Z 148 │ │ }); 2026-10-23T07:00:22.8883157Z 149 │ │ } 2026-10-23T07:00:22.8883296Z 150 │ │ return preferredMicrophoneInput(inputs, order); 2026-10-23T07:00:22.8883376Z 151 │ │ }, 2026-10-23T07:00:22.8883510Z 152 │ ├─▶ }); 2026-10-23T07:00:22.8883812Z · ╰──── Passing a ref to a function may read its value during render 2026-10-23T07:00:22.8883900Z 153 │ recorderRef.current = recorder; 2026-10-23T07:00:22.8883952Z ╰──── 2026-10-23T07:00:22.8884424Z  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-23T07:00:22.8884752Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T07:00:22.8884754Z 2026-10-23T07:00:22.8884900Z ⚠ react(refs): Cannot access refs during render 2026-10-23T07:00:22.8885058Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:153:16] 2026-10-23T07:00:22.8885118Z 152 │ }); 2026-10-23T07:00:22.8885203Z 153 │ recorderRef.current = recorder; 2026-10-23T07:00:22.8885318Z ·  ─────┬─────────┬─── 2026-10-23T07:00:22.8885501Z · │ ╰── Cannot update ref value during render 2026-10-23T07:00:22.8885629Z · ╰── This value is a ref 2026-10-23T07:00:22.8885739Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-23T07:00:22.8885794Z ╰──── 2026-10-23T07:00:22.8886257Z  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-23T07:00:22.8886546Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T07:00:22.8886549Z 2026-10-23T07:00:22.8886693Z ⚠ react(refs): Cannot access refs during render 2026-10-23T07:00:22.8886852Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:48] 2026-10-23T07:00:22.8887004Z 153 │ recorderRef.current = recorder; 2026-10-23T07:00:22.8887230Z 154 │ ╭─▶ sessionRef.current = new VoiceInputSession({ 2026-10-23T07:00:22.8887320Z 155 │ │ recorder, 2026-10-23T07:00:22.8887450Z 156 │ │ getTranscriber: getLocalVoiceTranscriber, 2026-10-23T07:00:22.8887569Z 157 │ │ requestPermission: async () => { 2026-10-23T07:00:22.8887735Z 158 │ │ const permission = await requestRecordingPermissionsAsync(); 2026-10-23T07:00:22.8887929Z 159 │ │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-23T07:00:22.8888008Z 160 │ │ }, 2026-10-23T07:00:22.8888151Z 161 │ │ configureRecording: configureVoiceRecordingAudio, 2026-10-23T07:00:22.8888292Z 162 │ │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-23T07:00:22.8888428Z 163 │ │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-23T07:00:22.8888542Z 164 │ │ onStateChange: (nextState) => 2026-10-23T07:00:22.8888633Z 165 │ │ setState({ 2026-10-23T07:00:22.8888735Z 166 │ │ state: nextState, 2026-10-23T07:00:22.8888871Z 167 │ │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-23T07:00:22.8889001Z 168 │ │ label: sessionRef.current?.label ?? null, 2026-10-23T07:00:22.8889083Z 169 │ │ }), 2026-10-23T07:00:22.8889213Z 170 │ ├─▶ }); 2026-10-23T07:00:22.8889413Z · ╰──── Cannot access ref value during render 2026-10-23T07:00:22.8889476Z 171 │ } 2026-10-23T07:00:22.8889529Z ╰──── 2026-10-23T07:00:22.8889995Z  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-23T07:00:22.8890282Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T07:00:22.8890288Z 2026-10-23T07:00:22.8890437Z ⚠ react(refs): Cannot access refs during render 2026-10-23T07:00:22.8890598Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:15] 2026-10-23T07:00:22.8890730Z 153 │ recorderRef.current = recorder; 2026-10-23T07:00:22.8890864Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-23T07:00:22.8890974Z ·  ─────┬────────┬─── 2026-10-23T07:00:22.8891158Z · │ ╰── Cannot update ref value during render 2026-10-23T07:00:22.8891276Z · ╰── This value is a ref 2026-10-23T07:00:22.8891343Z 155 │ recorder, 2026-10-23T07:00:22.8891393Z ╰──── 2026-10-23T07:00:22.8891858Z  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-23T07:00:22.8892151Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T07:00:22.8892155Z 2026-10-23T07:00:22.8892299Z ⚠ react(refs): Cannot access refs during render 2026-10-23T07:00:22.8892456Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:7] 2026-10-23T07:00:22.8892544Z 184 │ return () => subscription.remove(); 2026-10-23T07:00:22.8892614Z 185 │ }, [controller]); 2026-10-23T07:00:22.8892692Z ·  ─────┬──── 2026-10-23T07:00:22.8892834Z · ╰── Cannot access ref value during render 2026-10-23T07:00:22.8892892Z 186 │ 2026-10-23T07:00:22.8892944Z ╰──── 2026-10-23T07:00:22.8893413Z  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-23T07:00:22.8893707Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T07:00:22.8893709Z 2026-10-23T07:00:22.8893850Z ⚠ react(refs): Cannot access refs during render 2026-10-23T07:00:22.8894009Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:6] 2026-10-23T07:00:22.8894096Z 184 │ return () => subscription.remove(); 2026-10-23T07:00:22.8894162Z 185 │ }, [controller]); 2026-10-23T07:00:22.8894237Z ·  ──────┬───── 2026-10-23T07:00:22.8894381Z · ╰── Cannot access ref value during render 2026-10-23T07:00:22.8894441Z 186 │ 2026-10-23T07:00:22.8894497Z ╰──── 2026-10-23T07:00:22.8894987Z  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-23T07:00:22.8895279Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T07:00:22.8895282Z 2026-10-23T07:00:22.8895425Z ⚠ react(refs): Cannot access refs during render 2026-10-23T07:00:22.8895583Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:6] 2026-10-23T07:00:22.8895641Z 191 │ }, 2026-10-23T07:00:22.8895712Z 192 │ [controller, recorder], 2026-10-23T07:00:22.8895841Z ·  ─────┬──── 2026-10-23T07:00:22.8896017Z · ╰── Cannot access ref value during render 2026-10-23T07:00:22.8896074Z 193 │ ); 2026-10-23T07:00:22.8896124Z ╰──── 2026-10-23T07:00:22.8896589Z  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-23T07:00:22.8896877Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T07:00:22.8896880Z 2026-10-23T07:00:22.8897024Z ⚠ react(refs): Cannot access refs during render 2026-10-23T07:00:22.8897184Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:175:20] 2026-10-23T07:00:22.8897280Z 174 │ const controller = session.controller; 2026-10-23T07:00:22.8897369Z 175 │ const recorder = recorderRef.current; 2026-10-23T07:00:22.8897473Z ·  ─────────┬───────── 2026-10-23T07:00:22.8897629Z · ╰── Cannot access ref value during render 2026-10-23T07:00:22.8897684Z 176 │ 2026-10-23T07:00:22.8897737Z ╰──── 2026-10-23T07:00:22.8898200Z  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-23T07:00:22.8898494Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T07:00:22.8898500Z 2026-10-23T07:00:22.8898641Z ⚠ react(refs): Cannot access refs during render 2026-10-23T07:00:22.8898800Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:5] 2026-10-23T07:00:22.8898858Z 191 │ }, 2026-10-23T07:00:22.8898930Z 192 │ [controller, recorder], 2026-10-23T07:00:22.8899019Z ·  ───────────┬────────── 2026-10-23T07:00:22.8899170Z · ╰── Cannot access ref value during render 2026-10-23T07:00:22.8899226Z 193 │ ); 2026-10-23T07:00:22.8899278Z ╰──── 2026-10-23T07:00:22.8899743Z  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-23T07:00:22.8900034Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T07:00:22.8900036Z 2026-10-23T07:00:22.8900180Z ⚠ react(refs): Cannot access refs during render 2026-10-23T07:00:22.8900338Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:20] 2026-10-23T07:00:22.8900430Z 245 │ return () => clearInterval(intervalId); 2026-10-23T07:00:22.8900538Z 246 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-23T07:00:22.8900628Z ·  ─────┬──── 2026-10-23T07:00:22.8900783Z · ╰── Cannot access ref value during render 2026-10-23T07:00:22.8900837Z 247 │ 2026-10-23T07:00:22.8900936Z ╰──── 2026-10-23T07:00:22.8901426Z  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-23T07:00:22.8901714Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T07:00:22.8901716Z 2026-10-23T07:00:22.8901861Z ⚠ react(refs): Cannot access refs during render 2026-10-23T07:00:22.8902017Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:6] 2026-10-23T07:00:22.8902108Z 245 │ return () => clearInterval(intervalId); 2026-10-23T07:00:22.8902217Z 246 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-23T07:00:22.8902350Z ·  ────────────────────────┬─────────────────────── 2026-10-23T07:00:22.8902508Z · ╰── Cannot access ref value during render 2026-10-23T07:00:22.8902564Z 247 │ 2026-10-23T07:00:22.8902618Z ╰──── 2026-10-23T07:00:22.8903081Z  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-23T07:00:22.8903370Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T07:00:22.8903372Z 2026-10-23T07:00:22.8903513Z ⚠ react(refs): Cannot access refs during render 2026-10-23T07:00:22.8903677Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:261:5] 2026-10-23T07:00:22.8903749Z 260 │ setOwnerFocused, 2026-10-23T07:00:22.8903814Z 261 │ session, 2026-10-23T07:00:22.8903885Z ·  ───┬─── 2026-10-23T07:00:22.8904024Z · ╰── Cannot access ref value during render 2026-10-23T07:00:22.8904089Z 262 │ stop, 2026-10-23T07:00:22.8904142Z ╰──── 2026-10-23T07:00:22.8904631Z  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-23T07:00:22.8904926Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T07:00:22.8904931Z 2026-10-23T07:00:22.8905073Z ⚠ react(refs): Cannot access refs during render 2026-10-23T07:00:22.8905233Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:251:10] 2026-10-23T07:00:22.8905290Z 250 │ 2026-10-23T07:00:22.8905430Z 251 │ ╭─▶ return { 2026-10-23T07:00:22.8905643Z 252 │ │ isAvailable: getLocalVoiceTranscriber() !== null || getNativeShowcaseScene() !== null, 2026-10-23T07:00:22.8905723Z 253 │ │ state, 2026-10-23T07:00:22.8905811Z 254 │ │ audioLevels, 2026-10-23T07:00:22.8905905Z 255 │ │ elapsedSeconds, 2026-10-23T07:00:22.8906086Z 256 │ │ isBusy: voiceInputBlocksSubmission(state), 2026-10-23T07:00:22.8906200Z 257 │ │ ownerKey, 2026-10-23T07:00:22.8906281Z 258 │ │ label, 2026-10-23T07:00:22.8906370Z 259 │ │ focusedOwners, 2026-10-23T07:00:22.8906466Z 260 │ │ setOwnerFocused, 2026-10-23T07:00:22.8906550Z 261 │ │ session, 2026-10-23T07:00:22.8906629Z 262 │ │ stop, 2026-10-23T07:00:22.8906707Z 263 │ │ cancel, 2026-10-23T07:00:22.8906837Z 264 │ ├─▶ }; 2026-10-23T07:00:22.8907035Z · ╰──── Cannot access ref value during render 2026-10-23T07:00:22.8907092Z 265 │ } 2026-10-23T07:00:22.8907143Z ╰──── 2026-10-23T07:00:22.8907612Z  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-23T07:00:22.8907905Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T07:00:22.8907908Z 2026-10-23T07:00:22.8908067Z ⚠ react(immutability): This value cannot be modified 2026-10-23T07:00:22.8908228Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7] 2026-10-23T07:00:22.8908385Z 121 │ const audioLevelsRef = useRef(Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-23T07:00:22.8908510Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-23T07:00:22.8908594Z ·  ─────┬───── 2026-10-23T07:00:22.8908733Z · ╰── `audioLevels` originates here 2026-10-23T07:00:22.8908850Z 123 │ const sessionRef = useRef(null); 2026-10-23T07:00:22.8908996Z 124 │ const recorderRef = useRef | null>(null); 2026-10-23T07:00:22.8909049Z 125 │ 2026-10-23T07:00:22.8909157Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-23T07:00:22.8909255Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-23T07:00:22.8909397Z 128 │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-23T07:00:22.8909490Z 129 │ onStatus: (status: RecordingStatus) => { 2026-10-23T07:00:22.8909611Z 130 │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-23T07:00:22.8909700Z 131 │ isFinished: status.isFinished, 2026-10-23T07:00:22.8909846Z 132 │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-23T07:00:22.8909923Z 133 │ error: status.error, 2026-10-23T07:00:22.8909993Z 134 │ url: status.url, 2026-10-23T07:00:22.8910052Z 135 │ }); 2026-10-23T07:00:22.8910110Z 136 │ }, 2026-10-23T07:00:22.8910275Z 137 │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-23T07:00:22.8910352Z 138 │ selectInput: (inputs) => { 2026-10-23T07:00:22.8910477Z 139 │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-23T07:00:22.8910591Z 140 │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-23T07:00:22.8910725Z 141 │ const known = microphoneOrder(preferences.value.microphones); 2026-10-23T07:00:22.8910885Z 142 │ const order = rememberMicrophones(known, inputs); 2026-10-23T07:00:22.8910990Z 143 │ if (order !== known) { 2026-10-23T07:00:22.8911097Z 144 │ registry.set(updateMobilePreferencesAtom, { 2026-10-23T07:00:22.8911180Z 145 │ transform: (current) => ({ 2026-10-23T07:00:22.8911354Z 146 │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-23T07:00:22.8911417Z 147 │ }), 2026-10-23T07:00:22.8911479Z 148 │ }); 2026-10-23T07:00:22.8911538Z 149 │ } 2026-10-23T07:00:22.8911648Z 150 │ return preferredMicrophoneInput(inputs, order); 2026-10-23T07:00:22.8911708Z 151 │ }, 2026-10-23T07:00:22.8911764Z 152 │ }); 2026-10-23T07:00:22.8911848Z 153 │ recorderRef.current = recorder; 2026-10-23T07:00:22.8911947Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-23T07:00:22.8912010Z 155 │ recorder, 2026-10-23T07:00:22.8912116Z 156 │ getTranscriber: getLocalVoiceTranscriber, 2026-10-23T07:00:22.8912205Z 157 │ requestPermission: async () => { 2026-10-23T07:00:22.8912334Z 158 │ const permission = await requestRecordingPermissionsAsync(); 2026-10-23T07:00:22.8912492Z 159 │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-23T07:00:22.8912553Z 160 │ }, 2026-10-23T07:00:22.8912663Z 161 │ configureRecording: configureVoiceRecordingAudio, 2026-10-23T07:00:22.8912768Z 162 │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-23T07:00:22.8912873Z 163 │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-23T07:00:22.8912955Z 164 │ onStateChange: (nextState) => 2026-10-23T07:00:22.8913020Z 165 │ setState({ 2026-10-23T07:00:22.8913088Z 166 │ state: nextState, 2026-10-23T07:00:22.8913201Z 167 │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-23T07:00:22.8913303Z 168 │ label: sessionRef.current?.label ?? null, 2026-10-23T07:00:22.8913364Z 169 │ }), 2026-10-23T07:00:22.8913419Z 170 │ }); 2026-10-23T07:00:22.8913475Z 171 │ } 2026-10-23T07:00:22.8913528Z 172 │ 2026-10-23T07:00:22.8913611Z 173 │ const session = sessionRef.current; 2026-10-23T07:00:22.8913701Z 174 │ const controller = session.controller; 2026-10-23T07:00:22.8913787Z 175 │ const recorder = recorderRef.current; 2026-10-23T07:00:22.8913840Z 176 │ 2026-10-23T07:00:22.8913905Z 177 │ useEffect(() => { 2026-10-23T07:00:22.8914057Z 178 │ const subscription = AppState.addEventListener("change", (nextState) => { 2026-10-23T07:00:22.8914199Z 179 │ // iOS reports `inactive` while its permission dialog is open. Only the 2026-10-23T07:00:22.8914344Z 180 │ // real background state cancels preparation; recorder status handles 2026-10-23T07:00:22.8914449Z 181 │ // calls and route interruptions during capture. 2026-10-23T07:00:22.8914596Z 182 │ if (nextState === "background") controller.appMovedToBackground(); 2026-10-23T07:00:22.8914654Z 183 │ }); 2026-10-23T07:00:22.8914767Z 184 │ return () => subscription.remove(); 2026-10-23T07:00:22.8914831Z 185 │ }, [controller]); 2026-10-23T07:00:22.8914885Z 186 │ 2026-10-23T07:00:22.8914945Z 187 │ useEffect( 2026-10-23T07:00:22.8915008Z 188 │ () => () => { 2026-10-23T07:00:22.8915079Z 189 │ controller.dispose(); 2026-10-23T07:00:22.8915150Z 190 │ recorder.release(); 2026-10-23T07:00:22.8915207Z 191 │ }, 2026-10-23T07:00:22.8915277Z 192 │ [controller, recorder], 2026-10-23T07:00:22.8915330Z 193 │ ); 2026-10-23T07:00:22.8915383Z 194 │ 2026-10-23T07:00:22.8915500Z 195 │ useEffect(() => { 2026-10-23T07:00:22.8915625Z 196 │ if (state.phase !== "recording") return; 2026-10-23T07:00:22.8915679Z 197 │ 2026-10-23T07:00:22.8915828Z 198 │ const tag = `voice-input:${keepAwakeId}:${++keepAwakeSessionRef.current}`; 2026-10-23T07:00:22.8915933Z 199 │ const activation = activateKeepAwakeAsync(tag); 2026-10-23T07:00:22.8916015Z 200 │ void activation.catch(() => {}); 2026-10-23T07:00:22.8916081Z 201 │ return () => { 2026-10-23T07:00:22.8916230Z 202 │ // Release after activation settles, even if the recording ends immediately. 2026-10-23T07:00:22.8916370Z 203 │ void activation.then(() => deactivateKeepAwake(tag)).catch(() => {}); 2026-10-23T07:00:22.8916424Z 204 │ }; 2026-10-23T07:00:22.8916504Z 205 │ }, [keepAwakeId, state.phase]); 2026-10-23T07:00:22.8916557Z 206 │ 2026-10-23T07:00:22.8916621Z 207 │ useEffect(() => { 2026-10-23T07:00:22.8916758Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-23T07:00:22.8916813Z 209 │ 2026-10-23T07:00:22.8916935Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-23T07:00:22.8917090Z 211 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-23T07:00:22.8917191Z 212 │ audioLevels.value = audioLevelsRef.current; 2026-10-23T07:00:22.8917270Z ·  ─────┬───── 2026-10-23T07:00:22.8917409Z · ╰── `audioLevels` cannot be modified 2026-10-23T07:00:22.8917467Z 213 │ } 2026-10-23T07:00:22.8917521Z ╰──── 2026-10-23T07:00:22.8917791Z  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-23T07:00:22.8918103Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T07:00:22.8918108Z 2026-10-23T07:00:22.8918307Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-23T07:00:22.8918467Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7] 2026-10-23T07:00:22.8918518Z 206 │ 2026-10-23T07:00:22.8918584Z 207 │ useEffect(() => { 2026-10-23T07:00:22.8918663Z ·  ───┬─── 2026-10-23T07:00:22.8918878Z · ╰── This function may (indirectly) reassign or modify `audioLevels` after render 2026-10-23T07:00:22.8919015Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-23T07:00:22.8919069Z 209 │ 2026-10-23T07:00:22.8919240Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-23T07:00:22.8919422Z 211 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-23T07:00:22.8919522Z 212 │ audioLevels.value = audioLevelsRef.current; 2026-10-23T07:00:22.8919600Z ·  ─────┬───── 2026-10-23T07:00:22.8919733Z · ╰── This modifies `audioLevels` 2026-10-23T07:00:22.8919789Z 213 │ } 2026-10-23T07:00:22.8919839Z ╰──── 2026-10-23T07:00:22.8920178Z  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-23T07:00:22.8920485Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T07:00:22.8920490Z 2026-10-23T07:00:22.8920649Z ⚠ react(immutability): This value cannot be modified 2026-10-23T07:00:22.8920817Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:93:5] 2026-10-23T07:00:22.8920873Z 90 │ }) { 2026-10-23T07:00:22.8920986Z 91 │ const rotation = useSharedValue(props.hidden ? 1 : 0); 2026-10-23T07:00:22.8921063Z ·  ────┬─── 2026-10-23T07:00:22.8921191Z · ╰── `rotation` originates here 2026-10-23T07:00:22.8921261Z 92 │ useLayoutEffect(() => { 2026-10-23T07:00:22.8921405Z 93 │ rotation.value = withTiming(props.hidden ? 1 : 0, TOOLBAR_FLIP_TIMING); 2026-10-23T07:00:22.8923295Z ·  ────┬─── 2026-10-23T07:00:22.8923446Z · ╰── `rotation` cannot be modified 2026-10-23T07:00:22.8923528Z 94 │ }, [props.hidden, rotation]); 2026-10-23T07:00:22.8923580Z ╰──── 2026-10-23T07:00:22.8924201Z  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-23T07:00:22.8924506Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T07:00:22.8924509Z 2026-10-23T07:00:22.8924708Z ⚠ react(immutability): This value cannot be modified 2026-10-23T07:00:22.8924881Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:269:5] 2026-10-23T07:00:22.8924974Z 266 │ const variant = props.variant ?? "plain"; 2026-10-23T07:00:22.8925107Z 267 │ const loadingVisibility = useSharedValue(props.loading ? 1 : 0); 2026-10-23T07:00:22.8925200Z ·  ────────┬──────── 2026-10-23T07:00:22.8925349Z · ╰── `loadingVisibility` originates here 2026-10-23T07:00:22.8925419Z 268 │ useLayoutEffect(() => { 2026-10-23T07:00:22.8925576Z 269 │ loadingVisibility.value = withTiming(props.loading ? 1 : 0, DICTATION_TIMING); 2026-10-23T07:00:22.8925659Z ·  ────────┬──────── 2026-10-23T07:00:22.8925807Z · ╰── `loadingVisibility` cannot be modified 2026-10-23T07:00:22.8925898Z 270 │ }, [loadingVisibility, props.loading]); 2026-10-23T07:00:22.8925949Z ╰──── 2026-10-23T07:00:22.8926210Z  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-23T07:00:22.8926593Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T07:00:22.8926634Z 2026-10-23T07:00:22.8926789Z ⚠ react(immutability): This value cannot be modified 2026-10-23T07:00:22.8926958Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:328:5] 2026-10-23T07:00:22.8927011Z 325 │ }) { 2026-10-23T07:00:22.8927171Z 326 │ const recordingVisibility = useSharedValue(props.phase === "recording" ? 1 : 0); 2026-10-23T07:00:22.8927260Z ·  ─────────┬───────── 2026-10-23T07:00:22.8927413Z · ╰── `recordingVisibility` originates here 2026-10-23T07:00:22.8927481Z 327 │ useLayoutEffect(() => { 2026-10-23T07:00:22.8927674Z 328 │ recordingVisibility.value = withTiming(props.phase === "recording" ? 1 : 0, DICTATION_TIMING); 2026-10-23T07:00:22.8927762Z ·  ─────────┬───────── 2026-10-23T07:00:22.8927914Z · ╰── `recordingVisibility` cannot be modified 2026-10-23T07:00:22.8928003Z 329 │ }, [props.phase, recordingVisibility]); 2026-10-23T07:00:22.8928059Z ╰──── 2026-10-23T07:00:22.8928324Z  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-23T07:00:22.8928629Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T07:00:22.8928632Z 2026-10-23T07:00:22.8928862Z ⚠ eslint(no-unused-vars): Function 'resolveThreadWorkspaceCwd' is declared but never used. 2026-10-23T07:00:22.8928987Z ╭─[apps/server/src/checkpointing/Utils.ts:12:10] 2026-10-23T07:00:22.8929043Z 11 │ 2026-10-23T07:00:22.8929142Z 12 │ function resolveThreadWorkspaceCwd(input: { 2026-10-23T07:00:22.8929243Z ·  ────────────┬──────────── 2026-10-23T07:00:22.8929411Z · ╰── 'resolveThreadWorkspaceCwd' is declared here 2026-10-23T07:00:22.8929478Z 13 │ readonly thread: { 2026-10-23T07:00:22.8929530Z ╰──── 2026-10-23T07:00:22.8929634Z  help: Consider removing this declaration. 2026-10-23T07:00:22.8929636Z 2026-10-23T07:00:22.8929788Z ⚠ react(immutability): This value cannot be modified 2026-10-23T07:00:22.8929956Z ╭─[apps/mobile/src/features/voice-input/GlobalVoiceInputControl.tsx:68:5] 2026-10-23T07:00:22.8930059Z 65 │ const [expanded, setExpanded] = useState(false); 2026-10-23T07:00:22.8930150Z 66 │ const progress = useSharedValue(0); 2026-10-23T07:00:22.8930227Z ·  ────┬─── 2026-10-23T07:00:22.8930357Z · ╰── `progress` originates here 2026-10-23T07:00:22.8930423Z 67 │ useEffect(() => { 2026-10-23T07:00:22.8930548Z 68 │ progress.value = withTiming(expanded ? 1 : 0, MORPH_TIMING); 2026-10-23T07:00:22.8930617Z ·  ────┬─── 2026-10-23T07:00:22.8930750Z · ╰── `progress` cannot be modified 2026-10-23T07:00:22.8930821Z 69 │ }, [expanded, progress]); 2026-10-23T07:00:22.8930874Z ╰──── 2026-10-23T07:00:22.8931135Z  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-23T07:00:22.8931586Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T07:00:22.8931631Z 2026-10-23T07:00:22.8931798Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-23T07:00:22.8931941Z ╭─[apps/server/src/process/externalLauncher.test.ts:186:12] 2026-10-23T07:00:22.8931993Z 185 │ 2026-10-23T07:00:22.8932098Z 186 │ for (const {} of ["darwin", "linux"] as const) { 2026-10-23T07:00:22.8932170Z ·  ── 2026-10-23T07:00:22.8932223Z 187 │ } 2026-10-23T07:00:22.8932273Z ╰──── 2026-10-23T07:00:22.8932504Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-23T07:00:22.8932506Z 2026-10-23T07:00:22.8932678Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-23T07:00:22.8932819Z ╭─[apps/server/src/process/externalLauncher.test.ts:189:12] 2026-10-23T07:00:22.8932870Z 188 │ 2026-10-23T07:00:22.8932937Z 189 │ for (const {} of [ 2026-10-23T07:00:22.8933008Z ·  ── 2026-10-23T07:00:22.8933099Z 190 │ { kind: "browser", folderVerb: "none" }, 2026-10-23T07:00:22.8933150Z ╰──── 2026-10-23T07:00:22.8933378Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-23T07:00:22.8933380Z 2026-10-23T07:00:22.8933544Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-23T07:00:22.8933683Z ╭─[apps/server/src/process/externalLauncher.test.ts:311:12] 2026-10-23T07:00:22.8933734Z 310 │ 2026-10-23T07:00:22.8933870Z 311 │ for (const {} of ["rejected", "spawn-error", "stalled"] as const) { 2026-10-23T07:00:22.8933943Z ·  ── 2026-10-23T07:00:22.8933997Z 312 │ } 2026-10-23T07:00:22.8934047Z ╰──── 2026-10-23T07:00:22.8934273Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-23T07:00:22.8934275Z 2026-10-23T07:00:22.8934438Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-23T07:00:22.8934586Z ╭─[apps/server/src/process/externalLauncher.test.ts:314:12] 2026-10-23T07:00:22.8934637Z 313 │ 2026-10-23T07:00:22.8934727Z 314 │ for (const {} of [ 2026-10-23T07:00:22.8934796Z ·  ── 2026-10-23T07:00:22.8934851Z 315 │ { 2026-10-23T07:00:22.8934901Z ╰──── 2026-10-23T07:00:22.8935129Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-23T07:00:22.8935135Z 2026-10-23T07:00:22.8935405Z ⚠ eslint(no-unused-vars): Variable 'layerDaemon' is declared but never used. Unused variables should start with a '_'. 2026-10-23T07:00:22.8935542Z ╭─[apps/server/src/orchestration-v2/EffectWorker.ts:914:7] 2026-10-23T07:00:22.8935594Z 913 │ 2026-10-23T07:00:22.8935779Z 914 │ const layerDaemon: Layer.Layer = Layer.effectDiscard( 2026-10-23T07:00:22.8935856Z ·  ─────┬───── 2026-10-23T07:00:22.8935991Z · ╰── 'layerDaemon' is declared here 2026-10-23T07:00:22.8936079Z 915 │ runDaemon.pipe(Effect.forkScoped), 2026-10-23T07:00:22.8936128Z ╰──── 2026-10-23T07:00:22.8936283Z  help: Consider removing this declaration. 2026-10-23T07:00:22.8936314Z 2026-10-23T07:00:22.8936591Z ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'. 2026-10-23T07:00:22.8936722Z ╭─[apps/server/src/provider/AntigravityAuth.ts:285:20] 2026-10-23T07:00:22.8936776Z 284 │ }, 2026-10-23T07:00:22.8936863Z 285 │ (effect, flow, stopSessions) => 2026-10-23T07:00:22.8936956Z ·  ──────┬───── 2026-10-23T07:00:22.8937104Z · ╰── 'stopSessions' is declared here 2026-10-23T07:00:22.8937167Z 286 │ effect.pipe( 2026-10-23T07:00:22.8937221Z ╰──── 2026-10-23T07:00:22.8937324Z  help: Consider removing this parameter. 2026-10-23T07:00:22.8937327Z 2026-10-23T07:00:22.8937586Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-23T07:00:22.8937751Z ╭─[apps/server/src/orchestration-v2/ThreadPullRequestService.ts:408:7] 2026-10-23T07:00:22.8937804Z 407 │ 2026-10-23T07:00:22.8937930Z 408 │ const layer = Layer.effect(ThreadPullRequestServiceV2, make); 2026-10-23T07:00:22.8938000Z ·  ──┬── 2026-10-23T07:00:22.8938122Z · ╰── 'layer' is declared here 2026-10-23T07:00:22.8938174Z ╰──── 2026-10-23T07:00:22.8938277Z  help: Consider removing this declaration. 2026-10-23T07:00:22.8938279Z 2026-10-23T07:00:22.8938485Z ⚠ eslint(no-unused-vars): Function 'describeSchedule' is declared but never used. 2026-10-23T07:00:22.8938608Z ╭─[apps/server/src/scheduledTasks/Schedule.ts:79:10] 2026-10-23T07:00:22.8938667Z 78 │ 2026-10-23T07:00:22.8938807Z 79 │ function describeSchedule(schedule: ScheduledTaskSchedule): string { 2026-10-23T07:00:22.8938894Z ·  ────────┬─────── 2026-10-23T07:00:22.8939038Z · ╰── 'describeSchedule' is declared here 2026-10-23T07:00:22.8939147Z 80 │ if (schedule.type === "webhook") return "On webhook"; 2026-10-23T07:00:22.8939198Z ╰──── 2026-10-23T07:00:22.8939300Z  help: Consider removing this declaration. 2026-10-23T07:00:22.8939302Z 2026-10-23T07:00:22.8939768Z ⚠ 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-23T07:00:22.8939958Z ╭─[apps/server/src/scheduledTasks/ScheduledTaskService.webhook.test.ts:521:13] 2026-10-23T07:00:22.8940033Z 520 │ })).delivery; 2026-10-23T07:00:22.8940234Z 521 │ ╭─▶ while (delivery.outcome === "accepted") { 2026-10-23T07:00:22.8940349Z 522 │ │ yield* Effect.yieldNow; 2026-10-23T07:00:22.8940493Z 523 │ │ delivery = (yield* service.getWebhookDelivery({ 2026-10-23T07:00:22.8940592Z 524 │ │ id: task.id, 2026-10-23T07:00:22.8940709Z 525 │ │ deliveryId: deliveryId!, 2026-10-23T07:00:22.8940808Z 526 │ │ })).delivery; 2026-10-23T07:00:22.8940945Z 527 │ ╰─▶ } 2026-10-23T07:00:22.8941112Z 528 │ assert.equal(delivery.outcome, "dispatch_failed"); 2026-10-23T07:00:22.8941196Z ╰──── 2026-10-23T07:00:22.8941199Z 2026-10-23T07:00:22.8941625Z ⚠ 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-23T07:00:22.8941771Z ╭─[apps/server/src/provider/acp/AntigravityProtocol.ts:263:20] 2026-10-23T07:00:22.8941853Z 262 │ ...(update._meta !== undefined 2026-10-23T07:00:22.8942016Z 263 │ ? { _meta: Schema.is(Schema.Record(Schema.String, Schema.Json))(meta) ? meta : null } 2026-10-23T07:00:22.8942104Z ·  ───────── 2026-10-23T07:00:22.8942164Z 264 │ : {}), 2026-10-23T07:00:22.8942217Z ╰──── 2026-10-23T07:00:22.8942220Z 2026-10-23T07:00:22.8942525Z ⚠ eslint(no-unused-vars): Variable 'layerFromProviderAdapter' is declared but never used. Unused variables should start with a '_'. 2026-10-23T07:00:22.8942690Z ╭─[apps/server/src/orchestration-v2/ProviderAdapterRegistry.ts:346:7] 2026-10-23T07:00:22.8942743Z 345 │ 2026-10-23T07:00:22.8942846Z 346 │ const layerFromProviderAdapter: Layer.Layer< 2026-10-23T07:00:22.8942940Z ·  ────────────┬─────────── 2026-10-23T07:00:22.8943105Z · ╰── 'layerFromProviderAdapter' is declared here 2026-10-23T07:00:22.8943185Z 347 │ ProviderAdapterRegistryV2, 2026-10-23T07:00:22.8943235Z ╰──── 2026-10-23T07:00:22.8943338Z  help: Consider removing this declaration. 2026-10-23T07:00:22.8943340Z 2026-10-23T07:00:22.8943799Z ⚠ 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-23T07:00:22.8943938Z ╭─[packages/contracts/src/composerContext.test.ts:181:18] 2026-10-23T07:00:22.8944071Z 180 │ it("sends a message without the records the wire cannot carry", () => { 2026-10-23T07:00:22.8944252Z 181 │ const wire = Schema.encodeUnknownSync(Schema.toCodecJson(OrchestrationMessageContext))({ 2026-10-23T07:00:22.8944358Z ·  ──────────────────────── 2026-10-23T07:00:22.8944423Z 182 │ version: 1, 2026-10-23T07:00:22.8944473Z ╰──── 2026-10-23T07:00:22.8944475Z 2026-10-23T07:00:22.8944790Z ⚠ eslint(no-unused-vars): Variable 'layerUnavailable' is declared but never used. Unused variables should start with a '_'. 2026-10-23T07:00:22.8944986Z ╭─[apps/server/src/orchestration-v2/Orchestrator.ts:12316:7] 2026-10-23T07:00:22.8945070Z 12315 │ 2026-10-23T07:00:22.8945209Z 12316 │ const layerUnavailable: Layer.Layer = Layer.succeed( 2026-10-23T07:00:22.8945295Z ·  ────────┬─────── 2026-10-23T07:00:22.8945443Z · ╰── 'layerUnavailable' is declared here 2026-10-23T07:00:22.8945511Z 12317 │ OrchestratorV2, 2026-10-23T07:00:22.8945563Z ╰──── 2026-10-23T07:00:22.8945666Z  help: Consider removing this declaration. 2026-10-23T07:00:22.8945668Z 2026-10-23T07:00:22.8945875Z ⚠ eslint(no-unused-vars): Identifier 'HookForwarder' is imported but never used. 2026-10-23T07:00:22.8945978Z ╭─[infra/relay/src/http/Api.ts:69:13] 2026-10-23T07:00:22.8946126Z 68 │ import * as EnvironmentLinks from "../environments/EnvironmentLinks.ts"; 2026-10-23T07:00:22.8946243Z 69 │ import * as HookForwarder from "../hooks/HookForwarder.ts"; 2026-10-23T07:00:22.8946329Z ·  ──────┬────── 2026-10-23T07:00:22.8946470Z · ╰── 'HookForwarder' is imported here 2026-10-23T07:00:22.8946574Z 70 │ import * as HeldHooks from "../hooks/HeldHooks.ts"; 2026-10-23T07:00:22.8946625Z ╰──── 2026-10-23T07:00:22.8946723Z  help: Consider removing this import. 2026-10-23T07:00:22.8946725Z 2026-10-23T07:00:22.8946924Z ⚠ eslint(no-unused-vars): Identifier 'identity' is imported but never used. 2026-10-23T07:00:22.8947025Z ╭─[apps/server/src/auth/http.ts:28:10] 2026-10-23T07:00:22.8947111Z 27 │ import * as Schema from "effect/Schema"; 2026-10-23T07:00:22.8947208Z 28 │ import { identity } from "effect/Function"; 2026-10-23T07:00:22.8947286Z ·  ────┬─── 2026-10-23T07:00:22.8947418Z · ╰── 'identity' is imported here 2026-10-23T07:00:22.8947499Z 29 │ import * as Layer from "effect/Layer"; 2026-10-23T07:00:22.8947551Z ╰──── 2026-10-23T07:00:22.8947647Z  help: Consider removing this import. 2026-10-23T07:00:22.8947650Z 2026-10-23T07:00:22.8948014Z ⚠ 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-23T07:00:22.8948137Z ╭─[apps/server/src/auth/RpcAuthorization.ts:236:17] 2026-10-23T07:00:22.8948275Z 235 │ const requiredScopesForSettingsUpdate = (payload: unknown) => { 2026-10-23T07:00:22.8948412Z 236 │ const input = Schema.decodeUnknownSync(SettingsUpdate)(payload); 2026-10-23T07:00:22.8948519Z ·  ──────────────────────── 2026-10-23T07:00:22.8948654Z 237 │ const scopes = requiredScopesForServerSettingsPatch(input.patch); 2026-10-23T07:00:22.8948706Z ╰──── 2026-10-23T07:00:22.8948708Z 2026-10-23T07:00:22.8949070Z ⚠ 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-23T07:00:22.8949193Z ╭─[apps/server/src/auth/RpcAuthorization.ts:255:26] 2026-10-23T07:00:22.8949290Z 254 │ if (method === WS_METHODS.assetsCreateUrl) { 2026-10-23T07:00:22.8949443Z 255 │ const { resource } = Schema.decodeUnknownSync(AssetCreateUrlInput)(payload); 2026-10-23T07:00:22.8949556Z ·  ──────────────────────── 2026-10-23T07:00:22.8949672Z 256 │ return [ 2026-10-23T07:00:22.8949750Z ╰──── 2026-10-23T07:00:22.8949754Z 2026-10-23T07:00:22.8950009Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-23T07:00:22.8950129Z ╭─[apps/server/src/serverRuntimeStartup.ts:728:7] 2026-10-23T07:00:22.8950182Z 727 │ 2026-10-23T07:00:22.8950263Z 728 │ const layer = layerWithOptions(); 2026-10-23T07:00:22.8950332Z ·  ──┬── 2026-10-23T07:00:22.8950456Z · ╰── 'layer' is declared here 2026-10-23T07:00:22.8950511Z ╰──── 2026-10-23T07:00:22.8950614Z  help: Consider removing this declaration. 2026-10-23T07:00:22.8950616Z 2026-10-23T07:00:22.8950845Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-23T07:00:22.8950967Z ╭─[apps/server/src/terminal/Manager.test.ts:731:31] 2026-10-23T07:00:22.8951024Z 730 │ ); 2026-10-23T07:00:22.8951195Z 731 │ const snapshot = events.filter((event) => event.type === "snapshot").at(-1)?.snapshot; 2026-10-23T07:00:22.8951289Z ·  ────── 2026-10-23T07:00:22.8951401Z 732 │ expect(snapshot?.history).toBe("aa😀\rEND"); 2026-10-23T07:00:22.8951453Z ╰──── 2026-10-23T07:00:22.8951624Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-23T07:00:22.8951627Z 2026-10-23T07:00:22.8951851Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-23T07:00:22.8951997Z ╭─[packages/client-runtime/src/operations/projects.ts:228:51] 2026-10-23T07:00:22.8952066Z 227 │ ): string { 2026-10-23T07:00:22.8952223Z 228 │ const folderName = workspaceRoot.split(/[\\/]/).filter(Boolean).at(-1) ?? ""; 2026-10-23T07:00:22.8952333Z ·  ────── 2026-10-23T07:00:22.8952466Z 229 │ return target.owner ? `${target.owner}/${folderName}` : folderName; 2026-10-23T07:00:22.8952516Z ╰──── 2026-10-23T07:00:22.8952683Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-23T07:00:22.8952685Z 2026-10-23T07:00:22.8952879Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T07:00:22.8953039Z ╭─[apps/mobile/src/features/terminal/TerminalContextSheet.tsx:72:15] 2026-10-23T07:00:22.8953108Z 71 │ new Promise((resolve) => setImmediate(resolve))); 2026-10-23T07:00:22.8958437Z 143 │ ╰─▶ } 2026-10-23T07:00:22.8958524Z 144 │ return yield* Fiber.join(fiber); 2026-10-23T07:00:22.8958576Z ╰──── 2026-10-23T07:00:22.8958579Z 2026-10-23T07:00:22.8959038Z ⚠ 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-23T07:00:22.8959169Z ╭─[packages/client-runtime/src/rpc/client.test.ts:131:9] 2026-10-23T07:00:22.8959233Z 130 │ ) { 2026-10-23T07:00:22.8959435Z 131 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-23T07:00:22.8959609Z 132 │ │ if (subscriptions.length >= count) { 2026-10-23T07:00:22.8959801Z 133 │ │ return; 2026-10-23T07:00:22.8959883Z 134 │ │ } 2026-10-23T07:00:22.8959990Z 135 │ │ yield* Effect.yieldNow; 2026-10-23T07:00:22.8960122Z 136 │ ╰─▶ } 2026-10-23T07:00:22.8960285Z 137 │ return yield* Effect.die(new Error(`Expected ${count} durable subscriptions.`)); 2026-10-23T07:00:22.8960335Z ╰──── 2026-10-23T07:00:22.8960337Z 2026-10-23T07:00:22.8960794Z ⚠ 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-23T07:00:22.8960930Z ╭─[packages/client-runtime/src/rpc/client.test.ts:252:7] 2026-10-23T07:00:22.8961092Z 251 │ yield* SubscriptionRef.set(activeSession, Option.some(session(firstClient))); 2026-10-23T07:00:22.8961340Z 252 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 1; attempt += 1) { 2026-10-23T07:00:22.8961447Z 253 │ │ yield* Effect.yieldNow; 2026-10-23T07:00:22.8961579Z 254 │ ╰─▶ } 2026-10-23T07:00:22.8961701Z 255 │ yield* SubscriptionRef.set(activeSession, Option.none()); 2026-10-23T07:00:22.8961751Z ╰──── 2026-10-23T07:00:22.8961755Z 2026-10-23T07:00:22.8962214Z ⚠ 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-23T07:00:22.8962348Z ╭─[packages/client-runtime/src/rpc/client.test.ts:258:7] 2026-10-23T07:00:22.8962402Z 257 │ 2026-10-23T07:00:22.8962647Z 258 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-23T07:00:22.8962750Z 259 │ │ yield* Effect.yieldNow; 2026-10-23T07:00:22.8962881Z 260 │ ╰─▶ } 2026-10-23T07:00:22.8962985Z 261 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-23T07:00:22.8963035Z ╰──── 2026-10-23T07:00:22.8963037Z 2026-10-23T07:00:22.8963495Z ⚠ 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-23T07:00:22.8963628Z ╭─[packages/client-runtime/src/rpc/client.test.ts:322:7] 2026-10-23T07:00:22.8963741Z 321 │ ); 2026-10-23T07:00:22.8963993Z 322 │ ╭─▶ for (let attempt = 0; attempt < 100 && observedFailures.length < 1; attempt += 1) { 2026-10-23T07:00:22.8964099Z 323 │ │ yield* Effect.yieldNow; 2026-10-23T07:00:22.8964227Z 324 │ ╰─▶ } 2026-10-23T07:00:22.8964281Z 325 │ 2026-10-23T07:00:22.8964332Z ╰──── 2026-10-23T07:00:22.8964337Z 2026-10-23T07:00:22.8964887Z ⚠ 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-23T07:00:22.8965058Z ╭─[packages/client-runtime/src/rpc/client.test.ts:330:7] 2026-10-23T07:00:22.8965219Z 329 │ yield* SubscriptionRef.set(activeSession, Option.some(session(secondClient))); 2026-10-23T07:00:22.8965464Z 330 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-23T07:00:22.8965567Z 331 │ │ yield* Effect.yieldNow; 2026-10-23T07:00:22.8965696Z 332 │ ╰─▶ } 2026-10-23T07:00:22.8965797Z 333 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-23T07:00:22.8965849Z ╰──── 2026-10-23T07:00:22.8965851Z 2026-10-23T07:00:22.8966189Z ⚠ 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-23T07:00:22.8966309Z ╭─[packages/effect-acp/src/schema.test.ts:18:12] 2026-10-23T07:00:22.8966468Z 17 │ const command = { name: "plan", description: "Make a plan", input: { hint: "Task" } }; 2026-10-23T07:00:22.8966590Z 18 │ expect(Schema.is(V1.AvailableCommand)(command)).toBe(true); 2026-10-23T07:00:22.8966670Z ·  ───────── 2026-10-23T07:00:22.8966730Z 19 │ expect( 2026-10-23T07:00:22.8966780Z ╰──── 2026-10-23T07:00:22.8966783Z 2026-10-23T07:00:22.8967113Z ⚠ 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-23T07:00:22.8967237Z ╭─[packages/effect-acp/src/schema.test.ts:20:7] 2026-10-23T07:00:22.8967299Z 19 │ expect( 2026-10-23T07:00:22.8967464Z 20 │ Schema.is(V2.AvailableCommand)({ ...command, input: { type: "text", hint: "Task" } }), 2026-10-23T07:00:22.8967537Z ·  ───────── 2026-10-23T07:00:22.8967601Z 21 │ ).toBe(true); 2026-10-23T07:00:22.8967654Z ╰──── 2026-10-23T07:00:22.8967657Z 2026-10-23T07:00:22.8968111Z ⚠ 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-23T07:00:22.8968247Z ╭─[packages/client-runtime/src/rpc/session.test.ts:226:3] 2026-10-23T07:00:22.8968303Z 225 │ ) { 2026-10-23T07:00:22.8968507Z 226 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-23T07:00:22.8968618Z 227 │ │ const socket = sockets[index]; 2026-10-23T07:00:22.8968705Z 228 │ │ if (socket) { 2026-10-23T07:00:22.8968799Z 229 │ │ return socket; 2026-10-23T07:00:22.8968873Z 230 │ │ } 2026-10-23T07:00:22.8968974Z 231 │ │ yield* Effect.yieldNow; 2026-10-23T07:00:22.8969095Z 232 │ ╰─▶ } 2026-10-23T07:00:22.8969266Z 233 │ return yield* Effect.die(new Error("Expected the RPC protocol to create a websocket.")); 2026-10-23T07:00:22.8969317Z ╰──── 2026-10-23T07:00:22.8969319Z 2026-10-23T07:00:22.8969836Z ⚠ 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-23T07:00:22.8969998Z ╭─[packages/client-runtime/src/rpc/session.test.ts:240:3] 2026-10-23T07:00:22.8970054Z 239 │ ) { 2026-10-23T07:00:22.8970250Z 240 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-23T07:00:22.8970464Z 241 │ │ const request = socket.sent.map((message) => decodeJson(message)).filter(isRpcRequest)[index]; 2026-10-23T07:00:22.8970555Z 242 │ │ if (request) { 2026-10-23T07:00:22.8970649Z 243 │ │ return request; 2026-10-23T07:00:22.8970724Z 244 │ │ } 2026-10-23T07:00:22.8970829Z 245 │ │ yield* Effect.yieldNow; 2026-10-23T07:00:22.8970953Z 246 │ ╰─▶ } 2026-10-23T07:00:22.8971119Z 247 │ return yield* Effect.die(new Error("Expected the RPC protocol to send a request.")); 2026-10-23T07:00:22.8971171Z ╰──── 2026-10-23T07:00:22.8971173Z 2026-10-23T07:00:22.8971621Z ⚠ 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-23T07:00:22.8971747Z ╭─[apps/server/src/serverSettings.test.ts:1741:32] 2026-10-23T07:00:22.8971916Z 1740 │ const model = createModelSelection(ProviderInstanceId.make("codex"), "gpt-5.5"); 2026-10-23T07:00:22.8972104Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-23T07:00:22.8972220Z ·  ─────────────────── 2026-10-23T07:00:22.8972328Z 1742 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-23T07:00:22.8972378Z ╰──── 2026-10-23T07:00:22.8972381Z 2026-10-23T07:00:22.8972821Z ⚠ 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-23T07:00:22.8972944Z ╭─[apps/server/src/serverSettings.test.ts:1742:34] 2026-10-23T07:00:22.8973126Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-23T07:00:22.8973231Z 1742 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-23T07:00:22.8973392Z ·  ─────────────────── 2026-10-23T07:00:22.8973536Z 1743 │ Schema.fromJsonString(Schema.Array(ProjectScript)), 2026-10-23T07:00:22.8973588Z ╰──── 2026-10-23T07:00:22.8973590Z 2026-10-23T07:00:22.8974050Z ⚠ 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-23T07:00:22.8974171Z ╭─[packages/effect-acp/src/protocol.test.ts:500:31] 2026-10-23T07:00:22.8974226Z 499 │ 2026-10-23T07:00:22.8974337Z 500 │ const response = yield* Schema.decodeUnknownEffect( 2026-10-23T07:00:22.8974455Z ·  ────────────────────────── 2026-10-23T07:00:22.8974561Z 501 │ Schema.fromJsonString(JsonRpcErrorResponse), 2026-10-23T07:00:22.8974625Z ╰──── 2026-10-23T07:00:22.8974632Z 2026-10-23T07:00:22.8975028Z ⚠ 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-23T07:00:22.8975141Z ╭─[packages/effect-acp/src/client.ts:1269:11] 2026-10-23T07:00:22.8975290Z 1268 │ extNotificationHandlers.set(CLIENT_METHODS.mcp_message, (params) => 2026-10-23T07:00:22.8975459Z 1269 │ Schema.decodeUnknownEffect(AcpSchemaV2.MessageMcpNotification)(params).pipe( 2026-10-23T07:00:22.8975563Z ·  ────────────────────────── 2026-10-23T07:00:22.8975705Z 1270 │ Effect.mapError(() => AcpError.AcpRequestError.invalidParams()), 2026-10-23T07:00:22.8975757Z ╰──── 2026-10-23T07:00:22.8975759Z 2026-10-23T07:00:22.8976216Z ⚠ 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-23T07:00:22.8976340Z ╭─[packages/effect-acp/src/errors.test.ts:129:28] 2026-10-23T07:00:22.8976433Z 128 │ const secret = "acp-summary-secret"; 2026-10-23T07:00:22.8976542Z 129 │ const cause = yield* Schema.decodeUnknownEffect( 2026-10-23T07:00:22.8976656Z ·  ────────────────────────── 2026-10-23T07:00:22.8976725Z 130 │ Schema.Struct({ 2026-10-23T07:00:22.8976776Z ╰──── 2026-10-23T07:00:22.8976778Z 2026-10-23T07:00:22.8976984Z ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed 2026-10-23T07:00:22.8977160Z ╭─[apps/server/src/sourceControl/SourceControlProviderRegistry.ts:15:13] 2026-10-23T07:00:22.8977237Z 14 │ } from "@t3tools/contracts"; 2026-10-23T07:00:22.8977327Z 15 │ import type {} from "@t3tools/contracts"; 2026-10-23T07:00:22.8977400Z ·  ── 2026-10-23T07:00:22.8977578Z 16 │ import { detectSourceControlProviderFromRemoteUrl } from "@t3tools/shared/sourceControl"; 2026-10-23T07:00:22.8977629Z ╰──── 2026-10-23T07:00:22.8977712Z  help: Remove empty braces 2026-10-23T07:00:22.8977715Z 2026-10-23T07:00:22.8977982Z ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'. 2026-10-23T07:00:22.8978114Z ╭─[apps/server/src/telemetry/AnalyticsService.ts:340:7] 2026-10-23T07:00:22.8978166Z 339 │ 2026-10-23T07:00:22.8978267Z 340 │ const layerTest = AnalyticsService.layerTest; 2026-10-23T07:00:22.8978392Z ·  ────┬──── 2026-10-23T07:00:22.8978551Z · ╰── 'layerTest' is declared here 2026-10-23T07:00:22.8978602Z ╰──── 2026-10-23T07:00:22.8978708Z  help: Consider removing this declaration. 2026-10-23T07:00:22.8978710Z 2026-10-23T07:00:22.8978969Z ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'. 2026-10-23T07:00:22.8979085Z ╭─[apps/server/src/usage/UsageService.ts:169:7] 2026-10-23T07:00:22.8979136Z 168 │ 2026-10-23T07:00:22.8979217Z 169 │ const layerTest = Layer.succeed( 2026-10-23T07:00:22.8979289Z ·  ────┬──── 2026-10-23T07:00:22.8979418Z · ╰── 'layerTest' is declared here 2026-10-23T07:00:22.8979483Z 170 │ UsageService, 2026-10-23T07:00:22.8979538Z ╰──── 2026-10-23T07:00:22.8979643Z  help: Consider removing this declaration. 2026-10-23T07:00:22.8979646Z 2026-10-23T07:00:22.8980112Z ⚠ 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-23T07:00:22.8980241Z ╭─[apps/server/src/usage/UsageService.test.ts:2383:7] 2026-10-23T07:00:22.8980339Z 2382 │ let orphanedAt: number | undefined; 2026-10-23T07:00:22.8980568Z 2383 │ ╭─▶ for (let interruptAt = 1; interruptAt <= 31; interruptAt += 1) { 2026-10-23T07:00:22.8980689Z 2384 │ │ const tasks: Array<() => void> = []; 2026-10-23T07:00:22.8980841Z 2385 │ │ const dispatcher: Scheduler.SchedulerDispatcher = { 2026-10-23T07:00:22.8980974Z 2386 │ │ scheduleTask: (task) => tasks.push(task), 2026-10-23T07:00:22.8981073Z 2387 │ │ flush: () => { 2026-10-23T07:00:22.8981196Z 2388 │ │ let task: (() => void) | undefined; 2026-10-23T07:00:22.8981341Z 2389 │ │ while ((task = tasks.shift()) !== undefined) task(); 2026-10-23T07:00:22.8981425Z 2390 │ │ }, 2026-10-23T07:00:22.8981506Z 2391 │ │ }; 2026-10-23T07:00:22.8981576Z 2392 │ │ 2026-10-23T07:00:22.8981732Z 2393 │ │ let requestFiber: Fiber.Fiber | undefined; 2026-10-23T07:00:22.8981838Z 2394 │ │ let requestChecks = 0; 2026-10-23T07:00:22.8981973Z 2395 │ │ const scheduler: Scheduler.Scheduler = { 2026-10-23T07:00:22.8982083Z 2396 │ │ executionMode: "async", 2026-10-23T07:00:22.8982201Z 2397 │ │ makeDispatcher: () => dispatcher, 2026-10-23T07:00:22.8982313Z 2398 │ │ shouldYield: (fiber) => { 2026-10-23T07:00:22.8982446Z 2399 │ │ if (fiber !== requestFiber) return false; 2026-10-23T07:00:22.8982551Z 2400 │ │ requestChecks += 1; 2026-10-23T07:00:22.8982694Z 2401 │ │ if (requestChecks !== interruptAt) return false; 2026-10-23T07:00:22.8982810Z 2402 │ │ fiber.interruptUnsafe(); 2026-10-23T07:00:22.8982907Z 2403 │ │ return true; 2026-10-23T07:00:22.8983037Z 2404 │ │ }, 2026-10-23T07:00:22.8983152Z 2405 │ │ }; 2026-10-23T07:00:22.8983221Z 2406 │ │ 2026-10-23T07:00:22.8983342Z 2407 │ │ const input: UsageSummaryInput = { 2026-10-23T07:00:22.8983434Z 2408 │ │ ...WINDOW, 2026-10-23T07:00:22.8983561Z 2409 │ │ sinceDay: UsageDay.make("2026-09-01"), 2026-10-23T07:00:22.8983750Z 2410 │ │ untilDay: UsageDay.make(`2026-08-${String(interruptAt).padStart(2, "0")}`), 2026-10-23T07:00:22.8983831Z 2411 │ │ }; 2026-10-23T07:00:22.8983942Z 2412 │ │ const first = yield* service 2026-10-23T07:00:22.8984048Z 2413 │ │ .readSummary(input) 2026-10-23T07:00:22.8984139Z 2414 │ │ .pipe( 2026-10-23T07:00:22.8984238Z 2415 │ │ Effect.exit, 2026-10-23T07:00:22.8984394Z 2416 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-23T07:00:22.8984498Z 2417 │ │ Effect.forkChild, 2026-10-23T07:00:22.8984604Z 2418 │ │ ); 2026-10-23T07:00:22.8984707Z 2419 │ │ requestFiber = first; 2026-10-23T07:00:22.8984811Z 2420 │ │ yield* Effect.yieldNow; 2026-10-23T07:00:22.8984912Z 2421 │ │ dispatcher.flush(); 2026-10-23T07:00:22.8984980Z 2422 │ │ 2026-10-23T07:00:22.8985130Z 2423 │ │ const second = yield* service.readSummary(input).pipe( 2026-10-23T07:00:22.8985233Z 2424 │ │ Effect.match({ 2026-10-23T07:00:22.8985357Z 2425 │ │ onFailure: (error) => error.reason, 2026-10-23T07:00:22.8985477Z 2426 │ │ onSuccess: () => "success" as const, 2026-10-23T07:00:22.8985560Z 2427 │ │ }), 2026-10-23T07:00:22.8985713Z 2428 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-23T07:00:22.8985814Z 2429 │ │ Effect.forkChild, 2026-10-23T07:00:22.8985893Z 2430 │ │ ); 2026-10-23T07:00:22.8985997Z 2431 │ │ yield* Effect.yieldNow; 2026-10-23T07:00:22.8986098Z 2432 │ │ dispatcher.flush(); 2026-10-23T07:00:22.8986222Z 2433 │ │ const secondExit = second.pollUnsafe(); 2026-10-23T07:00:22.8986340Z 2434 │ │ if (secondExit === undefined) { 2026-10-23T07:00:22.8986456Z 2435 │ │ second.interruptUnsafe(); 2026-10-23T07:00:22.8986566Z 2436 │ │ orphanedAt = interruptAt; 2026-10-23T07:00:22.8986653Z 2437 │ │ break; 2026-10-23T07:00:22.8986731Z 2438 │ │ } 2026-10-23T07:00:22.8986848Z 2439 │ │ if (Exit.isFailure(secondExit)) { 2026-10-23T07:00:22.8987003Z 2440 │ │ assert.fail("the matching request fiber was interrupted"); 2026-10-23T07:00:22.8987082Z 2441 │ │ } 2026-10-23T07:00:22.8987229Z 2442 │ │ assert.strictEqual(secondExit.value, "invalidWindow"); 2026-10-23T07:00:22.8987412Z 2443 │ ╰─▶ } 2026-10-23T07:00:22.8987495Z 2444 │ 2026-10-23T07:00:22.8987547Z ╰──── 2026-10-23T07:00:22.8987549Z 2026-10-23T07:00:22.8987732Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T07:00:22.8987870Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:121:27] 2026-10-23T07:00:22.8988032Z 120 │ const scope = makeScope(options.capabilities ?? new Set(["preview", "worktree"])); 2026-10-23T07:00:22.8988122Z 121 │ const dispatch = vi.fn((_: unknown) => 2026-10-23T07:00:22.8988204Z ·  ┬ 2026-10-23T07:00:22.8988336Z · ╰── '_' is declared here 2026-10-23T07:00:22.8988435Z 122 │ (options.dispatchGate ?? Effect.void).pipe( 2026-10-23T07:00:22.8988486Z ╰──── 2026-10-23T07:00:22.8988593Z  help: Consider removing this parameter. 2026-10-23T07:00:22.8988598Z 2026-10-23T07:00:22.8988779Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T07:00:22.8988917Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:134:39] 2026-10-23T07:00:22.8988971Z 133 │ ); 2026-10-23T07:00:22.8989075Z 134 │ const listLocalBranchNames = vi.fn((_: string) => 2026-10-23T07:00:22.8989172Z ·  ┬ 2026-10-23T07:00:22.8989311Z · ╰── '_' is declared here 2026-10-23T07:00:22.8989380Z 135 │ Effect.succeed( 2026-10-23T07:00:22.8989429Z ╰──── 2026-10-23T07:00:22.8989529Z  help: Consider removing this parameter. 2026-10-23T07:00:22.8989532Z 2026-10-23T07:00:22.8989718Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T07:00:22.8989856Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:178:31] 2026-10-23T07:00:22.8989911Z 177 │ }); 2026-10-23T07:00:22.8990007Z 178 │ const sendToThread = vi.fn((_: unknown) => { 2026-10-23T07:00:22.8990094Z ·  ┬ 2026-10-23T07:00:22.8990228Z · ╰── '_' is declared here 2026-10-23T07:00:22.8990328Z 179 │ switch (options.continuation ?? "queued") { 2026-10-23T07:00:22.8990377Z ╰──── 2026-10-23T07:00:22.8990477Z  help: Consider removing this parameter. 2026-10-23T07:00:22.8990480Z 2026-10-23T07:00:22.8990659Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T07:00:22.8990796Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:203:33] 2026-10-23T07:00:22.8990853Z 202 │ ); 2026-10-23T07:00:22.8990951Z 203 │ const removeWorktree = vi.fn((_: unknown) => 2026-10-23T07:00:22.8991042Z ·  ┬ 2026-10-23T07:00:22.8991180Z · ╰── '_' is declared here 2026-10-23T07:00:22.8991259Z 204 │ options.removeWorktreeFails 2026-10-23T07:00:22.8991310Z ╰──── 2026-10-23T07:00:22.8991410Z  help: Consider removing this parameter. 2026-10-23T07:00:22.8991412Z 2026-10-23T07:00:22.8991591Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T07:00:22.8991723Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:208:36] 2026-10-23T07:00:22.8991781Z 207 │ ); 2026-10-23T07:00:22.8991931Z 208 │ const deleteLocalBranch = vi.fn((_: unknown) => 2026-10-23T07:00:22.8992052Z ·  ┬ 2026-10-23T07:00:22.8992187Z · ╰── '_' is declared here 2026-10-23T07:00:22.8992272Z 209 │ options.deleteLocalBranchFails 2026-10-23T07:00:22.8992325Z ╰──── 2026-10-23T07:00:22.8992423Z  help: Consider removing this parameter. 2026-10-23T07:00:22.8992425Z 2026-10-23T07:00:22.8992601Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T07:00:22.8992734Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:213:42] 2026-10-23T07:00:22.8992788Z 212 │ ); 2026-10-23T07:00:22.8992901Z 213 │ const fetchWorktreeBaseCommit = vi.fn((_: unknown) => 2026-10-23T07:00:22.8993002Z ·  ┬ 2026-10-23T07:00:22.8993146Z · ╰── '_' is declared here 2026-10-23T07:00:22.8993231Z 214 │ options.fetchWorktreeBaseFails 2026-10-23T07:00:22.8993281Z ╰──── 2026-10-23T07:00:22.8993378Z  help: Consider removing this parameter. 2026-10-23T07:00:22.8993380Z 2026-10-23T07:00:22.8993559Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T07:00:22.8993693Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:254:30] 2026-10-23T07:00:22.8993747Z 253 │ ); 2026-10-23T07:00:22.8993836Z 254 │ const localStatus = vi.fn((_: unknown) => 2026-10-23T07:00:22.8993923Z ·  ┬ 2026-10-23T07:00:22.8994060Z · ╰── '_' is declared here 2026-10-23T07:00:22.8994131Z 255 │ Effect.succeed({ 2026-10-23T07:00:22.8994180Z ╰──── 2026-10-23T07:00:22.8994278Z  help: Consider removing this parameter. 2026-10-23T07:00:22.8994281Z 2026-10-23T07:00:22.8994458Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T07:00:22.8994624Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:264:32] 2026-10-23T07:00:22.8994676Z 263 │ ); 2026-10-23T07:00:22.8994826Z 264 │ const refreshStatus = vi.fn((_: string) => Effect.die("refreshStatus stub")); 2026-10-23T07:00:22.8994915Z ·  ┬ 2026-10-23T07:00:22.8995049Z · ╰── '_' is declared here 2026-10-23T07:00:22.8995241Z 265 │ const runForThread = vi.fn((input: { readonly worktreePath: string }) => { 2026-10-23T07:00:22.8995318Z ╰──── 2026-10-23T07:00:22.8995418Z  help: Consider removing this parameter. 2026-10-23T07:00:22.8995420Z 2026-10-23T07:00:22.8995653Z ⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence. 2026-10-23T07:00:22.8995787Z ╭─[apps/web/src/components/chat/useComposerSend.ts:985:13] 2026-10-23T07:00:22.8995907Z 984 │ const changedBeforeDecline = draftChangedSinceSend(); 2026-10-23T07:00:22.8996147Z 985 │ ╭─▶ const pendingIdsBeforeDecline = pendingApprovalsRef.current.map( 2026-10-23T07:00:22.8996264Z 986 │ │ (approval) => approval.requestId, 2026-10-23T07:00:22.8996403Z 987 │ ╰─▶ ); 2026-10-23T07:00:22.8996542Z 988 │ const approvalResponding = approvalsToDecline.some((approval) => 2026-10-23T07:00:22.8996593Z ╰──── 2026-10-23T07:00:22.8996669Z  help: Switch to `Set` 2026-10-23T07:00:22.8996672Z 2026-10-23T07:00:22.8996878Z ⚠ eslint(no-unused-vars): Identifier 'HostProcess' is imported but never used. 2026-10-23T07:00:22.8997041Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:25:13] 2026-10-23T07:00:22.8997129Z 24 │ import * as Schema from "effect/Schema"; 2026-10-23T07:00:22.8997247Z 25 │ import * as HostProcess from "@t3tools/shared/HostProcess"; 2026-10-23T07:00:22.8997328Z ·  ─────┬───── 2026-10-23T07:00:22.8997466Z · ╰── 'HostProcess' is imported here 2026-10-23T07:00:22.8997520Z 26 │ 2026-10-23T07:00:22.8997576Z ╰──── 2026-10-23T07:00:22.8997676Z  help: Consider removing this import. 2026-10-23T07:00:22.8997678Z 2026-10-23T07:00:22.8997947Z ⚠ eslint(no-unused-vars): Variable 'serverConfig' is declared but never used. Unused variables should start with a '_'. 2026-10-23T07:00:22.8998115Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:124:11] 2026-10-23T07:00:22.8998196Z 123 │ const path = yield* Path.Path; 2026-10-23T07:00:22.8998312Z 124 │ const serverConfig = yield* ServerConfig.ServerConfig; 2026-10-23T07:00:22.8998393Z ·  ──────┬───── 2026-10-23T07:00:22.8998531Z · ╰── 'serverConfig' is declared here 2026-10-23T07:00:22.8998670Z 125 │ const serverSettings = yield* ServerSettings.ServerSettingsService; 2026-10-23T07:00:22.8998721Z ╰──── 2026-10-23T07:00:22.8998829Z  help: Consider removing this declaration. 2026-10-23T07:00:22.8998834Z 2026-10-23T07:00:22.8999106Z ⚠ eslint(no-unused-vars): Variable 'serverSettings' is declared but never used. Unused variables should start with a '_'. 2026-10-23T07:00:22.8999269Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:125:11] 2026-10-23T07:00:22.8999388Z 124 │ const serverConfig = yield* ServerConfig.ServerConfig; 2026-10-23T07:00:22.8999525Z 125 │ const serverSettings = yield* ServerSettings.ServerSettingsService; 2026-10-23T07:00:22.8999610Z ·  ───────┬────── 2026-10-23T07:00:22.8999753Z · ╰── 'serverSettings' is declared here 2026-10-23T07:00:22.8999890Z 126 │ const gitWorkflow = yield* GitWorkflowService.GitWorkflowService; 2026-10-23T07:00:22.8999996Z ╰──── 2026-10-23T07:00:22.9000210Z  help: Consider removing this declaration. 2026-10-23T07:00:22.9000213Z 2026-10-23T07:00:22.9000368Z ⚠ eslint(no-new): Do not use 'new' for side effects. 2026-10-23T07:00:22.9000495Z ╭─[apps/server/src/mcp/McpToolAccess.test.ts:168:3] 2026-10-23T07:00:22.9000607Z 167 │ // @ts-expect-error a declaration constructed directly 2026-10-23T07:00:22.9000700Z 168 │ new McpToolAccess.Declaration(unchecked); 2026-10-23T07:00:22.9000795Z ·  ───────────────────────────── 2026-10-23T07:00:22.9000924Z 169 │ // @ts-expect-error a handlers layer built outside McpToolAccess 2026-10-23T07:00:22.9000975Z ╰──── 2026-10-23T07:00:22.9001131Z  help: Assign the result of 'new' to a variable or compare it to a reference. 2026-10-23T07:00:22.9001134Z 2026-10-23T07:00:22.9001320Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-23T07:00:22.9001484Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:100:85] 2026-10-23T07:00:22.9001585Z  99 │ const startEditor = startScheduledTaskEditor; 2026-10-23T07:00:22.9001766Z 100 │ const resetEditor = useCallback(() => startEditor(defaultEditor), [defaultEditor, startEditor]); 2026-10-23T07:00:22.9001913Z ·  ─────┬───── 2026-10-23T07:00:22.9002116Z · ╰── Unnecessary dependency `startEditor` 2026-10-23T07:00:22.9002197Z 101 │ const readEditor = useCallback( 2026-10-23T07:00:22.9002245Z ╰──── 2026-10-23T07:00:22.9002568Z  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-23T07:00:22.9002889Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.9002891Z 2026-10-23T07:00:22.9003074Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-23T07:00:22.9003233Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:121:7] 2026-10-23T07:00:22.9003297Z 120 │ setEditor, 2026-10-23T07:00:22.9003362Z 121 │ startEditor, 2026-10-23T07:00:22.9003439Z ·  ─────┬───── 2026-10-23T07:00:22.9003582Z · ╰── Unnecessary dependency `startEditor` 2026-10-23T07:00:22.9003700Z 122 │ hasChanges, 2026-10-23T07:00:22.9003755Z ╰──── 2026-10-23T07:00:22.9004065Z  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-23T07:00:22.9004377Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T07:00:22.9004380Z 2026-10-23T07:00:22.9004571Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T07:00:22.9004744Z ╭─[apps/mobile/modules/t3-source-text/src/SourceText.tsx:36:9] 2026-10-23T07:00:22.9004832Z 35 │ => 2026-10-23T07:00:22.9006060Z ·  ──────────┬────────── 2026-10-23T07:00:22.9006213Z · ╰── 'revokeActiveMcpThread' is declared here 2026-10-23T07:00:22.9006406Z 219 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeThread(threadId) : Effect.void; 2026-10-23T07:00:22.9006459Z ╰──── 2026-10-23T07:00:22.9006562Z  help: Consider removing this declaration. 2026-10-23T07:00:22.9006564Z 2026-10-23T07:00:22.9006871Z ⚠ eslint(no-unused-vars): Variable 'revokeAllActiveMcpCredentials' is declared but never used. Unused variables should start with a '_'. 2026-10-23T07:00:22.9006995Z ╭─[apps/server/src/mcp/McpSessionRegistry.ts:221:7] 2026-10-23T07:00:22.9007049Z 220 │ 2026-10-23T07:00:22.9007184Z 221 │ const revokeAllActiveMcpCredentials = (): Effect.Effect => 2026-10-23T07:00:22.9007285Z ·  ──────────────┬────────────── 2026-10-23T07:00:22.9007461Z · ╰── 'revokeAllActiveMcpCredentials' is declared here 2026-10-23T07:00:22.9007626Z 222 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeAll : Effect.void; 2026-10-23T07:00:22.9007680Z ╰──── 2026-10-23T07:00:22.9007781Z  help: Consider removing this declaration. 2026-10-23T07:00:22.9007783Z 2026-10-23T07:00:22.9008061Z ⚠ eslint(no-unused-vars): Variable 'legacyCredentials' is declared but never used. Unused variables should start with a '_'. 2026-10-23T07:00:22.9008218Z ╭─[packages/provider-cursor/src/server/credentialStore.test.ts:15:7] 2026-10-23T07:00:22.9008272Z 14 │ 2026-10-23T07:00:22.9008342Z 15 │ const legacyCredentials = { 2026-10-23T07:00:22.9008426Z ·  ────────┬──────── 2026-10-23T07:00:22.9008571Z · ╰── 'legacyCredentials' is declared here 2026-10-23T07:00:22.9008640Z 16 │ version: 1 as const, 2026-10-23T07:00:22.9008695Z ╰──── 2026-10-23T07:00:22.9008799Z  help: Consider removing this declaration. 2026-10-23T07:00:22.9008802Z 2026-10-23T07:00:22.9009078Z ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'. 2026-10-23T07:00:22.9009206Z ╭─[packages/provider-cursor/src/server/auth.ts:249:20] 2026-10-23T07:00:22.9009263Z 248 │ }, 2026-10-23T07:00:22.9009345Z 249 │ (effect, flow, stopSessions) => 2026-10-23T07:00:22.9009436Z ·  ──────┬───── 2026-10-23T07:00:22.9009584Z · ╰── 'stopSessions' is declared here 2026-10-23T07:00:22.9009648Z 250 │ effect.pipe( 2026-10-23T07:00:22.9009700Z ╰──── 2026-10-23T07:00:22.9009801Z  help: Consider removing this parameter. 2026-10-23T07:00:22.9009865Z 2026-10-23T07:00:22.9010151Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T07:00:22.9010310Z ╭─[apps/mobile/src/features/terminal/terminalLaunchContext.ts:117:5] 2026-10-23T07:00:22.9010477Z 112 │ const [entry, setEntry] = useState(() => ({ key: input.targetKey, location: candidate })); 2026-10-23T07:00:22.9010543Z 113 │ useEffect(() => { 2026-10-23T07:00:22.9010615Z ·  ────┬──── 2026-10-23T07:00:22.9010747Z · ╰── This is the containing effect 2026-10-23T07:00:22.9010907Z 114 │ if (entry.key === input.targetKey && (entry.location !== null || candidate === null)) { 2026-10-23T07:00:22.9010969Z 115 │ return; 2026-10-23T07:00:22.9011024Z 116 │ } 2026-10-23T07:00:22.9011152Z 117 │ setEntry({ key: input.targetKey, location: candidate }); 2026-10-23T07:00:22.9011224Z ·  ────┬─── 2026-10-23T07:00:22.9011391Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T07:00:22.9011512Z 118 │ }, [candidate, entry.key, entry.location, input.targetKey]); 2026-10-23T07:00:22.9011563Z ╰──── 2026-10-23T07:00:22.9012168Z  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-23T07:00:22.9012492Z  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-23T07:00:22.9012499Z 2026-10-23T07:00:22.9012687Z ⚠ react(static-components): Cannot create components during render 2026-10-23T07:00:22.9012851Z ╭─[apps/mobile/src/features/terminal/NativeTerminalSurface.tsx:234:10] 2026-10-23T07:00:22.9012938Z 196 │ const { onInput, onResize } = props; 2026-10-23T07:00:22.9013082Z 197 │ const NativeTerminalSurfaceView = resolveNativeTerminalSurfaceView(); 2026-10-23T07:00:22.9013211Z ·  ────────────────┬─────────────── 2026-10-23T07:00:22.9013399Z · ╰── The component is created during render here 2026-10-23T07:00:22.9013525Z 198 │ const hasNativeSurface = Boolean(NativeTerminalSurfaceView); 2026-10-23T07:00:22.9013576Z 199 │ 2026-10-23T07:00:22.9013641Z 200 │ useEffect(() => { 2026-10-23T07:00:22.9013735Z 201 │ terminalDebugLog("native:surface", { 2026-10-23T07:00:22.9013824Z 202 │ terminalKey: props.terminalKey, 2026-10-23T07:00:22.9013899Z 203 │ native: hasNativeSurface, 2026-10-23T07:00:22.9014032Z 204 │ hardwareKeyRevision: getNativeTerminalHardwareKeyRevision(), 2026-10-23T07:00:22.9014115Z 205 │ bufferLen: props.buffer.length, 2026-10-23T07:00:22.9014194Z 206 │ isRunning: props.isRunning, 2026-10-23T07:00:22.9014249Z 207 │ }); 2026-10-23T07:00:22.9014407Z 208 │ }, [hasNativeSurface, props.buffer.length, props.isRunning, props.terminalKey]); 2026-10-23T07:00:22.9014493Z 209 │ const handleNativeInput = useCallback( 2026-10-23T07:00:22.9014638Z 210 │ (event: NativeSyntheticEvent) => { 2026-10-23T07:00:22.9014733Z 211 │ if (!props.isRunning || props.readOnly) { 2026-10-23T07:00:22.9014847Z 212 │ return; 2026-10-23T07:00:22.9014933Z 213 │ } 2026-10-23T07:00:22.9015022Z 214 │ terminalDebugLog("native:onInput", { 2026-10-23T07:00:22.9015174Z 215 │ codes: Array.from(event.nativeEvent.data, (char) => char.codePointAt(0)), 2026-10-23T07:00:22.9015234Z 216 │ }); 2026-10-23T07:00:22.9015321Z 217 │ onInput(event.nativeEvent.data); 2026-10-23T07:00:22.9015376Z 218 │ }, 2026-10-23T07:00:22.9015474Z 219 │ [onInput, props.isRunning, props.readOnly], 2026-10-23T07:00:22.9015528Z 220 │ ); 2026-10-23T07:00:22.9015618Z 221 │ const handleNativeResize = useCallback( 2026-10-23T07:00:22.9015730Z 222 │ (event: NativeSyntheticEvent) => { 2026-10-23T07:00:22.9015793Z 223 │ onResize({ 2026-10-23T07:00:22.9015876Z 224 │ cols: event.nativeEvent.cols, 2026-10-23T07:00:22.9015958Z 225 │ rows: event.nativeEvent.rows, 2026-10-23T07:00:22.9016018Z 226 │ }); 2026-10-23T07:00:22.9016077Z 227 │ }, 2026-10-23T07:00:22.9016140Z 228 │ [onResize], 2026-10-23T07:00:22.9016195Z 229 │ ); 2026-10-23T07:00:22.9016246Z 230 │ 2026-10-23T07:00:22.9016329Z 231 │ if (NativeTerminalSurfaceView) { 2026-10-23T07:00:22.9016395Z 232 │ return ( 2026-10-23T07:00:22.9016471Z 233 │ 2026-10-23T07:00:22.9016551Z 234 │