2026-10-24T23:03:59.9995013Z Current runner version: '2.338.1' 2026-10-24T23:03:59.9998152Z Runner name: 'blacksmith-8vcpu-ubuntu-2404-gtnjmjpgxe6aclig' 2026-10-24T23:03:59.9998832Z Runner group name: 'blacksmith scale sets - blacksmith-8vcpu-ubuntu-2404' 2026-10-24T23:03:59.9999508Z Machine name: 'ip-172-31-73-130' 2026-10-24T23:04:00.0001096Z ##[group]GITHUB_TOKEN Permissions 2026-10-24T23:04:00.0002303Z Contents: read 2026-10-24T23:04:00.0002692Z Metadata: read 2026-10-24T23:04:00.0003141Z ##[endgroup] 2026-10-24T23:04:00.0004494Z Secret source: Actions 2026-10-24T23:04:00.0005267Z Cache mode: write 2026-10-24T23:04:00.0005884Z Prepare workflow directory 2026-10-24T23:04:00.0174277Z Prepare all required actions 2026-10-24T23:04:00.0198177Z Getting action download info 2026-10-24T23:04:00.1245225Z Download action repository 'actions/checkout@v6' (SHA:d23441a48e516b6c34aea4fa41551a30e30af803) 2026-10-24T23:04:00.1582617Z Download action repository 'actions/cache@v6' (SHA:55cc8345863c7cc4c66a329aec7e433d2d1c52a9) 2026-10-24T23:04:00.2594250Z Setting BLACKSMITH_ACTIONS_RESULTS_URL to https://results-receiver.actions.githubusercontent.com/ 2026-10-24T23:04:00.2630391Z Complete job name: Lint 2026-10-24T23:04:00.2998936Z A job started hook has been configured by the self-hosted runner administrator 2026-10-24T23:04:00.3106476Z ##[group]Run '/setup.sh' 2026-10-24T23:04:00.3123344Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T23:04:00.3123802Z env: 2026-10-24T23:04:00.3124018Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-24T23:04:00.3124322Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 352 2026-10-24T23:04:00.3124592Z BLACKSMITH_CHECK_RUN_ID: 121013057479 2026-10-24T23:04:00.3124862Z BLACKSMITH_JOB_DISPLAY_NAME: Lint 2026-10-24T23:04:00.3125123Z GITHUB_ACTIONS_CACHE_MODE: write 2026-10-24T23:04:00.3125374Z ##[endgroup] 2026-10-24T23:04:00.3333803Z Logging daemon started (blacksmithd for logs) 2026-10-24T23:04:00.3406805Z Results daemon started (blacksmithd for results) 2026-10-24T23:04:00.3528730Z Background adoption and SSH setup started (PID: 3170) 2026-10-24T23:04:00.3531005Z 2026-10-24T23:04:00.3531138Z ---------------------------------------- 2026-10-24T23:04:00.3531620Z View this job: https://app.blacksmith.sh/pingdotgg/runs/40141176146/jobs/121013057479 2026-10-24T23:04:00.3532034Z SSH Access (using your GitHub SSH key): 2026-10-24T23:04:00.3532442Z ssh -p 64000 runner@blacksmith-8vcpu-ubuntu-2404-gtnjmjpgxe6aclig.vm.blacksmith.sh 2026-10-24T23:04:00.3532744Z 2026-10-24T23:04:00.3532854Z No GitHub SSH key? Add one at: 2026-10-24T23:04:00.3533325Z https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account 2026-10-24T23:04:00.3533714Z 2026-10-24T23:04:00.3533818Z ---------------------------------------- 2026-10-24T23:04:00.3533990Z 2026-10-24T23:04:00.3534129Z VM ID: blacksmith-8vcpu-ubuntu-2404-gtnjmjpgxe6aclig 2026-10-24T23:04:00.3534448Z Host: production-152.236.31.71-x8664 2026-10-24T23:04:00.3534709Z Host Agent PID: 139537 2026-10-24T23:04:00.3534946Z Host Agent Git SHA: 1637818df 2026-10-24T23:04:00.3535204Z Host CPU Manufacturer: AuthenticAMD 2026-10-24T23:04:00.3535475Z Blacksmith Host Generation: gen 2 2026-10-24T23:04:00.3535750Z Petname: production-steady-goose-332c9d77 2026-10-24T23:04:00.3536019Z Region: us-east 2026-10-24T23:04:00.3536248Z Rootfs Version: ubuntu24-full-x64-081926 2026-10-24T23:04:00.3540124Z OS Version: Ubuntu 24.04.4 LTS 2026-10-24T23:04:00.3540852Z 2026-10-24T23:04:00.3540962Z Enabling Blacksmith transparent cache 2026-10-24T23:04:00.3799836Z ##[group]Run actions/checkout@v6 2026-10-24T23:04:00.3800133Z with: 2026-10-24T23:04:00.3800499Z sparse-checkout: /* !/.repos/ !/apps/mobile/modules/t3-terminal/Vendor/**/*.a 2026-10-24T23:04:00.3800887Z sparse-checkout-cone-mode: false 2026-10-24T23:04:00.3801154Z repository: pingdotgg/t3code 2026-10-24T23:04:00.3802993Z token: *** 2026-10-24T23:04:00.3803202Z ssh-strict: true 2026-10-24T23:04:00.3803421Z ssh-user: git 2026-10-24T23:04:00.3803641Z persist-credentials: true 2026-10-24T23:04:00.3804089Z clean: true 2026-10-24T23:04:00.3804296Z fetch-depth: 1 2026-10-24T23:04:00.3804509Z fetch-tags: false 2026-10-24T23:04:00.3804727Z show-progress: true 2026-10-24T23:04:00.3804950Z lfs: false 2026-10-24T23:04:00.3805153Z submodules: false 2026-10-24T23:04:00.3805373Z set-safe-directory: true 2026-10-24T23:04:00.3805624Z allow-unsafe-pr-checkout: false 2026-10-24T23:04:00.3805875Z env: 2026-10-24T23:04:00.3806106Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-24T23:04:00.3806385Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 352 2026-10-24T23:04:00.3806662Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T23:04:00.3806920Z ##[endgroup] 2026-10-24T23:04:00.4973839Z Syncing repository: pingdotgg/t3code 2026-10-24T23:04:00.4974843Z ##[group]Getting Git version info 2026-10-24T23:04:00.4975257Z Working directory is '/home/runner/_work/t3code/t3code' 2026-10-24T23:04:00.4975897Z [command]/usr/local/bin/git version 2026-10-24T23:04:00.5041687Z git version 2.55.0 2026-10-24T23:04:00.5052974Z ##[endgroup] 2026-10-24T23:04:00.5059304Z Temporarily overriding HOME='/home/runner/_work/_temp/227f60e9-c8a1-4362-b418-5293a230371a' before making global git config changes 2026-10-24T23:04:00.5059933Z Adding repository directory to the temporary git global config as a safe directory 2026-10-24T23:04:00.5062592Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code 2026-10-24T23:04:00.5092006Z Deleting the contents of '/home/runner/_work/t3code/t3code' 2026-10-24T23:04:00.5094246Z ##[group]Determining repository object format 2026-10-24T23:04:00.5095559Z ##[endgroup] 2026-10-24T23:04:00.5095912Z ##[group]Initializing the repository 2026-10-24T23:04:00.5097738Z [command]/usr/local/bin/git init /home/runner/_work/t3code/t3code 2026-10-24T23:04:00.5128264Z hint: Using 'master' as the name for the initial branch. This default branch name 2026-10-24T23:04:00.5128824Z hint: will change to "main" in Git 3.0. To configure the initial branch name 2026-10-24T23:04:00.5129283Z hint: to use in all of your new repositories, which will suppress this warning, 2026-10-24T23:04:00.5129634Z hint: call: 2026-10-24T23:04:00.5129832Z hint: 2026-10-24T23:04:00.5130091Z hint: git config --global init.defaultBranch 2026-10-24T23:04:00.5130423Z hint: 2026-10-24T23:04:00.5130701Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and 2026-10-24T23:04:00.5131140Z hint: 'development'. The just-created branch can be renamed via this command: 2026-10-24T23:04:00.5131490Z hint: 2026-10-24T23:04:00.5131693Z hint: git branch -m 2026-10-24T23:04:00.5131926Z hint: 2026-10-24T23:04:00.5132228Z hint: Disable this message with "git config set advice.defaultBranchName false" 2026-10-24T23:04:00.5132688Z Initialized empty Git repository in /home/runner/_work/t3code/t3code/.git/ 2026-10-24T23:04:00.5133558Z [command]/usr/local/bin/git remote add origin https://github.com/pingdotgg/t3code 2026-10-24T23:04:00.5161602Z ##[endgroup] 2026-10-24T23:04:00.5162005Z ##[group]Disabling automatic garbage collection 2026-10-24T23:04:00.5162367Z [command]/usr/local/bin/git config --local gc.auto 0 2026-10-24T23:04:00.5178936Z ##[endgroup] 2026-10-24T23:04:00.5179282Z ##[group]Setting up auth 2026-10-24T23:04:00.5179718Z Removing SSH command configuration 2026-10-24T23:04:00.5182978Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand 2026-10-24T23:04:00.5203684Z [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-24T23:04:00.5326952Z Removing HTTP extra header 2026-10-24T23:04:00.5329811Z [command]/usr/local/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader 2026-10-24T23:04:00.5349713Z [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-24T23:04:00.5434780Z Removing includeIf entries pointing to credentials config files 2026-10-24T23:04:00.5437677Z [command]/usr/local/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir: 2026-10-24T23:04:00.5457079Z [command]/usr/local/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url 2026-10-24T23:04:00.5578005Z [command]/usr/local/bin/git config --file /home/runner/_work/_temp/git-credentials-40f45e9d-2e47-4a3b-9ba4-fb08f4a0faef.config http.https://github.com/.extraheader AUTHORIZATION: basic *** 2026-10-24T23:04:00.5598703Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git.path /home/runner/_work/_temp/git-credentials-40f45e9d-2e47-4a3b-9ba4-fb08f4a0faef.config 2026-10-24T23:04:00.5616588Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git/worktrees/*.path /home/runner/_work/_temp/git-credentials-40f45e9d-2e47-4a3b-9ba4-fb08f4a0faef.config 2026-10-24T23:04:00.5635649Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git.path /github/runner_temp/git-credentials-40f45e9d-2e47-4a3b-9ba4-fb08f4a0faef.config 2026-10-24T23:04:00.5653065Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git/worktrees/*.path /github/runner_temp/git-credentials-40f45e9d-2e47-4a3b-9ba4-fb08f4a0faef.config 2026-10-24T23:04:00.5668228Z ##[endgroup] 2026-10-24T23:04:00.5668576Z ##[group]Fetching the repository 2026-10-24T23:04:00.5672486Z [command]/usr/local/bin/git -c protocol.version=2 fetch --no-tags --prune --no-recurse-submodules --filter=blob:none --depth=1 origin +85ef6af24ce5b60413df2a3b2e6ec89f0f755a5d:refs/remotes/pull/24582/merge 2026-10-24T23:04:00.8615547Z From https://github.com/pingdotgg/t3code 2026-10-24T23:04:00.8616439Z * [new ref] 85ef6af24ce5b60413df2a3b2e6ec89f0f755a5d -> pull/24582/merge 2026-10-24T23:04:00.8636695Z ##[endgroup] 2026-10-24T23:04:00.8637405Z ##[group]Determining the checkout info 2026-10-24T23:04:00.8638164Z ##[endgroup] 2026-10-24T23:04:00.8638801Z ##[group]Setting up sparse checkout 2026-10-24T23:04:00.8640663Z [command]/usr/local/bin/git config core.sparseCheckout true 2026-10-24T23:04:00.8662704Z [command]/usr/local/bin/git rev-parse --git-path info/sparse-checkout 2026-10-24T23:04:00.8677386Z .git/info/sparse-checkout 2026-10-24T23:04:00.8681231Z ##[endgroup] 2026-10-24T23:04:00.8681966Z ##[group]Checking out the ref 2026-10-24T23:04:00.8683720Z [command]/usr/local/bin/git checkout --progress --force refs/remotes/pull/24582/merge 2026-10-24T23:04:07.8297588Z Updating files: 0% (1/6403) 2026-10-24T23:04:07.8324377Z Updating files: 1% (65/6403) 2026-10-24T23:04:07.8341269Z Updating files: 2% (129/6403) 2026-10-24T23:04:07.8361618Z Updating files: 3% (193/6403) 2026-10-24T23:04:07.8381851Z Updating files: 4% (257/6403) 2026-10-24T23:04:07.8411306Z Updating files: 5% (321/6403) 2026-10-24T23:04:07.8432818Z Updating files: 6% (385/6403) 2026-10-24T23:04:07.8483624Z Updating files: 7% (449/6403) 2026-10-24T23:04:07.8514066Z Updating files: 8% (513/6403) 2026-10-24T23:04:07.8536309Z Updating files: 9% (577/6403) 2026-10-24T23:04:07.8812936Z Updating files: 10% (641/6403) 2026-10-24T23:04:07.8828414Z Updating files: 11% (705/6403) 2026-10-24T23:04:07.8838766Z Updating files: 12% (769/6403) 2026-10-24T23:04:07.8854026Z Updating files: 13% (833/6403) 2026-10-24T23:04:07.8870996Z Updating files: 14% (897/6403) 2026-10-24T23:04:07.8888349Z Updating files: 15% (961/6403) 2026-10-24T23:04:07.8906022Z Updating files: 16% (1025/6403) 2026-10-24T23:04:07.8906762Z Updating files: 16% (1086/6403) 2026-10-24T23:04:07.8920648Z Updating files: 17% (1089/6403) 2026-10-24T23:04:07.8938642Z Updating files: 18% (1153/6403) 2026-10-24T23:04:07.8952779Z Updating files: 19% (1217/6403) 2026-10-24T23:04:07.8976418Z Updating files: 20% (1281/6403) 2026-10-24T23:04:07.8992218Z Updating files: 21% (1345/6403) 2026-10-24T23:04:07.9010643Z Updating files: 22% (1409/6403) 2026-10-24T23:04:07.9026667Z Updating files: 23% (1473/6403) 2026-10-24T23:04:07.9040048Z Updating files: 24% (1537/6403) 2026-10-24T23:04:07.9055656Z Updating files: 25% (1601/6403) 2026-10-24T23:04:07.9070245Z Updating files: 26% (1665/6403) 2026-10-24T23:04:07.9082672Z Updating files: 27% (1729/6403) 2026-10-24T23:04:07.9102048Z Updating files: 28% (1793/6403) 2026-10-24T23:04:07.9134021Z Updating files: 29% (1857/6403) 2026-10-24T23:04:07.9153888Z Updating files: 30% (1921/6403) 2026-10-24T23:04:07.9176812Z Updating files: 31% (1985/6403) 2026-10-24T23:04:07.9205725Z Updating files: 32% (2049/6403) 2026-10-24T23:04:07.9235324Z Updating files: 33% (2113/6403) 2026-10-24T23:04:07.9303701Z Updating files: 34% (2178/6403) 2026-10-24T23:04:07.9359003Z Updating files: 35% (2242/6403) 2026-10-24T23:04:07.9394427Z Updating files: 36% (2306/6403) 2026-10-24T23:04:07.9426052Z Updating files: 37% (2370/6403) 2026-10-24T23:04:07.9470184Z Updating files: 38% (2434/6403) 2026-10-24T23:04:07.9496823Z Updating files: 39% (2498/6403) 2026-10-24T23:04:07.9526259Z Updating files: 40% (2562/6403) 2026-10-24T23:04:07.9552591Z Updating files: 41% (2626/6403) 2026-10-24T23:04:07.9567119Z Updating files: 42% (2690/6403) 2026-10-24T23:04:07.9576893Z Updating files: 43% (2754/6403) 2026-10-24T23:04:07.9605393Z Updating files: 44% (2818/6403) 2026-10-24T23:04:07.9632044Z Updating files: 45% (2882/6403) 2026-10-24T23:04:07.9658359Z Updating files: 46% (2946/6403) 2026-10-24T23:04:07.9683137Z Updating files: 47% (3010/6403) 2026-10-24T23:04:07.9710088Z Updating files: 48% (3074/6403) 2026-10-24T23:04:07.9747178Z Updating files: 49% (3138/6403) 2026-10-24T23:04:07.9773963Z Updating files: 50% (3202/6403) 2026-10-24T23:04:07.9788856Z Updating files: 51% (3266/6403) 2026-10-24T23:04:07.9823395Z Updating files: 52% (3330/6403) 2026-10-24T23:04:07.9850473Z Updating files: 53% (3394/6403) 2026-10-24T23:04:07.9869042Z Updating files: 54% (3458/6403) 2026-10-24T23:04:07.9892201Z Updating files: 55% (3522/6403) 2026-10-24T23:04:07.9906790Z Updating files: 56% (3586/6403) 2026-10-24T23:04:07.9925503Z Updating files: 57% (3650/6403) 2026-10-24T23:04:07.9942570Z Updating files: 58% (3714/6403) 2026-10-24T23:04:08.0296443Z Updating files: 59% (3778/6403) 2026-10-24T23:04:08.0310900Z Updating files: 60% (3842/6403) 2026-10-24T23:04:08.0330011Z Updating files: 61% (3906/6403) 2026-10-24T23:04:08.0346683Z Updating files: 62% (3970/6403) 2026-10-24T23:04:08.0369589Z Updating files: 63% (4034/6403) 2026-10-24T23:04:08.0395347Z Updating files: 64% (4098/6403) 2026-10-24T23:04:08.0414240Z Updating files: 65% (4162/6403) 2026-10-24T23:04:08.0430780Z Updating files: 66% (4226/6403) 2026-10-24T23:04:08.0452755Z Updating files: 67% (4291/6403) 2026-10-24T23:04:08.0466703Z Updating files: 68% (4355/6403) 2026-10-24T23:04:08.0483684Z Updating files: 69% (4419/6403) 2026-10-24T23:04:08.0495745Z Updating files: 70% (4483/6403) 2026-10-24T23:04:08.0514220Z Updating files: 71% (4547/6403) 2026-10-24T23:04:08.0526354Z Updating files: 72% (4611/6403) 2026-10-24T23:04:08.0570632Z Updating files: 73% (4675/6403) 2026-10-24T23:04:08.0958133Z Updating files: 74% (4739/6403) 2026-10-24T23:04:08.0981157Z Updating files: 75% (4803/6403) 2026-10-24T23:04:08.1001981Z Updating files: 76% (4867/6403) 2026-10-24T23:04:08.1024973Z Updating files: 77% (4931/6403) 2026-10-24T23:04:08.1046437Z Updating files: 78% (4995/6403) 2026-10-24T23:04:08.1061652Z Updating files: 79% (5059/6403) 2026-10-24T23:04:08.1082814Z Updating files: 80% (5123/6403) 2026-10-24T23:04:08.1097776Z Updating files: 81% (5187/6403) 2026-10-24T23:04:08.1115308Z Updating files: 82% (5251/6403) 2026-10-24T23:04:08.1140639Z Updating files: 83% (5315/6403) 2026-10-24T23:04:08.1167427Z Updating files: 84% (5379/6403) 2026-10-24T23:04:08.1186144Z Updating files: 85% (5443/6403) 2026-10-24T23:04:08.1211778Z Updating files: 86% (5507/6403) 2026-10-24T23:04:08.1284393Z Updating files: 87% (5571/6403) 2026-10-24T23:04:08.1314593Z Updating files: 88% (5635/6403) 2026-10-24T23:04:08.1333397Z Updating files: 89% (5699/6403) 2026-10-24T23:04:08.1361606Z Updating files: 90% (5763/6403) 2026-10-24T23:04:08.1388398Z Updating files: 91% (5827/6403) 2026-10-24T23:04:08.1402651Z Updating files: 92% (5891/6403) 2026-10-24T23:04:08.1423593Z Updating files: 93% (5955/6403) 2026-10-24T23:04:08.1443060Z Updating files: 94% (6019/6403) 2026-10-24T23:04:08.1467326Z Updating files: 95% (6083/6403) 2026-10-24T23:04:08.1523045Z Updating files: 96% (6147/6403) 2026-10-24T23:04:08.1545109Z Updating files: 97% (6211/6403) 2026-10-24T23:04:08.1588531Z Updating files: 98% (6275/6403) 2026-10-24T23:04:08.1607528Z Updating files: 99% (6339/6403) 2026-10-24T23:04:08.1607857Z Updating files: 100% (6403/6403) 2026-10-24T23:04:08.1608089Z Updating files: 100% (6403/6403), done. 2026-10-24T23:04:08.1753983Z Note: switching to 'refs/remotes/pull/24582/merge'. 2026-10-24T23:04:08.1754241Z 2026-10-24T23:04:08.1754437Z You are in 'detached HEAD' state. You can look around, make experimental 2026-10-24T23:04:08.1754901Z changes and commit them, and you can discard any commits you make in this 2026-10-24T23:04:08.1755317Z state without impacting any branches by switching back to a branch. 2026-10-24T23:04:08.1755562Z 2026-10-24T23:04:08.1755744Z If you want to create a new branch to retain commits you create, you may 2026-10-24T23:04:08.1756151Z do so (now or later) by using -c with the switch command. Example: 2026-10-24T23:04:08.1756372Z 2026-10-24T23:04:08.1756487Z git switch -c 2026-10-24T23:04:08.1756643Z 2026-10-24T23:04:08.1756751Z Or undo this operation with: 2026-10-24T23:04:08.1756893Z 2026-10-24T23:04:08.1757015Z git switch - 2026-10-24T23:04:08.1757139Z 2026-10-24T23:04:08.1757346Z Turn off this advice by setting config variable advice.detachedHead to false 2026-10-24T23:04:08.1757604Z 2026-10-24T23:04:08.1757911Z HEAD is now at 85ef6af Merge 484d9a98b7c5e46f6984567a0d78aa847dc21787 into 3cc31ed27c8956b36cee35a50509fb7c6869592b 2026-10-24T23:04:08.1767524Z ##[endgroup] 2026-10-24T23:04:08.1797376Z [command]/usr/local/bin/git log -1 --format=%H 2026-10-24T23:04:08.1814274Z 85ef6af24ce5b60413df2a3b2e6ec89f0f755a5d 2026-10-24T23:04:08.1914598Z ##[group]Run files="$(git ls-files .github/pr-assets)" 2026-10-24T23:04:08.1914886Z files="$(git ls-files .github/pr-assets)" 2026-10-24T23:04:08.1915093Z if test -n "$files"; then 2026-10-24T23:04:08.1915336Z  printf 'PR evidence must be uploaded to GitHub, not committed:\n%s\n' "$files" >&2 2026-10-24T23:04:08.1915571Z  exit 1 2026-10-24T23:04:08.1915699Z fi 2026-10-24T23:04:08.1935581Z shell: /usr/bin/bash -e {0} 2026-10-24T23:04:08.1935742Z env: 2026-10-24T23:04:08.1935883Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-24T23:04:08.1936053Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 352 2026-10-24T23:04:08.1936222Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T23:04:08.1936392Z ##[endgroup] 2026-10-24T23:04:08.2081465Z Prepare all required actions 2026-10-24T23:04:08.2081807Z Getting action download info 2026-10-24T23:04:08.2750182Z Download action repository 'voidzero-dev/setup-vp@v1' (SHA:250f29ce396baf5e8f24498e17c0dfdebabc26eb) 2026-10-24T23:04:08.3800420Z ##[group]Run ./.github/actions/setup-ci-deps 2026-10-24T23:04:08.3800603Z env: 2026-10-24T23:04:08.3800736Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-24T23:04:08.3800904Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 352 2026-10-24T23:04:08.3801068Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T23:04:08.3801222Z ##[endgroup] 2026-10-24T23:04:08.3876662Z ##[start-action display=Resolve Vite+ version;id=__self.vp] 2026-10-24T23:04:08.3892478Z ##[group]Run echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-24T23:04:08.3892952Z echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-24T23:04:08.3893268Z echo "node=$(jq -r '.engines.node' package.json)" >> "$GITHUB_OUTPUT" 2026-10-24T23:04:08.3893526Z echo "pnpm=$(jq -r '.packageManager' package.json)" >> "$GITHUB_OUTPUT" 2026-10-24T23:04:08.3912110Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T23:04:08.3912298Z env: 2026-10-24T23:04:08.3912436Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-24T23:04:08.3912615Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 352 2026-10-24T23:04:08.3912778Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T23:04:08.3912938Z ##[endgroup] 2026-10-24T23:04:08.3987031Z ##[end-action id=__self.vp;outcome=success;conclusion=success;duration_ms=10] 2026-10-24T23:04:08.3988376Z ##[start-action display=Cache Vite+;id=__self.vp_cache] 2026-10-24T23:04:08.4031854Z ##[group]Run actions/cache@v6 2026-10-24T23:04:08.4032013Z with: 2026-10-24T23:04:08.4032146Z path: ~/.vite-plus 2026-10-24T23:04:08.4032333Z key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T23:04:08.4032555Z enableCrossOsArchive: false 2026-10-24T23:04:08.4032706Z fail-on-cache-miss: false 2026-10-24T23:04:08.4032853Z lookup-only: false 2026-10-24T23:04:08.4032983Z save-always: false 2026-10-24T23:04:08.4033116Z env: 2026-10-24T23:04:08.4033246Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-24T23:04:08.4033414Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 352 2026-10-24T23:04:08.4033576Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T23:04:08.4033730Z ##[endgroup] 2026-10-24T23:04:08.5914310Z Cache hit for: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T23:04:08.9507705Z Received 170349591 of 170349591 (100.0%), 482.1 MBs/sec 2026-10-24T23:04:08.9508653Z Cache Size: ~162 MB (170349591 B) 2026-10-24T23:04:08.9546752Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/76005a9d-f2cf-4d95-9707-bad415fe781b/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T23:04:09.5548075Z Cache restored successfully 2026-10-24T23:04:09.5680750Z Cache restored from key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T23:04:09.5735931Z ##[end-action id=__self.vp_cache;outcome=success;conclusion=success;duration_ms=1174] 2026-10-24T23:04:09.5738160Z ##[start-action display=Use cached Vite+;id=__self.__run] 2026-10-24T23:04:09.5757956Z ##[group]Run echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-24T23:04:09.5758174Z echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-24T23:04:09.5758350Z "$HOME/.vite-plus/bin/vp" env use "26.12.1" 2026-10-24T23:04:09.5778630Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T23:04:09.5778798Z env: 2026-10-24T23:04:09.5778912Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-24T23:04:09.5779064Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 352 2026-10-24T23:04:09.5779236Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T23:04:09.5779370Z ##[endgroup] 2026-10-24T23:04:09.5820909Z Using Node.js v26.12.1 (resolved from 26.12.1) 2026-10-24T23:04:09.5828130Z ##[end-action id=__self.__run;outcome=success;conclusion=success;duration_ms=8] 2026-10-24T23:04:09.5829342Z ##[start-action display=Setup Vite+;id=__self.__voidzero-dev_setup-vp] 2026-10-24T23:04:09.5832765Z ##[end-action id=__self.__voidzero-dev_setup-vp;outcome=skipped;conclusion=skipped;duration_ms=0] 2026-10-24T23:04:09.5833905Z ##[start-action display=Resolve pnpm store path;id=__self.pnpm_store] 2026-10-24T23:04:09.5857987Z ##[group]Run store_path="$(vp pm cache dir)" 2026-10-24T23:04:09.5858165Z store_path="$(vp pm cache dir)" 2026-10-24T23:04:09.5858325Z echo "path=$store_path" >> "$GITHUB_OUTPUT" 2026-10-24T23:04:09.5875802Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T23:04:09.5875976Z env: 2026-10-24T23:04:09.5876089Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-24T23:04:09.5876353Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 352 2026-10-24T23:04:09.5876503Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T23:04:09.5876687Z ##[endgroup] 2026-10-24T23:04:09.6005611Z ##[end-action id=__self.pnpm_store;outcome=success;conclusion=success;duration_ms=17] 2026-10-24T23:04:09.6006790Z ##[start-action display=Cache full pnpm store;id=__self.__actions_cache] 2026-10-24T23:04:09.6329515Z ##[group]Run actions/cache@v6 2026-10-24T23:04:09.6329660Z with: 2026-10-24T23:04:09.6329786Z path: /home/runner/.local/share/pnpm/store/v11 2026-10-24T23:04:09.6330035Z key: pnpm-full-v1-Linux-X64-00603bf3edbe5c5c110144002d8c9a314f8b592aed66db22932aa917c61d6447 2026-10-24T23:04:09.6330283Z restore-keys: pnpm-full-v1-Linux-X64- 2026-10-24T23:04:09.6330432Z enableCrossOsArchive: false 2026-10-24T23:04:09.6330583Z fail-on-cache-miss: false 2026-10-24T23:04:09.6330704Z lookup-only: false 2026-10-24T23:04:09.6330813Z save-always: false 2026-10-24T23:04:09.6330927Z env: 2026-10-24T23:04:09.6331039Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-24T23:04:09.6331181Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 352 2026-10-24T23:04:09.6331321Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T23:04:09.6331449Z ##[endgroup] 2026-10-24T23:04:09.8203926Z Cache hit for restore-key: pnpm-full-v1-Linux-X64-bab31c3827e90e1352d302da4c761fd1b91963ae565f5f0ea70972d0942af1f6 2026-10-24T23:04:10.8412486Z Received 603979776 of 995395870 (60.7%), 575.4 MBs/sec 2026-10-24T23:04:11.4836218Z Received 995395870 of 995395870 (100.0%), 577.8 MBs/sec 2026-10-24T23:04:11.4837330Z Cache Size: ~949 MB (995395870 B) 2026-10-24T23:04:11.4864222Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/ef3e6ed1-5904-41fe-ad3e-8dd6479d19b9/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T23:04:16.4191358Z Cache restored successfully 2026-10-24T23:04:16.4633346Z Cache restored from key: pnpm-full-v1-Linux-X64-bab31c3827e90e1352d302da4c761fd1b91963ae565f5f0ea70972d0942af1f6 2026-10-24T23:04:16.4713208Z ##[end-action id=__self.__actions_cache;outcome=success;conclusion=success;duration_ms=6870] 2026-10-24T23:04:16.4715450Z ##[start-action display=Install dependencies;id=__self.__run_2] 2026-10-24T23:04:16.4727258Z ##[group]Run vp install 2026-10-24T23:04:16.4727395Z vp install 2026-10-24T23:04:16.4746711Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T23:04:16.4746876Z env: 2026-10-24T23:04:16.4746988Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-24T23:04:16.4747132Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 352 2026-10-24T23:04:16.4747271Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T23:04:16.4747408Z ##[endgroup] 2026-10-24T23:04:16.5038197Z Scope: all 34 workspace projects 2026-10-24T23:04:16.5987486Z ? Verifying lockfile against supply-chain policies (2088 entries)... 2026-10-24T23:04:16.8361839Z Packages are hard linked from the content-addressable store to the virtual store. 2026-10-24T23:04:16.8362154Z Content-addressable store is at: /home/runner/.local/share/pnpm/store/v11 2026-10-24T23:04:16.8362366Z Virtual store is at: node_modules/.pnpm 2026-10-24T23:04:19.0639788Z ✓ Lockfile passes supply-chain policies (2088 entries in 2.5s) 2026-10-24T23:04:19.0640045Z Lockfile is up to date, resolution step is skipped 2026-10-24T23:04:19.0793225Z Packages: +1721 2026-10-24T23:04:19.0793410Z ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2026-10-24T23:04:19.1070630Z Progress: resolved 1721, reused 1718, downloaded 0, added 1721, done 2026-10-24T23:04:19.9165199Z . prepare$ vp config --no-agent 2026-10-24T23:04:20.0021470Z . prepare: Done 2026-10-24T23:04:20.0034521Z 2026-10-24T23:04:20.0035307Z devDependencies: 2026-10-24T23:04:20.0035483Z + @coderabbitai/config 1.1.0 2026-10-24T23:04:20.0035736Z + @shadcn/lint 0.1.5 2026-10-24T23:04:20.0035896Z + @types/node 24.12.4 2026-10-24T23:04:20.0036025Z + knip 6.34.0 2026-10-24T23:04:20.0036158Z + typescript <- @tsc-rs/typescript 0.8.0 2026-10-24T23:04:20.0036302Z + vite-plus 1.3.0 2026-10-24T23:04:20.0036373Z 2026-10-24T23:04:20.0050329Z Done in 3.5s using pnpm v12.14.0 2026-10-24T23:04:20.0186204Z ##[end-action id=__self.__run_2;outcome=success;conclusion=success;duration_ms=3547] 2026-10-24T23:04:20.0660208Z ##[group]Run actions/cache@v6 2026-10-24T23:04:20.0660431Z with: 2026-10-24T23:04:20.0660590Z path: ~/.cache/electron 2026-10-24T23:04:20.0660917Z key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T23:04:20.0661273Z enableCrossOsArchive: false 2026-10-24T23:04:20.0661476Z fail-on-cache-miss: false 2026-10-24T23:04:20.0661668Z lookup-only: false 2026-10-24T23:04:20.0661842Z save-always: false 2026-10-24T23:04:20.0662004Z env: 2026-10-24T23:04:20.0662167Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-24T23:04:20.0662394Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 352 2026-10-24T23:04:20.0662626Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T23:04:20.0662830Z ##[endgroup] 2026-10-24T23:04:20.2507549Z Cache hit for: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T23:04:20.4051324Z Received 122906203 of 122906203 (100.0%), 831.3 MBs/sec 2026-10-24T23:04:20.4051860Z Cache Size: ~117 MB (122906203 B) 2026-10-24T23:04:20.4081122Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/3d979e3e-1835-443b-ae58-cf5e8b0ed241/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T23:04:20.4796220Z Cache restored successfully 2026-10-24T23:04:20.4950656Z Cache restored from key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T23:04:20.5055544Z ##[group]Run vp run --filter @t3tools/desktop ensure:electron 2026-10-24T23:04:20.5056405Z vp run --filter @t3tools/desktop ensure:electron 2026-10-24T23:04:20.5079329Z shell: /usr/bin/bash -e {0} 2026-10-24T23:04:20.5079493Z env: 2026-10-24T23:04:20.5079902Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-24T23:04:20.5080054Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 352 2026-10-24T23:04:20.5080196Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T23:04:20.5080338Z ##[endgroup] 2026-10-24T23:04:20.6569995Z ~/apps/desktop$ node scripts/ensure-electron-runtime.mjs ⊘ cache disabled 2026-10-24T23:04:21.1939784Z /home/runner/_work/t3code/t3code/node_modules/.pnpm/electron@44.9.3_supports-color@8.1.1/node_modules/electron/dist/electron 2026-10-24T23:04:21.1955368Z 2026-10-24T23:04:21.2051162Z ##[group]Run vp run knip:check 2026-10-24T23:04:21.2051338Z vp run knip:check 2026-10-24T23:04:21.2071656Z shell: /usr/bin/bash -e {0} 2026-10-24T23:04:21.2071793Z env: 2026-10-24T23:04:21.2071910Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-24T23:04:21.2072057Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 352 2026-10-24T23:04:21.2072200Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T23:04:21.2072337Z ##[endgroup] 2026-10-24T23:04:21.3461792Z $ knip --include files,dependencies --no-config-hints ⊘ cache disabled 2026-10-24T23:04:24.8907849Z 2026-10-24T23:04:24.8910953Z $ knip --workspace apps/server --workspace apps/desktop --workspace apps/web --workspace packages/client-runtime --workspace packages/contracts --workspace packages/effect-acp --workspace packages/effect-codex-app-server --workspace packages/shared --workspace packages/ssh --workspace packages/tailscale --workspace packages/provider-core --workspace packages/provider-acp --workspace packages/provider-acp-registry --workspace packages/provider-testing --workspace packages/provider-pi --workspace packages/provider-muse --workspace packages/provider-opencode --workspace packages/provider-cursor --workspace packages/provider-grok --workspace packages/source-control-core --workspace packages/source-control-definitions --workspace packages/source-control-azure-devops --workspace packages/source-control-bitbucket --workspace packages/source-control-forgejo --workspace packages/source-control-gitcafe --workspace packages/source-control-github --workspace packages/source-control-gitlab --workspace packages/source-control-testing --exports --preprocessor ./scripts/knip-schemas.ts --no-config-hints ⊘ cache disabled 2026-10-24T23:04:32.6818167Z 2026-10-24T23:04:32.6819329Z --- 2026-10-24T23:04:32.6819687Z vp run: 2/2 successful. (Run `vp run --last-details` for full details) 2026-10-24T23:04:32.6884838Z ##[group]Run vp run --filter @t3tools/source-control-github generate --check 2026-10-24T23:04:32.6885166Z vp run --filter @t3tools/source-control-github generate --check 2026-10-24T23:04:32.6905288Z shell: /usr/bin/bash -e {0} 2026-10-24T23:04:32.6905412Z env: 2026-10-24T23:04:32.6905524Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-24T23:04:32.6905670Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 352 2026-10-24T23:04:32.6905808Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T23:04:32.6905962Z ##[endgroup] 2026-10-24T23:04:32.8299129Z ~/packages/source-control-github$ graphqlgen --check ⊘ cache disabled 2026-10-24T23:04:33.0103630Z 2026-10-24T23:04:33.0166082Z ##[group]Run vp run --filter t3 generate --check 2026-10-24T23:04:33.0166303Z vp run --filter t3 generate --check 2026-10-24T23:04:33.0186448Z shell: /usr/bin/bash -e {0} 2026-10-24T23:04:33.0186601Z env: 2026-10-24T23:04:33.0186727Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-24T23:04:33.0186874Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 352 2026-10-24T23:04:33.0187014Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T23:04:33.0187145Z ##[endgroup] 2026-10-24T23:04:33.1593796Z ~/apps/server$ graphqlgen --check ⊘ cache disabled 2026-10-24T23:04:33.3087139Z 2026-10-24T23:04:33.3176204Z ##[group]Run vp check 2026-10-24T23:04:33.3176367Z vp check 2026-10-24T23:04:33.3195903Z shell: /usr/bin/bash -e {0} 2026-10-24T23:04:33.3196029Z env: 2026-10-24T23:04:33.3196139Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-24T23:04:33.3196283Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 352 2026-10-24T23:04:33.3196449Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T23:04:33.3196577Z ##[endgroup] 2026-10-24T23:04:33.8771253Z pass: All 5752 files are correctly formatted (424ms, 8 threads) 2026-10-24T23:04:39.1616207Z warn: Lint warnings found 2026-10-24T23:04:39.1617051Z ⚠ react(immutability): This value cannot be modified 2026-10-24T23:04:39.1617457Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:111:5] 2026-10-24T23:04:39.1617830Z 107 │ ); 2026-10-24T23:04:39.1618205Z 108 │ const separationProgress = useSharedValue(props.showScrollToEnd ? 1 : 0); 2026-10-24T23:04:39.1618637Z ·  ─────────┬──────── 2026-10-24T23:04:39.1619030Z · ╰── `separationProgress` originates here 2026-10-24T23:04:39.1619355Z 109 │ 2026-10-24T23:04:39.1619577Z 110 │ useEffect(() => { 2026-10-24T23:04:39.1619991Z 111 │ separationProgress.value = withTiming(props.showScrollToEnd ? 1 : 0, CONTROL_TIMING); 2026-10-24T23:04:39.1620387Z ·  ─────────┬──────── 2026-10-24T23:04:39.1620668Z · ╰── `separationProgress` cannot be modified 2026-10-24T23:04:39.1620944Z 112 │ }, [props.showScrollToEnd, separationProgress]); 2026-10-24T23:04:39.1621119Z ╰──── 2026-10-24T23:04:39.1621538Z  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-24T23:04:39.1622404Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:04:39.1622875Z 2026-10-24T23:04:39.1623137Z ⚠ react(immutability): This value cannot be modified 2026-10-24T23:04:39.1623660Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5] 2026-10-24T23:04:39.1624118Z 128 │ // and repeatedly retargets the animation as it grows. 2026-10-24T23:04:39.1624513Z 129 │ const capsuleWidth = useSharedValue(null); 2026-10-24T23:04:39.1624850Z ·  ──────┬───── 2026-10-24T23:04:39.1625208Z · ╰── `capsuleWidth` originates here 2026-10-24T23:04:39.1625596Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T23:04:39.1625974Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T23:04:39.1626339Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T23:04:39.1626671Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T23:04:39.1626974Z 134 │ return; 2026-10-24T23:04:39.1627176Z 135 │ } 2026-10-24T23:04:39.1627437Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T23:04:39.1627757Z 137 │ measuredWidthRef.current = width; 2026-10-24T23:04:39.1628158Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T23:04:39.1628537Z ·  ──────┬───── 2026-10-24T23:04:39.1628906Z · ╰── `capsuleWidth` cannot be modified 2026-10-24T23:04:39.1629218Z 139 │ }; 2026-10-24T23:04:39.1629398Z ╰──── 2026-10-24T23:04:39.1629902Z  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-24T23:04:39.1630819Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:04:39.1631285Z 2026-10-24T23:04:39.1631530Z ⚠ react(immutability): This value cannot be modified 2026-10-24T23:04:39.1632253Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7] 2026-10-24T23:04:39.1632741Z 128 │ // and repeatedly retargets the animation as it grows. 2026-10-24T23:04:39.1633128Z 129 │ const capsuleWidth = useSharedValue(null); 2026-10-24T23:04:39.1633470Z ·  ──────┬───── 2026-10-24T23:04:39.1633840Z · ╰── `capsuleWidth` originates here 2026-10-24T23:04:39.1634235Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T23:04:39.1634623Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T23:04:39.1634992Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T23:04:39.1635336Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T23:04:39.1635610Z 134 │ return; 2026-10-24T23:04:39.1635805Z 135 │ } 2026-10-24T23:04:39.1636080Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T23:04:39.1636405Z 137 │ measuredWidthRef.current = width; 2026-10-24T23:04:39.1636828Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T23:04:39.1637154Z 139 │ }; 2026-10-24T23:04:39.1637394Z 140 │ const hasStatus = props.status !== null; 2026-10-24T23:04:39.1637781Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-24T23:04:39.1638119Z 142 │ useEffect(() => { 2026-10-24T23:04:39.1638264Z 143 │ if (!hasStatus) { 2026-10-24T23:04:39.1638431Z 144 │ measuredWidthRef.current = null; 2026-10-24T23:04:39.1638607Z 145 │ capsuleWidth.value = null; 2026-10-24T23:04:39.1638779Z ·  ──────┬───── 2026-10-24T23:04:39.1639083Z · ╰── `capsuleWidth` cannot be modified 2026-10-24T23:04:39.1639397Z 146 │ } 2026-10-24T23:04:39.1639581Z ╰──── 2026-10-24T23:04:39.1640077Z  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-24T23:04:39.1640678Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:04:39.1641143Z 2026-10-24T23:04:39.1641344Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T23:04:39.1641696Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7] 2026-10-24T23:04:39.1641988Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-24T23:04:39.1642197Z 142 │ useEffect(() => { 2026-10-24T23:04:39.1642360Z ·  ───┬─── 2026-10-24T23:04:39.1642675Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-24T23:04:39.1642942Z 143 │ if (!hasStatus) { 2026-10-24T23:04:39.1643113Z 144 │ measuredWidthRef.current = null; 2026-10-24T23:04:39.1643290Z 145 │ capsuleWidth.value = null; 2026-10-24T23:04:39.1643461Z ·  ──────┬───── 2026-10-24T23:04:39.1643682Z · ╰── This modifies `capsuleWidth` 2026-10-24T23:04:39.1643873Z 146 │ } 2026-10-24T23:04:39.1643987Z ╰──── 2026-10-24T23:04:39.1644368Z  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-24T23:04:39.1645059Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:04:39.1645423Z 2026-10-24T23:04:39.1645618Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T23:04:39.1645967Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5] 2026-10-24T23:04:39.1646239Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T23:04:39.1646480Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T23:04:39.1646738Z ·  ───────────────┬─────────────── 2026-10-24T23:04:39.1647150Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-24T23:04:39.1647473Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T23:04:39.1647688Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T23:04:39.1647859Z 134 │ return; 2026-10-24T23:04:39.1647987Z 135 │ } 2026-10-24T23:04:39.1648153Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T23:04:39.1648482Z 137 │ measuredWidthRef.current = width; 2026-10-24T23:04:39.1648721Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T23:04:39.1648950Z ·  ──────┬───── 2026-10-24T23:04:39.1649174Z · ╰── This modifies `capsuleWidth` 2026-10-24T23:04:39.1649386Z 139 │ }; 2026-10-24T23:04:39.1649497Z ╰──── 2026-10-24T23:04:39.1649880Z  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-24T23:04:39.1650478Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:04:39.1650759Z 2026-10-24T23:04:39.1650963Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:04:39.1651335Z ╭─[apps/mobile/src/features/workspace/WorkspaceToolbar.ios.tsx:114:33] 2026-10-24T23:04:39.1651733Z 113 │ return () => cancelAnimationFrame(frame); 2026-10-24T23:04:39.1652051Z 114 │ }, [restoreSearch, tabActive, bottomSearch]); 2026-10-24T23:04:39.1652339Z ·  ──────┬───── 2026-10-24T23:04:39.1652624Z · ╰── Unnecessary dependency `bottomSearch` 2026-10-24T23:04:39.1652893Z 115 │ const composeButton = nativeToolbarCompose ? ( 2026-10-24T23:04:39.1653067Z ╰──── 2026-10-24T23:04:39.1653406Z  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-24T23:04:39.1653982Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.1654270Z 2026-10-24T23:04:39.1654435Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T23:04:39.1654720Z ╭─[apps/server/src/processRunner.test.ts:266:14] 2026-10-24T23:04:39.1654899Z 265 │ 2026-10-24T23:04:39.1655064Z 266 │ for (const {} of ["timeout", "success"] as const) { 2026-10-24T23:04:39.1655396Z ·  ── 2026-10-24T23:04:39.1655667Z 267 │ } 2026-10-24T23:04:39.1655777Z ╰──── 2026-10-24T23:04:39.1656061Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T23:04:39.1656277Z 2026-10-24T23:04:39.1656444Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T23:04:39.1656746Z ╭─[apps/server/src/process/externalLauncher.test.ts:186:12] 2026-10-24T23:04:39.1657001Z 185 │ 2026-10-24T23:04:39.1657161Z 186 │ for (const {} of ["darwin", "linux"] as const) { 2026-10-24T23:04:39.1657346Z ·  ── 2026-10-24T23:04:39.1657482Z 187 │ } 2026-10-24T23:04:39.1657592Z ╰──── 2026-10-24T23:04:39.1657870Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T23:04:39.1658088Z 2026-10-24T23:04:39.1658252Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T23:04:39.1658548Z ╭─[apps/server/src/process/externalLauncher.test.ts:189:12] 2026-10-24T23:04:39.1658744Z 188 │ 2026-10-24T23:04:39.1658868Z 189 │ for (const {} of [ 2026-10-24T23:04:39.1659124Z ·  ── 2026-10-24T23:04:39.1659332Z 190 │ { kind: "browser", folderVerb: "none" }, 2026-10-24T23:04:39.1659488Z ╰──── 2026-10-24T23:04:39.1659759Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T23:04:39.1659975Z 2026-10-24T23:04:39.1660139Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T23:04:39.1660440Z ╭─[apps/server/src/process/externalLauncher.test.ts:311:12] 2026-10-24T23:04:39.1660640Z 310 │ 2026-10-24T23:04:39.1660824Z 311 │ for (const {} of ["rejected", "spawn-error", "stalled"] as const) { 2026-10-24T23:04:39.1661027Z ·  ── 2026-10-24T23:04:39.1661164Z 312 │ } 2026-10-24T23:04:39.1661274Z ╰──── 2026-10-24T23:04:39.1661550Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T23:04:39.1661768Z 2026-10-24T23:04:39.1661930Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T23:04:39.1662226Z ╭─[apps/server/src/process/externalLauncher.test.ts:314:12] 2026-10-24T23:04:39.1662425Z 313 │ 2026-10-24T23:04:39.1662564Z 314 │ for (const {} of [ 2026-10-24T23:04:39.1662715Z ·  ── 2026-10-24T23:04:39.1662858Z 315 │ { 2026-10-24T23:04:39.1662972Z ╰──── 2026-10-24T23:04:39.1663248Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T23:04:39.1663464Z 2026-10-24T23:04:39.1663911Z ⚠ 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-24T23:04:39.1664461Z ╭─[packages/contracts/src/composerContext.test.ts:181:18] 2026-10-24T23:04:39.1664741Z 180 │ it("sends a message without the records the wire cannot carry", () => { 2026-10-24T23:04:39.1665059Z 181 │ const wire = Schema.encodeUnknownSync(Schema.toCodecJson(OrchestrationMessageContext))({ 2026-10-24T23:04:39.1665416Z ·  ──────────────────────── 2026-10-24T23:04:39.1665635Z 182 │ version: 1, 2026-10-24T23:04:39.1665763Z ╰──── 2026-10-24T23:04:39.1665818Z 2026-10-24T23:04:39.1666057Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T23:04:39.1666438Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:290:50] 2026-10-24T23:04:39.1666660Z 289 │ return ( 2026-10-24T23:04:39.1666906Z 290 │ 2026-10-24T23:04:39.1667178Z ·  ───────────── 2026-10-24T23:04:39.1667373Z 291 │ {props.children} 2026-10-24T23:04:39.1667514Z ╰──── 2026-10-24T23:04:39.1667787Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T23:04:39.1668143Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T23:04:39.1668317Z 2026-10-24T23:04:39.1668555Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T23:04:39.1668942Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:654:44] 2026-10-24T23:04:39.1669163Z 653 │ return ( 2026-10-24T23:04:39.1669354Z 654 │ 2026-10-24T23:04:39.1669625Z ·  ───────────── 2026-10-24T23:04:39.1669820Z 655 │ {props.children} 2026-10-24T23:04:39.1669959Z ╰──── 2026-10-24T23:04:39.1670227Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T23:04:39.1670579Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T23:04:39.1670755Z 2026-10-24T23:04:39.1670991Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T23:04:39.1671382Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:1462:55] 2026-10-24T23:04:39.1671616Z 1461 │ return ( 2026-10-24T23:04:39.1671852Z 1462 │ 2026-10-24T23:04:39.1672165Z ·  ──────────────────── 2026-10-24T23:04:39.1672406Z 1463 │ 2026-10-24T23:04:39.1674665Z ·  ┬ 2026-10-24T23:04:39.1690607Z · ╰── '_' is declared here 2026-10-24T23:04:39.1690871Z 122 │ (options.dispatchGate ?? Effect.void).pipe( 2026-10-24T23:04:39.1691217Z ╰──── 2026-10-24T23:04:39.1691442Z  help: Consider removing this parameter. 2026-10-24T23:04:39.1691596Z 2026-10-24T23:04:39.1691796Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T23:04:39.1692127Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:134:39] 2026-10-24T23:04:39.1692338Z 133 │ ); 2026-10-24T23:04:39.1692513Z 134 │ const listLocalBranchNames = vi.fn((_: string) => 2026-10-24T23:04:39.1692740Z ·  ┬ 2026-10-24T23:04:39.1692997Z · ╰── '_' is declared here 2026-10-24T23:04:39.1693208Z 135 │ Effect.succeed( 2026-10-24T23:04:39.1693347Z ╰──── 2026-10-24T23:04:39.1693504Z  help: Consider removing this parameter. 2026-10-24T23:04:39.1693624Z 2026-10-24T23:04:39.1693819Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T23:04:39.1694140Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:178:31] 2026-10-24T23:04:39.1694345Z 177 │ }); 2026-10-24T23:04:39.1694508Z 178 │ const sendToThread = vi.fn((_: unknown) => { 2026-10-24T23:04:39.1694714Z ·  ┬ 2026-10-24T23:04:39.1694956Z · ╰── '_' is declared here 2026-10-24T23:04:39.1695196Z 179 │ switch (options.continuation ?? "queued") { 2026-10-24T23:04:39.1695366Z ╰──── 2026-10-24T23:04:39.1695527Z  help: Consider removing this parameter. 2026-10-24T23:04:39.1695641Z 2026-10-24T23:04:39.1695827Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T23:04:39.1696153Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:203:33] 2026-10-24T23:04:39.1696355Z 202 │ ); 2026-10-24T23:04:39.1696518Z 203 │ const removeWorktree = vi.fn((_: unknown) => 2026-10-24T23:04:39.1696727Z ·  ┬ 2026-10-24T23:04:39.1697027Z · ╰── '_' is declared here 2026-10-24T23:04:39.1697248Z 204 │ options.removeWorktreeFails 2026-10-24T23:04:39.1697397Z ╰──── 2026-10-24T23:04:39.1697554Z  help: Consider removing this parameter. 2026-10-24T23:04:39.1697665Z 2026-10-24T23:04:39.1697901Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T23:04:39.1698219Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:208:36] 2026-10-24T23:04:39.1698481Z 207 │ ); 2026-10-24T23:04:39.1698769Z 208 │ const deleteLocalBranch = vi.fn((_: unknown) => 2026-10-24T23:04:39.1698977Z ·  ┬ 2026-10-24T23:04:39.1699229Z · ╰── '_' is declared here 2026-10-24T23:04:39.1699458Z 209 │ options.deleteLocalBranchFails 2026-10-24T23:04:39.1699609Z ╰──── 2026-10-24T23:04:39.1699764Z  help: Consider removing this parameter. 2026-10-24T23:04:39.1699876Z 2026-10-24T23:04:39.1700055Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T23:04:39.1700361Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:213:42] 2026-10-24T23:04:39.1700551Z 212 │ ); 2026-10-24T23:04:39.1700721Z 213 │ const fetchWorktreeBaseCommit = vi.fn((_: unknown) => 2026-10-24T23:04:39.1700945Z ·  ┬ 2026-10-24T23:04:39.1701193Z · ╰── '_' is declared here 2026-10-24T23:04:39.1701411Z 214 │ options.fetchWorktreeBaseFails 2026-10-24T23:04:39.1701557Z ╰──── 2026-10-24T23:04:39.1701702Z  help: Consider removing this parameter. 2026-10-24T23:04:39.1701812Z 2026-10-24T23:04:39.1701990Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T23:04:39.1702297Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:254:30] 2026-10-24T23:04:39.1702486Z 253 │ ); 2026-10-24T23:04:39.1702631Z 254 │ const localStatus = vi.fn((_: unknown) => 2026-10-24T23:04:39.1702821Z ·  ┬ 2026-10-24T23:04:39.1703058Z · ╰── '_' is declared here 2026-10-24T23:04:39.1703258Z 255 │ Effect.succeed({ 2026-10-24T23:04:39.1703390Z ╰──── 2026-10-24T23:04:39.1703543Z  help: Consider removing this parameter. 2026-10-24T23:04:39.1703653Z 2026-10-24T23:04:39.1703835Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T23:04:39.1704152Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:264:32] 2026-10-24T23:04:39.1704346Z 263 │ ); 2026-10-24T23:04:39.1704558Z 264 │ const refreshStatus = vi.fn((_: string) => Effect.die("refreshStatus stub")); 2026-10-24T23:04:39.1704802Z ·  ┬ 2026-10-24T23:04:39.1705043Z · ╰── '_' is declared here 2026-10-24T23:04:39.1705324Z 265 │ const runForThread = vi.fn((input: { readonly worktreePath: string }) => { 2026-10-24T23:04:39.1705529Z ╰──── 2026-10-24T23:04:39.1705687Z  help: Consider removing this parameter. 2026-10-24T23:04:39.1705800Z 2026-10-24T23:04:39.1706056Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T23:04:39.1706466Z ╭─[apps/server/src/orchestration-v2/ThreadPullRequestService.ts:410:7] 2026-10-24T23:04:39.1706687Z 409 │ 2026-10-24T23:04:39.1706919Z 410 │ const layer = Layer.effect(ThreadPullRequestServiceV2, make); 2026-10-24T23:04:39.1707127Z ·  ──┬── 2026-10-24T23:04:39.1707345Z · ╰── 'layer' is declared here 2026-10-24T23:04:39.1707531Z ╰──── 2026-10-24T23:04:39.1707691Z  help: Consider removing this declaration. 2026-10-24T23:04:39.1707894Z 2026-10-24T23:04:39.1708225Z ⚠ typescript(no-extraneous-class): Unexpected class with only a constructor. 2026-10-24T23:04:39.1708549Z ╭─[apps/desktop/src/preview/Manager.test.ts:158:18] 2026-10-24T23:04:39.1708856Z 157 │ BrowserWindow: browserWindowConstructor, 2026-10-24T23:04:39.1709142Z 158 │ ╭─▶ ClipboardItem: class { 2026-10-24T23:04:39.1709441Z 159 │ │ constructor(data: Record) { 2026-10-24T23:04:39.1709704Z 160 │ │ clipboardItemConstructor(data); 2026-10-24T23:04:39.1709908Z 161 │ │ } 2026-10-24T23:04:39.1710131Z 162 │ ╰─▶ }, 2026-10-24T23:04:39.1710337Z 163 │ clipboard: { 2026-10-24T23:04:39.1710479Z ╰──── 2026-10-24T23:04:39.1710706Z  help: Try replacing this class with a standalone function or deleting it entirely 2026-10-24T23:04:39.1710876Z 2026-10-24T23:04:39.1711165Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:04:39.1711731Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:333:7] 2026-10-24T23:04:39.1712077Z 328 │ }; 2026-10-24T23:04:39.1712269Z 329 │ useEffect(() => { 2026-10-24T23:04:39.1712506Z ·  ────┬──── 2026-10-24T23:04:39.1712854Z · ╰── This is the containing effect 2026-10-24T23:04:39.1713194Z 330 │ if (!guidesEnabled && section === "guide") { 2026-10-24T23:04:39.1713520Z 331 │ requestedSection.current = "overview"; 2026-10-24T23:04:39.1713990Z 332 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-24T23:04:39.1714401Z 333 │ setSection("overview"); 2026-10-24T23:04:39.1714667Z ·  ─────┬──── 2026-10-24T23:04:39.1715092Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:04:39.1715461Z 334 │ } 2026-10-24T23:04:39.1715642Z ╰──── 2026-10-24T23:04:39.1716328Z  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-24T23:04:39.1717220Z  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-24T23:04:39.1717708Z 2026-10-24T23:04:39.1718031Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T23:04:39.1718410Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:335:6] 2026-10-24T23:04:39.1718683Z 330 │ if (!guidesEnabled && section === "guide") { 2026-10-24T23:04:39.1718891Z 331 │ requestedSection.current = "overview"; 2026-10-24T23:04:39.1719089Z ·  ────────┬─────── 2026-10-24T23:04:39.1719637Z · ╰── 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-24T23:04:39.1720287Z 332 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-24T23:04:39.1720744Z ·  ─────────┬───────── ──────┬────── 2026-10-24T23:04:39.1721396Z · │ ╰── 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-24T23:04:39.1722266Z · ╰── 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-24T23:04:39.1722736Z 333 │ setSection("overview"); 2026-10-24T23:04:39.1722886Z 334 │ } 2026-10-24T23:04:39.1723048Z 335 │ }, [guidesEnabled, section, insets.top]); 2026-10-24T23:04:39.1723284Z ·  ──────────────────┬───────────────── 2026-10-24T23:04:39.1723601Z · ╰── This dependency list is missing values used by the callback 2026-10-24T23:04:39.1723875Z 336 │ const tabContent = activityContent; 2026-10-24T23:04:39.1724025Z ╰──── 2026-10-24T23:04:39.1724244Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T23:04:39.1724720Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.1725012Z 2026-10-24T23:04:39.1725217Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T23:04:39.1725589Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:877:6] 2026-10-24T23:04:39.1725821Z 860 │ if ( 2026-10-24T23:04:39.1726007Z 861 │ lastSelection.current.path === route.params.path && 2026-10-24T23:04:39.1726215Z ·  ──────┬────── 2026-10-24T23:04:39.1726744Z · ╰── 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-24T23:04:39.1727299Z 862 │ lastSelection.current.id === route.params.fileSelectionId 2026-10-24T23:04:39.1727491Z 863 │ ) 2026-10-24T23:04:39.1727614Z 864 │ return; 2026-10-24T23:04:39.1727861Z 865 │ lastSelection.current = { path: route.params.path, id: route.params.fileSelectionId }; 2026-10-24T23:04:39.1730777Z 866 │ if (route.params.focus) navigation.setParams({ focus: undefined }); 2026-10-24T23:04:39.1731053Z 867 │ setJumpPath(route.params.path); 2026-10-24T23:04:39.1731229Z 868 │ setSelectedRowId(null); 2026-10-24T23:04:39.1731402Z 869 │ jumpStarted.current = false; 2026-10-24T23:04:39.1731647Z 870 │ const file = data.files.find((entry) => entry.path === route.params.path); 2026-10-24T23:04:39.1731898Z 871 │ if (!file || !nativeView.current) return; 2026-10-24T23:04:39.1732100Z ·  ─────┬──── 2026-10-24T23:04:39.1732635Z · ╰── 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-24T23:04:39.1733154Z 872 │ setCollapsedIds((ids) => ids.filter((id) => id !== file.id)); 2026-10-24T23:04:39.1733476Z 873 │ jumpStarted.current = true; 2026-10-24T23:04:39.1733801Z 874 │ void nativeView.current.scrollToFile(file.id, false).catch(() => { 2026-10-24T23:04:39.1734028Z 875 │ jumpStarted.current = false; 2026-10-24T23:04:39.1734186Z 876 │ }); 2026-10-24T23:04:39.1734443Z 877 │ }, [route.params.path, route.params.fileSelectionId, route.params.focus, data.files, navigation]); 2026-10-24T23:04:39.1734896Z ·  ──────────────────────────────────────────────┬────────────────────────────────────────────── 2026-10-24T23:04:39.1735390Z · ╰── This dependency list is missing values used by the callback 2026-10-24T23:04:39.1735721Z 878 │ const appliedFilter = useRef(filter.hideTestFiles); 2026-10-24T23:04:39.1735900Z ╰──── 2026-10-24T23:04:39.1736137Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T23:04:39.1736621Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.1736964Z 2026-10-24T23:04:39.1737137Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T23:04:39.1737442Z ╭─[apps/web/src/components/CommandPalette.tsx:2037:20] 2026-10-24T23:04:39.1737706Z 2036 │ title: inferProjectTitleFromPath(destinationPath), 2026-10-24T23:04:39.1737933Z 2037 │ createdAt: new Date().toISOString(), 2026-10-24T23:04:39.1738142Z ·  ─────┬──── 2026-10-24T23:04:39.1738398Z · ╰── Cannot call impure function 2026-10-24T23:04:39.1738659Z 2038 │ remoteUrl: addProjectCloneFlow.remoteUrl, 2026-10-24T23:04:39.1738834Z ╰──── 2026-10-24T23:04:39.1739171Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T23:04:39.1739714Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T23:04:39.1739990Z 2026-10-24T23:04:39.1740203Z ⚠ eslint(no-unused-vars): Identifier 'HookForwarder' is imported but never used. 2026-10-24T23:04:39.1740511Z ╭─[infra/relay/src/http/Api.ts:69:13] 2026-10-24T23:04:39.1740772Z 68 │ import * as EnvironmentLinks from "../environments/EnvironmentLinks.ts"; 2026-10-24T23:04:39.1741043Z 69 │ import * as HookForwarder from "../hooks/HookForwarder.ts"; 2026-10-24T23:04:39.1741268Z ·  ──────┬────── 2026-10-24T23:04:39.1741520Z · ╰── 'HookForwarder' is imported here 2026-10-24T23:04:39.1741771Z 70 │ import * as HeldHooks from "../hooks/HeldHooks.ts"; 2026-10-24T23:04:39.1741938Z ╰──── 2026-10-24T23:04:39.1742085Z  help: Consider removing this import. 2026-10-24T23:04:39.1742198Z 2026-10-24T23:04:39.1742356Z ⚠ eslint(no-new): Do not use 'new' for side effects. 2026-10-24T23:04:39.1742639Z ╭─[apps/server/src/mcp/McpToolAccess.test.ts:168:3] 2026-10-24T23:04:39.1742889Z 167 │ // @ts-expect-error a declaration constructed directly 2026-10-24T23:04:39.1743110Z 168 │ new McpToolAccess.Declaration(unchecked); 2026-10-24T23:04:39.1743329Z ·  ───────────────────────────── 2026-10-24T23:04:39.1743629Z 169 │ // @ts-expect-error a handlers layer built outside McpToolAccess 2026-10-24T23:04:39.1743902Z ╰──── 2026-10-24T23:04:39.1744112Z  help: Assign the result of 'new' to a variable or compare it to a reference. 2026-10-24T23:04:39.1744277Z 2026-10-24T23:04:39.1744638Z ⚠ 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-24T23:04:39.1745093Z ╭─[apps/server/src/vcs/GitVcsDriverCore.test.ts:1786:34] 2026-10-24T23:04:39.1745374Z 1785 │ const stat = branch.files!.find((file) => file.path === path)!; 2026-10-24T23:04:39.1745667Z 1786 │ const request = yield* Schema.decodeEffect(ReviewDiffPreviewInput)({ 2026-10-24T23:04:39.1745950Z ·  ─────────────────── 2026-10-24T23:04:39.1746147Z 1787 │ cwd, 2026-10-24T23:04:39.1746286Z ╰──── 2026-10-24T23:04:39.1746340Z 2026-10-24T23:04:39.1746583Z ⚠ unicorn(prefer-string-starts-ends-with): Prefer String#startsWith over a regex with a caret. 2026-10-24T23:04:39.1746991Z ╭─[apps/server/src/vcs/GitVcsDriverCore.ts:517:11] 2026-10-24T23:04:39.1747227Z 516 │ GIT_DIAGNOSTIC_LINE_PATTERN.test(line) || 2026-10-24T23:04:39.1747480Z 517 │ (!/^remote:/.test(line) && SSH_TRANSPORT_REFUSAL_PATTERN.test(line)), 2026-10-24T23:04:39.1747710Z ·  ─────────────── 2026-10-24T23:04:39.1747867Z 518 │ ) 2026-10-24T23:04:39.1747981Z ╰──── 2026-10-24T23:04:39.1748185Z  help: Replace `/^remote:/.test(line)` with `line.startsWith('remote:')`. 2026-10-24T23:04:39.1748344Z 2026-10-24T23:04:39.1748619Z ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'. 2026-10-24T23:04:39.1748987Z ╭─[apps/server/src/usage/UsageService.ts:169:7] 2026-10-24T23:04:39.1749171Z 168 │ 2026-10-24T23:04:39.1749306Z 169 │ const layerTest = Layer.succeed( 2026-10-24T23:04:39.1749528Z ·  ────┬──── 2026-10-24T23:04:39.1749757Z · ╰── 'layerTest' is declared here 2026-10-24T23:04:39.1749968Z 170 │ UsageService, 2026-10-24T23:04:39.1750096Z ╰──── 2026-10-24T23:04:39.1750255Z  help: Consider removing this declaration. 2026-10-24T23:04:39.1750371Z 2026-10-24T23:04:39.1750635Z ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'. 2026-10-24T23:04:39.1751086Z ╭─[apps/server/src/telemetry/AnalyticsService.ts:340:7] 2026-10-24T23:04:39.1751373Z 339 │ 2026-10-24T23:04:39.1751536Z 340 │ const layerTest = AnalyticsService.layerTest; 2026-10-24T23:04:39.1751729Z ·  ────┬──── 2026-10-24T23:04:39.1751952Z · ╰── 'layerTest' is declared here 2026-10-24T23:04:39.1752149Z ╰──── 2026-10-24T23:04:39.1752309Z  help: Consider removing this declaration. 2026-10-24T23:04:39.1752425Z 2026-10-24T23:04:39.1752684Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:04:39.1753086Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5] 2026-10-24T23:04:39.1753313Z 259 │ .join("|"); 2026-10-24T23:04:39.1753449Z 260 │ useEffect(() => { 2026-10-24T23:04:39.1753608Z ·  ────┬──── 2026-10-24T23:04:39.1753828Z · ╰── This is the containing effect 2026-10-24T23:04:39.1754031Z 261 │ stop(); 2026-10-24T23:04:39.1754169Z ·  ──┬─ 2026-10-24T23:04:39.1754419Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:04:39.1754653Z 262 │ }, [orderVersion]); 2026-10-24T23:04:39.1754786Z ╰──── 2026-10-24T23:04:39.1755423Z  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-24T23:04:39.1756269Z  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-24T23:04:39.1756570Z 2026-10-24T23:04:39.1756827Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T23:04:39.1757197Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5] 2026-10-24T23:04:39.1757421Z 260 │ useEffect(() => { 2026-10-24T23:04:39.1757561Z 261 │ stop(); 2026-10-24T23:04:39.1757698Z ·  ──┬─ 2026-10-24T23:04:39.1757910Z · ╰── Missing dependency `stop` 2026-10-24T23:04:39.1758112Z 262 │ }, [orderVersion]); 2026-10-24T23:04:39.1758273Z ·  ──────┬───── 2026-10-24T23:04:39.1758520Z · ╰── Unnecessary dependency `orderVersion` 2026-10-24T23:04:39.1758737Z 263 │ useEffect( 2026-10-24T23:04:39.1758861Z ╰──── 2026-10-24T23:04:39.1759321Z  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-24T23:04:39.1759997Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.1760289Z 2026-10-24T23:04:39.1760433Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:04:39.1760740Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:96:9] 2026-10-24T23:04:39.1760978Z 95 │ const latest = useRef(props); 2026-10-24T23:04:39.1761143Z 96 │ latest.current = props; 2026-10-24T23:04:39.1761399Z ·  ───┬──────┬─── 2026-10-24T23:04:39.1761726Z · │ ╰── Cannot update ref value during render 2026-10-24T23:04:39.1762019Z · ╰── This value is a ref 2026-10-24T23:04:39.1762206Z 97 │ const gesture = useMemo( 2026-10-24T23:04:39.1762341Z ╰──── 2026-10-24T23:04:39.1762847Z  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-24T23:04:39.1763540Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:04:39.1763808Z 2026-10-24T23:04:39.1763959Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:04:39.1764272Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:104:18] 2026-10-24T23:04:39.1764502Z 103 │ .runOnJS(true) 2026-10-24T23:04:39.1764686Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T23:04:39.1764926Z ·  ───────────────┬────────────── 2026-10-24T23:04:39.1765254Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T23:04:39.1765581Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T23:04:39.1765773Z ╰──── 2026-10-24T23:04:39.1766291Z  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-24T23:04:39.1767022Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:04:39.1767295Z 2026-10-24T23:04:39.1767439Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:04:39.1767747Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:105:19] 2026-10-24T23:04:39.1768008Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T23:04:39.1768328Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T23:04:39.1768764Z ·  ──────────────────────────┬───────────────────────── 2026-10-24T23:04:39.1769142Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T23:04:39.1769469Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T23:04:39.1769654Z ╰──── 2026-10-24T23:04:39.1770169Z  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-24T23:04:39.1770869Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:04:39.1771143Z 2026-10-24T23:04:39.1771292Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:04:39.1771675Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:106:16] 2026-10-24T23:04:39.1772041Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T23:04:39.1772308Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T23:04:39.1772611Z ·  ──────────────────────────┬───────────────────────── 2026-10-24T23:04:39.1772984Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T23:04:39.1773311Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T23:04:39.1773498Z ╰──── 2026-10-24T23:04:39.1774012Z  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-24T23:04:39.1774713Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:04:39.1774985Z 2026-10-24T23:04:39.1775132Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:04:39.1775443Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:107:21] 2026-10-24T23:04:39.1775737Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T23:04:39.1775994Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T23:04:39.1776281Z ·  ───────────────────────┬────────────────────── 2026-10-24T23:04:39.1776643Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T23:04:39.1776959Z 108 │ [props.disabled], 2026-10-24T23:04:39.1777096Z ╰──── 2026-10-24T23:04:39.1777602Z  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-24T23:04:39.1778294Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:04:39.1778567Z 2026-10-24T23:04:39.1778713Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:04:39.1779021Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:249:9] 2026-10-24T23:04:39.1779303Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-24T23:04:39.1779547Z 249 │ latest.current = { rows, planners, moveThread }; 2026-10-24T23:04:39.1779776Z ·  ───┬──────┬─── 2026-10-24T23:04:39.1780077Z · │ ╰── Cannot update ref value during render 2026-10-24T23:04:39.1780369Z · ╰── This value is a ref 2026-10-24T23:04:39.1780545Z 250 │ 2026-10-24T23:04:39.1780650Z ╰──── 2026-10-24T23:04:39.1781154Z  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-24T23:04:39.1781905Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:04:39.1782252Z 2026-10-24T23:04:39.1782397Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:04:39.1782706Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:247:22] 2026-10-24T23:04:39.1782993Z 246 │ const [preview, setPreview] = useState(null); 2026-10-24T23:04:39.1783240Z 247 │ const translateY = useRef(new Animated.Value(0)).current; 2026-10-24T23:04:39.1783506Z ·  ──────────────────┬────────────────── 2026-10-24T23:04:39.1783807Z · ╰── Cannot access ref value during render 2026-10-24T23:04:39.1784078Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-24T23:04:39.1784254Z ╰──── 2026-10-24T23:04:39.1784764Z  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-24T23:04:39.1785458Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:04:39.1785729Z 2026-10-24T23:04:39.1785900Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T23:04:39.1786224Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:324:16] 2026-10-24T23:04:39.1786457Z 323 │ update(0); 2026-10-24T23:04:39.1786614Z 324 │ let last = performance.now(); 2026-10-24T23:04:39.1786851Z ·  ────────┬──────── 2026-10-24T23:04:39.1787113Z · ╰── Cannot call impure function 2026-10-24T23:04:39.1787325Z 325 │ const tick = () => { 2026-10-24T23:04:39.1787463Z ╰──── 2026-10-24T23:04:39.1787810Z  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-24T23:04:39.1788376Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T23:04:39.1788650Z 2026-10-24T23:04:39.1788837Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T23:04:39.1789185Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:99:15] 2026-10-24T23:04:39.1789408Z  98 │ () => 2026-10-24T23:04:39.1789599Z  99 │ Gesture.Pan() 2026-10-24T23:04:39.1789821Z ·  ─┬─ 2026-10-24T23:04:39.1790050Z · ╰── `Pan` may be a component 2026-10-24T23:04:39.1790266Z 100 │ .enabled(!props.disabled) 2026-10-24T23:04:39.1790417Z ╰──── 2026-10-24T23:04:39.1790740Z  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-24T23:04:39.1791431Z  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-24T23:04:39.1791823Z 2026-10-24T23:04:39.1792015Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T23:04:39.1792367Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:108:5] 2026-10-24T23:04:39.1792599Z 103 │ .runOnJS(true) 2026-10-24T23:04:39.1792786Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T23:04:39.1792992Z ·  ───┬── 2026-10-24T23:04:39.1793531Z · ╰── 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-24T23:04:39.1794047Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T23:04:39.1794317Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T23:04:39.1794582Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T23:04:39.1794790Z 108 │ [props.disabled], 2026-10-24T23:04:39.1794959Z ·  ────────┬─────── 2026-10-24T23:04:39.1795247Z · ╰── This dependency list is missing values used by the callback 2026-10-24T23:04:39.1795492Z 109 │ ); 2026-10-24T23:04:39.1795605Z ╰──── 2026-10-24T23:04:39.1795865Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T23:04:39.1796372Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.1796667Z 2026-10-24T23:04:39.1797162Z ⚠ 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-24T23:04:39.1797704Z ╭─[apps/server/src/usage/UsageService.test.ts:2615:7] 2026-10-24T23:04:39.1797939Z 2614 │ let orphanedAt: number | undefined; 2026-10-24T23:04:39.1798288Z 2615 │ ╭─▶ for (let interruptAt = 1; interruptAt <= 31; interruptAt += 1) { 2026-10-24T23:04:39.1798634Z 2616 │ │ const tasks: Array<() => void> = []; 2026-10-24T23:04:39.1798918Z 2617 │ │ const dispatcher: Scheduler.SchedulerDispatcher = { 2026-10-24T23:04:39.1799212Z 2618 │ │ scheduleTask: (task) => tasks.push(task), 2026-10-24T23:04:39.1799453Z 2619 │ │ flush: () => { 2026-10-24T23:04:39.1799749Z 2620 │ │ let task: (() => void) | undefined; 2026-10-24T23:04:39.1800105Z 2621 │ │ while ((task = tasks.shift()) !== undefined) task(); 2026-10-24T23:04:39.1800344Z 2622 │ │ }, 2026-10-24T23:04:39.1800523Z 2623 │ │ }; 2026-10-24T23:04:39.1800692Z 2624 │ │ 2026-10-24T23:04:39.1800941Z 2625 │ │ let requestFiber: Fiber.Fiber | undefined; 2026-10-24T23:04:39.1801213Z 2626 │ │ let requestChecks = 0; 2026-10-24T23:04:39.1801462Z 2627 │ │ const scheduler: Scheduler.Scheduler = { 2026-10-24T23:04:39.1801717Z 2628 │ │ executionMode: "async", 2026-10-24T23:04:39.1801962Z 2629 │ │ makeDispatcher: () => dispatcher, 2026-10-24T23:04:39.1802215Z 2630 │ │ shouldYield: (fiber) => { 2026-10-24T23:04:39.1802476Z 2631 │ │ if (fiber !== requestFiber) return false; 2026-10-24T23:04:39.1802725Z 2632 │ │ requestChecks += 1; 2026-10-24T23:04:39.1802989Z 2633 │ │ if (requestChecks !== interruptAt) return false; 2026-10-24T23:04:39.1803256Z 2634 │ │ fiber.interruptUnsafe(); 2026-10-24T23:04:39.1803481Z 2635 │ │ return true; 2026-10-24T23:04:39.1803673Z 2636 │ │ }, 2026-10-24T23:04:39.1803853Z 2637 │ │ }; 2026-10-24T23:04:39.1804018Z 2638 │ │ 2026-10-24T23:04:39.1804228Z 2639 │ │ const input: UsageSummaryInput = { 2026-10-24T23:04:39.1804462Z 2640 │ │ ...WINDOW, 2026-10-24T23:04:39.1804704Z 2641 │ │ sinceDay: UsageDay.make("2026-09-01"), 2026-10-24T23:04:39.1805036Z 2642 │ │ untilDay: UsageDay.make(`2026-08-${String(interruptAt).padStart(2, "0")}`), 2026-10-24T23:04:39.1805307Z 2643 │ │ }; 2026-10-24T23:04:39.1805516Z 2644 │ │ const first = yield* service 2026-10-24T23:04:39.1805749Z 2645 │ │ .readSummary(input) 2026-10-24T23:04:39.1805959Z 2646 │ │ .pipe( 2026-10-24T23:04:39.1806160Z 2647 │ │ Effect.exit, 2026-10-24T23:04:39.1806429Z 2648 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-24T23:04:39.1806697Z 2649 │ │ Effect.forkChild, 2026-10-24T23:04:39.1806942Z 2650 │ │ ); 2026-10-24T23:04:39.1807141Z 2651 │ │ requestFiber = first; 2026-10-24T23:04:39.1807366Z 2652 │ │ yield* Effect.yieldNow; 2026-10-24T23:04:39.1807593Z 2653 │ │ dispatcher.flush(); 2026-10-24T23:04:39.1807782Z 2654 │ │ 2026-10-24T23:04:39.1808021Z 2655 │ │ const second = yield* service.readSummary(input).pipe( 2026-10-24T23:04:39.1808346Z 2656 │ │ Effect.match({ 2026-10-24T23:04:39.1808582Z 2657 │ │ onFailure: (error) => error.reason, 2026-10-24T23:04:39.1808846Z 2658 │ │ onSuccess: () => "success" as const, 2026-10-24T23:04:39.1809133Z 2659 │ │ }), 2026-10-24T23:04:39.1809498Z 2660 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-24T23:04:39.1809758Z 2661 │ │ Effect.forkChild, 2026-10-24T23:04:39.1809956Z 2662 │ │ ); 2026-10-24T23:04:39.1810156Z 2663 │ │ yield* Effect.yieldNow; 2026-10-24T23:04:39.1810374Z 2664 │ │ dispatcher.flush(); 2026-10-24T23:04:39.1810622Z 2665 │ │ const secondExit = second.pollUnsafe(); 2026-10-24T23:04:39.1810881Z 2666 │ │ if (secondExit === undefined) { 2026-10-24T23:04:39.1811124Z 2667 │ │ second.interruptUnsafe(); 2026-10-24T23:04:39.1811358Z 2668 │ │ orphanedAt = interruptAt; 2026-10-24T23:04:39.1811579Z 2669 │ │ break; 2026-10-24T23:04:39.1811762Z 2670 │ │ } 2026-10-24T23:04:39.1811979Z 2671 │ │ if (Exit.isFailure(secondExit)) { 2026-10-24T23:04:39.1812270Z 2672 │ │ assert.fail("the matching request fiber was interrupted"); 2026-10-24T23:04:39.1812514Z 2673 │ │ } 2026-10-24T23:04:39.1812763Z 2674 │ │ assert.strictEqual(secondExit.value, "invalidWindow"); 2026-10-24T23:04:39.1813060Z 2675 │ ╰─▶ } 2026-10-24T23:04:39.1813253Z 2676 │ 2026-10-24T23:04:39.1813372Z ╰──── 2026-10-24T23:04:39.1813427Z 2026-10-24T23:04:39.1813692Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:04:39.1814106Z ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:40:5] 2026-10-24T23:04:39.1814384Z 37 │ const [initialized, setInitialized] = useState(false); 2026-10-24T23:04:39.1814579Z 38 │ useLayoutEffect(() => { 2026-10-24T23:04:39.1814748Z ·  ───────┬─────── 2026-10-24T23:04:39.1814975Z · ╰── This is the containing effect 2026-10-24T23:04:39.1815181Z 39 │ reset(); 2026-10-24T23:04:39.1815320Z 40 │ setInitialized(true); 2026-10-24T23:04:39.1815487Z ·  ───────┬────── 2026-10-24T23:04:39.1815752Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:04:39.1815985Z 41 │ }, [reset]); 2026-10-24T23:04:39.1816109Z ╰──── 2026-10-24T23:04:39.1816766Z  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-24T23:04:39.1817664Z  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-24T23:04:39.1817967Z 2026-10-24T23:04:39.1818223Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:04:39.1818625Z ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:93:5] 2026-10-24T23:04:39.1818846Z 88 │ 2026-10-24T23:04:39.1818967Z 89 │ useEffect(() => { 2026-10-24T23:04:39.1819179Z ·  ────┬──── 2026-10-24T23:04:39.1819469Z · ╰── This is the containing effect 2026-10-24T23:04:39.1819766Z 90 │ if (!needsPreparation || !initialProjectRef.branch || waitingForProject) return; 2026-10-24T23:04:39.1820034Z 91 │ const branchName = initialProjectRef.branch; 2026-10-24T23:04:39.1820219Z 92 │ let active = true; 2026-10-24T23:04:39.1820398Z 93 │ setPendingCheckouts((count) => count + 1); 2026-10-24T23:04:39.1820594Z ·  ─────────┬───────── 2026-10-24T23:04:39.1820867Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:04:39.1821187Z 94 │ // Serialize replacements: ignoring a stale result cannot undo its Git mutation. 2026-10-24T23:04:39.1821406Z ╰──── 2026-10-24T23:04:39.1822049Z  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-24T23:04:39.1822889Z  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-24T23:04:39.1823188Z 2026-10-24T23:04:39.1823443Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:04:39.1823837Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:57:5] 2026-10-24T23:04:39.1824053Z 55 │ 2026-10-24T23:04:39.1824174Z 56 │ useEffect(() => { 2026-10-24T23:04:39.1824326Z ·  ────┬──── 2026-10-24T23:04:39.1824549Z · ╰── This is the containing effect 2026-10-24T23:04:39.1824752Z 57 │ setDecodedSize(null); 2026-10-24T23:04:39.1824920Z ·  ───────┬────── 2026-10-24T23:04:39.1825182Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:04:39.1825422Z 58 │ }, [props.sourceKey]); 2026-10-24T23:04:39.1825559Z ╰──── 2026-10-24T23:04:39.1826197Z  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-24T23:04:39.1827075Z  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-24T23:04:39.1827376Z 2026-10-24T23:04:39.1827630Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:04:39.1828022Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:61:5] 2026-10-24T23:04:39.1828236Z 59 │ 2026-10-24T23:04:39.1828358Z 60 │ useEffect(() => { 2026-10-24T23:04:39.1828512Z ·  ────┬──── 2026-10-24T23:04:39.1828729Z · ╰── This is the containing effect 2026-10-24T23:04:39.1828938Z 61 │ setFailedUri(null); 2026-10-24T23:04:39.1829098Z ·  ──────┬───── 2026-10-24T23:04:39.1829359Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:04:39.1829649Z 62 │ }, [props.uri]); 2026-10-24T23:04:39.1829843Z ╰──── 2026-10-24T23:04:39.1830479Z  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-24T23:04:39.1831317Z  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-24T23:04:39.1831614Z 2026-10-24T23:04:39.1831832Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-24T23:04:39.1832191Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:7:10] 2026-10-24T23:04:39.1832476Z 6 │ import { parse, SvgAst, type JsxAST } from "react-native-svg"; 2026-10-24T23:04:39.1832792Z 7 │ import { ActivityIndicator, Pressable, StyleSheet, View, type ViewStyle } from "react-native"; 2026-10-24T23:04:39.1833065Z ·  ────────┬──────── 2026-10-24T23:04:39.1833324Z · ╰── 'ActivityIndicator' is imported here 2026-10-24T23:04:39.1833531Z 8 │ 2026-10-24T23:04:39.1833639Z ╰──── 2026-10-24T23:04:39.1833797Z  help: Consider removing this import. 2026-10-24T23:04:39.1833914Z 2026-10-24T23:04:39.1834114Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:04:39.1834465Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:58:7] 2026-10-24T23:04:39.1834689Z 57 │ setDecodedSize(null); 2026-10-24T23:04:39.1834853Z 58 │ }, [props.sourceKey]); 2026-10-24T23:04:39.1835024Z ·  ───────┬─────── 2026-10-24T23:04:39.1835280Z · ╰── Unnecessary dependency `props.sourceKey` 2026-10-24T23:04:39.1835491Z 59 │ 2026-10-24T23:04:39.1835603Z ╰──── 2026-10-24T23:04:39.1835942Z  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-24T23:04:39.1836520Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.1836848Z 2026-10-24T23:04:39.1837054Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:04:39.1837456Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:62:7] 2026-10-24T23:04:39.1837758Z 61 │ setFailedUri(null); 2026-10-24T23:04:39.1837911Z 62 │ }, [props.uri]); 2026-10-24T23:04:39.1838064Z ·  ────┬──── 2026-10-24T23:04:39.1838298Z · ╰── Unnecessary dependency `props.uri` 2026-10-24T23:04:39.1838501Z 63 │ 2026-10-24T23:04:39.1838609Z ╰──── 2026-10-24T23:04:39.1838948Z  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-24T23:04:39.1839521Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.1839810Z 2026-10-24T23:04:39.1840005Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T23:04:39.1840349Z ╭─[apps/mobile/src/features/threads/ThreadQueueControl.tsx:602:27] 2026-10-24T23:04:39.1840687Z 601 │ const onEnd = useEffectEvent((y: number, success: boolean) => props.onEnd(y, success)); 2026-10-24T23:04:39.1840941Z 602 │ const gesture = Gesture.Pan() 2026-10-24T23:04:39.1841132Z ·  ─┬─ 2026-10-24T23:04:39.1841377Z · ╰── `Pan` may be a component 2026-10-24T23:04:39.1841601Z 603 │ .enabled(!props.disabled) 2026-10-24T23:04:39.1841746Z ╰──── 2026-10-24T23:04:39.1842073Z  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-24T23:04:39.1842769Z  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-24T23:04:39.1843170Z 2026-10-24T23:04:39.1843337Z ⚠ eslint(no-empty-pattern): Empty array binding pattern 2026-10-24T23:04:39.1843665Z ╭─[apps/server/src/pullRequest/PullRequestService.test.ts:1437:12] 2026-10-24T23:04:39.1843884Z 1436 │ 2026-10-24T23:04:39.1844009Z 1437 │ for (const [] of [ 2026-10-24T23:04:39.1844170Z ·  ── 2026-10-24T23:04:39.1844330Z 1438 │ ["github", "github.com"], 2026-10-24T23:04:39.1844473Z ╰──── 2026-10-24T23:04:39.1844799Z  help: Passing non-iterable values (null, undefined, numbers, booleans, etc.) will result in a runtime error because these values are not iterable. 2026-10-24T23:04:39.1845060Z 2026-10-24T23:04:39.1845530Z ⚠ 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-24T23:04:39.1846080Z ╭─[apps/server/src/project/ProjectService.test.ts:94:3] 2026-10-24T23:04:39.1846286Z 93 │ ) { 2026-10-24T23:04:39.1846562Z 94 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T23:04:39.1846972Z 95 │ │ const project = Option.getOrThrow(yield* service.getById(projectId)); 2026-10-24T23:04:39.1847268Z 96 │ │ if (predicate(project)) return project; 2026-10-24T23:04:39.1847505Z 97 │ │ yield* Effect.yieldNow; 2026-10-24T23:04:39.1847807Z 98 │ ╰─▶ } 2026-10-24T23:04:39.1848156Z 99 │ return yield* Effect.die(`Project ${projectId} was not enriched in time.`); 2026-10-24T23:04:39.1848506Z ╰──── 2026-10-24T23:04:39.1848564Z 2026-10-24T23:04:39.1848836Z ⚠ eslint(no-unused-vars): Variable 'useDragRegion' is declared but never used. Unused variables should start with a '_'. 2026-10-24T23:04:39.1849242Z ╭─[apps/web/src/components/preview/PreviewPanelShell.tsx:61:9] 2026-10-24T23:04:39.1849449Z 60 │ ) { 2026-10-24T23:04:39.1849688Z 61 │ const useDragRegion = isElectron && props.mode !== "sheet" && props.mode !== "embedded"; 2026-10-24T23:04:39.1849944Z ·  ──────┬────── 2026-10-24T23:04:39.1850189Z · ╰── 'useDragRegion' is declared here 2026-10-24T23:04:39.1850431Z 62 │ const isInline = props.mode === "inline"; 2026-10-24T23:04:39.1850597Z ╰──── 2026-10-24T23:04:39.1850755Z  help: Consider removing this declaration. 2026-10-24T23:04:39.1850879Z 2026-10-24T23:04:39.1851139Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:04:39.1851535Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:406:5] 2026-10-24T23:04:39.1851750Z 404 │ 2026-10-24T23:04:39.1851880Z 405 │ useEffect(() => { 2026-10-24T23:04:39.1852038Z ·  ────┬──── 2026-10-24T23:04:39.1852261Z · ╰── This is the containing effect 2026-10-24T23:04:39.1852490Z 406 │ setInspectorSelection((current) => { 2026-10-24T23:04:39.1852691Z ·  ──────────┬────────── 2026-10-24T23:04:39.1852973Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:04:39.1853251Z 407 │ if (props.renderInspector === undefined) { 2026-10-24T23:04:39.1853418Z ╰──── 2026-10-24T23:04:39.1854063Z  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-24T23:04:39.1854902Z  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-24T23:04:39.1855204Z 2026-10-24T23:04:39.1855426Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T23:04:39.1855793Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:534:24] 2026-10-24T23:04:39.1856116Z 533 │ const inspectorHeaderInset = Platform.OS === "ios" ? 0 : safeAreaInsets.top; 2026-10-24T23:04:39.1856458Z 534 │ ╭─▶ const GitInspector = () => ( 2026-10-24T23:04:39.1856721Z 535 │ │ 2026-10-24T23:04:39.1858116Z 540 │ ╰─▶ ); 2026-10-24T23:04:39.1858419Z 541 │ const FilesInspector = () => 2026-10-24T23:04:39.1858571Z ╰──── 2026-10-24T23:04:39.1858848Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-24T23:04:39.1859061Z 2026-10-24T23:04:39.1859272Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T23:04:39.1859636Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:541:26] 2026-10-24T23:04:39.1859851Z 540 │ ); 2026-10-24T23:04:39.1860093Z 541 │ ╭─▶ const FilesInspector = () => 2026-10-24T23:04:39.1860411Z 542 │ │ selectedThread !== null && selectedThreadCwd !== null ? ( 2026-10-24T23:04:39.1860682Z 543 │ │ 2026-10-24T23:04:39.1862694Z 551 │ ╰─▶ ) : null; 2026-10-24T23:04:39.1863000Z 552 │ const RouteInspector = () => props.renderInspector?.(inspectorHeaderInset); 2026-10-24T23:04:39.1863214Z ╰──── 2026-10-24T23:04:39.1863483Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-24T23:04:39.1863695Z 2026-10-24T23:04:39.1863886Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T23:04:39.1864239Z ╭─[apps/mobile/src/features/terminal/TerminalContextSheet.tsx:72:15] 2026-10-24T23:04:39.1864465Z 71 │ event.type === "snapshot").at(-1)?.snapshot; 2026-10-24T23:04:39.1874010Z ·  ────── 2026-10-24T23:04:39.1874238Z 732 │ expect(snapshot?.history).toBe("aa😀\rEND"); 2026-10-24T23:04:39.1874414Z ╰──── 2026-10-24T23:04:39.1874639Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T23:04:39.1874813Z 2026-10-24T23:04:39.1875127Z ⚠ eslint(no-unused-vars): Type 'ThreadRunSummary' is imported but never used. 2026-10-24T23:04:39.1875515Z ╭─[apps/web/src/types.ts:22:3] 2026-10-24T23:04:39.1875698Z 21 │ EnvironmentThreadShell, 2026-10-24T23:04:39.1875853Z 22 │ ThreadRunSummary, 2026-10-24T23:04:39.1876017Z ·  ────────┬─────── 2026-10-24T23:04:39.1876256Z · ╰── 'ThreadRunSummary' is imported here 2026-10-24T23:04:39.1876476Z 23 │ ThreadRuntimeSummary, 2026-10-24T23:04:39.1876615Z ╰──── 2026-10-24T23:04:39.1876766Z  help: Consider removing this import. 2026-10-24T23:04:39.1876926Z 2026-10-24T23:04:39.1877389Z ⚠ 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-24T23:04:39.1877969Z ╭─[apps/server/src/project/ProjectEnrichmentService.test.ts:28:3] 2026-10-24T23:04:39.1878187Z 27 │ ) { 2026-10-24T23:04:39.1878458Z 28 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T23:04:39.1878802Z 29 │ │ const available = yield* service.peek(workspaceRoot); 2026-10-24T23:04:39.1879080Z 30 │ │ if (predicate(available)) return available; 2026-10-24T23:04:39.1879323Z 31 │ │ yield* Effect.yieldNow; 2026-10-24T23:04:39.1879558Z 32 │ ╰─▶ } 2026-10-24T23:04:39.1879871Z 33 │ return yield* Effect.die(`Project metadata for ${workspaceRoot} was not resolved in time.`); 2026-10-24T23:04:39.1880101Z ╰──── 2026-10-24T23:04:39.1880158Z 2026-10-24T23:04:39.1880349Z ⚠ react(static-components): Cannot create components during render 2026-10-24T23:04:39.1880693Z ╭─[apps/mobile/src/features/terminal/NativeTerminalSurface.tsx:234:10] 2026-10-24T23:04:39.1880949Z 196 │ const { onInput, onResize } = props; 2026-10-24T23:04:39.1881196Z 197 │ const NativeTerminalSurfaceView = resolveNativeTerminalSurfaceView(); 2026-10-24T23:04:39.1881495Z ·  ────────────────┬─────────────── 2026-10-24T23:04:39.1881816Z · ╰── The component is created during render here 2026-10-24T23:04:39.1882123Z 198 │ const hasNativeSurface = Boolean(NativeTerminalSurfaceView); 2026-10-24T23:04:39.1882314Z 199 │ 2026-10-24T23:04:39.1882440Z 200 │ useEffect(() => { 2026-10-24T23:04:39.1882619Z 201 │ terminalDebugLog("native:surface", { 2026-10-24T23:04:39.1882814Z 202 │ terminalKey: props.terminalKey, 2026-10-24T23:04:39.1882993Z 203 │ native: hasNativeSurface, 2026-10-24T23:04:39.1883221Z 204 │ hardwareKeyRevision: getNativeTerminalHardwareKeyRevision(), 2026-10-24T23:04:39.1883453Z 205 │ bufferLen: props.buffer.length, 2026-10-24T23:04:39.1883631Z 206 │ isRunning: props.isRunning, 2026-10-24T23:04:39.1883788Z 207 │ }); 2026-10-24T23:04:39.1884011Z 208 │ }, [hasNativeSurface, props.buffer.length, props.isRunning, props.terminalKey]); 2026-10-24T23:04:39.1884267Z 209 │ const handleNativeInput = useCallback( 2026-10-24T23:04:39.1884490Z 210 │ (event: NativeSyntheticEvent) => { 2026-10-24T23:04:39.1884720Z 211 │ if (!props.isRunning || props.readOnly) { 2026-10-24T23:04:39.1884896Z 212 │ return; 2026-10-24T23:04:39.1885093Z 213 │ } 2026-10-24T23:04:39.1885339Z 214 │ terminalDebugLog("native:onInput", { 2026-10-24T23:04:39.1885592Z 215 │ codes: Array.from(event.nativeEvent.data, (char) => char.codePointAt(0)), 2026-10-24T23:04:39.1885809Z 216 │ }); 2026-10-24T23:04:39.1885963Z 217 │ onInput(event.nativeEvent.data); 2026-10-24T23:04:39.1886123Z 218 │ }, 2026-10-24T23:04:39.1886284Z 219 │ [onInput, props.isRunning, props.readOnly], 2026-10-24T23:04:39.1886456Z 220 │ ); 2026-10-24T23:04:39.1886605Z 221 │ const handleNativeResize = useCallback( 2026-10-24T23:04:39.1886869Z 222 │ (event: NativeSyntheticEvent) => { 2026-10-24T23:04:39.1887064Z 223 │ onResize({ 2026-10-24T23:04:39.1887223Z 224 │ cols: event.nativeEvent.cols, 2026-10-24T23:04:39.1887409Z 225 │ rows: event.nativeEvent.rows, 2026-10-24T23:04:39.1887562Z 226 │ }); 2026-10-24T23:04:39.1887693Z 227 │ }, 2026-10-24T23:04:39.1887820Z 228 │ [onResize], 2026-10-24T23:04:39.1887948Z 229 │ ); 2026-10-24T23:04:39.1888060Z 230 │ 2026-10-24T23:04:39.1888267Z 231 │ if (NativeTerminalSurfaceView) { 2026-10-24T23:04:39.1888518Z 232 │ return ( 2026-10-24T23:04:39.1888738Z 233 │ 2026-10-24T23:04:39.1889015Z 234 │ { 2026-10-24T23:04:39.1893157Z ╰──── 2026-10-24T23:04:39.1893488Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T23:04:39.1894037Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T23:04:39.1894309Z 2026-10-24T23:04:39.1894565Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:04:39.1894982Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:643:5] 2026-10-24T23:04:39.1895206Z 638 │ 2026-10-24T23:04:39.1895419Z 639 │ useEffect(() => { 2026-10-24T23:04:39.1895646Z ·  ────┬──── 2026-10-24T23:04:39.1895864Z · ╰── This is the containing effect 2026-10-24T23:04:39.1896116Z 640 │ if (pendingLaunchEntry.key === launchTargetKey) { 2026-10-24T23:04:39.1896302Z 641 │ return; 2026-10-24T23:04:39.1896434Z 642 │ } 2026-10-24T23:04:39.1896570Z 643 │ setPendingLaunchEntry({ 2026-10-24T23:04:39.1896754Z ·  ──────────┬────────── 2026-10-24T23:04:39.1897080Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:04:39.1897324Z 644 │ key: launchTargetKey, 2026-10-24T23:04:39.1897465Z ╰──── 2026-10-24T23:04:39.1898114Z  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-24T23:04:39.1898959Z  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-24T23:04:39.1899258Z 2026-10-24T23:04:39.1899514Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:04:39.1899924Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:653:5] 2026-10-24T23:04:39.1900151Z 648 │ 2026-10-24T23:04:39.1900275Z 649 │ useEffect(() => { 2026-10-24T23:04:39.1900430Z ·  ────┬──── 2026-10-24T23:04:39.1900656Z · ╰── This is the containing effect 2026-10-24T23:04:39.1900912Z 650 │ if (initialAttachGridEntry.key === launchTargetKey) { 2026-10-24T23:04:39.1901102Z 651 │ return; 2026-10-24T23:04:39.1901227Z 652 │ } 2026-10-24T23:04:39.1901373Z 653 │ setInitialAttachGridEntry({ 2026-10-24T23:04:39.1901568Z ·  ────────────┬──────────── 2026-10-24T23:04:39.1901851Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:04:39.1902091Z 654 │ key: launchTargetKey, 2026-10-24T23:04:39.1902235Z ╰──── 2026-10-24T23:04:39.1902938Z  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-24T23:04:39.1903846Z  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-24T23:04:39.1904145Z 2026-10-24T23:04:39.1904396Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:04:39.1904807Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:746:7] 2026-10-24T23:04:39.1905029Z 743 │ 2026-10-24T23:04:39.1905154Z 744 │ useEffect(() => { 2026-10-24T23:04:39.1905306Z ·  ────┬──── 2026-10-24T23:04:39.1905525Z · ╰── This is the containing effect 2026-10-24T23:04:39.1905768Z 745 │ if (!routeEnvironmentId || !routeThreadId) { 2026-10-24T23:04:39.1905959Z 746 │ setLastGridSize({ 2026-10-24T23:04:39.1906216Z ·  ───────┬─────── 2026-10-24T23:04:39.1906489Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:04:39.1906740Z 747 │ cols: DEFAULT_TERMINAL_COLS, 2026-10-24T23:04:39.1906947Z ╰──── 2026-10-24T23:04:39.1907584Z  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-24T23:04:39.1909044Z  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-24T23:04:39.1909345Z 2026-10-24T23:04:39.1909549Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:04:39.1909920Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:538:24] 2026-10-24T23:04:39.1910146Z 537 │ }); 2026-10-24T23:04:39.1910339Z 538 │ }, [terminal.buffer, terminal.buffer.length, terminalKey]); 2026-10-24T23:04:39.1910592Z ·  ───────────┬────────── 2026-10-24T23:04:39.1910963Z · ╰── Overly precise dependency `terminal.buffer.length`, use `terminal.buffer` instead 2026-10-24T23:04:39.1911353Z 539 │ const cwd = terminal.summary?.cwd ?? selectedThreadProject?.workspaceRoot ?? null; 2026-10-24T23:04:39.1911577Z ╰──── 2026-10-24T23:04:39.1911927Z  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-24T23:04:39.1912507Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.1912793Z 2026-10-24T23:04:39.1912994Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:04:39.1913360Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:709:7] 2026-10-24T23:04:39.1913627Z 708 │ sentInitialInputKeyRef.current = null; 2026-10-24T23:04:39.1913815Z 709 │ }, [terminalKey]); 2026-10-24T23:04:39.1913978Z ·  ─────┬───── 2026-10-24T23:04:39.1914280Z · ╰── Unnecessary dependency `terminalKey` 2026-10-24T23:04:39.1914555Z 710 │ 2026-10-24T23:04:39.1914667Z ╰──── 2026-10-24T23:04:39.1915007Z  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-24T23:04:39.1915590Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.1915880Z 2026-10-24T23:04:39.1916077Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:04:39.1916445Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:800:52] 2026-10-24T23:04:39.1916673Z 799 │ }; 2026-10-24T23:04:39.1916960Z 800 │ }, [canOperateTerminal, isRunning, pasteSession, terminal.lifecycleVersion, terminalKey]); 2026-10-24T23:04:39.1917343Z ·  ────────────┬──────────── ─────┬───── 2026-10-24T23:04:39.1917756Z · │ ╰── Unnecessary dependency `terminalKey` 2026-10-24T23:04:39.1918168Z · ╰── Unnecessary dependency `terminal.lifecycleVersion` 2026-10-24T23:04:39.1918416Z 801 │ 2026-10-24T23:04:39.1918524Z ╰──── 2026-10-24T23:04:39.1918866Z  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-24T23:04:39.1919445Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.1919737Z 2026-10-24T23:04:39.1919887Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:04:39.1920207Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:793:24] 2026-10-24T23:04:39.1920435Z 792 │ } 2026-10-24T23:04:39.1920602Z 793 │ const pasteSession = pasteSessionRef.current; 2026-10-24T23:04:39.1920844Z ·  ───────────┬─────────── 2026-10-24T23:04:39.1921125Z · ╰── Cannot access ref value during render 2026-10-24T23:04:39.1921338Z 794 │ 2026-10-24T23:04:39.1921445Z ╰──── 2026-10-24T23:04:39.1921966Z  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-24T23:04:39.1922666Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:04:39.1922939Z 2026-10-24T23:04:39.1923196Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:04:39.1923598Z ╭─[apps/mobile/src/features/terminal/terminalLaunchContext.ts:117:5] 2026-10-24T23:04:39.1923930Z 112 │ const [entry, setEntry] = useState(() => ({ key: input.targetKey, location: candidate })); 2026-10-24T23:04:39.1924163Z 113 │ useEffect(() => { 2026-10-24T23:04:39.1924319Z ·  ────┬──── 2026-10-24T23:04:39.1924595Z · ╰── This is the containing effect 2026-10-24T23:04:39.1924973Z 114 │ if (entry.key === input.targetKey && (entry.location !== null || candidate === null)) { 2026-10-24T23:04:39.1925200Z 115 │ return; 2026-10-24T23:04:39.1925328Z 116 │ } 2026-10-24T23:04:39.1925509Z 117 │ setEntry({ key: input.targetKey, location: candidate }); 2026-10-24T23:04:39.1925712Z ·  ────┬─── 2026-10-24T23:04:39.1925968Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:04:39.1926257Z 118 │ }, [candidate, entry.key, entry.location, input.targetKey]); 2026-10-24T23:04:39.1926443Z ╰──── 2026-10-24T23:04:39.1927136Z  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-24T23:04:39.1927974Z  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-24T23:04:39.1928368Z 2026-10-24T23:04:39.1928587Z ⚠ eslint(no-unused-vars): Type 'Scope' is imported but never used. 2026-10-24T23:04:39.1928910Z ╭─[apps/server/src/provider/ProviderAuthService.ts:15:18] 2026-10-24T23:04:39.1929145Z 14 │ import * as Layer from "effect/Layer"; 2026-10-24T23:04:39.1929341Z 15 │ import type * as Scope from "effect/Scope"; 2026-10-24T23:04:39.1929533Z ·  ──┬── 2026-10-24T23:04:39.1929762Z · ╰── 'Scope' is imported here 2026-10-24T23:04:39.1929992Z 16 │ import * as Stream from "effect/Stream"; 2026-10-24T23:04:39.1930153Z ╰──── 2026-10-24T23:04:39.1930304Z  help: Consider removing this import. 2026-10-24T23:04:39.1930418Z 2026-10-24T23:04:39.1930673Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:04:39.1931096Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:107:5] 2026-10-24T23:04:39.1931337Z 104 │ 2026-10-24T23:04:39.1931461Z 105 │ useEffect(() => { 2026-10-24T23:04:39.1931616Z ·  ────┬──── 2026-10-24T23:04:39.1931834Z · ╰── This is the containing effect 2026-10-24T23:04:39.1932054Z 106 │ clearReviewCommentTarget(); 2026-10-24T23:04:39.1932256Z 107 │ setPendingNativeCommentSelection(null); 2026-10-24T23:04:39.1932487Z ·  ────────────────┬─────────────── 2026-10-24T23:04:39.1932779Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:04:39.1933023Z 108 │ }, [selectedSection?.id]); 2026-10-24T23:04:39.1933168Z ╰──── 2026-10-24T23:04:39.1933807Z  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-24T23:04:39.1934646Z  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-24T23:04:39.1934946Z 2026-10-24T23:04:39.1935273Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:04:39.1935774Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:112:7] 2026-10-24T23:04:39.1936013Z 109 │ 2026-10-24T23:04:39.1936136Z 110 │ useEffect(() => { 2026-10-24T23:04:39.1936289Z ·  ────┬──── 2026-10-24T23:04:39.1936507Z · ╰── This is the containing effect 2026-10-24T23:04:39.1936729Z 111 │ if (activeCommentTarget === null) { 2026-10-24T23:04:39.1936982Z 112 │ setPendingNativeCommentSelection(null); 2026-10-24T23:04:39.1937215Z ·  ────────────────┬─────────────── 2026-10-24T23:04:39.1937517Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:04:39.1937747Z 113 │ } 2026-10-24T23:04:39.1937864Z ╰──── 2026-10-24T23:04:39.1938507Z  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-24T23:04:39.1939350Z  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-24T23:04:39.1939650Z 2026-10-24T23:04:39.1939849Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:04:39.1940235Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:108:7] 2026-10-24T23:04:39.1940520Z 107 │ setPendingNativeCommentSelection(null); 2026-10-24T23:04:39.1940709Z 108 │ }, [selectedSection?.id]); 2026-10-24T23:04:39.1940889Z ·  ─────────┬───────── 2026-10-24T23:04:39.1941157Z · ╰── Unnecessary dependency `selectedSection?.id` 2026-10-24T23:04:39.1941371Z 109 │ 2026-10-24T23:04:39.1941482Z ╰──── 2026-10-24T23:04:39.1941823Z  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-24T23:04:39.1942399Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.1942687Z 2026-10-24T23:04:39.1942861Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T23:04:39.1943188Z ╭─[apps/web/src/components/CommandPaletteThreadItems.tsx:152:58] 2026-10-24T23:04:39.1943526Z 151 │ if (threadSearchQuery.trim().length > 0 && !threadSearchQuery.startsWith(">") && !isOpen) { 2026-10-24T23:04:39.1943842Z 152 │ claimThreadOpen(thread.environmentId, thread.id, Date.now()); 2026-10-24T23:04:39.1944112Z ·  ─────┬──── 2026-10-24T23:04:39.1944415Z · ╰── Cannot call impure function 2026-10-24T23:04:39.1944630Z 153 │ } 2026-10-24T23:04:39.1944749Z ╰──── 2026-10-24T23:04:39.1945143Z  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-24T23:04:39.1945771Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T23:04:39.1946046Z 2026-10-24T23:04:39.1946307Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T23:04:39.1946676Z ╭─[apps/server/src/serverRuntimeStartup.ts:728:7] 2026-10-24T23:04:39.1946901Z 727 │ 2026-10-24T23:04:39.1947043Z 728 │ const layer = layerWithOptions(); 2026-10-24T23:04:39.1947213Z ·  ──┬── 2026-10-24T23:04:39.1947422Z · ╰── 'layer' is declared here 2026-10-24T23:04:39.1947609Z ╰──── 2026-10-24T23:04:39.1947767Z  help: Consider removing this declaration. 2026-10-24T23:04:39.1947775Z 2026-10-24T23:04:39.1948036Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:04:39.1948206Z ╭─[apps/mobile/src/features/review/ReviewCommentComposerSheet.tsx:103:7] 2026-10-24T23:04:39.1948260Z 100 │ 2026-10-24T23:04:39.1948324Z 101 │ useEffect(() => { 2026-10-24T23:04:39.1948397Z ·  ────┬──── 2026-10-24T23:04:39.1948533Z · ╰── This is the containing effect 2026-10-24T23:04:39.1948637Z 102 │ if (!target || selectedLines.length === 0) { 2026-10-24T23:04:39.1948720Z 103 │ setHighlightedLinesById({}); 2026-10-24T23:04:39.1948817Z ·  ───────────┬─────────── 2026-10-24T23:04:39.1948998Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:04:39.1949065Z 104 │ return; 2026-10-24T23:04:39.1949118Z ╰──── 2026-10-24T23:04:39.1949705Z  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-24T23:04:39.1950018Z  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-24T23:04:39.1950021Z 2026-10-24T23:04:39.1950219Z ⚠ eslint(no-unused-vars): Identifier 'identity' is imported but never used. 2026-10-24T23:04:39.1950325Z ╭─[apps/server/src/auth/http.ts:28:10] 2026-10-24T23:04:39.1950468Z 27 │ import * as Schema from "effect/Schema"; 2026-10-24T23:04:39.1950628Z 28 │ import { identity } from "effect/Function"; 2026-10-24T23:04:39.1950705Z ·  ────┬─── 2026-10-24T23:04:39.1950842Z · ╰── 'identity' is imported here 2026-10-24T23:04:39.1950924Z 29 │ import * as Layer from "effect/Layer"; 2026-10-24T23:04:39.1950979Z ╰──── 2026-10-24T23:04:39.1951077Z  help: Consider removing this import. 2026-10-24T23:04:39.1951080Z 2026-10-24T23:04:39.1951279Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T23:04:39.1951445Z ╭─[apps/web/src/components/settings/ProviderSettingsPanel.logic.ts:4:8] 2026-10-24T23:04:39.1951521Z 3 │ AuthProvidersManageScope, 2026-10-24T23:04:39.1951593Z 4 │ type AuthSessionState, 2026-10-24T23:04:39.1951685Z ·  ────────┬─────── 2026-10-24T23:04:39.1951835Z · ╰── 'AuthSessionState' is imported here 2026-10-24T23:04:39.1951905Z 5 │ type EnvironmentId, 2026-10-24T23:04:39.1951958Z ╰──── 2026-10-24T23:04:39.1952055Z  help: Consider removing this import. 2026-10-24T23:04:39.1952057Z 2026-10-24T23:04:39.1952415Z ⚠ 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-24T23:04:39.1952543Z ╭─[apps/server/src/auth/RpcAuthorization.ts:237:17] 2026-10-24T23:04:39.1952682Z 236 │ const requiredScopesForSettingsUpdate = (payload: unknown) => { 2026-10-24T23:04:39.1952815Z 237 │ const input = Schema.decodeUnknownSync(SettingsUpdate)(payload); 2026-10-24T23:04:39.1952931Z ·  ──────────────────────── 2026-10-24T23:04:39.1953072Z 238 │ const scopes = requiredScopesForServerSettingsPatch(input.patch); 2026-10-24T23:04:39.1953127Z ╰──── 2026-10-24T23:04:39.1953130Z 2026-10-24T23:04:39.1953490Z ⚠ 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-24T23:04:39.1953614Z ╭─[apps/server/src/auth/RpcAuthorization.ts:256:26] 2026-10-24T23:04:39.1953712Z 255 │ if (method === WS_METHODS.assetsCreateUrl) { 2026-10-24T23:04:39.1953868Z 256 │ const { resource } = Schema.decodeUnknownSync(AssetCreateUrlInput)(payload); 2026-10-24T23:04:39.1953990Z ·  ──────────────────────── 2026-10-24T23:04:39.1954052Z 257 │ return [ 2026-10-24T23:04:39.1954109Z ╰──── 2026-10-24T23:04:39.1954114Z 2026-10-24T23:04:39.1954369Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:04:39.1954544Z ╭─[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:60:5] 2026-10-24T23:04:39.1954599Z 55 │ 2026-10-24T23:04:39.1954662Z 56 │ useEffect(() => { 2026-10-24T23:04:39.1954736Z ·  ────┬──── 2026-10-24T23:04:39.1954871Z · ╰── This is the containing effect 2026-10-24T23:04:39.1954939Z 57 │ scheduler.reset(); 2026-10-24T23:04:39.1955035Z 58 │ highlightedRowIdsRef.current = new Set(); 2026-10-24T23:04:39.1955123Z 59 │ visibleChunkIndexRef.current = 0; 2026-10-24T23:04:39.1955241Z 60 │ setVisibleRange({ firstRowIndex: 0, lastRowIndex: 80 }); 2026-10-24T23:04:39.1955378Z ·  ───────┬─────── 2026-10-24T23:04:39.1955612Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:04:39.1955728Z 61 │ setTokensPatchJson(createEmptyTokenPatch(resetKey)); 2026-10-24T23:04:39.1955781Z ╰──── 2026-10-24T23:04:39.1956696Z  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-24T23:04:39.1957048Z  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-24T23:04:39.1957051Z 2026-10-24T23:04:39.1957253Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:04:39.1957429Z ╭─[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:63:7] 2026-10-24T23:04:39.1957510Z 62 │ return () => scheduler.cancel(); 2026-10-24T23:04:39.1957614Z 63 │ }, [enabled, resetKey, rows.length, scheduler]); 2026-10-24T23:04:39.1957743Z ·  ───┬─── ─────┬───── 2026-10-24T23:04:39.1957939Z · │ ╰── Unnecessary dependency `rows.length` 2026-10-24T23:04:39.1958079Z · ╰── Unnecessary dependency `enabled` 2026-10-24T23:04:39.1958134Z 64 │ 2026-10-24T23:04:39.1958190Z ╰──── 2026-10-24T23:04:39.1958486Z  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-24T23:04:39.1958796Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.1958798Z 2026-10-24T23:04:39.1959052Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:04:39.1959238Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:119:10] 2026-10-24T23:04:39.1959289Z 117 │ 2026-10-24T23:04:39.1959357Z 118 │ useEffect(() => { 2026-10-24T23:04:39.1959430Z ·  ────┬──── 2026-10-24T23:04:39.1959564Z · ╰── This is the containing effect 2026-10-24T23:04:39.1959647Z 119 │ void refreshNotifications(); 2026-10-24T23:04:39.1959743Z ·  ──────────┬───────── 2026-10-24T23:04:39.1959923Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:04:39.1960066Z 120 │ const subscription = AppState.addEventListener("change", (state) => { 2026-10-24T23:04:39.1960116Z ╰──── 2026-10-24T23:04:39.1960697Z  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-24T23:04:39.1961067Z  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-24T23:04:39.1961113Z 2026-10-24T23:04:39.1961395Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:04:39.1961581Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:128:7] 2026-10-24T23:04:39.1961632Z 125 │ 2026-10-24T23:04:39.1961700Z 126 │ useEffect(() => { 2026-10-24T23:04:39.1961774Z ·  ────┬──── 2026-10-24T23:04:39.1961907Z · ╰── This is the containing effect 2026-10-24T23:04:39.1961971Z 127 │ if (!isLoaded) { 2026-10-24T23:04:39.1962062Z 128 │ setLiveActivityStatus("checking"); 2026-10-24T23:04:39.1962155Z ·  ──────────┬────────── 2026-10-24T23:04:39.1962335Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:04:39.1962398Z 129 │ return; 2026-10-24T23:04:39.1962452Z ╰──── 2026-10-24T23:04:39.1963033Z  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-24T23:04:39.1963344Z  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-24T23:04:39.1963347Z 2026-10-24T23:04:39.1963546Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:04:39.1963682Z ╭─[apps/mobile/src/features/review/ReviewSheet.tsx:454:7] 2026-10-24T23:04:39.1963769Z 453 │ showAuxiliaryPane("inspector"); 2026-10-24T23:04:39.1963880Z 454 │ }, [environmentId, showAuxiliaryPane, threadId]); 2026-10-24T23:04:39.1964034Z ·  ──────┬────── ────┬─── 2026-10-24T23:04:39.1964233Z · │ ╰── Unnecessary dependency `threadId` 2026-10-24T23:04:39.1964388Z · ╰── Unnecessary dependency `environmentId` 2026-10-24T23:04:39.1964448Z 455 │ const { 2026-10-24T23:04:39.1964501Z ╰──── 2026-10-24T23:04:39.1964784Z  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-24T23:04:39.1965096Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.1965101Z 2026-10-24T23:04:39.1965287Z ⚠ react(static-components): Cannot create components during render 2026-10-24T23:04:39.1965425Z ╭─[apps/mobile/src/features/review/ReviewSheet.tsx:725:20] 2026-10-24T23:04:39.1965489Z 492 │ // same check. 2026-10-24T23:04:39.1965615Z 493 │ const NativeReviewDiffView = resolveNativeReviewDiffView(); 2026-10-24T23:04:39.1965740Z ·  ─────────────┬───────────── 2026-10-24T23:04:39.1965925Z · ╰── The component is created during render here 2026-10-24T23:04:39.1966075Z 494 │ const nativeReviewDiffViewRef = useRef(null); 2026-10-24T23:04:39.1966249Z 495 │ const showcasedReviewDrawRef = useRef(null); 2026-10-24T23:04:39.1966445Z 496 │ const [isPullRefreshing, setIsPullRefreshing] = useState(false); 2026-10-24T23:04:39.1966539Z 497 │ const handlePullToRefresh = async () => { 2026-10-24T23:04:39.1966618Z 498 │ setIsPullRefreshing(true); 2026-10-24T23:04:39.1966699Z 499 │ await refreshSelectedSection(); 2026-10-24T23:04:39.1966780Z 500 │ setIsPullRefreshing(false); 2026-10-24T23:04:39.1966860Z 501 │ }; 2026-10-24T23:04:39.1967013Z 502 │ const reviewFileNavigatorRef = useRef(null); 2026-10-24T23:04:39.1967153Z 503 │ const reviewFiles = parsedDiff.kind === "files" ? parsedDiff.files : []; 2026-10-24T23:04:39.1967263Z 504 │ const fileVisibility = useReviewFileVisibility({ 2026-10-24T23:04:39.1967349Z 505 │ threadKey: reviewCache.threadKey, 2026-10-24T23:04:39.1967446Z 506 │ sectionId: selectedSection?.id ?? null, 2026-10-24T23:04:39.1967514Z 507 │ files: reviewFiles, 2026-10-24T23:04:39.1967613Z 508 │ cachedExpandedFileIds: selectedSection?.id 2026-10-24T23:04:39.1967744Z 509 │ ? reviewCache.expandedFileIdsBySection[selectedSection.id] 2026-10-24T23:04:39.1967809Z 510 │ : undefined, 2026-10-24T23:04:39.1967901Z 511 │ cachedViewedFileIds: selectedSection?.id 2026-10-24T23:04:39.1968025Z 512 │ ? reviewCache.viewedFileIdsBySection[selectedSection.id] 2026-10-24T23:04:39.1968088Z 513 │ : undefined, 2026-10-24T23:04:39.1968141Z 514 │ }); 2026-10-24T23:04:39.1968462Z 515 │ const { collapsedFileIds, toggleExpandedFile, toggleViewedFile, viewedFileIds } = fileVisibility; 2026-10-24T23:04:39.1968594Z 516 │ const commentSelection = useReviewCommentSelectionController({ 2026-10-24T23:04:39.1968658Z 517 │ environmentId, 2026-10-24T23:04:39.1968723Z 518 │ threadId, 2026-10-24T23:04:39.1968794Z 519 │ selectedSection, 2026-10-24T23:04:39.1968864Z 520 │ nativeReviewDiffData, 2026-10-24T23:04:39.1968920Z 521 │ }); 2026-10-24T23:04:39.1969039Z 522 │ const nativeBridge = useNativeReviewDiffBridge({ 2026-10-24T23:04:39.1969176Z 523 │ threadKey: reviewCache.threadKey, 2026-10-24T23:04:39.1969321Z 524 │ sectionId: selectedSection?.id ?? null, 2026-10-24T23:04:39.1969410Z 525 │ diff: selectedSection?.diff, 2026-10-24T23:04:39.1969485Z 526 │ data: nativeReviewDiffData, 2026-10-24T23:04:39.1969554Z 527 │ collapsedFileIds, 2026-10-24T23:04:39.1969618Z 528 │ viewedFileIds, 2026-10-24T23:04:39.1969728Z 529 │ selectedRowIds: commentSelection.selectedRowIds, 2026-10-24T23:04:39.1969821Z 530 │ canHighlight: parsedDiff.kind === "files", 2026-10-24T23:04:39.1969877Z 531 │ }); 2026-10-24T23:04:39.1969956Z 532 │ const showcaseReviewKey = 2026-10-24T23:04:39.1970093Z 533 │ SHOWCASE_ENABLED && parsedDiff.kind === "files" && selectedSection 2026-10-24T23:04:39.1970299Z 534 │ ? `${reviewCache.threadKey}:${selectedSection.id}:${nativeBridge.tokensResetKey}:${nativeBridge.themeId}` 2026-10-24T23:04:39.1970362Z 535 │ : null; 2026-10-24T23:04:39.1970529Z 536 │ const handleNativeDebug = (event: NativeSyntheticEvent>) => { 2026-10-24T23:04:39.1970607Z 537 │ nativeBridge.onDebug(event); 2026-10-24T23:04:39.1970663Z 538 │ if ( 2026-10-24T23:04:39.1970743Z 539 │ showcaseReviewKey === null || 2026-10-24T23:04:39.1970864Z 540 │ showcasedReviewDrawRef.current === showcaseReviewKey || 2026-10-24T23:04:39.1970972Z 541 │ !isNativeReviewDiffDrawEvent(event.nativeEvent) 2026-10-24T23:04:39.1971026Z 542 │ ) { 2026-10-24T23:04:39.1971164Z 543 │ return; 2026-10-24T23:04:39.1971287Z 544 │ } 2026-10-24T23:04:39.1971397Z 545 │ showcasedReviewDrawRef.current = showcaseReviewKey; 2026-10-24T23:04:39.1971559Z 546 │ reportShowcaseSceneRendered({ scene: "review", themeId: nativeBridge.themeId }); 2026-10-24T23:04:39.1971615Z 547 │ }; 2026-10-24T23:04:39.1971669Z 548 │ 2026-10-24T23:04:39.1971783Z 549 │ const handleSelectFile = async (fileId: string | null) => { 2026-10-24T23:04:39.1971866Z 550 │ loadVisibleFile(fileId, true); 2026-10-24T23:04:39.1971955Z 551 │ commentSelection.clearSelection(); 2026-10-24T23:04:39.1972077Z 552 │ if (fileId !== null && collapsedFileIds.includes(fileId)) { 2026-10-24T23:04:39.1972154Z 553 │ toggleExpandedFile(fileId); 2026-10-24T23:04:39.1972209Z 554 │ } 2026-10-24T23:04:39.1972322Z 555 │ const nativeView = nativeReviewDiffViewRef.current; 2026-10-24T23:04:39.1972399Z 556 │ if (!nativeView) return; 2026-10-24T23:04:39.1972493Z 557 │ const result = await settlePromise(() => 2026-10-24T23:04:39.1972666Z 558 │ fileId === null ? nativeView.scrollToTop(true) : nativeView.scrollToFile(fileId, true), 2026-10-24T23:04:39.1972725Z 559 │ ); 2026-10-24T23:04:39.1972812Z 560 │ if (AsyncResult.isFailure(result)) { 2026-10-24T23:04:39.1972989Z 561 │ console.error("[review] Failed to navigate to diff file", squashAtomCommandFailure(result)); 2026-10-24T23:04:39.1973044Z 562 │ } 2026-10-24T23:04:39.1973099Z 563 │ }; 2026-10-24T23:04:39.1973182Z 564 │ const handleVisibleFileChange = ( 2026-10-24T23:04:39.1973314Z 565 │ event: NativeSyntheticEvent<{ readonly fileId?: string | null }>, 2026-10-24T23:04:39.1973374Z 566 │ ) => { 2026-10-24T23:04:39.1973484Z 567 │ loadVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-24T23:04:39.1973659Z 568 │ reviewFileNavigatorRef.current?.setVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-24T23:04:39.1973713Z 569 │ }; 2026-10-24T23:04:39.1973793Z 570 │ const renderInspector = () => ( 2026-10-24T23:04:39.1973863Z 571 │ void handleSelectFile(fileId)} 2026-10-24T23:04:39.1974371Z 577 │ /> 2026-10-24T23:04:39.1974426Z 578 │ ); 2026-10-24T23:04:39.1974478Z 579 │ 2026-10-24T23:04:39.1974658Z 580 │ const handleNativeToggleFile = (event: NativeSyntheticEvent<{ readonly fileId?: string }>) => { 2026-10-24T23:04:39.1974799Z 581 │ const { fileId } = event.nativeEvent; 2026-10-24T23:04:39.1974928Z 582 │ if (fileId) { 2026-10-24T23:04:39.1975013Z 583 │ loadVisibleFile(fileId, true); 2026-10-24T23:04:39.1975089Z 584 │ toggleExpandedFile(fileId); 2026-10-24T23:04:39.1975145Z 585 │ } 2026-10-24T23:04:39.1975201Z 586 │ }; 2026-10-24T23:04:39.1975254Z 587 │ 2026-10-24T23:04:39.1975340Z 588 │ const handleNativeToggleViewedFile = ( 2026-10-24T23:04:39.1975458Z 589 │ event: NativeSyntheticEvent<{ readonly fileId?: string }>, 2026-10-24T23:04:39.1975514Z 590 │ ) => { 2026-10-24T23:04:39.1975601Z 591 │ const { fileId } = event.nativeEvent; 2026-10-24T23:04:39.1975661Z 592 │ if (fileId) { 2026-10-24T23:04:39.1975738Z 593 │ toggleViewedFile(fileId); 2026-10-24T23:04:39.1975793Z 594 │ } 2026-10-24T23:04:39.1975845Z 595 │ }; 2026-10-24T23:04:39.1975905Z 596 │ 2026-10-24T23:04:39.1975981Z 597 │ const parsedDiffNotice = 2026-10-24T23:04:39.1976144Z 598 │ parsedDiff.kind === "files" || parsedDiff.kind === "raw" ? parsedDiff.notice : null; 2026-10-24T23:04:39.1976264Z 599 │ const hasCachedSelectedDiff = selectedSection?.diff != null; 2026-10-24T23:04:39.1976421Z 600 │ const hasAnyCachedDiff = reviewSections.some((section) => section.diff != null); 2026-10-24T23:04:39.1976541Z 601 │ const sectionMenu = buildReviewSectionMenu(reviewSections); 2026-10-24T23:04:39.1976699Z 602 │ const { showConnectionNotice, showSectionToolbar } = resolveReviewAvailability({ 2026-10-24T23:04:39.1976820Z 603 │ hasEnvironmentPresentation: environment.isReady, 2026-10-24T23:04:39.1976961Z 604 │ isEnvironmentConnected: isEnvironmentReady, 2026-10-24T23:04:39.1977033Z 605 │ hasCachedSelectedDiff, 2026-10-24T23:04:39.1977103Z 606 │ hasAnyCachedDiff, 2026-10-24T23:04:39.1977160Z 607 │ }); 2026-10-24T23:04:39.1977250Z 608 │ const handleRetryEnvironment = () => { 2026-10-24T23:04:39.1977339Z 609 │ void retryEnvironment(environmentId); 2026-10-24T23:04:39.1977394Z 610 │ }; 2026-10-24T23:04:39.1977477Z 611 │ const handleReturnToThread = () => { 2026-10-24T23:04:39.1977557Z 612 │ if (navigation.canGoBack()) { 2026-10-24T23:04:39.1977629Z 613 │ navigation.goBack(); 2026-10-24T23:04:39.1977691Z 614 │ return; 2026-10-24T23:04:39.1977744Z 615 │ } 2026-10-24T23:04:39.1977826Z 616 │ navigation.navigate("Thread", { 2026-10-24T23:04:39.1977916Z 617 │ environmentId: String(environmentId), 2026-10-24T23:04:39.1977993Z 618 │ threadId: String(threadId), 2026-10-24T23:04:39.1978048Z 619 │ }); 2026-10-24T23:04:39.1978103Z 620 │ }; 2026-10-24T23:04:39.1978189Z 621 │ const androidHeaderSubtitle = [ 2026-10-24T23:04:39.1978262Z 622 │ selectedSection?.title, 2026-10-24T23:04:39.1978341Z 623 │ headerDiffSummary.additions, 2026-10-24T23:04:39.1978420Z 624 │ headerDiffSummary.deletions, 2026-10-24T23:04:39.1978475Z 625 │ ] 2026-10-24T23:04:39.1978579Z 626 │ .filter((part): part is string => Boolean(part)) 2026-10-24T23:04:39.1978644Z 627 │ .join(" · "); 2026-10-24T23:04:39.1978697Z 628 │ 2026-10-24T23:04:39.1978775Z 629 │ const showChangedFilesPane = 2026-10-24T23:04:39.1978847Z 630 │ !showConnectionNotice && 2026-10-24T23:04:39.1978923Z 631 │ selectedSection !== null && 2026-10-24T23:04:39.1979004Z 632 │ parsedDiff.kind === "files" && 2026-10-24T23:04:39.1979083Z 633 │ NativeReviewDiffView !== null; 2026-10-24T23:04:39.1979250Z 634 │ useRegisterWorkspaceInspector(showChangedFilesPane ? renderInspector : undefined); 2026-10-24T23:04:39.1979490Z 635 │ const showChangedFilesToggle = panes.supportsAuxiliaryPane && showChangedFilesPane; 2026-10-24T23:04:39.1979604Z 636 │ 2026-10-24T23:04:39.1979677Z 637 │ const listHeader = (() => { 2026-10-24T23:04:39.1979760Z 638 │ const children: ReactElement[] = []; 2026-10-24T23:04:39.1979815Z 639 │ 2026-10-24T23:04:39.1979880Z 640 │ if (error) { 2026-10-24T23:04:39.1979948Z 641 │ children.push( 2026-10-24T23:04:39.1980007Z 642 │ 2026-10-24T23:04:39.1980661Z 649 │ Review unavailable 2026-10-24T23:04:39.1980821Z 650 │ {error} 2026-10-24T23:04:39.1980882Z 651 │ , 2026-10-24T23:04:39.1980941Z 652 │ ); 2026-10-24T23:04:39.1980994Z 653 │ } 2026-10-24T23:04:39.1981046Z 654 │ 2026-10-24T23:04:39.1981118Z 655 │ if (parsedDiffNotice) { 2026-10-24T23:04:39.1981277Z 656 │ children.push(); 2026-10-24T23:04:39.1981329Z 657 │ } 2026-10-24T23:04:39.1981381Z 658 │ 2026-10-24T23:04:39.1981459Z 659 │ if (children.length === 0) { 2026-10-24T23:04:39.1981524Z 660 │ return null; 2026-10-24T23:04:39.1981575Z 661 │ } 2026-10-24T23:04:39.1981628Z 662 │ 2026-10-24T23:04:39.1981705Z 663 │ return <>{children}; 2026-10-24T23:04:39.1981762Z 664 │ })(); 2026-10-24T23:04:39.1981833Z 665 │ const headerSubtitle = [ 2026-10-24T23:04:39.1981912Z 666 │ headerDiffSummary.additions, 2026-10-24T23:04:39.1981992Z 667 │ headerDiffSummary.deletions, 2026-10-24T23:04:39.1982069Z 668 │ pendingReviewCommentCount > 0 2026-10-24T23:04:39.1982241Z 669 │ ? `${pendingReviewCommentCount} comment${pendingReviewCommentCount === 1 ? "" : "s"}` 2026-10-24T23:04:39.1982303Z 670 │ : null, 2026-10-24T23:04:39.1982357Z 671 │ ] 2026-10-24T23:04:39.1982420Z 672 │ .filter(Boolean) 2026-10-24T23:04:39.1982484Z 673 │ .join(" · "); 2026-10-24T23:04:39.1982620Z 674 │ const headerTitleText = selectedSection?.title ?? "Review changes"; 2026-10-24T23:04:39.1982675Z 675 │ 2026-10-24T23:04:39.1982732Z 676 │ return ( 2026-10-24T23:04:39.1982789Z 677 │ <> 2026-10-24T23:04:39.1982860Z 678 │ 2026-10-24T23:04:39.1984309Z 694 │ 2026-10-24T23:04:39.1984373Z 695 │ 2026-10-24T23:04:39.1984496Z 696 │ 2026-10-24T23:04:39.1984577Z 697 │ {showConnectionNotice ? ( 2026-10-24T23:04:39.1984718Z 698 │ 2026-10-24T23:04:39.1984807Z 699 │ 2026-10-24T23:04:39.1985824Z 711 │ 2026-10-24T23:04:39.1985983Z 712 │ ) : selectedSection && parsedDiff.kind === "files" && NativeReviewDiffView ? ( 2026-10-24T23:04:39.1986045Z 713 │ 2026-10-24T23:04:39.1986491Z 719 │ 2026-10-24T23:04:39.1986888Z 723 │ {listHeader} 2026-10-24T23:04:39.1987012Z 724 │ 2026-10-24T23:04:39.1987096Z 725 │ ( 2026-10-24T23:04:39.1988762Z 223 │ 2026-10-24T23:04:39.1988876Z ·  ─────────────── 2026-10-24T23:04:39.1988969Z 224 │ {lineIndex > 0 ? "\n" : ""} 2026-10-24T23:04:39.1989022Z ╰──── 2026-10-24T23:04:39.1989169Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T23:04:39.1989171Z 2026-10-24T23:04:39.1989369Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T23:04:39.1989523Z ╭─[apps/mobile/src/features/review/ReviewCommentCard.tsx:227:25] 2026-10-24T23:04:39.1989599Z 226 │ Promise.resolve()); 2026-10-24T23:04:39.1995612Z 225 │ │ const pending = backgroundRuntime.pending.shift(); 2026-10-24T23:04:39.1995705Z 226 │ │ if (!pending) { 2026-10-24T23:04:39.1995799Z 227 │ │ idlePasses++; 2026-10-24T23:04:39.1995906Z 228 │ │ if (idlePasses >= 3) { 2026-10-24T23:04:39.1996000Z 229 │ │ return; 2026-10-24T23:04:39.1996080Z 230 │ │ } 2026-10-24T23:04:39.1996168Z 231 │ │ continue; 2026-10-24T23:04:39.1996245Z 232 │ │ } 2026-10-24T23:04:39.1996337Z 233 │ │ idlePasses = 0; 2026-10-24T23:04:39.1996459Z 234 │ │ const exit = yield* Effect.exit( 2026-10-24T23:04:39.1996676Z 235 │ │ pending.operation as Effect.Effect, 2026-10-24T23:04:39.1996755Z 236 │ │ ); 2026-10-24T23:04:39.1996908Z 237 │ │ yield* Effect.sync(() => { 2026-10-24T23:04:39.1997012Z 238 │ │ pending.resolve(exit); 2026-10-24T23:04:39.1997092Z 239 │ │ }); 2026-10-24T23:04:39.1997232Z 240 │ ╰─▶ } 2026-10-24T23:04:39.1997294Z 241 │ }, 2026-10-24T23:04:39.1997345Z ╰──── 2026-10-24T23:04:39.1997348Z 2026-10-24T23:04:39.1997506Z ⚠ react(immutability): This value cannot be modified 2026-10-24T23:04:39.1997677Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:93:5] 2026-10-24T23:04:39.1997732Z 90 │ }) { 2026-10-24T23:04:39.1997841Z 91 │ const rotation = useSharedValue(props.hidden ? 1 : 0); 2026-10-24T23:04:39.1997919Z ·  ────┬─── 2026-10-24T23:04:39.1998056Z · ╰── `rotation` originates here 2026-10-24T23:04:39.1998126Z 92 │ useLayoutEffect(() => { 2026-10-24T23:04:39.1998325Z 93 │ rotation.value = withTiming(props.hidden ? 1 : 0, TOOLBAR_FLIP_TIMING); 2026-10-24T23:04:39.1998468Z ·  ────┬─── 2026-10-24T23:04:39.1998604Z · ╰── `rotation` cannot be modified 2026-10-24T23:04:39.1998682Z 94 │ }, [props.hidden, rotation]); 2026-10-24T23:04:39.1998734Z ╰──── 2026-10-24T23:04:39.1998998Z  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-24T23:04:39.1999304Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:04:39.1999307Z 2026-10-24T23:04:39.1999466Z ⚠ react(immutability): This value cannot be modified 2026-10-24T23:04:39.1999634Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:269:5] 2026-10-24T23:04:39.1999734Z 266 │ const variant = props.variant ?? "plain"; 2026-10-24T23:04:39.1999871Z 267 │ const loadingVisibility = useSharedValue(props.loading ? 1 : 0); 2026-10-24T23:04:39.1999959Z ·  ────────┬──────── 2026-10-24T23:04:39.2000106Z · ╰── `loadingVisibility` originates here 2026-10-24T23:04:39.2000177Z 268 │ useLayoutEffect(() => { 2026-10-24T23:04:39.2000338Z 269 │ loadingVisibility.value = withTiming(props.loading ? 1 : 0, DICTATION_TIMING); 2026-10-24T23:04:39.2000422Z ·  ────────┬──────── 2026-10-24T23:04:39.2000574Z · ╰── `loadingVisibility` cannot be modified 2026-10-24T23:04:39.2000667Z 270 │ }, [loadingVisibility, props.loading]); 2026-10-24T23:04:39.2000721Z ╰──── 2026-10-24T23:04:39.2000985Z  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-24T23:04:39.2001282Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:04:39.2001288Z 2026-10-24T23:04:39.2001441Z ⚠ react(immutability): This value cannot be modified 2026-10-24T23:04:39.2001610Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:328:5] 2026-10-24T23:04:39.2001666Z 325 │ }) { 2026-10-24T23:04:39.2001824Z 326 │ const recordingVisibility = useSharedValue(props.phase === "recording" ? 1 : 0); 2026-10-24T23:04:39.2001911Z ·  ─────────┬───────── 2026-10-24T23:04:39.2002118Z · ╰── `recordingVisibility` originates here 2026-10-24T23:04:39.2002252Z 327 │ useLayoutEffect(() => { 2026-10-24T23:04:39.2002440Z 328 │ recordingVisibility.value = withTiming(props.phase === "recording" ? 1 : 0, DICTATION_TIMING); 2026-10-24T23:04:39.2002524Z ·  ─────────┬───────── 2026-10-24T23:04:39.2002683Z · ╰── `recordingVisibility` cannot be modified 2026-10-24T23:04:39.2002774Z 329 │ }, [props.phase, recordingVisibility]); 2026-10-24T23:04:39.2002828Z ╰──── 2026-10-24T23:04:39.2003081Z  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-24T23:04:39.2003380Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:04:39.2003382Z 2026-10-24T23:04:39.2003544Z ⚠ react(immutability): This value cannot be modified 2026-10-24T23:04:39.2003713Z ╭─[apps/mobile/src/features/voice-input/GlobalVoiceInputControl.tsx:68:5] 2026-10-24T23:04:39.2003814Z 65 │ const [expanded, setExpanded] = useState(false); 2026-10-24T23:04:39.2003898Z 66 │ const progress = useSharedValue(0); 2026-10-24T23:04:39.2003974Z ·  ────┬─── 2026-10-24T23:04:39.2004110Z · ╰── `progress` originates here 2026-10-24T23:04:39.2004174Z 67 │ useEffect(() => { 2026-10-24T23:04:39.2004298Z 68 │ progress.value = withTiming(expanded ? 1 : 0, MORPH_TIMING); 2026-10-24T23:04:39.2004370Z ·  ────┬─── 2026-10-24T23:04:39.2004508Z · ╰── `progress` cannot be modified 2026-10-24T23:04:39.2004582Z 69 │ }, [expanded, progress]); 2026-10-24T23:04:39.2004639Z ╰──── 2026-10-24T23:04:39.2004894Z  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-24T23:04:39.2005192Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:04:39.2005195Z 2026-10-24T23:04:39.2005343Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:04:39.2005509Z ╭─[apps/mobile/src/features/voice-input/useVoiceInputController.ts:27:14] 2026-10-24T23:04:39.2005592Z 26 │ const latestInput = useRef(input); 2026-10-24T23:04:39.2005669Z 27 │ latestInput.current = input; 2026-10-24T23:04:39.2005784Z ·  ─────┬─────────┬─── 2026-10-24T23:04:39.2005973Z · │ ╰── Cannot update ref value during render 2026-10-24T23:04:39.2006095Z · ╰── This value is a ref 2026-10-24T23:04:39.2006172Z 28 │ const mounted = useRef(true); 2026-10-24T23:04:39.2006225Z ╰──── 2026-10-24T23:04:39.2006682Z  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-24T23:04:39.2007008Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:04:39.2007010Z 2026-10-24T23:04:39.2007207Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:04:39.2007431Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:122:38] 2026-10-24T23:04:39.2007591Z 121 │ const audioLevelsRef = useRef(Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-24T23:04:39.2007713Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-24T23:04:39.2007843Z ·  ───────────┬────────── 2026-10-24T23:04:39.2008022Z · ╰── Cannot access ref value during render 2026-10-24T23:04:39.2008143Z 123 │ const sessionRef = useRef(null); 2026-10-24T23:04:39.2008273Z ╰──── 2026-10-24T23:04:39.2008778Z  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-24T23:04:39.2009070Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:04:39.2009072Z 2026-10-24T23:04:39.2009218Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:04:39.2009377Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:8] 2026-10-24T23:04:39.2009428Z 125 │ 2026-10-24T23:04:39.2009537Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T23:04:39.2009627Z ·  ─────────┬──────── 2026-10-24T23:04:39.2009778Z · ╰── Cannot access ref value during render 2026-10-24T23:04:39.2009883Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T23:04:39.2009940Z ╰──── 2026-10-24T23:04:39.2010393Z  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-24T23:04:39.2010679Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:04:39.2010681Z 2026-10-24T23:04:39.2010822Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:04:39.2010979Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:7] 2026-10-24T23:04:39.2011032Z 125 │ 2026-10-24T23:04:39.2011140Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T23:04:39.2011230Z ·  ─────────┬───────── 2026-10-24T23:04:39.2011385Z · ╰── Cannot access ref value during render 2026-10-24T23:04:39.2011487Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T23:04:39.2011541Z ╰──── 2026-10-24T23:04:39.2011995Z  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-24T23:04:39.2012274Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:04:39.2012276Z 2026-10-24T23:04:39.2012488Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:04:39.2012724Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:31] 2026-10-24T23:04:39.2012778Z 125 │ 2026-10-24T23:04:39.2012882Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T23:04:39.2013001Z ·  ─────────┬───────── 2026-10-24T23:04:39.2013172Z · ╰── Cannot access ref value during render 2026-10-24T23:04:39.2013272Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T23:04:39.2013324Z ╰──── 2026-10-24T23:04:39.2013778Z  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-24T23:04:39.2014068Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:04:39.2014073Z 2026-10-24T23:04:39.2014216Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:04:39.2014373Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:30] 2026-10-24T23:04:39.2014426Z 125 │ 2026-10-24T23:04:39.2014533Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T23:04:39.2014649Z ·  ──────────┬───────── 2026-10-24T23:04:39.2014818Z · ╰── Cannot access ref value during render 2026-10-24T23:04:39.2014914Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T23:04:39.2014970Z ╰──── 2026-10-24T23:04:39.2015426Z  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-24T23:04:39.2015712Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:04:39.2015715Z 2026-10-24T23:04:39.2015858Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:04:39.2016012Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:127:46] 2026-10-24T23:04:39.2016124Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T23:04:39.2016325Z 127 │ ╭─▶ const recorder = createLazyVoiceRecorder({ 2026-10-24T23:04:39.2016503Z 128 │ │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-24T23:04:39.2016628Z 129 │ │ onStatus: (status: RecordingStatus) => { 2026-10-24T23:04:39.2016825Z 130 │ │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-24T23:04:39.2016950Z 131 │ │ isFinished: status.isFinished, 2026-10-24T23:04:39.2017128Z 132 │ │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-24T23:04:39.2017231Z 133 │ │ error: status.error, 2026-10-24T23:04:39.2017331Z 134 │ │ url: status.url, 2026-10-24T23:04:39.2017413Z 135 │ │ }); 2026-10-24T23:04:39.2017545Z 136 │ │ }, 2026-10-24T23:04:39.2017799Z 137 │ │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-24T23:04:39.2018706Z 138 │ │ selectInput: (inputs) => { 2026-10-24T23:04:39.2018865Z 139 │ │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-24T23:04:39.2019014Z 140 │ │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-24T23:04:39.2019179Z 141 │ │ const known = microphoneOrder(preferences.value.microphones); 2026-10-24T23:04:39.2019316Z 142 │ │ const order = rememberMicrophones(known, inputs); 2026-10-24T23:04:39.2019421Z 143 │ │ if (order !== known) { 2026-10-24T23:04:39.2019566Z 144 │ │ registry.set(updateMobilePreferencesAtom, { 2026-10-24T23:04:39.2019685Z 145 │ │ transform: (current) => ({ 2026-10-24T23:04:39.2019887Z 146 │ │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-24T23:04:39.2019975Z 147 │ │ }), 2026-10-24T23:04:39.2020061Z 148 │ │ }); 2026-10-24T23:04:39.2020140Z 149 │ │ } 2026-10-24T23:04:39.2020280Z 150 │ │ return preferredMicrophoneInput(inputs, order); 2026-10-24T23:04:39.2020360Z 151 │ │ }, 2026-10-24T23:04:39.2020499Z 152 │ ├─▶ }); 2026-10-24T23:04:39.2020746Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T23:04:39.2020833Z 153 │ recorderRef.current = recorder; 2026-10-24T23:04:39.2020887Z ╰──── 2026-10-24T23:04:39.2021343Z  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-24T23:04:39.2021630Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:04:39.2021632Z 2026-10-24T23:04:39.2021777Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:04:39.2021932Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:153:16] 2026-10-24T23:04:39.2021990Z 152 │ }); 2026-10-24T23:04:39.2022077Z 153 │ recorderRef.current = recorder; 2026-10-24T23:04:39.2022197Z ·  ─────┬─────────┬─── 2026-10-24T23:04:39.2022380Z · │ ╰── Cannot update ref value during render 2026-10-24T23:04:39.2022499Z · ╰── This value is a ref 2026-10-24T23:04:39.2022608Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T23:04:39.2022661Z ╰──── 2026-10-24T23:04:39.2023114Z  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-24T23:04:39.2023454Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:04:39.2023511Z 2026-10-24T23:04:39.2023679Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:04:39.2023836Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:48] 2026-10-24T23:04:39.2023923Z 153 │ recorderRef.current = recorder; 2026-10-24T23:04:39.2024117Z 154 │ ╭─▶ sessionRef.current = new VoiceInputSession({ 2026-10-24T23:04:39.2024204Z 155 │ │ recorder, 2026-10-24T23:04:39.2024336Z 156 │ │ getTranscriber: getLocalVoiceTranscriber, 2026-10-24T23:04:39.2024455Z 157 │ │ requestPermission: async () => { 2026-10-24T23:04:39.2024621Z 158 │ │ const permission = await requestRecordingPermissionsAsync(); 2026-10-24T23:04:39.2024818Z 159 │ │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-24T23:04:39.2024897Z 160 │ │ }, 2026-10-24T23:04:39.2025041Z 161 │ │ configureRecording: configureVoiceRecordingAudio, 2026-10-24T23:04:39.2025176Z 162 │ │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-24T23:04:39.2025312Z 163 │ │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-24T23:04:39.2025424Z 164 │ │ onStateChange: (nextState) => 2026-10-24T23:04:39.2025515Z 165 │ │ setState({ 2026-10-24T23:04:39.2025614Z 166 │ │ state: nextState, 2026-10-24T23:04:39.2025757Z 167 │ │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-24T23:04:39.2025889Z 168 │ │ label: sessionRef.current?.label ?? null, 2026-10-24T23:04:39.2025970Z 169 │ │ }), 2026-10-24T23:04:39.2026097Z 170 │ ├─▶ }); 2026-10-24T23:04:39.2026299Z · ╰──── Cannot access ref value during render 2026-10-24T23:04:39.2026358Z 171 │ } 2026-10-24T23:04:39.2026411Z ╰──── 2026-10-24T23:04:39.2026910Z  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-24T23:04:39.2027201Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:04:39.2027206Z 2026-10-24T23:04:39.2027351Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:04:39.2027511Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:15] 2026-10-24T23:04:39.2027594Z 153 │ recorderRef.current = recorder; 2026-10-24T23:04:39.2027695Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T23:04:39.2027810Z ·  ─────┬────────┬─── 2026-10-24T23:04:39.2027996Z · │ ╰── Cannot update ref value during render 2026-10-24T23:04:39.2028115Z · ╰── This value is a ref 2026-10-24T23:04:39.2028177Z 155 │ recorder, 2026-10-24T23:04:39.2028281Z ╰──── 2026-10-24T23:04:39.2028795Z  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-24T23:04:39.2029080Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:04:39.2029082Z 2026-10-24T23:04:39.2029225Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:04:39.2029381Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:7] 2026-10-24T23:04:39.2029471Z 184 │ return () => subscription.remove(); 2026-10-24T23:04:39.2029538Z 185 │ }, [controller]); 2026-10-24T23:04:39.2029618Z ·  ─────┬──── 2026-10-24T23:04:39.2029765Z · ╰── Cannot access ref value during render 2026-10-24T23:04:39.2029821Z 186 │ 2026-10-24T23:04:39.2029874Z ╰──── 2026-10-24T23:04:39.2030325Z  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-24T23:04:39.2030606Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:04:39.2030610Z 2026-10-24T23:04:39.2030750Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:04:39.2030913Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:6] 2026-10-24T23:04:39.2031001Z 184 │ return () => subscription.remove(); 2026-10-24T23:04:39.2031068Z 185 │ }, [controller]); 2026-10-24T23:04:39.2031143Z ·  ──────┬───── 2026-10-24T23:04:39.2031290Z · ╰── Cannot access ref value during render 2026-10-24T23:04:39.2031343Z 186 │ 2026-10-24T23:04:39.2031394Z ╰──── 2026-10-24T23:04:39.2031844Z  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-24T23:04:39.2032128Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:04:39.2032181Z 2026-10-24T23:04:39.2032391Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:04:39.2032549Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:6] 2026-10-24T23:04:39.2032603Z 191 │ }, 2026-10-24T23:04:39.2032676Z 192 │ [controller, recorder], 2026-10-24T23:04:39.2032758Z ·  ─────┬──── 2026-10-24T23:04:39.2032905Z · ╰── Cannot access ref value during render 2026-10-24T23:04:39.2032958Z 193 │ ); 2026-10-24T23:04:39.2033013Z ╰──── 2026-10-24T23:04:39.2072840Z  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-24T23:04:39.2073342Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:04:39.2073353Z 2026-10-24T23:04:39.2073536Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:04:39.2073707Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:175:20] 2026-10-24T23:04:39.2073802Z 174 │ const controller = session.controller; 2026-10-24T23:04:39.2073886Z 175 │ const recorder = recorderRef.current; 2026-10-24T23:04:39.2074002Z ·  ─────────┬───────── 2026-10-24T23:04:39.2074167Z · ╰── Cannot access ref value during render 2026-10-24T23:04:39.2074221Z 176 │ 2026-10-24T23:04:39.2074271Z ╰──── 2026-10-24T23:04:39.2074747Z  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-24T23:04:39.2075037Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:04:39.2075040Z 2026-10-24T23:04:39.2075187Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:04:39.2075344Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:5] 2026-10-24T23:04:39.2075404Z 191 │ }, 2026-10-24T23:04:39.2075476Z 192 │ [controller, recorder], 2026-10-24T23:04:39.2075566Z ·  ───────────┬────────── 2026-10-24T23:04:39.2075719Z · ╰── Cannot access ref value during render 2026-10-24T23:04:39.2075779Z 193 │ ); 2026-10-24T23:04:39.2075831Z ╰──── 2026-10-24T23:04:39.2076281Z  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-24T23:04:39.2076566Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:04:39.2076569Z 2026-10-24T23:04:39.2076709Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:04:39.2076909Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:20] 2026-10-24T23:04:39.2077183Z 245 │ return () => clearInterval(intervalId); 2026-10-24T23:04:39.2077413Z 246 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-24T23:04:39.2077499Z ·  ─────┬──── 2026-10-24T23:04:39.2077658Z · ╰── Cannot access ref value during render 2026-10-24T23:04:39.2077710Z 247 │ 2026-10-24T23:04:39.2077761Z ╰──── 2026-10-24T23:04:39.2078207Z  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-24T23:04:39.2078489Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:04:39.2078491Z 2026-10-24T23:04:39.2078637Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:04:39.2078797Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:6] 2026-10-24T23:04:39.2078885Z 245 │ return () => clearInterval(intervalId); 2026-10-24T23:04:39.2078990Z 246 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-24T23:04:39.2079133Z ·  ────────────────────────┬─────────────────────── 2026-10-24T23:04:39.2079292Z · ╰── Cannot access ref value during render 2026-10-24T23:04:39.2079344Z 247 │ 2026-10-24T23:04:39.2079392Z ╰──── 2026-10-24T23:04:39.2079844Z  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-24T23:04:39.2080127Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:04:39.2080130Z 2026-10-24T23:04:39.2080270Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:04:39.2080424Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:261:5] 2026-10-24T23:04:39.2080492Z 260 │ setOwnerFocused, 2026-10-24T23:04:39.2080552Z 261 │ session, 2026-10-24T23:04:39.2080622Z ·  ───┬─── 2026-10-24T23:04:39.2080761Z · ╰── Cannot access ref value during render 2026-10-24T23:04:39.2080819Z 262 │ stop, 2026-10-24T23:04:39.2080869Z ╰──── 2026-10-24T23:04:39.2081320Z  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-24T23:04:39.2081601Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:04:39.2081603Z 2026-10-24T23:04:39.2081741Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:04:39.2081898Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:251:10] 2026-10-24T23:04:39.2081951Z 250 │ 2026-10-24T23:04:39.2082090Z 251 │ ╭─▶ return { 2026-10-24T23:04:39.2082351Z 252 │ │ isAvailable: getLocalVoiceTranscriber() !== null || getNativeShowcaseScene() !== null, 2026-10-24T23:04:39.2082505Z 253 │ │ state, 2026-10-24T23:04:39.2082594Z 254 │ │ audioLevels, 2026-10-24T23:04:39.2082688Z 255 │ │ elapsedSeconds, 2026-10-24T23:04:39.2082817Z 256 │ │ isBusy: voiceInputBlocksSubmission(state), 2026-10-24T23:04:39.2082897Z 257 │ │ ownerKey, 2026-10-24T23:04:39.2082975Z 258 │ │ label, 2026-10-24T23:04:39.2083066Z 259 │ │ focusedOwners, 2026-10-24T23:04:39.2083157Z 260 │ │ setOwnerFocused, 2026-10-24T23:04:39.2083238Z 261 │ │ session, 2026-10-24T23:04:39.2083314Z 262 │ │ stop, 2026-10-24T23:04:39.2083401Z 263 │ │ cancel, 2026-10-24T23:04:39.2083532Z 264 │ ├─▶ }; 2026-10-24T23:04:39.2083735Z · ╰──── Cannot access ref value during render 2026-10-24T23:04:39.2083790Z 265 │ } 2026-10-24T23:04:39.2083842Z ╰──── 2026-10-24T23:04:39.2084288Z  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-24T23:04:39.2084568Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:04:39.2084571Z 2026-10-24T23:04:39.2084735Z ⚠ react(immutability): This value cannot be modified 2026-10-24T23:04:39.2084895Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7] 2026-10-24T23:04:39.2085049Z 121 │ const audioLevelsRef = useRef(Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-24T23:04:39.2085170Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-24T23:04:39.2085249Z ·  ─────┬───── 2026-10-24T23:04:39.2085386Z · ╰── `audioLevels` originates here 2026-10-24T23:04:39.2085501Z 123 │ const sessionRef = useRef(null); 2026-10-24T23:04:39.2085642Z 124 │ const recorderRef = useRef | null>(null); 2026-10-24T23:04:39.2085694Z 125 │ 2026-10-24T23:04:39.2085799Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T23:04:39.2085904Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T23:04:39.2086040Z 128 │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-24T23:04:39.2086133Z 129 │ onStatus: (status: RecordingStatus) => { 2026-10-24T23:04:39.2086252Z 130 │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-24T23:04:39.2086336Z 131 │ isFinished: status.isFinished, 2026-10-24T23:04:39.2086476Z 132 │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-24T23:04:39.2086549Z 133 │ error: status.error, 2026-10-24T23:04:39.2086617Z 134 │ url: status.url, 2026-10-24T23:04:39.2086675Z 135 │ }); 2026-10-24T23:04:39.2086729Z 136 │ }, 2026-10-24T23:04:39.2086938Z 137 │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-24T23:04:39.2087063Z 138 │ selectInput: (inputs) => { 2026-10-24T23:04:39.2087246Z 139 │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-24T23:04:39.2087357Z 140 │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-24T23:04:39.2087487Z 141 │ const known = microphoneOrder(preferences.value.microphones); 2026-10-24T23:04:39.2087593Z 142 │ const order = rememberMicrophones(known, inputs); 2026-10-24T23:04:39.2087664Z 143 │ if (order !== known) { 2026-10-24T23:04:39.2087767Z 144 │ registry.set(updateMobilePreferencesAtom, { 2026-10-24T23:04:39.2087850Z 145 │ transform: (current) => ({ 2026-10-24T23:04:39.2088021Z 146 │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-24T23:04:39.2088082Z 147 │ }), 2026-10-24T23:04:39.2088139Z 148 │ }); 2026-10-24T23:04:39.2088273Z 149 │ } 2026-10-24T23:04:39.2088453Z 150 │ return preferredMicrophoneInput(inputs, order); 2026-10-24T23:04:39.2088515Z 151 │ }, 2026-10-24T23:04:39.2088567Z 152 │ }); 2026-10-24T23:04:39.2088648Z 153 │ recorderRef.current = recorder; 2026-10-24T23:04:39.2088750Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T23:04:39.2088808Z 155 │ recorder, 2026-10-24T23:04:39.2088906Z 156 │ getTranscriber: getLocalVoiceTranscriber, 2026-10-24T23:04:39.2088989Z 157 │ requestPermission: async () => { 2026-10-24T23:04:39.2089116Z 158 │ const permission = await requestRecordingPermissionsAsync(); 2026-10-24T23:04:39.2089266Z 159 │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-24T23:04:39.2089324Z 160 │ }, 2026-10-24T23:04:39.2089434Z 161 │ configureRecording: configureVoiceRecordingAudio, 2026-10-24T23:04:39.2089543Z 162 │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-24T23:04:39.2089645Z 163 │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-24T23:04:39.2089724Z 164 │ onStateChange: (nextState) => 2026-10-24T23:04:39.2089789Z 165 │ setState({ 2026-10-24T23:04:39.2089858Z 166 │ state: nextState, 2026-10-24T23:04:39.2089960Z 167 │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-24T23:04:39.2090058Z 168 │ label: sessionRef.current?.label ?? null, 2026-10-24T23:04:39.2090115Z 169 │ }), 2026-10-24T23:04:39.2090172Z 170 │ }); 2026-10-24T23:04:39.2090222Z 171 │ } 2026-10-24T23:04:39.2090274Z 172 │ 2026-10-24T23:04:39.2090357Z 173 │ const session = sessionRef.current; 2026-10-24T23:04:39.2090444Z 174 │ const controller = session.controller; 2026-10-24T23:04:39.2090532Z 175 │ const recorder = recorderRef.current; 2026-10-24T23:04:39.2090587Z 176 │ 2026-10-24T23:04:39.2090651Z 177 │ useEffect(() => { 2026-10-24T23:04:39.2090797Z 178 │ const subscription = AppState.addEventListener("change", (nextState) => { 2026-10-24T23:04:39.2090930Z 179 │ // iOS reports `inactive` while its permission dialog is open. Only the 2026-10-24T23:04:39.2091068Z 180 │ // real background state cancels preparation; recorder status handles 2026-10-24T23:04:39.2091169Z 181 │ // calls and route interruptions during capture. 2026-10-24T23:04:39.2091301Z 182 │ if (nextState === "background") controller.appMovedToBackground(); 2026-10-24T23:04:39.2091354Z 183 │ }); 2026-10-24T23:04:39.2091436Z 184 │ return () => subscription.remove(); 2026-10-24T23:04:39.2091500Z 185 │ }, [controller]); 2026-10-24T23:04:39.2091550Z 186 │ 2026-10-24T23:04:39.2091607Z 187 │ useEffect( 2026-10-24T23:04:39.2091738Z 188 │ () => () => { 2026-10-24T23:04:39.2091890Z 189 │ controller.dispose(); 2026-10-24T23:04:39.2091955Z 190 │ recorder.release(); 2026-10-24T23:04:39.2092010Z 191 │ }, 2026-10-24T23:04:39.2092079Z 192 │ [controller, recorder], 2026-10-24T23:04:39.2092132Z 193 │ ); 2026-10-24T23:04:39.2092181Z 194 │ 2026-10-24T23:04:39.2092245Z 195 │ useEffect(() => { 2026-10-24T23:04:39.2092336Z 196 │ if (state.phase !== "recording") return; 2026-10-24T23:04:39.2092386Z 197 │ 2026-10-24T23:04:39.2092531Z 198 │ const tag = `voice-input:${keepAwakeId}:${++keepAwakeSessionRef.current}`; 2026-10-24T23:04:39.2092635Z 199 │ const activation = activateKeepAwakeAsync(tag); 2026-10-24T23:04:39.2092715Z 200 │ void activation.catch(() => {}); 2026-10-24T23:04:39.2092777Z 201 │ return () => { 2026-10-24T23:04:39.2092928Z 202 │ // Release after activation settles, even if the recording ends immediately. 2026-10-24T23:04:39.2093068Z 203 │ void activation.then(() => deactivateKeepAwake(tag)).catch(() => {}); 2026-10-24T23:04:39.2093122Z 204 │ }; 2026-10-24T23:04:39.2093199Z 205 │ }, [keepAwakeId, state.phase]); 2026-10-24T23:04:39.2093248Z 206 │ 2026-10-24T23:04:39.2093311Z 207 │ useEffect(() => { 2026-10-24T23:04:39.2093441Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-24T23:04:39.2093490Z 209 │ 2026-10-24T23:04:39.2093611Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-24T23:04:39.2093762Z 211 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-24T23:04:39.2093863Z 212 │ audioLevels.value = audioLevelsRef.current; 2026-10-24T23:04:39.2093937Z ·  ─────┬───── 2026-10-24T23:04:39.2094087Z · ╰── `audioLevels` cannot be modified 2026-10-24T23:04:39.2094145Z 213 │ } 2026-10-24T23:04:39.2094197Z ╰──── 2026-10-24T23:04:39.2094458Z  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-24T23:04:39.2094762Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:04:39.2094765Z 2026-10-24T23:04:39.2094967Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T23:04:39.2095122Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7] 2026-10-24T23:04:39.2095174Z 206 │ 2026-10-24T23:04:39.2095235Z 207 │ useEffect(() => { 2026-10-24T23:04:39.2095314Z ·  ───┬─── 2026-10-24T23:04:39.2095534Z · ╰── This function may (indirectly) reassign or modify `audioLevels` after render 2026-10-24T23:04:39.2095668Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-24T23:04:39.2095716Z 209 │ 2026-10-24T23:04:39.2095834Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-24T23:04:39.2095985Z 211 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-24T23:04:39.2096089Z 212 │ audioLevels.value = audioLevelsRef.current; 2026-10-24T23:04:39.2096162Z ·  ─────┬───── 2026-10-24T23:04:39.2096295Z · ╰── This modifies `audioLevels` 2026-10-24T23:04:39.2096349Z 213 │ } 2026-10-24T23:04:39.2096400Z ╰──── 2026-10-24T23:04:39.2096852Z  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-24T23:04:39.2097213Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:04:39.2097215Z 2026-10-24T23:04:39.2097636Z ⚠ 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-24T23:04:39.2097786Z ╭─[apps/server/src/provider/acp/AntigravityProtocol.ts:263:20] 2026-10-24T23:04:39.2097865Z 262 │ ...(update._meta !== undefined 2026-10-24T23:04:39.2098030Z 263 │ ? { _meta: Schema.is(Schema.Record(Schema.String, Schema.Json))(meta) ? meta : null } 2026-10-24T23:04:39.2098120Z ·  ───────── 2026-10-24T23:04:39.2098181Z 264 │ : {}), 2026-10-24T23:04:39.2098233Z ╰──── 2026-10-24T23:04:39.2098235Z 2026-10-24T23:04:39.2098668Z ⚠ 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-24T23:04:39.2098792Z ╭─[apps/server/src/serverSettings.test.ts:1741:32] 2026-10-24T23:04:39.2098964Z 1740 │ const model = createModelSelection(ProviderInstanceId.make("codex"), "gpt-5.5"); 2026-10-24T23:04:39.2099147Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-24T23:04:39.2099265Z ·  ─────────────────── 2026-10-24T23:04:39.2099375Z 1742 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-24T23:04:39.2099428Z ╰──── 2026-10-24T23:04:39.2099430Z 2026-10-24T23:04:39.2099866Z ⚠ 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-24T23:04:39.2099987Z ╭─[apps/server/src/serverSettings.test.ts:1742:34] 2026-10-24T23:04:39.2100168Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-24T23:04:39.2100276Z 1742 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-24T23:04:39.2100393Z ·  ─────────────────── 2026-10-24T23:04:39.2100557Z 1743 │ Schema.fromJsonString(Schema.Array(ProjectScript)), 2026-10-24T23:04:39.2100666Z ╰──── 2026-10-24T23:04:39.2100669Z 2026-10-24T23:04:39.2100934Z ⚠ unicorn(prefer-add-event-listener): Prefer `addEventListener()` over their `on`-function counterparts. 2026-10-24T23:04:39.2101080Z ╭─[apps/web/src/components/device/deviceHubApi.test.ts:12:14] 2026-10-24T23:04:39.2101233Z 11 │ addEventListener(_type: string, listener: (event: { data: string }) => void) { 2026-10-24T23:04:39.2101310Z 12 │ this.onmessage = listener; 2026-10-24T23:04:39.2101390Z ·  ───────── 2026-10-24T23:04:39.2101447Z 13 │ } 2026-10-24T23:04:39.2101498Z ╰──── 2026-10-24T23:04:39.2101818Z  help: `addEventListener()` can register multiple handlers and accepts options such as `{ once: true }`; assigning to `on` replaces any previously registered handler. 2026-10-24T23:04:39.2101825Z 2026-10-24T23:04:39.2102025Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable. 2026-10-24T23:04:39.2102168Z ╭─[apps/web/src/components/device/deviceHubApi.test.ts:16:9] 2026-10-24T23:04:39.2102235Z 15 │ constructor() { 2026-10-24T23:04:39.2102301Z 16 │ source = this; 2026-10-24T23:04:39.2102371Z ·  ────── 2026-10-24T23:04:39.2102426Z 17 │ } 2026-10-24T23:04:39.2102476Z ╰──── 2026-10-24T23:04:39.2102746Z  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-24T23:04:39.2102752Z 2026-10-24T23:04:39.2102952Z ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed 2026-10-24T23:04:39.2103128Z ╭─[apps/server/src/sourceControl/SourceControlProviderRegistry.ts:15:13] 2026-10-24T23:04:39.2103202Z 14 │ } from "@t3tools/contracts"; 2026-10-24T23:04:39.2103294Z 15 │ import type {} from "@t3tools/contracts"; 2026-10-24T23:04:39.2103359Z ·  ── 2026-10-24T23:04:39.2103412Z 16 │ 2026-10-24T23:04:39.2103463Z ╰──── 2026-10-24T23:04:39.2103543Z  help: Remove empty braces 2026-10-24T23:04:39.2103545Z 2026-10-24T23:04:39.2103686Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:04:39.2103837Z ╭─[apps/mobile/src/features/home/thread-swipe-actions.tsx:494:27] 2026-10-24T23:04:39.2103895Z 493 │ > 2026-10-24T23:04:39.2103973Z 494 │ {props.children(close)} 2026-10-24T23:04:39.2104061Z ·  ──┬── 2026-10-24T23:04:39.2104231Z · ╰── Cannot access ref value during render 2026-10-24T23:04:39.2104312Z 495 │ 2026-10-24T23:04:39.2104362Z ╰──── 2026-10-24T23:04:39.2104818Z  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-24T23:04:39.2105103Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:04:39.2105105Z 2026-10-24T23:04:39.2105448Z ⚠ eslint(no-unused-vars): Variable 'layerFromProviderAdapter' is declared but never used. Unused variables should start with a '_'. 2026-10-24T23:04:39.2105663Z ╭─[apps/server/src/orchestration-v2/ProviderAdapterRegistry.ts:346:7] 2026-10-24T23:04:39.2105715Z 345 │ 2026-10-24T23:04:39.2105814Z 346 │ const layerFromProviderAdapter: Layer.Layer< 2026-10-24T23:04:39.2105908Z ·  ────────────┬─────────── 2026-10-24T23:04:39.2106077Z · ╰── 'layerFromProviderAdapter' is declared here 2026-10-24T23:04:39.2106155Z 347 │ ProviderAdapterRegistryV2, 2026-10-24T23:04:39.2106204Z ╰──── 2026-10-24T23:04:39.2106307Z  help: Consider removing this declaration. 2026-10-24T23:04:39.2106310Z 2026-10-24T23:04:39.2106536Z ⚠ eslint(no-unused-vars): Function 'assertUserMessagesExclude' is declared but never used. 2026-10-24T23:04:39.2106704Z ╭─[apps/server/src/orchestration-v2/testkit/fixtures/shared.ts:1398:10] 2026-10-24T23:04:39.2106760Z 1397 │ 2026-10-24T23:04:39.2106890Z 1398 │ function assertUserMessagesExclude( 2026-10-24T23:04:39.2107000Z ·  ────────────┬──────────── 2026-10-24T23:04:39.2107168Z · ╰── 'assertUserMessagesExclude' is declared here 2026-10-24T23:04:39.2107275Z 1399 │ projection: OrchestrationV2ThreadProjection, 2026-10-24T23:04:39.2107330Z ╰──── 2026-10-24T23:04:39.2107432Z  help: Consider removing this declaration. 2026-10-24T23:04:39.2107435Z 2026-10-24T23:04:39.2107711Z ⚠ eslint(no-unused-vars): Variable 'layerUnavailable' is declared but never used. Unused variables should start with a '_'. 2026-10-24T23:04:39.2107853Z ╭─[apps/server/src/orchestration-v2/Orchestrator.ts:12395:7] 2026-10-24T23:04:39.2107907Z 12394 │ 2026-10-24T23:04:39.2108054Z 12395 │ const layerUnavailable: Layer.Layer = Layer.succeed( 2026-10-24T23:04:39.2108146Z ·  ────────┬─────── 2026-10-24T23:04:39.2108297Z · ╰── 'layerUnavailable' is declared here 2026-10-24T23:04:39.2108366Z 12396 │ OrchestratorV2, 2026-10-24T23:04:39.2108418Z ╰──── 2026-10-24T23:04:39.2108520Z  help: Consider removing this declaration. 2026-10-24T23:04:39.2108523Z 2026-10-24T23:04:39.2108795Z ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'. 2026-10-24T23:04:39.2108927Z ╭─[apps/server/src/provider/AntigravityAuth.ts:285:20] 2026-10-24T23:04:39.2108982Z 284 │ }, 2026-10-24T23:04:39.2109064Z 285 │ (effect, flow, stopSessions) => 2026-10-24T23:04:39.2109159Z ·  ──────┬───── 2026-10-24T23:04:39.2109310Z · ╰── 'stopSessions' is declared here 2026-10-24T23:04:39.2109377Z 286 │ effect.pipe( 2026-10-24T23:04:39.2109428Z ╰──── 2026-10-24T23:04:39.2109525Z  help: Consider removing this parameter. 2026-10-24T23:04:39.2109528Z 2026-10-24T23:04:39.2109750Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-24T23:04:39.2109920Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:1998:15] 2026-10-24T23:04:39.2109987Z 1997 │ assert.equal( 2026-10-24T23:04:39.2110131Z 1998 │ items.filter((item) => item.type === "assistant_message").at(-1)?.text, 2026-10-24T23:04:39.2110210Z ·  ────── 2026-10-24T23:04:39.2110352Z 1999 │ "authoritative answer", 2026-10-24T23:04:39.2110491Z ╰──── 2026-10-24T23:04:39.2110660Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T23:04:39.2110664Z 2026-10-24T23:04:39.2111126Z ⚠ 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-24T23:04:39.2111297Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:3951:7] 2026-10-24T23:04:39.2111476Z 3950 │ const closeFiber = yield* Scope.close(sessionScope, Exit.void).pipe(Effect.forkScoped); 2026-10-24T23:04:39.2111689Z 3951 │ ╭─▶ while (!responseLifecycle.includes("failed")) { 2026-10-24T23:04:39.2111799Z 3952 │ │ yield* Effect.yieldNow; 2026-10-24T23:04:39.2111936Z 3953 │ ╰─▶ } 2026-10-24T23:04:39.2112058Z 3954 │ const responseExit = yield* Fiber.join(responseFiber); 2026-10-24T23:04:39.2112109Z ╰──── 2026-10-24T23:04:39.2112112Z 2026-10-24T23:04:39.2112569Z ⚠ 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-24T23:04:39.2112735Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6062:9] 2026-10-24T23:04:39.2112823Z 6061 │ .pipe(Effect.forkScoped); 2026-10-24T23:04:39.2113012Z 6062 │ ╭─▶ while (promptGates.length < 1) { 2026-10-24T23:04:39.2113126Z 6063 │ │ yield* Effect.yieldNow; 2026-10-24T23:04:39.2113260Z 6064 │ ╰─▶ } 2026-10-24T23:04:39.2113429Z 6065 │ assert.isDefined(sessionUpdateHandler, "session update handler must be wired"); 2026-10-24T23:04:39.2113481Z ╰──── 2026-10-24T23:04:39.2113483Z 2026-10-24T23:04:39.2113938Z ⚠ 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-24T23:04:39.2114103Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6197:9] 2026-10-24T23:04:39.2114192Z 6196 │ .pipe(Effect.forkScoped); 2026-10-24T23:04:39.2114378Z 6197 │ ╭─▶ while (promptGates.length < 2) { 2026-10-24T23:04:39.2114487Z 6198 │ │ yield* Effect.yieldNow; 2026-10-24T23:04:39.2114620Z 6199 │ ╰─▶ } 2026-10-24T23:04:39.2114782Z 6200 │ if (sessionUpdateHandler === undefined || capturedMutation.current === null) { 2026-10-24T23:04:39.2114834Z ╰──── 2026-10-24T23:04:39.2114837Z 2026-10-24T23:04:39.2115062Z ⚠ eslint(no-unused-vars): Type 'EnvironmentThreadSearchMatch' is imported but never used. 2026-10-24T23:04:39.2115189Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:15:8] 2026-10-24T23:04:39.2115256Z 14 │ threadSearchMatchKey, 2026-10-24T23:04:39.2115390Z 15 │ type EnvironmentThreadSearchMatch, 2026-10-24T23:04:39.2115555Z ·  ──────────────┬───────────── 2026-10-24T23:04:39.2115732Z · ╰── 'EnvironmentThreadSearchMatch' is imported here 2026-10-24T23:04:39.2115838Z 16 │ } from "@t3tools/client-runtime/state/thread-search"; 2026-10-24T23:04:39.2115891Z ╰──── 2026-10-24T23:04:39.2115989Z  help: Consider removing this import. 2026-10-24T23:04:39.2115991Z 2026-10-24T23:04:39.2116192Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:04:39.2116323Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:527:25] 2026-10-24T23:04:39.2116453Z 526 │ // range) the boundary string is identical and the chain would die. 2026-10-24T23:04:39.2116543Z 527 │ }, [nextSnoozeWakeAt, snoozeWakeTick]); 2026-10-24T23:04:39.2116652Z ·  ───────┬────── 2026-10-24T23:04:39.2116855Z · ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T23:04:39.2116993Z 528 │ const v2SearchQuery = props.searchQuery.trim().toLocaleLowerCase(); 2026-10-24T23:04:39.2117045Z ╰──── 2026-10-24T23:04:39.2117338Z  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-24T23:04:39.2117645Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.2117648Z 2026-10-24T23:04:39.2117812Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T23:04:39.2117946Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:518:53] 2026-10-24T23:04:39.2118033Z 517 │ if (Number.isNaN(wakeAtMs)) return; 2026-10-24T23:04:39.2118189Z 518 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647); 2026-10-24T23:04:39.2118311Z ·  ─────┬──── 2026-10-24T23:04:39.2118477Z · ╰── Cannot call impure function 2026-10-24T23:04:39.2118556Z 519 │ const id = setTimeout(() => { 2026-10-24T23:04:39.2118607Z ╰──── 2026-10-24T23:04:39.2118882Z  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-24T23:04:39.2119175Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T23:04:39.2119181Z 2026-10-24T23:04:39.2119436Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T23:04:39.2119603Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts:10602:7] 2026-10-24T23:04:39.2119656Z 10601 │ 2026-10-24T23:04:39.2119728Z 10602 │ const layer: Layer.Layer< 2026-10-24T23:04:39.2119799Z ·  ──┬── 2026-10-24T23:04:39.2119929Z · ╰── 'layer' is declared here 2026-10-24T23:04:39.2120022Z 10603 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T23:04:39.2120071Z ╰──── 2026-10-24T23:04:39.2120175Z  help: Consider removing this declaration. 2026-10-24T23:04:39.2120177Z 2026-10-24T23:04:39.2120482Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:04:39.2120700Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:570:5] 2026-10-24T23:04:39.2120756Z 568 │ }, []); 2026-10-24T23:04:39.2120822Z 569 │ useEffect(() => { 2026-10-24T23:04:39.2120893Z ·  ────┬──── 2026-10-24T23:04:39.2121023Z · ╰── This is the containing effect 2026-10-24T23:04:39.2121106Z 570 │ setKeyboardStateSuspect(false); 2026-10-24T23:04:39.2121197Z ·  ───────────┬─────────── 2026-10-24T23:04:39.2121371Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:04:39.2121471Z 571 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-24T23:04:39.2121527Z ╰──── 2026-10-24T23:04:39.2122120Z  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-24T23:04:39.2122437Z  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-24T23:04:39.2122440Z 2026-10-24T23:04:39.2122694Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:04:39.2122847Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:966:7] 2026-10-24T23:04:39.2123004Z 963 │ const [lastKnownKeyboardHeight, setLastKnownKeyboardHeight] = useState(0); 2026-10-24T23:04:39.2123070Z 964 │ useEffect(() => { 2026-10-24T23:04:39.2123141Z ·  ────┬──── 2026-10-24T23:04:39.2123273Z · ╰── This is the containing effect 2026-10-24T23:04:39.2123430Z 965 │ if (liveKeyboardHeight > 0 && liveKeyboardHeight !== lastKnownKeyboardHeight) { 2026-10-24T23:04:39.2123544Z 966 │ setLastKnownKeyboardHeight(liveKeyboardHeight); 2026-10-24T23:04:39.2123644Z ·  ─────────────┬──────────── 2026-10-24T23:04:39.2123820Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:04:39.2123873Z 967 │ } 2026-10-24T23:04:39.2123926Z ╰──── 2026-10-24T23:04:39.2124555Z  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-24T23:04:39.2124929Z  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-24T23:04:39.2124932Z 2026-10-24T23:04:39.2125183Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:04:39.2125337Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1222:5] 2026-10-24T23:04:39.2125390Z 1220 │ 2026-10-24T23:04:39.2125458Z 1221 │ useEffect(() => { 2026-10-24T23:04:39.2125529Z ·  ────┬──── 2026-10-24T23:04:39.2125666Z · ╰── This is the containing effect 2026-10-24T23:04:39.2125745Z 1222 │ setAnchorMessageId(null); 2026-10-24T23:04:39.2125832Z ·  ─────────┬──────── 2026-10-24T23:04:39.2126003Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:04:39.2126083Z 1223 │ setSubmittedMessageId(null); 2026-10-24T23:04:39.2126134Z ╰──── 2026-10-24T23:04:39.2126716Z  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-24T23:04:39.2127060Z  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-24T23:04:39.2127065Z 2026-10-24T23:04:39.2127263Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:04:39.2127411Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:571:7] 2026-10-24T23:04:39.2127496Z 570 │ setKeyboardStateSuspect(false); 2026-10-24T23:04:39.2127597Z 571 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-24T23:04:39.2127749Z ·  ────────┬──────── ─────────┬──────── 2026-10-24T23:04:39.2127956Z · │ ╰── Unnecessary dependency `liveKeyboardHeight` 2026-10-24T23:04:39.2128117Z · ╰── Unnecessary dependency `isKeyboardVisible` 2026-10-24T23:04:39.2128317Z 572 │ const handleOwnedInputFocusChange = (focused: boolean) => { 2026-10-24T23:04:39.2128373Z ╰──── 2026-10-24T23:04:39.2128660Z  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-24T23:04:39.2128967Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.2128970Z 2026-10-24T23:04:39.2129169Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:04:39.2129325Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1170:7] 2026-10-24T23:04:39.2129410Z 1169 │ userInputInsetProgress.set(1); 2026-10-24T23:04:39.2129634Z 1170 │ }, [activeUserInputRequestId, userInputCardProgress, userInputInsetProgress]); 2026-10-24T23:04:39.2129829Z ·  ────────────┬─────────── 2026-10-24T23:04:39.2130018Z · ╰── Unnecessary dependency `activeUserInputRequestId` 2026-10-24T23:04:39.2130124Z 1171 │ const showContent = props.showContent ?? true; 2026-10-24T23:04:39.2130175Z ╰──── 2026-10-24T23:04:39.2130464Z  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-24T23:04:39.2130769Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.2130772Z 2026-10-24T23:04:39.2130974Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:04:39.2131133Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1228:15] 2026-10-24T23:04:39.2131199Z 1227 │ freeze.set(false); 2026-10-24T23:04:39.2131281Z 1228 │ }, [freeze, selectedThreadKey]); 2026-10-24T23:04:39.2131375Z ·  ────────┬──────── 2026-10-24T23:04:39.2131539Z · ╰── Unnecessary dependency `selectedThreadKey` 2026-10-24T23:04:39.2131591Z 1229 │ 2026-10-24T23:04:39.2131644Z ╰──── 2026-10-24T23:04:39.2131928Z  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-24T23:04:39.2132240Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.2132246Z 2026-10-24T23:04:39.2132402Z ⚠ react(immutability): This value cannot be modified 2026-10-24T23:04:39.2132554Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1058:5] 2026-10-24T23:04:39.2132667Z 1053 │ const composerPopoverHeight = useSharedValue(0); 2026-10-24T23:04:39.2132775Z 1054 │ const floatingControlCoverage = useSharedValue( 2026-10-24T23:04:39.2132869Z ·  ───────────┬─────────── 2026-10-24T23:04:39.2133033Z · ╰── `floatingControlCoverage` originates here 2026-10-24T23:04:39.2133162Z 1055 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-24T23:04:39.2133219Z 1056 │ ); 2026-10-24T23:04:39.2133283Z 1057 │ useEffect(() => { 2026-10-24T23:04:39.2133396Z 1058 │ floatingControlCoverage.value = withTiming( 2026-10-24T23:04:39.2133491Z ·  ───────────┬─────────── 2026-10-24T23:04:39.2133659Z · ╰── `floatingControlCoverage` cannot be modified 2026-10-24T23:04:39.2133784Z 1059 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-24T23:04:39.2133839Z ╰──── 2026-10-24T23:04:39.2134097Z  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-24T23:04:39.2134401Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:04:39.2134403Z 2026-10-24T23:04:39.2134562Z ⚠ react(immutability): This value cannot be modified 2026-10-24T23:04:39.2134761Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1076:7] 2026-10-24T23:04:39.2135005Z 1066 │ const userInputCoverageApplies = Platform.OS === "ios" && activeUserInputRequestId !== null; 2026-10-24T23:04:39.2135131Z 1067 │ const combinedContentInsetEndAdjustment = useSharedValue( 2026-10-24T23:04:39.2135247Z ·  ────────────────┬──────────────── 2026-10-24T23:04:39.2135435Z · ╰── `combinedContentInsetEndAdjustment` originates here 2026-10-24T23:04:39.2135565Z 1068 │ Math.max(0, estimatedOverlayHeight - nativeInsetOvercount), 2026-10-24T23:04:39.2135621Z 1069 │ ); 2026-10-24T23:04:39.2135691Z 1070 │ useAnimatedReaction( 2026-10-24T23:04:39.2135748Z 1071 │ () => 2026-10-24T23:04:39.2135842Z 1072 │ contentInsetEndAdjustment.value + 2026-10-24T23:04:39.2135937Z 1073 │ floatingControlCoverage.value + 2026-10-24T23:04:39.2136136Z 1074 │ (userInputCoverageApplies ? userInputInsetProgress.value * userInputCardCoverage.value : 0), 2026-10-24T23:04:39.2136199Z 1075 │ (value) => { 2026-10-24T23:04:39.2136314Z 1076 │ combinedContentInsetEndAdjustment.value = value; 2026-10-24T23:04:39.2136429Z ·  ────────────────┬──────────────── 2026-10-24T23:04:39.2136622Z · ╰── `combinedContentInsetEndAdjustment` cannot be modified 2026-10-24T23:04:39.2136675Z 1077 │ }, 2026-10-24T23:04:39.2136729Z ╰──── 2026-10-24T23:04:39.2137036Z  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-24T23:04:39.2137340Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:04:39.2137345Z 2026-10-24T23:04:39.2137600Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:04:39.2137738Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2195:5] 2026-10-24T23:04:39.2137794Z 2193 │ ); 2026-10-24T23:04:39.2137861Z 2194 │ useEffect(() => { 2026-10-24T23:04:39.2137933Z ·  ────┬──── 2026-10-24T23:04:39.2138065Z · ╰── This is the containing effect 2026-10-24T23:04:39.2138139Z 2195 │ setExpandedVideo(null); 2026-10-24T23:04:39.2138222Z ·  ────────┬─────── 2026-10-24T23:04:39.2138391Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:04:39.2138471Z 2196 │ setExpandedFile(null); 2026-10-24T23:04:39.2138527Z ╰──── 2026-10-24T23:04:39.2139114Z  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-24T23:04:39.2139430Z  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-24T23:04:39.2139433Z 2026-10-24T23:04:39.2139684Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:04:39.2139869Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2700:9] 2026-10-24T23:04:39.2140073Z 2691 │ const stopFollowingEnd = useEffectEvent(() => setEndFollow(false)); 2026-10-24T23:04:39.2140138Z 2692 │ useEffect(() => { 2026-10-24T23:04:39.2140211Z ·  ────┬──── 2026-10-24T23:04:39.2140344Z · ╰── This is the containing effect 2026-10-24T23:04:39.2140474Z 2693 │ if (!jumpToMessageId || loadedListKey !== listMountKey) return; 2026-10-24T23:04:39.2140571Z 2694 │ const index = presentedFeed.findIndex( 2026-10-24T23:04:39.2140703Z 2695 │ (entry) => entry.type === "message" && entry.id === jumpToMessageId, 2026-10-24T23:04:39.2140762Z 2696 │ ); 2026-10-24T23:04:39.2140832Z 2697 │ if (index === -1) { 2026-10-24T23:04:39.2140962Z 2698 │ const runId = messageFoldRunId(props.feed, jumpToMessageId); 2026-10-24T23:04:39.2141068Z 2699 │ if (runId && !expandedTurnIds.has(runId)) { 2026-10-24T23:04:39.2141166Z 2700 │ setInteractionState((current) => ({ 2026-10-24T23:04:39.2141255Z ·  ─────────┬───────── 2026-10-24T23:04:39.2141433Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:04:39.2141498Z 2701 │ ...current, 2026-10-24T23:04:39.2141551Z ╰──── 2026-10-24T23:04:39.2142133Z  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-24T23:04:39.2142451Z  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-24T23:04:39.2142456Z 2026-10-24T23:04:39.2142682Z ⚠ eslint(no-unused-vars): Identifier 'isMarkdownFileLinkLabel' is imported but never used. 2026-10-24T23:04:39.2142813Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:70:10] 2026-10-24T23:04:39.2142951Z 69 │ import { resolveAssetUrl } from "@t3tools/client-runtime/state/assets"; 2026-10-24T23:04:39.2143089Z 70 │ import { isMarkdownFileLinkLabel } from "@t3tools/shared/markdownLinks"; 2026-10-24T23:04:39.2143187Z ·  ───────────┬─────────── 2026-10-24T23:04:39.2143350Z · ╰── 'isMarkdownFileLinkLabel' is imported here 2026-10-24T23:04:39.2143505Z 71 │ import { formatAttachmentSize } from "@t3tools/client-runtime/state/attachments"; 2026-10-24T23:04:39.2143555Z ╰──── 2026-10-24T23:04:39.2143701Z  help: Consider removing this import. 2026-10-24T23:04:39.2143742Z 2026-10-24T23:04:39.2143972Z ⚠ eslint(no-unused-vars): Identifier 'createContext' is imported but never used. 2026-10-24T23:04:39.2144102Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:96:3] 2026-10-24T23:04:39.2144160Z 95 │ import { 2026-10-24T23:04:39.2144225Z 96 │ createContext, 2026-10-24T23:04:39.2144298Z ·  ──────┬────── 2026-10-24T23:04:39.2144435Z · ╰── 'createContext' is imported here 2026-10-24T23:04:39.2144492Z 97 │ memo, 2026-10-24T23:04:39.2144544Z ╰──── 2026-10-24T23:04:39.2144638Z  help: Consider removing this import. 2026-10-24T23:04:39.2144641Z 2026-10-24T23:04:39.2144858Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-24T23:04:39.2144998Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:112:3] 2026-10-24T23:04:39.2145058Z 111 │ import { 2026-10-24T23:04:39.2145123Z 112 │ ActivityIndicator, 2026-10-24T23:04:39.2145205Z ·  ────────┬──────── 2026-10-24T23:04:39.2145353Z · ╰── 'ActivityIndicator' is imported here 2026-10-24T23:04:39.2145411Z 113 │ Image, 2026-10-24T23:04:39.2145461Z ╰──── 2026-10-24T23:04:39.2145556Z  help: Consider removing this import. 2026-10-24T23:04:39.2145559Z 2026-10-24T23:04:39.2145757Z ⚠ eslint(no-unused-vars): Identifier 'ScrollView' is imported but never used. 2026-10-24T23:04:39.2145889Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:119:3] 2026-10-24T23:04:39.2145951Z 118 │ Pressable, 2026-10-24T23:04:39.2146019Z 119 │ ScrollView, 2026-10-24T23:04:39.2146096Z ·  ─────┬──── 2026-10-24T23:04:39.2146229Z · ╰── 'ScrollView' is imported here 2026-10-24T23:04:39.2146290Z 120 │ StyleSheet, 2026-10-24T23:04:39.2146344Z ╰──── 2026-10-24T23:04:39.2146438Z  help: Consider removing this import. 2026-10-24T23:04:39.2146440Z 2026-10-24T23:04:39.2146637Z ⚠ eslint(no-unused-vars): Identifier 'NativeText' is imported but never used. 2026-10-24T23:04:39.2146769Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:121:11] 2026-10-24T23:04:39.2146844Z 120 │ StyleSheet, 2026-10-24T23:04:39.2146948Z 121 │ Text as NativeText, 2026-10-24T23:04:39.2147030Z ·  ─────┬──── 2026-10-24T23:04:39.2147174Z · ╰── 'NativeText' is imported here 2026-10-24T23:04:39.2147243Z 122 │ type ColorValue, 2026-10-24T23:04:39.2147294Z ╰──── 2026-10-24T23:04:39.2147390Z  help: Consider removing this import. 2026-10-24T23:04:39.2147392Z 2026-10-24T23:04:39.2147601Z ⚠ eslint(no-unused-vars): Identifier 'tryOpenExternalUrl' is imported but never used. 2026-10-24T23:04:39.2147735Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:144:10] 2026-10-24T23:04:39.2147870Z 143 │ import { copyTextWithHaptic } from "../../lib/copyTextWithHaptic"; 2026-10-24T23:04:39.2147994Z 144 │ import { tryOpenExternalUrl } from "../../lib/openExternalUrl"; 2026-10-24T23:04:39.2148085Z ·  ─────────┬──────── 2026-10-24T23:04:39.2148238Z · ╰── 'tryOpenExternalUrl' is imported here 2026-10-24T23:04:39.2148449Z 145 │ import { downloadAndShareAttachment } from "../../lib/attachmentDownload"; 2026-10-24T23:04:39.2148561Z ╰──── 2026-10-24T23:04:39.2148661Z  help: Consider removing this import. 2026-10-24T23:04:39.2148663Z 2026-10-24T23:04:39.2148876Z ⚠ eslint(no-unused-vars): Identifier 'faviconUrlForOrigin' is imported but never used. 2026-10-24T23:04:39.2149011Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:147:10] 2026-10-24T23:04:39.2149145Z 146 │ import { hasWideMarkdownBlock } from "../../lib/wideMarkdownBlocks"; 2026-10-24T23:04:39.2149269Z 147 │ import { faviconUrlForOrigin } from "@t3tools/shared/favicon"; 2026-10-24T23:04:39.2149358Z ·  ─────────┬───────── 2026-10-24T23:04:39.2149514Z · ╰── 'faviconUrlForOrigin' is imported here 2026-10-24T23:04:39.2149579Z 148 │ import { 2026-10-24T23:04:39.2149632Z ╰──── 2026-10-24T23:04:39.2149724Z  help: Consider removing this import. 2026-10-24T23:04:39.2149726Z 2026-10-24T23:04:39.2149937Z ⚠ eslint(no-unused-vars): Identifier 'MediaVideoPlayer' is imported but never used. 2026-10-24T23:04:39.2150069Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:161:10] 2026-10-24T23:04:39.2150215Z 160 │ import { VideoAttachmentTile } from "../../components/VideoAttachmentTile"; 2026-10-24T23:04:39.2150346Z 161 │ import { MediaVideoPlayer } from "../../components/MediaVideoPlayer"; 2026-10-24T23:04:39.2150436Z ·  ────────┬─────── 2026-10-24T23:04:39.2150587Z · ╰── 'MediaVideoPlayer' is imported here 2026-10-24T23:04:39.2150730Z 162 │ import { resolveMarkdownMediaPreview } from "../../lib/markdownMedia"; 2026-10-24T23:04:39.2150780Z ╰──── 2026-10-24T23:04:39.2150878Z  help: Consider removing this import. 2026-10-24T23:04:39.2150880Z 2026-10-24T23:04:39.2151101Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoPreviewUri' is imported but never used. 2026-10-24T23:04:39.2151233Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:165:3] 2026-10-24T23:04:39.2151315Z 164 │ attachmentVideoPreviewSource, 2026-10-24T23:04:39.2151386Z 165 │ mediaVideoPreviewUri, 2026-10-24T23:04:39.2151471Z ·  ──────────┬───────── 2026-10-24T23:04:39.2151625Z · ╰── 'mediaVideoPreviewUri' is imported here 2026-10-24T23:04:39.2151694Z 166 │ mediaVideoThumbnailKey, 2026-10-24T23:04:39.2151746Z ╰──── 2026-10-24T23:04:39.2151839Z  help: Consider removing this import. 2026-10-24T23:04:39.2151847Z 2026-10-24T23:04:39.2152070Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoThumbnailKey' is imported but never used. 2026-10-24T23:04:39.2152201Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:166:3] 2026-10-24T23:04:39.2152268Z 165 │ mediaVideoPreviewUri, 2026-10-24T23:04:39.2152345Z 166 │ mediaVideoThumbnailKey, 2026-10-24T23:04:39.2152435Z ·  ───────────┬────────── 2026-10-24T23:04:39.2152593Z · ╰── 'mediaVideoThumbnailKey' is imported here 2026-10-24T23:04:39.2152669Z 167 │ type MediaVideoPreviewSource, 2026-10-24T23:04:39.2152720Z ╰──── 2026-10-24T23:04:39.2152815Z  help: Consider removing this import. 2026-10-24T23:04:39.2152817Z 2026-10-24T23:04:39.2153080Z ⚠ eslint(no-unused-vars): Type 'MediaVideoPreviewSource' is imported but never used. 2026-10-24T23:04:39.2153276Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:167:8] 2026-10-24T23:04:39.2153347Z 166 │ mediaVideoThumbnailKey, 2026-10-24T23:04:39.2153425Z 167 │ type MediaVideoPreviewSource, 2026-10-24T23:04:39.2153522Z ·  ───────────┬─────────── 2026-10-24T23:04:39.2153684Z · ╰── 'MediaVideoPreviewSource' is imported here 2026-10-24T23:04:39.2153771Z 168 │ } from "../../lib/videoPreviewSource"; 2026-10-24T23:04:39.2153824Z ╰──── 2026-10-24T23:04:39.2153917Z  help: Consider removing this import. 2026-10-24T23:04:39.2153919Z 2026-10-24T23:04:39.2154114Z ⚠ eslint(no-unused-vars): Type 'ReviewDiffTheme' is imported but never used. 2026-10-24T23:04:39.2154252Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:175:15] 2026-10-24T23:04:39.2154430Z 174 │ import { parseReviewCommentMessageSegments } from "../review/reviewCommentSelection"; 2026-10-24T23:04:39.2154569Z 175 │ import type { ReviewDiffTheme } from "../review/shikiReviewHighlighter"; 2026-10-24T23:04:39.2154658Z ·  ───────┬─────── 2026-10-24T23:04:39.2154810Z · ╰── 'ReviewDiffTheme' is imported here 2026-10-24T23:04:39.2154871Z 176 │ import { 2026-10-24T23:04:39.2154923Z ╰──── 2026-10-24T23:04:39.2155014Z  help: Consider removing this import. 2026-10-24T23:04:39.2155016Z 2026-10-24T23:04:39.2155243Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownFontSizes' is imported but never used. 2026-10-24T23:04:39.2155375Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:190:3] 2026-10-24T23:04:39.2155438Z 189 │ import { 2026-10-24T23:04:39.2155513Z 190 │ resolveMarkdownFontSizes, 2026-10-24T23:04:39.2155605Z ·  ────────────┬─────────── 2026-10-24T23:04:39.2155764Z · ╰── 'resolveMarkdownFontSizes' is imported here 2026-10-24T23:04:39.2155850Z 191 │ resolveNativeMarkdownTypography, 2026-10-24T23:04:39.2155900Z ╰──── 2026-10-24T23:04:39.2155993Z  help: Consider removing this import. 2026-10-24T23:04:39.2155995Z 2026-10-24T23:04:39.2156249Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownInlineCodePresentation' is imported but never used. 2026-10-24T23:04:39.2156383Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:197:3] 2026-10-24T23:04:39.2156457Z 196 │ normalizeNativeMarkdownUrl, 2026-10-24T23:04:39.2156556Z 197 │ resolveMarkdownInlineCodePresentation, 2026-10-24T23:04:39.2156677Z ·  ──────────────────┬────────────────── 2026-10-24T23:04:39.2156914Z · ╰── 'resolveMarkdownInlineCodePresentation' is imported here 2026-10-24T23:04:39.2156998Z 198 │ resolveMarkdownLinkPresentation, 2026-10-24T23:04:39.2157050Z ╰──── 2026-10-24T23:04:39.2157143Z  help: Consider removing this import. 2026-10-24T23:04:39.2157145Z 2026-10-24T23:04:39.2157371Z ⚠ eslint(no-unused-vars): Identifier 'useMarkdownCodeHighlight' is imported but never used. 2026-10-24T23:04:39.2157503Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:242:10] 2026-10-24T23:04:39.2157604Z 241 │ import { ThreadMcpApp } from "./McpAppWebView"; 2026-10-24T23:04:39.2157749Z 242 │ import { useMarkdownCodeHighlight } from "./markdownCodeHighlightState"; 2026-10-24T23:04:39.2157906Z ·  ────────────┬─────────── 2026-10-24T23:04:39.2158141Z · ╰── 'useMarkdownCodeHighlight' is imported here 2026-10-24T23:04:39.2158198Z 243 │ import { 2026-10-24T23:04:39.2158249Z ╰──── 2026-10-24T23:04:39.2158343Z  help: Consider removing this import. 2026-10-24T23:04:39.2158345Z 2026-10-24T23:04:39.2158553Z ⚠ eslint(no-unused-vars): Identifier 'useAssetUrlState' is imported but never used. 2026-10-24T23:04:39.2158683Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:246:3] 2026-10-24T23:04:39.2158747Z 245 │ useAssetUrl, 2026-10-24T23:04:39.2158817Z 246 │ useAssetUrlState, 2026-10-24T23:04:39.2158898Z ·  ────────┬─────── 2026-10-24T23:04:39.2159045Z · ╰── 'useAssetUrlState' is imported here 2026-10-24T23:04:39.2159117Z 247 │ useRefreshAssetUrl, 2026-10-24T23:04:39.2159170Z ╰──── 2026-10-24T23:04:39.2159261Z  help: Consider removing this import. 2026-10-24T23:04:39.2159265Z 2026-10-24T23:04:39.2159464Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:04:39.2159601Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2197:7] 2026-10-24T23:04:39.2159676Z 2196 │ setExpandedFile(null); 2026-10-24T23:04:39.2159832Z 2197 │ }, [props.environmentId, props.threadId, props.contentPresentation.kind]); 2026-10-24T23:04:39.2160080Z ·  ─────────┬───────── ───────┬────── ───────────────┬────────────── 2026-10-24T23:04:39.2160381Z · │ │ ╰── Unnecessary dependency `props.contentPresentation.kind` 2026-10-24T23:04:39.2160587Z · │ ╰── Unnecessary dependency `props.threadId` 2026-10-24T23:04:39.2160752Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-24T23:04:39.2160892Z 2198 │ const horizontalPadding = props.layoutVariant === "split" ? 20 : 16; 2026-10-24T23:04:39.2160947Z ╰──── 2026-10-24T23:04:39.2161241Z  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-24T23:04:39.2161598Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.2161639Z 2026-10-24T23:04:39.2161861Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:04:39.2161995Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2669:7] 2026-10-24T23:04:39.2162092Z 2668 │ reportHeaderMaterialVisibility(false); 2026-10-24T23:04:39.2162210Z 2669 │ }, [feedThreadKey, reportHeaderMaterialVisibility]); 2026-10-24T23:04:39.2162293Z ·  ──────┬────── 2026-10-24T23:04:39.2162444Z · ╰── Unnecessary dependency `feedThreadKey` 2026-10-24T23:04:39.2162499Z 2670 │ 2026-10-24T23:04:39.2162552Z ╰──── 2026-10-24T23:04:39.2162842Z  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-24T23:04:39.2163152Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.2163161Z 2026-10-24T23:04:39.2163357Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:04:39.2163494Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2685:7] 2026-10-24T23:04:39.2163551Z 2684 │ } 2026-10-24T23:04:39.2163683Z 2685 │ }, [listMountKey, props.contentInsetEndAdjustment, listRef]); 2026-10-24T23:04:39.2163761Z ·  ──────┬───── 2026-10-24T23:04:39.2163911Z · ╰── Unnecessary dependency `listMountKey` 2026-10-24T23:04:39.2164055Z 2686 │ // Opening at a message: its run unfolds, the list stops following the end 2026-10-24T23:04:39.2164112Z ╰──── 2026-10-24T23:04:39.2164399Z  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-24T23:04:39.2164704Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.2164706Z 2026-10-24T23:04:39.2164905Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:04:39.2165041Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2881:7] 2026-10-24T23:04:39.2165096Z 2880 │ } 2026-10-24T23:04:39.2165280Z 2881 │ }, [expandedTurnIds, expandedWorkGroups, expandedWorkRows, settleDisclosureAfterLayout]); 2026-10-24T23:04:39.2165506Z ·  ───────┬─────── ─────────┬──────── ────────┬─────── 2026-10-24T23:04:39.2165763Z · │ │ ╰── Unnecessary dependency `expandedWorkRows` 2026-10-24T23:04:39.2165970Z · │ ╰── Unnecessary dependency `expandedWorkGroups` 2026-10-24T23:04:39.2166122Z · ╰── Unnecessary dependency `expandedTurnIds` 2026-10-24T23:04:39.2166177Z 2882 │ 2026-10-24T23:04:39.2166228Z ╰──── 2026-10-24T23:04:39.2166513Z  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-24T23:04:39.2166916Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.2166955Z 2026-10-24T23:04:39.2167167Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T23:04:39.2167300Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:627:9] 2026-10-24T23:04:39.2167357Z 626 │ }; 2026-10-24T23:04:39.2167472Z 627 │ }, [props.environmentId, attachment.id, httpBaseUrl]), 2026-10-24T23:04:39.2167677Z ·  ─────────┬───────── ──────┬────── ─────┬───── 2026-10-24T23:04:39.2167922Z · │ │ ╰── Unnecessary dependency `httpBaseUrl` 2026-10-24T23:04:39.2168126Z · │ ╰── Unnecessary dependency `attachment.id` 2026-10-24T23:04:39.2168407Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-24T23:04:39.2168492Z 628 │ ); 2026-10-24T23:04:39.2168554Z ╰──── 2026-10-24T23:04:39.2168865Z  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-24T23:04:39.2169169Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.2169171Z 2026-10-24T23:04:39.2169499Z ⚠ eslint(no-unused-vars): Variable 'layerCodexAppServerClientFactoryCommand' is declared but never used. Unused variables should start with a '_'. 2026-10-24T23:04:39.2169666Z ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1444:7] 2026-10-24T23:04:39.2169723Z 1443 │ 2026-10-24T23:04:39.2169839Z 1444 │ const layerCodexAppServerClientFactoryCommand = ( 2026-10-24T23:04:39.2169962Z ·  ───────────────────┬─────────────────── 2026-10-24T23:04:39.2170163Z · ╰── 'layerCodexAppServerClientFactoryCommand' is declared here 2026-10-24T23:04:39.2170284Z 1445 │ options: CodexClient.CodexAppServerClientOptions & { 2026-10-24T23:04:39.2170335Z ╰──── 2026-10-24T23:04:39.2170438Z  help: Consider removing this declaration. 2026-10-24T23:04:39.2170441Z 2026-10-24T23:04:39.2170694Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T23:04:39.2170864Z ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1680:7] 2026-10-24T23:04:39.2170920Z 1679 │ 2026-10-24T23:04:39.2170992Z 1680 │ const layer: Layer.Layer< 2026-10-24T23:04:39.2171060Z ·  ──┬── 2026-10-24T23:04:39.2171189Z · ╰── 'layer' is declared here 2026-10-24T23:04:39.2171283Z 1681 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T23:04:39.2171334Z ╰──── 2026-10-24T23:04:39.2171433Z  help: Consider removing this declaration. 2026-10-24T23:04:39.2171436Z 2026-10-24T23:04:39.2171641Z ⚠ eslint(no-unused-vars): Function 'nonEmptyString' is declared but never used. 2026-10-24T23:04:39.2171793Z ╭─[packages/client-runtime/src/work-log/presentation.ts:237:10] 2026-10-24T23:04:39.2171846Z 236 │ 2026-10-24T23:04:39.2172131Z 237 │ function nonEmptyString(value: unknown): string | null { 2026-10-24T23:04:39.2172281Z ·  ───────┬────── 2026-10-24T23:04:39.2172427Z · ╰── 'nonEmptyString' is declared here 2026-10-24T23:04:39.2172570Z 238 │ return typeof value === "string" && value.trim().length > 0 ? value : null; 2026-10-24T23:04:39.2172620Z ╰──── 2026-10-24T23:04:39.2172722Z  help: Consider removing this declaration. 2026-10-24T23:04:39.2172725Z 2026-10-24T23:04:39.2172974Z ⚠ eslint(no-unused-vars): Function 'layerClaudeAgentSdkReplayQueryRunner' is declared but never used. 2026-10-24T23:04:39.2173154Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.testkit.ts:960:10] 2026-10-24T23:04:39.2173204Z 959 │ 2026-10-24T23:04:39.2173318Z 960 │ function layerClaudeAgentSdkReplayQueryRunner( 2026-10-24T23:04:39.2173442Z ·  ──────────────────┬───────────────── 2026-10-24T23:04:39.2173639Z · ╰── 'layerClaudeAgentSdkReplayQueryRunner' is declared here 2026-10-24T23:04:39.2173741Z 961 │ transcript: ClaudeAgentSdkReplayTranscript, 2026-10-24T23:04:39.2173794Z ╰──── 2026-10-24T23:04:39.2173896Z  help: Consider removing this declaration. 2026-10-24T23:04:39.2173898Z 2026-10-24T23:04:39.2174101Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable. 2026-10-24T23:04:39.2174225Z ╭─[apps/web/src/contextMenuFallback.test.ts:38:9] 2026-10-24T23:04:39.2174290Z 37 │ get isConnected() { 2026-10-24T23:04:39.2174384Z 38 │ let current: FakeElement | null = this; 2026-10-24T23:04:39.2174459Z ·  ─────── 2026-10-24T23:04:39.2174539Z 39 │ while (current?.parent) { 2026-10-24T23:04:39.2174592Z ╰──── 2026-10-24T23:04:39.2174862Z  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-24T23:04:39.2174865Z 2026-10-24T23:04:39.2175124Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:04:39.2175289Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:279:5] 2026-10-24T23:04:39.2175407Z 277 │ const [snoozeWakeTick, bumpSnoozeWakeTick] = useState(0); 2026-10-24T23:04:39.2175475Z 278 │ useEffect(() => { 2026-10-24T23:04:39.2175546Z ·  ────┬──── 2026-10-24T23:04:39.2175681Z · ╰── This is the containing effect 2026-10-24T23:04:39.2175768Z 279 │ setNow(new Date().toISOString()); 2026-10-24T23:04:39.2175843Z ·  ───┬── 2026-10-24T23:04:39.2176011Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:04:39.2176149Z 280 │ const id = setInterval(() => setNow(new Date().toISOString()), 60_000); 2026-10-24T23:04:39.2176200Z ╰──── 2026-10-24T23:04:39.2176822Z  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-24T23:04:39.2177205Z  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-24T23:04:39.2177239Z 2026-10-24T23:04:39.2177500Z ⚠ eslint(no-unused-vars): Type 'EnvironmentThreadSearchMatch' is imported but never used. 2026-10-24T23:04:39.2177663Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:13:8] 2026-10-24T23:04:39.2177730Z 12 │ threadSearchMatchKey, 2026-10-24T23:04:39.2177818Z 13 │ type EnvironmentThreadSearchMatch, 2026-10-24T23:04:39.2177929Z ·  ──────────────┬───────────── 2026-10-24T23:04:39.2178106Z · ╰── 'EnvironmentThreadSearchMatch' is imported here 2026-10-24T23:04:39.2178215Z 14 │ } from "@t3tools/client-runtime/state/thread-search"; 2026-10-24T23:04:39.2178268Z ╰──── 2026-10-24T23:04:39.2178365Z  help: Consider removing this import. 2026-10-24T23:04:39.2178367Z 2026-10-24T23:04:39.2178572Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:04:39.2178737Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:359:25] 2026-10-24T23:04:39.2178869Z 358 │ // range) the boundary string is identical and the chain would die. 2026-10-24T23:04:39.2178960Z 359 │ }, [nextSnoozeWakeAt, snoozeWakeTick]); 2026-10-24T23:04:39.2179065Z ·  ───────┬────── 2026-10-24T23:04:39.2179229Z · ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T23:04:39.2179343Z 360 │ const listItems = ((): readonly SidebarListItem[] => { 2026-10-24T23:04:39.2179395Z ╰──── 2026-10-24T23:04:39.2179689Z  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-24T23:04:39.2179998Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.2180001Z 2026-10-24T23:04:39.2180167Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T23:04:39.2180332Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:350:53] 2026-10-24T23:04:39.2180418Z 349 │ if (Number.isNaN(wakeAtMs)) return; 2026-10-24T23:04:39.2180575Z 350 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647); 2026-10-24T23:04:39.2180694Z ·  ─────┬──── 2026-10-24T23:04:39.2180920Z · ╰── Cannot call impure function 2026-10-24T23:04:39.2181083Z 351 │ const id = setTimeout(() => { 2026-10-24T23:04:39.2181157Z ╰──── 2026-10-24T23:04:39.2181439Z  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-24T23:04:39.2181728Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T23:04:39.2181731Z 2026-10-24T23:04:39.2181988Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:04:39.2182151Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:217:7] 2026-10-24T23:04:39.2182208Z 213 │ }; 2026-10-24T23:04:39.2182276Z 214 │ useEffect(() => { 2026-10-24T23:04:39.2182351Z ·  ────┬──── 2026-10-24T23:04:39.2182483Z · ╰── This is the containing effect 2026-10-24T23:04:39.2182656Z 215 │ const inserted = ownerKey ? readComposerDraftSelection(ownerKey, draftMessage) : null; 2026-10-24T23:04:39.2182719Z 216 │ if (inserted) { 2026-10-24T23:04:39.2182795Z 217 │ setSelection((current) => 2026-10-24T23:04:39.2182874Z ·  ──────┬───── 2026-10-24T23:04:39.2183045Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:04:39.2183212Z 218 │ current.start === inserted.start && current.end === inserted.end ? current : inserted, 2026-10-24T23:04:39.2183265Z ╰──── 2026-10-24T23:04:39.2183858Z  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-24T23:04:39.2184179Z  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-24T23:04:39.2184181Z 2026-10-24T23:04:39.2184439Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:04:39.2184600Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:298:7] 2026-10-24T23:04:39.2184679Z 286 │ }, [hasWorkspaceSnapshot]); 2026-10-24T23:04:39.2184744Z 287 │ useEffect(() => { 2026-10-24T23:04:39.2184815Z ·  ────┬──── 2026-10-24T23:04:39.2184948Z · ╰── This is the containing effect 2026-10-24T23:04:39.2185096Z 288 │ if (!environmentId || !projectCwd || !selectedProviderInstanceId) return; 2026-10-24T23:04:39.2185245Z 289 │ const key = `${environmentId}:${selectedProviderInstanceId}:${projectCwd}`; 2026-10-24T23:04:39.2185315Z 290 │ const now = Date.now(); 2026-10-24T23:04:39.2185428Z 291 │ const lastRequest = workspaceRefreshKeyRef.current; 2026-10-24T23:04:39.2185487Z 292 │ if ( 2026-10-24T23:04:39.2185564Z 293 │ lastRequest?.key === key && 2026-10-24T23:04:39.2185703Z 294 │ now - lastRequest.requestedAt < PROVIDER_WORKSPACE_SNAPSHOT_TTL_MS 2026-10-24T23:04:39.2185757Z 295 │ ) 2026-10-24T23:04:39.2185821Z 296 │ return; 2026-10-24T23:04:39.2185996Z 297 │ if (hasCurrentProviderWorkspaceSnapshot(selectedProviderStatus, projectCwd, now)) { 2026-10-24T23:04:39.2186141Z 298 │ setWorkspaceRefreshRetry(null); 2026-10-24T23:04:39.2186266Z ·  ────────────┬─────────── 2026-10-24T23:04:39.2186444Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:04:39.2186505Z 299 │ return; 2026-10-24T23:04:39.2186556Z ╰──── 2026-10-24T23:04:39.2187622Z  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-24T23:04:39.2187939Z  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-24T23:04:39.2187946Z 2026-10-24T23:04:39.2188149Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:04:39.2188313Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:328:5] 2026-10-24T23:04:39.2188368Z 327 │ }, [ 2026-10-24T23:04:39.2188431Z 328 │ draftMessage, 2026-10-24T23:04:39.2188510Z ·  ──────┬───── 2026-10-24T23:04:39.2188659Z · ╰── Unnecessary dependency `draftMessage` 2026-10-24T23:04:39.2188722Z 329 │ environmentId, 2026-10-24T23:04:39.2188774Z ╰──── 2026-10-24T23:04:39.2189061Z  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-24T23:04:39.2189372Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.2189377Z 2026-10-24T23:04:39.2189558Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T23:04:39.2189742Z ╭─[apps/mobile/src/features/keyboard/HardwareKeyboardCommandProvider.tsx:116:34] 2026-10-24T23:04:39.2189811Z 115 │ return [...commands]; 2026-10-24T23:04:39.2189945Z 116 │ }, [activeThreadRef, pathname, registrationVersion, navigation]); 2026-10-24T23:04:39.2190065Z ·  ─────────┬───────── 2026-10-24T23:04:39.2190244Z · ╰── Unnecessary dependency `registrationVersion` 2026-10-24T23:04:39.2190298Z 117 │ 2026-10-24T23:04:39.2190352Z ╰──── 2026-10-24T23:04:39.2190666Z  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-24T23:04:39.2190970Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.2190975Z 2026-10-24T23:04:39.2191431Z ⚠ 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-24T23:04:39.2191559Z ╭─[packages/effect-acp/src/protocol.test.ts:500:31] 2026-10-24T23:04:39.2191612Z 499 │ 2026-10-24T23:04:39.2191728Z 500 │ const response = yield* Schema.decodeUnknownEffect( 2026-10-24T23:04:39.2191906Z ·  ────────────────────────── 2026-10-24T23:04:39.2192051Z 501 │ Schema.fromJsonString(JsonRpcErrorResponse), 2026-10-24T23:04:39.2192105Z ╰──── 2026-10-24T23:04:39.2192107Z 2026-10-24T23:04:39.2192371Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:04:39.2192520Z ╭─[apps/mobile/src/features/threads/use-worktree-setup.ts:30:40] 2026-10-24T23:04:39.2192683Z 28 │ const snapshot = resolveWorktreeSetupSnapshot(input.threadId, query.data, live); 2026-10-24T23:04:39.2192749Z 29 │ useEffect(() => { 2026-10-24T23:04:39.2192821Z ·  ────┬──── 2026-10-24T23:04:39.2192950Z · ╰── This is the containing effect 2026-10-24T23:04:39.2193080Z 30 │ if (snapshot && snapshot !== live) setHeld({ key, snapshot }); 2026-10-24T23:04:39.2193187Z ·  ───┬─── 2026-10-24T23:04:39.2193378Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:04:39.2193448Z 31 │ }, [key, live, snapshot]); 2026-10-24T23:04:39.2193501Z ╰──── 2026-10-24T23:04:39.2194088Z  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-24T23:04:39.2194407Z  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-24T23:04:39.2194412Z 2026-10-24T23:04:39.2194866Z ⚠ 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-24T23:04:39.2194988Z ╭─[packages/effect-acp/src/errors.test.ts:129:28] 2026-10-24T23:04:39.2195081Z 128 │ const secret = "acp-summary-secret"; 2026-10-24T23:04:39.2195192Z 129 │ const cause = yield* Schema.decodeUnknownEffect( 2026-10-24T23:04:39.2195312Z ·  ────────────────────────── 2026-10-24T23:04:39.2195380Z 130 │ Schema.Struct({ 2026-10-24T23:04:39.2195430Z ╰──── 2026-10-24T23:04:39.2195433Z 2026-10-24T23:04:39.2195596Z ⚠ react(immutability): This value cannot be modified 2026-10-24T23:04:39.2195755Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:94:5] 2026-10-24T23:04:39.2195812Z 83 │ 2026-10-24T23:04:39.2195904Z 84 │ const cardCoverage = props.cardCoverage; 2026-10-24T23:04:39.2195986Z ·  ──────┬───── 2026-10-24T23:04:39.2196125Z · ╰── `cardCoverage` originates here 2026-10-24T23:04:39.2196207Z 85 │ const barHeightRef = useRef(0); 2026-10-24T23:04:39.2196284Z 86 │ const cardHeightRef = useRef(0); 2026-10-24T23:04:39.2196371Z 87 │ const cardHeight = useSharedValue(0); 2026-10-24T23:04:39.2196463Z 88 │ const notifyCoverage = useCallback(() => { 2026-10-24T23:04:39.2196531Z 89 │ if (!cardCoverage) { 2026-10-24T23:04:39.2196590Z 90 │ return; 2026-10-24T23:04:39.2196645Z 91 │ } 2026-10-24T23:04:39.2196896Z 92 │ // The card resizes with the keyboard every frame, so easing each sample would leave the 2026-10-24T23:04:39.2197030Z 93 │ // feed inset and floating controls trailing it. 2026-10-24T23:04:39.2197189Z 94 │ cardCoverage.value = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T23:04:39.2197270Z ·  ──────┬───── 2026-10-24T23:04:39.2197410Z · ╰── `cardCoverage` cannot be modified 2026-10-24T23:04:39.2197475Z 95 │ }, [cardCoverage]); 2026-10-24T23:04:39.2197530Z ╰──── 2026-10-24T23:04:39.2197824Z  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-24T23:04:39.2198131Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:04:39.2198137Z 2026-10-24T23:04:39.2198294Z ⚠ react(immutability): This value cannot be modified 2026-10-24T23:04:39.2198450Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:106:7] 2026-10-24T23:04:39.2198537Z  86 │ const cardHeightRef = useRef(0); 2026-10-24T23:04:39.2198629Z  87 │ const cardHeight = useSharedValue(0); 2026-10-24T23:04:39.2198710Z ·  ─────┬──── 2026-10-24T23:04:39.2198844Z · ╰── `cardHeight` originates here 2026-10-24T23:04:39.2198939Z  88 │ const notifyCoverage = useCallback(() => { 2026-10-24T23:04:39.2199012Z  89 │ if (!cardCoverage) { 2026-10-24T23:04:39.2199075Z  90 │ return; 2026-10-24T23:04:39.2199129Z  91 │ } 2026-10-24T23:04:39.2199299Z  92 │ // The card resizes with the keyboard every frame, so easing each sample would leave the 2026-10-24T23:04:39.2199403Z  93 │ // feed inset and floating controls trailing it. 2026-10-24T23:04:39.2199563Z  94 │ cardCoverage.value = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T23:04:39.2199627Z  95 │ }, [cardCoverage]); 2026-10-24T23:04:39.2199712Z  96 │ const handleBarLayout = useCallback( 2026-10-24T23:04:39.2199794Z  97 │ (event: LayoutChangeEvent) => { 2026-10-24T23:04:39.2199918Z  98 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T23:04:39.2199984Z  99 │ notifyCoverage(); 2026-10-24T23:04:39.2200041Z 100 │ }, 2026-10-24T23:04:39.2200108Z 101 │ [notifyCoverage], 2026-10-24T23:04:39.2200163Z 102 │ ); 2026-10-24T23:04:39.2200294Z 103 │ const handleCardLayout = useCallback( 2026-10-24T23:04:39.2200519Z 104 │ (event: LayoutChangeEvent) => { 2026-10-24T23:04:39.2200801Z 105 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T23:04:39.2200943Z 106 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-24T23:04:39.2201055Z ·  ─────┬──── 2026-10-24T23:04:39.2201207Z · ╰── `cardHeight` cannot be modified 2026-10-24T23:04:39.2201307Z 107 │ notifyCoverage(); 2026-10-24T23:04:39.2201397Z ╰──── 2026-10-24T23:04:39.2201693Z  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-24T23:04:39.2202007Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:04:39.2202010Z 2026-10-24T23:04:39.2202296Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T23:04:39.2202535Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:94:5] 2026-10-24T23:04:39.2202648Z 87 │ const cardHeight = useSharedValue(0); 2026-10-24T23:04:39.2202752Z 88 │ const notifyCoverage = useCallback(() => { 2026-10-24T23:04:39.2202884Z ·  ───┬─── 2026-10-24T23:04:39.2203154Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-24T23:04:39.2203261Z 89 │ if (!cardCoverage) { 2026-10-24T23:04:39.2203460Z 90 │ return; 2026-10-24T23:04:39.2203524Z 91 │ } 2026-10-24T23:04:39.2203710Z 92 │ // The card resizes with the keyboard every frame, so easing each sample would leave the 2026-10-24T23:04:39.2203868Z 93 │ // feed inset and floating controls trailing it. 2026-10-24T23:04:39.2204057Z 94 │ cardCoverage.value = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T23:04:39.2204143Z ·  ──────┬───── 2026-10-24T23:04:39.2204306Z · ╰── This modifies `cardCoverage` 2026-10-24T23:04:39.2204413Z 95 │ }, [cardCoverage]); 2026-10-24T23:04:39.2204502Z ╰──── 2026-10-24T23:04:39.2204848Z  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-24T23:04:39.2205175Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:04:39.2205177Z 2026-10-24T23:04:39.2205401Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T23:04:39.2205609Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:94:5] 2026-10-24T23:04:39.2205743Z 93 │ // feed inset and floating controls trailing it. 2026-10-24T23:04:39.2205909Z 94 │ cardCoverage.value = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T23:04:39.2206016Z ·  ──────┬───── 2026-10-24T23:04:39.2206190Z · ╰── This modifies `cardCoverage` 2026-10-24T23:04:39.2206292Z 95 │ }, [cardCoverage]); 2026-10-24T23:04:39.2206388Z 96 │ const handleBarLayout = useCallback( 2026-10-24T23:04:39.2206602Z 97 │ (event: LayoutChangeEvent) => { 2026-10-24T23:04:39.2206738Z ·  ───────────────┬─────────────── 2026-10-24T23:04:39.2207103Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-24T23:04:39.2207272Z 98 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T23:04:39.2207358Z ╰──── 2026-10-24T23:04:39.2207720Z  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-24T23:04:39.2208053Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:04:39.2208056Z 2026-10-24T23:04:39.2208390Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T23:04:39.2208567Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:106:7] 2026-10-24T23:04:39.2208688Z 103 │ const handleCardLayout = useCallback( 2026-10-24T23:04:39.2208794Z 104 │ (event: LayoutChangeEvent) => { 2026-10-24T23:04:39.2208954Z ·  ───────────────┬─────────────── 2026-10-24T23:04:39.2209186Z · ╰── This function may (indirectly) reassign or modify `cardHeight` after render 2026-10-24T23:04:39.2209345Z 105 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T23:04:39.2209488Z 106 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-24T23:04:39.2209597Z ·  ─────┬──── 2026-10-24T23:04:39.2209851Z · ╰── This modifies `cardHeight` 2026-10-24T23:04:39.2209949Z 107 │ notifyCoverage(); 2026-10-24T23:04:39.2210031Z ╰──── 2026-10-24T23:04:39.2210387Z  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-24T23:04:39.2210739Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:04:39.2210741Z 2026-10-24T23:04:39.2210959Z ⚠ eslint(no-unsafe-optional-chaining): Unsafe usage of optional chaining 2026-10-24T23:04:39.2211157Z ╭─[apps/server/src/orchestration-v2/ThreadLaunchService.test.ts:1783:8] 2026-10-24T23:04:39.2211253Z 1782 │ assert.equal( 2026-10-24T23:04:39.2211431Z 1783 │ (stored.context?.records[0] as { attachmentId: string }).attachmentId, 2026-10-24T23:04:39.2211562Z ·  ────────────────────────── 2026-10-24T23:04:39.2211676Z 1784 │ stored.attachments[0]?.id, 2026-10-24T23:04:39.2211761Z ╰──── 2026-10-24T23:04:39.2211950Z  help: If this short-circuits with 'undefined' the evaluation will throw TypeError 2026-10-24T23:04:39.2211953Z 2026-10-24T23:04:39.2212122Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:04:39.2212282Z ╭─[apps/mobile/src/components/ui/Menu.tsx:54:36] 2026-10-24T23:04:39.2212488Z 53 │ const child = children as ReactElement>; 2026-10-24T23:04:39.2212693Z 54 │ ╭─▶ children = cloneElement(child, { 2026-10-24T23:04:39.2212831Z 55 │ │ onTouchStart: (event) => { 2026-10-24T23:04:39.2213117Z 56 │ │ // Reset for a new touch, not onPressIn, which also fires when a 2026-10-24T23:04:39.2213378Z 57 │ │ // finger moves out of the row and back during the same gesture. 2026-10-24T23:04:39.2213580Z 58 │ │ menuPress.current.isPreparing = false; 2026-10-24T23:04:39.2213772Z 59 │ │ menuPress.current.suppressPress = menuPress.current.isOpen; 2026-10-24T23:04:39.2213907Z 60 │ │ pendingPress.current = null; 2026-10-24T23:04:39.2214067Z 61 │ │ child.props.onTouchStart?.(event); 2026-10-24T23:04:39.2214171Z 62 │ │ }, 2026-10-24T23:04:39.2214305Z 63 │ │ onPress: (event) => { 2026-10-24T23:04:39.2214478Z 64 │ │ // Accessibility clicks have no touch identifier and must not inherit 2026-10-24T23:04:39.2214665Z 65 │ │ // cancellation from a previous physical gesture. 2026-10-24T23:04:39.2214867Z 66 │ │ const isTouch = typeof event.nativeEvent.identifier === "number"; 2026-10-24T23:04:39.2215090Z 67 │ │ if (isTouch ? menuPress.current.suppressPress : menuPress.current.isOpen) { 2026-10-24T23:04:39.2215197Z 68 │ │ return; 2026-10-24T23:04:39.2215298Z 69 │ │ } 2026-10-24T23:04:39.2215473Z 70 │ │ if (isTouch && menuPress.current.isPreparing) { 2026-10-24T23:04:39.2215674Z 71 │ │ // A release can arrive between native menu preparation and display. 2026-10-24T23:04:39.2215951Z 72 │ │ // Let UIKit's display/cancel callback decide this press's outcome. 2026-10-24T23:04:39.2216056Z 73 │ │ event.persist(); 2026-10-24T23:04:39.2216266Z 74 │ │ pendingPress.current = () => child.props.onPress?.(event); 2026-10-24T23:04:39.2216383Z 75 │ │ return; 2026-10-24T23:04:39.2216493Z 76 │ │ } 2026-10-24T23:04:39.2216617Z 77 │ │ child.props.onPress?.(event); 2026-10-24T23:04:39.2216726Z 78 │ │ }, 2026-10-24T23:04:39.2216936Z 79 │ ├─▶ }); 2026-10-24T23:04:39.2217212Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T23:04:39.2217328Z 80 │ menuProps.onMenuInteractionStart = () => { 2026-10-24T23:04:39.2217401Z ╰──── 2026-10-24T23:04:39.2217911Z  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-24T23:04:39.2218234Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:04:39.2218237Z 2026-10-24T23:04:39.2218597Z ⚠ 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-24T23:04:39.2218729Z ╭─[packages/effect-acp/src/schema.test.ts:18:12] 2026-10-24T23:04:39.2218926Z 17 │ const command = { name: "plan", description: "Make a plan", input: { hint: "Task" } }; 2026-10-24T23:04:39.2219087Z 18 │ expect(Schema.is(V1.AvailableCommand)(command)).toBe(true); 2026-10-24T23:04:39.2219248Z ·  ───────── 2026-10-24T23:04:39.2219489Z 19 │ expect( 2026-10-24T23:04:39.2219546Z ╰──── 2026-10-24T23:04:39.2219549Z 2026-10-24T23:04:39.2219929Z ⚠ 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-24T23:04:39.2220076Z ╭─[packages/effect-acp/src/schema.test.ts:20:7] 2026-10-24T23:04:39.2220164Z 19 │ expect( 2026-10-24T23:04:39.2220340Z 20 │ Schema.is(V2.AvailableCommand)({ ...command, input: { type: "text", hint: "Task" } }), 2026-10-24T23:04:39.2220449Z ·  ───────── 2026-10-24T23:04:39.2220547Z 21 │ ).toBe(true); 2026-10-24T23:04:39.2220629Z ╰──── 2026-10-24T23:04:39.2220632Z 2026-10-24T23:04:39.2220805Z ⚠ react(immutability): This value cannot be modified 2026-10-24T23:04:39.2220981Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:174:5] 2026-10-24T23:04:39.2221171Z 170 │ const expandedAngle = props.collapsedDirection === "right" ? 90 : 180; 2026-10-24T23:04:39.2221338Z 171 │ const rotation = useSharedValue(props.expanded ? expandedAngle : 0); 2026-10-24T23:04:39.2221428Z ·  ────┬─── 2026-10-24T23:04:39.2221594Z · ╰── `rotation` originates here 2026-10-24T23:04:39.2221678Z 172 │ 2026-10-24T23:04:39.2221783Z 173 │ useLayoutEffect(() => { 2026-10-24T23:04:39.2222013Z 174 │ rotation.value = withTiming(props.expanded ? expandedAngle : 0, { 2026-10-24T23:04:39.2222116Z ·  ────┬─── 2026-10-24T23:04:39.2222276Z · ╰── `rotation` cannot be modified 2026-10-24T23:04:39.2222432Z 175 │ duration: THREAD_DISCLOSURE_TRANSITION_MS, 2026-10-24T23:04:39.2222499Z ╰──── 2026-10-24T23:04:39.2222789Z  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-24T23:04:39.2223121Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:04:39.2223124Z 2026-10-24T23:04:39.2223351Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T23:04:39.2223539Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:1246:23] 2026-10-24T23:04:39.2223620Z 1245 │ 2026-10-24T23:04:39.2225256Z 1269 │ Schema.decodeUnknownEffect(AcpSchemaV2.MessageMcpNotification)(params).pipe( 2026-10-24T23:04:39.2225457Z ·  ────────────────────────── 2026-10-24T23:04:39.2225659Z 1270 │ Effect.mapError(() => AcpError.AcpRequestError.invalidParams()), 2026-10-24T23:04:39.2225761Z ╰──── 2026-10-24T23:04:39.2225764Z 2026-10-24T23:04:39.2225989Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T23:04:39.2226192Z ╭─[apps/mobile/src/features/threads/NewTaskContextPickerScreens.tsx:249:7] 2026-10-24T23:04:39.2226300Z 248 │ mountedRef.current = false; 2026-10-24T23:04:39.2226412Z 249 │ flow.setBranchQuery(""); 2026-10-24T23:04:39.2226505Z ·  ──┬─ 2026-10-24T23:04:39.2226663Z · ╰── Missing dependency `flow` 2026-10-24T23:04:39.2226747Z 250 │ }; 2026-10-24T23:04:39.2226856Z 251 │ }, [flow.setBranchQuery]); 2026-10-24T23:04:39.2227009Z ·  ─────────┬───────── 2026-10-24T23:04:39.2227259Z · ╰── Overly precise dependency `flow.setBranchQuery`, use `flow` instead 2026-10-24T23:04:39.2227339Z 252 │ 2026-10-24T23:04:39.2227420Z ╰──── 2026-10-24T23:04:39.2227881Z  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-24T23:04:39.2228299Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.2228301Z 2026-10-24T23:04:39.2228475Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:04:39.2228659Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:152:27] 2026-10-24T23:04:39.2228863Z 151 │ 2026-10-24T23:04:39.2228968Z 152 │ {props.children(open)} 2026-10-24T23:04:39.2229094Z ·  ──┬─ 2026-10-24T23:04:39.2229282Z · ╰── Cannot access ref value during render 2026-10-24T23:04:39.2229373Z 153 │ 2026-10-24T23:04:39.2229433Z ╰──── 2026-10-24T23:04:39.2229942Z  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-24T23:04:39.2230264Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:04:39.2230269Z 2026-10-24T23:04:39.2230490Z ⚠ react(memo-dependencies): Found missing/extra memoization dependencies 2026-10-24T23:04:39.2230662Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:140:9] 2026-10-24T23:04:39.2230770Z 139 │ if (action.id !== undefined) { 2026-10-24T23:04:39.2230888Z 140 │ props.onPressAction?.({ 2026-10-24T23:04:39.2230988Z ·  ──┬── 2026-10-24T23:04:39.2231152Z · ╰── Missing dependency `props` 2026-10-24T23:04:39.2231364Z 141 │ nativeEvent: { event: action.id }, 2026-10-24T23:04:39.2231529Z 142 │ } as Parameters>[0]); 2026-10-24T23:04:39.2231612Z 143 │ } 2026-10-24T23:04:39.2231758Z 144 │ }, 2026-10-24T23:04:39.2231884Z 145 │ [close, props.onPressAction], 2026-10-24T23:04:39.2232010Z ·  ─────────┬───────── 2026-10-24T23:04:39.2232261Z · ╰── Overly precise dependency `props.onPressAction`, use `props` instead 2026-10-24T23:04:39.2232347Z 146 │ ); 2026-10-24T23:04:39.2232410Z ╰──── 2026-10-24T23:04:39.2232903Z  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-24T23:04:39.2233263Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.2233271Z 2026-10-24T23:04:39.2233562Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:04:39.2233752Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:444:5] 2026-10-24T23:04:39.2233836Z 434 │ : null; 2026-10-24T23:04:39.2233928Z 435 │ useEffect(() => { 2026-10-24T23:04:39.2234041Z ·  ────┬──── 2026-10-24T23:04:39.2234201Z · ╰── This is the containing effect 2026-10-24T23:04:39.2234374Z 436 │ if ( 2026-10-24T23:04:39.2234456Z 437 │ props.active === false || 2026-10-24T23:04:39.2234589Z 438 │ activeDraftKey !== null || 2026-10-24T23:04:39.2234699Z 439 │ editingPendingTask !== null || 2026-10-24T23:04:39.2234786Z 440 │ selectedProject === null 2026-10-24T23:04:39.2234875Z 441 │ ) { 2026-10-24T23:04:39.2234975Z 442 │ return; 2026-10-24T23:04:39.2235067Z 443 │ } 2026-10-24T23:04:39.2235148Z 444 │ setActiveDraftKey( 2026-10-24T23:04:39.2235261Z ·  ────────┬──────── 2026-10-24T23:04:39.2235457Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:04:39.2235576Z 445 │ createNewTaskDraft({ 2026-10-24T23:04:39.2235641Z ╰──── 2026-10-24T23:04:39.2236255Z  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-24T23:04:39.2236652Z  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-24T23:04:39.2236687Z 2026-10-24T23:04:39.2236991Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T23:04:39.2237194Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:1244:36] 2026-10-24T23:04:39.2237414Z 1243 │ 2026-10-24T23:04:39.2237624Z 1244 │ {props.children} 2026-10-24T23:04:39.2237761Z ·  ───────────── 2026-10-24T23:04:39.2237883Z 1245 │ 2026-10-24T23:04:39.2237965Z ╰──── 2026-10-24T23:04:39.2238205Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T23:04:39.2238380Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T23:04:39.2238383Z 2026-10-24T23:04:39.2238616Z ⚠ eslint(no-unused-vars): Identifier 'HostProcess' is imported but never used. 2026-10-24T23:04:39.2238814Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:25:13] 2026-10-24T23:04:39.2238915Z 24 │ import * as Schema from "effect/Schema"; 2026-10-24T23:04:39.2239066Z 25 │ import * as HostProcess from "@t3tools/shared/HostProcess"; 2026-10-24T23:04:39.2239171Z ·  ─────┬───── 2026-10-24T23:04:39.2239356Z · ╰── 'HostProcess' is imported here 2026-10-24T23:04:39.2239420Z 26 │ 2026-10-24T23:04:39.2239505Z ╰──── 2026-10-24T23:04:39.2239637Z  help: Consider removing this import. 2026-10-24T23:04:39.2239643Z 2026-10-24T23:04:39.2239947Z ⚠ eslint(no-unused-vars): Variable 'serverConfig' is declared but never used. Unused variables should start with a '_'. 2026-10-24T23:04:39.2240242Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:124:11] 2026-10-24T23:04:39.2240341Z 123 │ const path = yield* Path.Path; 2026-10-24T23:04:39.2240487Z 124 │ const serverConfig = yield* ServerConfig.ServerConfig; 2026-10-24T23:04:39.2240589Z ·  ──────┬───── 2026-10-24T23:04:39.2240778Z · ╰── 'serverConfig' is declared here 2026-10-24T23:04:39.2240935Z 125 │ const serverSettings = yield* ServerSettings.ServerSettingsService; 2026-10-24T23:04:39.2241019Z ╰──── 2026-10-24T23:04:39.2241158Z  help: Consider removing this declaration. 2026-10-24T23:04:39.2241164Z 2026-10-24T23:04:39.2241466Z ⚠ eslint(no-unused-vars): Variable 'serverSettings' is declared but never used. Unused variables should start with a '_'. 2026-10-24T23:04:39.2241647Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:125:11] 2026-10-24T23:04:39.2241793Z 124 │ const serverConfig = yield* ServerConfig.ServerConfig; 2026-10-24T23:04:39.2241957Z 125 │ const serverSettings = yield* ServerSettings.ServerSettingsService; 2026-10-24T23:04:39.2242064Z ·  ───────┬────── 2026-10-24T23:04:39.2242257Z · ╰── 'serverSettings' is declared here 2026-10-24T23:04:39.2242408Z 126 │ const gitWorkflow = yield* GitWorkflowService.GitWorkflowService; 2026-10-24T23:04:39.2242489Z ╰──── 2026-10-24T23:04:39.2242683Z  help: Consider removing this declaration. 2026-10-24T23:04:39.2242719Z 2026-10-24T23:04:39.2243100Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:04:39.2243272Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:361:7] 2026-10-24T23:04:39.2243436Z 355 │ }, [cancelledIncomingShareId, navigation, props.incomingShareId]); 2026-10-24T23:04:39.2243532Z 356 │ useEffect(() => { 2026-10-24T23:04:39.2243629Z ·  ────┬──── 2026-10-24T23:04:39.2243788Z · ╰── This is the containing effect 2026-10-24T23:04:39.2243913Z 357 │ if (!isReturningToProjectPicker) { 2026-10-24T23:04:39.2244004Z 358 │ return; 2026-10-24T23:04:39.2250010Z 359 │ } 2026-10-24T23:04:39.2250167Z 360 │ if (requestedInitialProjectAvailable) { 2026-10-24T23:04:39.2250267Z 361 │ setIsReturningToProjectPicker(false); 2026-10-24T23:04:39.2250381Z ·  ──────────────┬────────────── 2026-10-24T23:04:39.2250571Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:04:39.2250632Z 362 │ return; 2026-10-24T23:04:39.2250687Z ╰──── 2026-10-24T23:04:39.2251279Z  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-24T23:04:39.2251608Z  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-24T23:04:39.2251614Z 2026-10-24T23:04:39.2251871Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:04:39.2252023Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:504:9] 2026-10-24T23:04:39.2252078Z 447 │ 2026-10-24T23:04:39.2252144Z 448 │ useEffect(() => { 2026-10-24T23:04:39.2252218Z ·  ────┬──── 2026-10-24T23:04:39.2252347Z · ╰── This is the containing effect 2026-10-24T23:04:39.2252451Z 449 │ if (props.pendingTaskId || props.draftId) { 2026-10-24T23:04:39.2252514Z 450 │ return; 2026-10-24T23:04:39.2252571Z 451 │ } 2026-10-24T23:04:39.2252710Z 452 │ if (lastInitialProjectRefRef.current !== props.initialProjectRef) { 2026-10-24T23:04:39.2252849Z 453 │ lastInitialProjectRefRef.current = props.initialProjectRef; 2026-10-24T23:04:39.2252961Z 454 │ appliedInitialProjectKeyRef.current = null; 2026-10-24T23:04:39.2253019Z 455 │ } 2026-10-24T23:04:39.2253157Z 456 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-24T23:04:39.2253287Z 457 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-24T23:04:39.2253391Z 458 │ if (initialEnvironmentId && initialProjectId) { 2026-10-24T23:04:39.2253465Z 459 │ const directProject = 2026-10-24T23:04:39.2253531Z 460 │ projects.find( 2026-10-24T23:04:39.2253599Z 461 │ (project) => 2026-10-24T23:04:39.2253776Z 462 │ project.environmentId === initialEnvironmentId && project.id === initialProjectId, 2026-10-24T23:04:39.2253840Z 463 │ ) ?? null; 2026-10-24T23:04:39.2253890Z 464 │ 2026-10-24T23:04:39.2254074Z 465 │ if (directProject) { 2026-10-24T23:04:39.2254256Z 466 │ // Apply the route's project once. Re-applying on every change would 2026-10-24T23:04:39.2254391Z 467 │ // instantly revert environment/project switches made in the picker. 2026-10-24T23:04:39.2254553Z 468 │ const directProjectKey = `${directProject.environmentId}:${directProject.id}`; 2026-10-24T23:04:39.2254689Z 469 │ if (appliedInitialProjectKeyRef.current === directProjectKey) { 2026-10-24T23:04:39.2254754Z 470 │ return; 2026-10-24T23:04:39.2254812Z 471 │ } 2026-10-24T23:04:39.2254910Z 472 │ if (props.initialProjectRef?.branch) { 2026-10-24T23:04:39.2254972Z 473 │ if ( 2026-10-24T23:04:39.2255118Z 474 │ selectedProject?.environmentId !== directProject.environmentId || 2026-10-24T23:04:39.2255222Z 475 │ selectedProject.id !== directProject.id 2026-10-24T23:04:39.2255287Z 476 │ ) { 2026-10-24T23:04:39.2255372Z 477 │ setProject(directProject); 2026-10-24T23:04:39.2255435Z 478 │ return; 2026-10-24T23:04:39.2255493Z 479 │ } 2026-10-24T23:04:39.2255577Z 480 │ if (!flow.draftKey) return; 2026-10-24T23:04:39.2255717Z 481 │ // The route completes checkout before mounting this composer. Local 2026-10-24T23:04:39.2255861Z 482 │ // mode reuses an existing worktree; worktree mode would create another. 2026-10-24T23:04:39.2255967Z 483 │ updateComposerDraftSettings(flow.draftKey, { 2026-10-24T23:04:39.2256048Z 484 │ workspaceSelection: { 2026-10-24T23:04:39.2256119Z 485 │ mode: "local", 2026-10-24T23:04:39.2256228Z 486 │ branch: props.initialProjectRef.branch, 2026-10-24T23:04:39.2256366Z 487 │ worktreePath: props.initialProjectRef.worktreePath ?? null, 2026-10-24T23:04:39.2256452Z 488 │ startFromOrigin: false, 2026-10-24T23:04:39.2256514Z 489 │ }, 2026-10-24T23:04:39.2256576Z 490 │ }); 2026-10-24T23:04:39.2256632Z 491 │ } 2026-10-24T23:04:39.2256759Z 492 │ appliedInitialProjectKeyRef.current = directProjectKey; 2026-10-24T23:04:39.2256864Z 493 │ if ( 2026-10-24T23:04:39.2257005Z 494 │ selectedProject?.environmentId === directProject.environmentId && 2026-10-24T23:04:39.2257100Z 495 │ selectedProject.id === directProject.id 2026-10-24T23:04:39.2257161Z 496 │ ) { 2026-10-24T23:04:39.2257225Z 497 │ return; 2026-10-24T23:04:39.2257281Z 498 │ } 2026-10-24T23:04:39.2257360Z 499 │ setProject(directProject); 2026-10-24T23:04:39.2257422Z 500 │ return; 2026-10-24T23:04:39.2257485Z 501 │ } 2026-10-24T23:04:39.2257538Z 502 │ 2026-10-24T23:04:39.2257618Z 503 │ if (projects.length > 0) { 2026-10-24T23:04:39.2257715Z 504 │ setIsReturningToProjectPicker(true); 2026-10-24T23:04:39.2257827Z ·  ──────────────┬────────────── 2026-10-24T23:04:39.2258007Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:04:39.2258064Z 505 │ } 2026-10-24T23:04:39.2258118Z ╰──── 2026-10-24T23:04:39.2258704Z  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-24T23:04:39.2259077Z  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-24T23:04:39.2259117Z 2026-10-24T23:04:39.2259370Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:04:39.2259523Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:604:5] 2026-10-24T23:04:39.2259575Z 545 │ 2026-10-24T23:04:39.2259641Z 546 │ useEffect(() => { 2026-10-24T23:04:39.2259713Z ·  ────┬──── 2026-10-24T23:04:39.2259843Z · ╰── This is the containing effect 2026-10-24T23:04:39.2259939Z 547 │ const shareId = props.incomingShareId; 2026-10-24T23:04:39.2260022Z 548 │ const draftKey = flow.draftKey; 2026-10-24T23:04:39.2260124Z 549 │ const destinationProject = selectedProject; 2026-10-24T23:04:39.2260266Z 550 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-24T23:04:39.2260393Z 551 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-24T23:04:39.2260484Z 552 │ const selectedProjectMatchesRoute = 2026-10-24T23:04:39.2260558Z 553 │ !initialEnvironmentId || 2026-10-24T23:04:39.2260630Z 554 │ !initialProjectId || 2026-10-24T23:04:39.2260761Z 555 │ (destinationProject?.environmentId === initialEnvironmentId && 2026-10-24T23:04:39.2260867Z 556 │ destinationProject.id === initialProjectId); 2026-10-24T23:04:39.2260922Z 557 │ if ( 2026-10-24T23:04:39.2260987Z 558 │ !shareId || 2026-10-24T23:04:39.2261052Z 559 │ !draftKey || 2026-10-24T23:04:39.2261125Z 560 │ !destinationProject || 2026-10-24T23:04:39.2261214Z 561 │ !selectedProjectMatchesRoute || 2026-10-24T23:04:39.2261307Z 562 │ cancelledIncomingShareId === shareId 2026-10-24T23:04:39.2261363Z 563 │ ) { 2026-10-24T23:04:39.2261424Z 564 │ return; 2026-10-24T23:04:39.2261477Z 565 │ } 2026-10-24T23:04:39.2261572Z 566 │ const importKey = `${shareId}:${draftKey}`; 2026-10-24T23:04:39.2261630Z 567 │ if ( 2026-10-24T23:04:39.2261738Z 568 │ startedShareImportKeyRef.current === importKey || 2026-10-24T23:04:39.2261849Z 569 │ cancellingShareImportKeyRef.current === importKey 2026-10-24T23:04:39.2261906Z 570 │ ) { 2026-10-24T23:04:39.2261967Z 571 │ return; 2026-10-24T23:04:39.2262019Z 572 │ } 2026-10-24T23:04:39.2262072Z 573 │ 2026-10-24T23:04:39.2262142Z 574 │ if (!incomingShare) { 2026-10-24T23:04:39.2262340Z 575 │ if (isIncomingShareUnavailable && alertedUnavailableIncomingShareIdRef.current !== shareId) { 2026-10-24T23:04:39.2262470Z 576 │ alertedUnavailableIncomingShareIdRef.current = shareId; 2026-10-24T23:04:39.2262537Z 577 │ Dialog.alert( 2026-10-24T23:04:39.2262621Z 578 │ "Shared content unavailable", 2026-10-24T23:04:39.2262795Z 579 │ "The shared content is no longer in the inbox. You can continue editing this task draft.", 2026-10-24T23:04:39.2262852Z 580 │ ); 2026-10-24T23:04:39.2262909Z 581 │ } 2026-10-24T23:04:39.2262968Z 582 │ return; 2026-10-24T23:04:39.2263025Z 583 │ } 2026-10-24T23:04:39.2263075Z 584 │ 2026-10-24T23:04:39.2263131Z 585 │ if ( 2026-10-24T23:04:39.2263292Z 586 │ incomingShare.attachments.some((attachment) => attachment.type === "file") && 2026-10-24T23:04:39.2263395Z 587 │ selectedEnvironmentServerConfig === null 2026-10-24T23:04:39.2263448Z 588 │ ) { 2026-10-24T23:04:39.2263563Z 589 │ return; 2026-10-24T23:04:39.2263654Z 590 │ } 2026-10-24T23:04:39.2263703Z 591 │ 2026-10-24T23:04:39.2263840Z 592 │ if (alertedUnavailableIncomingShareIdRef.current === shareId) { 2026-10-24T23:04:39.2263959Z 593 │ alertedUnavailableIncomingShareIdRef.current = null; 2026-10-24T23:04:39.2264013Z 594 │ } 2026-10-24T23:04:39.2264115Z 595 │ startedShareImportKeyRef.current = importKey; 2026-10-24T23:04:39.2264184Z 596 │ const draftBackup = 2026-10-24T23:04:39.2264370Z 597 │ shareImportDraftBackupRef.current.get(importKey) ?? getComposerDraftSnapshot(draftKey); 2026-10-24T23:04:39.2264505Z 598 │ shareImportDraftBackupRef.current.set(importKey, draftBackup); 2026-10-24T23:04:39.2264592Z 599 │ const importToken = Symbol(importKey); 2026-10-24T23:04:39.2264670Z 600 │ let didReserveShare = false; 2026-10-24T23:04:39.2264752Z 601 │ let didConsumeShare = false; 2026-10-24T23:04:39.2264836Z 602 │ let needsDraftRestore = false; 2026-10-24T23:04:39.2264943Z 603 │ activeShareImportTokenRef.current = importToken; 2026-10-24T23:04:39.2265026Z 604 │ setImportingShareKey(importKey); 2026-10-24T23:04:39.2265113Z ·  ──────────┬───────── 2026-10-24T23:04:39.2265289Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:04:39.2265353Z 605 │ void (async () => { 2026-10-24T23:04:39.2265408Z ╰──── 2026-10-24T23:04:39.2265990Z  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-24T23:04:39.2266312Z  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-24T23:04:39.2266318Z 2026-10-24T23:04:39.2266519Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:04:39.2266666Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:524:5] 2026-10-24T23:04:39.2266742Z 523 │ props.initialProjectRef, 2026-10-24T23:04:39.2266855Z 524 │ props.incomingShareId, 2026-10-24T23:04:39.2266945Z ·  ──────────┬────────── 2026-10-24T23:04:39.2267113Z · ╰── Unnecessary dependency `props.incomingShareId` 2026-10-24T23:04:39.2267187Z 525 │ props.pendingTaskId, 2026-10-24T23:04:39.2267243Z ╰──── 2026-10-24T23:04:39.2267537Z  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-24T23:04:39.2267844Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.2267847Z 2026-10-24T23:04:39.2268062Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T23:04:39.2268215Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:543:5] 2026-10-24T23:04:39.2268329Z 542 │ loadedBranchesProjectKeyRef.current = projectKey; 2026-10-24T23:04:39.2268400Z 543 │ flow.loadBranches(); 2026-10-24T23:04:39.2268467Z ·  ──┬─ 2026-10-24T23:04:39.2268645Z · ╰── Missing dependency `flow` 2026-10-24T23:04:39.2268772Z 544 │ }, [flow.loadBranches, selectedProject]); 2026-10-24T23:04:39.2268855Z ·  ────────┬──────── 2026-10-24T23:04:39.2269060Z · ╰── Overly precise dependency `flow.loadBranches`, use `flow` instead 2026-10-24T23:04:39.2269115Z 545 │ 2026-10-24T23:04:39.2269169Z ╰──── 2026-10-24T23:04:39.2269585Z  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-24T23:04:39.2269889Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.2269892Z 2026-10-24T23:04:39.2270096Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:04:39.2270252Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:766:5] 2026-10-24T23:04:39.2270317Z 765 │ flow.draftKey, 2026-10-24T23:04:39.2270391Z 766 │ hasImportedIncomingShare, 2026-10-24T23:04:39.2270485Z ·  ────────────┬─────────── 2026-10-24T23:04:39.2270662Z · ╰── Unnecessary dependency `hasImportedIncomingShare` 2026-10-24T23:04:39.2270727Z 767 │ incomingShare, 2026-10-24T23:04:39.2270806Z 768 │ isIncomingShareInboxLoading, 2026-10-24T23:04:39.2270904Z ·  ─────────────┬───────────── 2026-10-24T23:04:39.2271087Z · ╰── Unnecessary dependency `isIncomingShareInboxLoading` 2026-10-24T23:04:39.2271173Z 769 │ isIncomingShareUnavailable, 2026-10-24T23:04:39.2271245Z 770 │ props.incomingShareId, 2026-10-24T23:04:39.2271339Z 771 │ props.initialProjectRef?.environmentId, 2026-10-24T23:04:39.2271429Z 772 │ props.initialProjectRef?.projectId, 2026-10-24T23:04:39.2271505Z 773 │ releaseShareReservation, 2026-10-24T23:04:39.2271567Z 774 │ reserveShare, 2026-10-24T23:04:39.2271658Z 775 │ selectedEnvironmentServerConfig, 2026-10-24T23:04:39.2271725Z 776 │ selectedProject, 2026-10-24T23:04:39.2271796Z 777 │ shareImportAttempt, 2026-10-24T23:04:39.2271880Z ·  ─────────┬──────── 2026-10-24T23:04:39.2272050Z · ╰── Unnecessary dependency `shareImportAttempt` 2026-10-24T23:04:39.2272106Z 778 │ ]); 2026-10-24T23:04:39.2272160Z ╰──── 2026-10-24T23:04:39.2272500Z  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-24T23:04:39.2272840Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.2272843Z 2026-10-24T23:04:39.2273028Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T23:04:39.2273203Z ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:555:70] 2026-10-24T23:04:39.2273281Z 554 │ assert.deepStrictEqual( 2026-10-24T23:04:39.2273447Z 555 │ (yield* Ref.get(fixture.syncCommands)).map(({ commandId: _, ...rest }) => rest), 2026-10-24T23:04:39.2273568Z ·  ┬ 2026-10-24T23:04:39.2273736Z · ╰── '_' is declared here 2026-10-24T23:04:39.2273801Z 556 │ [ 2026-10-24T23:04:39.2273851Z ╰──── 2026-10-24T23:04:39.2273954Z  help: Consider removing this parameter. 2026-10-24T23:04:39.2273957Z 2026-10-24T23:04:39.2274139Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T23:04:39.2274316Z ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:1155:70] 2026-10-24T23:04:39.2274398Z 1154 │ assert.deepStrictEqual( 2026-10-24T23:04:39.2274563Z 1155 │ (yield* Ref.get(fixture.linkCommands)).map(({ commandId: _, ...rest }) => rest), 2026-10-24T23:04:39.2274684Z ·  ┬ 2026-10-24T23:04:39.2274855Z · ╰── '_' is declared here 2026-10-24T23:04:39.2274918Z 1156 │ [ 2026-10-24T23:04:39.2274973Z ╰──── 2026-10-24T23:04:39.2275073Z  help: Consider removing this parameter. 2026-10-24T23:04:39.2275075Z 2026-10-24T23:04:39.2275272Z ⚠ eslint(no-unused-vars): Identifier 'Duration' is imported but never used. 2026-10-24T23:04:39.2275407Z ╭─[packages/provider-pi/src/server/adapter.test.ts:24:13] 2026-10-24T23:04:39.2275503Z 23 │ import * as Deferred from "effect/Deferred"; 2026-10-24T23:04:39.2275594Z 24 │ import * as Duration from "effect/Duration"; 2026-10-24T23:04:39.2275673Z ·  ────┬─── 2026-10-24T23:04:39.2275809Z · ╰── 'Duration' is imported here 2026-10-24T23:04:39.2275899Z 25 │ import * as Effect from "effect/Effect"; 2026-10-24T23:04:39.2275952Z ╰──── 2026-10-24T23:04:39.2276048Z  help: Consider removing this import. 2026-10-24T23:04:39.2276051Z 2026-10-24T23:04:39.2276259Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T23:04:39.2276395Z ╭─[apps/web/src/lib/composerContextReferences.ts:90:40] 2026-10-24T23:04:39.2276472Z 89 │ let cursor = prompt.length; 2026-10-24T23:04:39.2276580Z 90 │ for (const occurrence of occurrences.reverse()) { 2026-10-24T23:04:39.2276686Z ·  ─────── 2026-10-24T23:04:39.2276769Z 91 │ let { start, end } = occurrence; 2026-10-24T23:04:39.2276835Z ╰──── 2026-10-24T23:04:39.2277179Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T23:04:39.2277209Z 2026-10-24T23:04:39.2277420Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T23:04:39.2277563Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:773:7] 2026-10-24T23:04:39.2277666Z 772 │ if (settingsSheetPresentation.isActive) { 2026-10-24T23:04:39.2277799Z 773 │ settingsRoutePresentation.present(settingsRouteSession); 2026-10-24T23:04:39.2277895Z ·  ────────────┬──────────── 2026-10-24T23:04:39.2278064Z · ╰── Missing dependency `settingsRoutePresentation` 2026-10-24T23:04:39.2278121Z 774 │ } 2026-10-24T23:04:39.2278327Z 775 │ }, [settingsRoutePresentation.present, settingsRouteSession, settingsSheetPresentation.isActive]); 2026-10-24T23:04:39.2278443Z ·  ────────────────┬──────────────── 2026-10-24T23:04:39.2278720Z · ╰── Overly precise dependency `settingsRoutePresentation.present`, use `settingsRoutePresentation` instead 2026-10-24T23:04:39.2278774Z 776 │ 2026-10-24T23:04:39.2278826Z ╰──── 2026-10-24T23:04:39.2279238Z  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-24T23:04:39.2279543Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.2279549Z 2026-10-24T23:04:39.2279707Z ⚠ react(immutability): This value cannot be modified 2026-10-24T23:04:39.2279854Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:391:5] 2026-10-24T23:04:39.2280012Z 387 │ typeof props.style.borderRadius === "number" ? props.style.borderRadius : 0; 2026-10-24T23:04:39.2280148Z 388 │ const animatedBorderRadius = useSharedValue(targetBorderRadius); 2026-10-24T23:04:39.2280238Z ·  ──────────┬───────── 2026-10-24T23:04:39.2280394Z · ╰── `animatedBorderRadius` originates here 2026-10-24T23:04:39.2280551Z 389 │ const shouldAnimate = props.animateLayout !== false && Platform.OS !== "android"; 2026-10-24T23:04:39.2280622Z 390 │ useLayoutEffect(() => { 2026-10-24T23:04:39.2280719Z 391 │ animatedBorderRadius.value = shouldAnimate 2026-10-24T23:04:39.2280809Z ·  ──────────┬───────── 2026-10-24T23:04:39.2280973Z · ╰── `animatedBorderRadius` cannot be modified 2026-10-24T23:04:39.2281065Z 392 │ ? withTiming(targetBorderRadius, { 2026-10-24T23:04:39.2281115Z ╰──── 2026-10-24T23:04:39.2281377Z  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-24T23:04:39.2281678Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:04:39.2281681Z 2026-10-24T23:04:39.2281935Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:04:39.2282065Z ╭─[apps/mobile/src/components/ProjectFavicon.tsx:172:5] 2026-10-24T23:04:39.2282300Z 167 │ const [activeFaviconRequest, setActiveFaviconRequest] = useState(null); 2026-10-24T23:04:39.2282402Z 168 │ useLayoutEffect(() => { 2026-10-24T23:04:39.2282481Z ·  ───────┬─────── 2026-10-24T23:04:39.2282613Z · ╰── This is the containing effect 2026-10-24T23:04:39.2282699Z 169 │ if (faviconRequest === null) return; 2026-10-24T23:04:39.2282752Z 170 │ 2026-10-24T23:04:39.2282882Z 171 │ const endRequest = beginProjectFaviconRequest(faviconRequest); 2026-10-24T23:04:39.2282975Z 172 │ setActiveFaviconRequest(faviconRequest); 2026-10-24T23:04:39.2283068Z ·  ───────────┬─────────── 2026-10-24T23:04:39.2283242Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:04:39.2283311Z 173 │ return endRequest; 2026-10-24T23:04:39.2283368Z ╰──── 2026-10-24T23:04:39.2283958Z  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-24T23:04:39.2284275Z  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-24T23:04:39.2284278Z 2026-10-24T23:04:39.2284470Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T23:04:39.2284638Z ╭─[apps/web/src/components/pullRequest/PullRequestSummaryTab.tsx:818:17] 2026-10-24T23:04:39.2284700Z 817 │
{ 2026-10-24T23:04:39.2285972Z ·  ────┬──── 2026-10-24T23:04:39.2286107Z · ╰── This is the containing effect 2026-10-24T23:04:39.2286171Z 68 │ setUri(null); 2026-10-24T23:04:39.2286238Z ·  ───┬── 2026-10-24T23:04:39.2286405Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:04:39.2286467Z 69 │ setError(null); 2026-10-24T23:04:39.2286521Z ╰──── 2026-10-24T23:04:39.2287126Z  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-24T23:04:39.2287493Z  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-24T23:04:39.2287531Z 2026-10-24T23:04:39.2287729Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:04:39.2287865Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:91:7] 2026-10-24T23:04:39.2287920Z 90 │ }; 2026-10-24T23:04:39.2287991Z 91 │ }, [attachmentId, fileUri]); 2026-10-24T23:04:39.2288112Z ·  ──────┬───── ───┬─── 2026-10-24T23:04:39.2288497Z · │ ╰── Unnecessary dependency `fileUri` 2026-10-24T23:04:39.2288648Z · ╰── Unnecessary dependency `attachmentId` 2026-10-24T23:04:39.2288789Z 92 │ const mimeType = videoMimeType(attachment) ?? attachment.mimeType; 2026-10-24T23:04:39.2288845Z ╰──── 2026-10-24T23:04:39.2289132Z  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-24T23:04:39.2289436Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.2289438Z 2026-10-24T23:04:39.2289648Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T23:04:39.2289787Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:213:34] 2026-10-24T23:04:39.2289855Z 212 │ useEffect(() => { 2026-10-24T23:04:39.2289969Z 213 │ if (!isFocused && hasSource) props.onRequestClose(); 2026-10-24T23:04:39.2290068Z ·  ──┬── 2026-10-24T23:04:39.2290224Z · ╰── Missing dependency `props` 2026-10-24T23:04:39.2290328Z 214 │ }, [isFocused, hasSource, props.onRequestClose]); 2026-10-24T23:04:39.2290443Z ·  ──────────┬───────── 2026-10-24T23:04:39.2290667Z · ╰── Overly precise dependency `props.onRequestClose`, use `props` instead 2026-10-24T23:04:39.2290739Z 215 │ const { source } = props; 2026-10-24T23:04:39.2290792Z ╰──── 2026-10-24T23:04:39.2291204Z  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-24T23:04:39.2291580Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.2291708Z 2026-10-24T23:04:39.2291852Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:04:39.2292012Z ╭─[apps/mobile/src/features/diffs/nativeReviewDiffSurface.ts:277:39] 2026-10-24T23:04:39.2292069Z 276 │ 2026-10-24T23:04:39.2292254Z 277 │ ╭─▶ return createElement(RawNativeView, { 2026-10-24T23:04:39.2292345Z 278 │ │ ...nativeProps, 2026-10-24T23:04:39.2292491Z 279 │ │ refreshEnabled: props.onPullToRefresh !== undefined, 2026-10-24T23:04:39.2292582Z 280 │ │ ref: nativeRef, 2026-10-24T23:04:39.2292720Z 281 │ ├─▶ }); 2026-10-24T23:04:39.2292961Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T23:04:39.2293014Z 282 │ } 2026-10-24T23:04:39.2293066Z ╰──── 2026-10-24T23:04:39.2293530Z  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-24T23:04:39.2293816Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:04:39.2293819Z 2026-10-24T23:04:39.2294076Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T23:04:39.2294209Z ╭─[packages/provider-pi/src/server/adapter.ts:3405:7] 2026-10-24T23:04:39.2294264Z 3404 │ 2026-10-24T23:04:39.2294449Z 3405 │ const layer: Layer.Layer = 2026-10-24T23:04:39.2294519Z ·  ──┬── 2026-10-24T23:04:39.2294646Z · ╰── 'layer' is declared here 2026-10-24T23:04:39.2294712Z 3406 │ Layer.effect( 2026-10-24T23:04:39.2294766Z ╰──── 2026-10-24T23:04:39.2294867Z  help: Consider removing this declaration. 2026-10-24T23:04:39.2294870Z 2026-10-24T23:04:39.2295036Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T23:04:39.2295198Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:698:76] 2026-10-24T23:04:39.2295381Z 697 │ const [snoozeGateClock, setSnoozeGateClock] = useState(() => ({ thread, now: Date.now() })); 2026-10-24T23:04:39.2295549Z 698 │ if (snoozeGateClock.thread !== thread) setSnoozeGateClock({ thread, now: Date.now() }); 2026-10-24T23:04:39.2295684Z ·  ─────┬──── 2026-10-24T23:04:39.2295867Z · ╰── Cannot call impure function 2026-10-24T23:04:39.2296002Z 699 │ const snoozeGateNow = new Date(snoozeGateClock.now).toISOString(); 2026-10-24T23:04:39.2296054Z ╰──── 2026-10-24T23:04:39.2296332Z  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-24T23:04:39.2296672Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T23:04:39.2296705Z 2026-10-24T23:04:39.2296916Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T23:04:39.2297078Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:719:71] 2026-10-24T23:04:39.2297159Z 718 │ const snoozePresets = useMemo( 2026-10-24T23:04:39.2297334Z 719 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-24T23:04:39.2297465Z ·  ─────┬──── 2026-10-24T23:04:39.2297644Z · ╰── Cannot call impure function 2026-10-24T23:04:39.2297767Z 720 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-24T23:04:39.2297820Z ╰──── 2026-10-24T23:04:39.2298090Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T23:04:39.2298374Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T23:04:39.2298377Z 2026-10-24T23:04:39.2298555Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T23:04:39.2298708Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:720:6] 2026-10-24T23:04:39.2298883Z 719 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-24T23:04:39.2299005Z 720 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-24T23:04:39.2299100Z ·  ────────────┬─────────── 2026-10-24T23:04:39.2299277Z · ╰── Unnecessary dependency `props.snoozePresetMinute` 2026-10-24T23:04:39.2299330Z 721 │ ); 2026-10-24T23:04:39.2299382Z ╰──── 2026-10-24T23:04:39.2299690Z  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-24T23:04:39.2299997Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.2300000Z 2026-10-24T23:04:39.2300175Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T23:04:39.2300335Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:766:7] 2026-10-24T23:04:39.2300406Z 765 │ thread.pinnedAt, 2026-10-24T23:04:39.2300470Z 766 │ variant, 2026-10-24T23:04:39.2300541Z ·  ───┬─── 2026-10-24T23:04:39.2300678Z · ╰── Unnecessary dependency `variant` 2026-10-24T23:04:39.2300735Z 767 │ ], 2026-10-24T23:04:39.2300787Z ╰──── 2026-10-24T23:04:39.2301090Z  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-24T23:04:39.2301395Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.2301397Z 2026-10-24T23:04:39.2301642Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T23:04:39.2301830Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:1216:21] 2026-10-24T23:04:39.2301960Z 1215 │ {providerDrivers.slice(0, -1).map((driver, index) => ( 2026-10-24T23:04:39.2302092Z 1216 │ 2026-10-24T23:04:39.2302210Z ·  ────────────────────────── 2026-10-24T23:04:39.2302320Z 1217 │ 2026-10-24T23:04:39.2302373Z ╰──── 2026-10-24T23:04:39.2302515Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T23:04:39.2302518Z 2026-10-24T23:04:39.2302729Z ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed 2026-10-24T23:04:39.2302839Z ╭─[packages/contracts/src/rpc.ts:297:8] 2026-10-24T23:04:39.2302907Z 296 │ } from "./device.ts"; 2026-10-24T23:04:39.2302996Z 297 │ import {} from "./previewAutomation.ts"; 2026-10-24T23:04:39.2303065Z ·  ── 2026-10-24T23:04:39.2303125Z 298 │ import { 2026-10-24T23:04:39.2303175Z ╰──── 2026-10-24T23:04:39.2303255Z  help: Remove empty braces 2026-10-24T23:04:39.2303257Z 2026-10-24T23:04:39.2303514Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:04:39.2303661Z ╭─[apps/mobile/src/components/VideoPreviewModal.ios.tsx:63:55] 2026-10-24T23:04:39.2303723Z 61 │ }, []); 2026-10-24T23:04:39.2303787Z 62 │ useEffect(() => { 2026-10-24T23:04:39.2303865Z ·  ────┬──── 2026-10-24T23:04:39.2304000Z · ╰── This is the containing effect 2026-10-24T23:04:39.2304146Z 63 │ if (playbackUrl === null && resolvedUrl !== null) setPlaybackUrl(resolvedUrl); 2026-10-24T23:04:39.2304267Z ·  ───────┬────── 2026-10-24T23:04:39.2304473Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:04:39.2304553Z 64 │ }, [playbackUrl, resolvedUrl]); 2026-10-24T23:04:39.2304605Z ╰──── 2026-10-24T23:04:39.2305193Z  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-24T23:04:39.2305510Z  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-24T23:04:39.2305512Z 2026-10-24T23:04:39.2305766Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:04:39.2305941Z ╭─[apps/mobile/src/features/threads/thread-inspector-content-stack.tsx:60:5] 2026-10-24T23:04:39.2305995Z 58 │ 2026-10-24T23:04:39.2306056Z 59 │ useEffect(() => { 2026-10-24T23:04:39.2306127Z ·  ────┬──── 2026-10-24T23:04:39.2306256Z · ╰── This is the containing effect 2026-10-24T23:04:39.2306337Z 60 │ setMountedModes((current) => { 2026-10-24T23:04:39.2306478Z ·  ───────┬─────── 2026-10-24T23:04:39.2306679Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:04:39.2306760Z 61 │ if (current.has(props.mode)) { 2026-10-24T23:04:39.2306847Z ╰──── 2026-10-24T23:04:39.2307426Z  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-24T23:04:39.2307740Z  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-24T23:04:39.2307742Z 2026-10-24T23:04:39.2307993Z ⚠ eslint(no-unused-vars): Function 'normalizeTerminalContextSelection' is declared but never used. 2026-10-24T23:04:39.2308109Z ╭─[apps/web/src/lib/terminalContext.ts:56:10] 2026-10-24T23:04:39.2308163Z 55 │ 2026-10-24T23:04:39.2308260Z 56 │ function normalizeTerminalContextSelection( 2026-10-24T23:04:39.2308374Z ·  ────────────────┬──────────────── 2026-10-24T23:04:39.2308564Z · ╰── 'normalizeTerminalContextSelection' is declared here 2026-10-24T23:04:39.2308653Z 57 │ selection: TerminalContextSelection, 2026-10-24T23:04:39.2308703Z ╰──── 2026-10-24T23:04:39.2308807Z  help: Consider removing this declaration. 2026-10-24T23:04:39.2308809Z 2026-10-24T23:04:39.2309082Z ⚠ eslint(no-unused-vars): Variable 'layerDaemon' is declared but never used. Unused variables should start with a '_'. 2026-10-24T23:04:39.2309224Z ╭─[apps/server/src/orchestration-v2/EffectWorker.ts:914:7] 2026-10-24T23:04:39.2309275Z 913 │ 2026-10-24T23:04:39.2309463Z 914 │ const layerDaemon: Layer.Layer = Layer.effectDiscard( 2026-10-24T23:04:39.2309539Z ·  ─────┬───── 2026-10-24T23:04:39.2309677Z · ╰── 'layerDaemon' is declared here 2026-10-24T23:04:39.2309761Z 915 │ runDaemon.pipe(Effect.forkScoped), 2026-10-24T23:04:39.2309815Z ╰──── 2026-10-24T23:04:39.2309920Z  help: Consider removing this declaration. 2026-10-24T23:04:39.2309922Z 2026-10-24T23:04:39.2310379Z ⚠ 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-24T23:04:39.2310510Z ╭─[packages/contracts/src/baseSchemas.test.ts:39:9] 2026-10-24T23:04:39.2310574Z 38 │ JSON.stringify( 2026-10-24T23:04:39.2310695Z 39 │ Schema.encodeUnknownSync(Schema.toCodecJson(Named))([ 2026-10-24T23:04:39.2310795Z ·  ──────────────────────── 2026-10-24T23:04:39.2310862Z 40 │ { name: "a" }, 2026-10-24T23:04:39.2310912Z ╰──── 2026-10-24T23:04:39.2310914Z 2026-10-24T23:04:39.2311116Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:04:39.2311247Z ╭─[apps/mobile/src/components/ComposerEditor.tsx:82:6] 2026-10-24T23:04:39.2311302Z 81 │ }, 2026-10-24T23:04:39.2311363Z 82 │ [draftKey], 2026-10-24T23:04:39.2311437Z ·  ────┬─── 2026-10-24T23:04:39.2311629Z · ╰── Unnecessary dependency `draftKey` 2026-10-24T23:04:39.2311713Z 83 │ ); 2026-10-24T23:04:39.2311762Z ╰──── 2026-10-24T23:04:39.2312050Z  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-24T23:04:39.2312357Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.2312360Z 2026-10-24T23:04:39.2312612Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:04:39.2312744Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:60:5] 2026-10-24T23:04:39.2312797Z 57 │ 2026-10-24T23:04:39.2312865Z 58 │ useEffect(() => { 2026-10-24T23:04:39.2312939Z ·  ────┬──── 2026-10-24T23:04:39.2313065Z · ╰── This is the containing effect 2026-10-24T23:04:39.2313161Z 59 │ const controller = new AbortController(); 2026-10-24T23:04:39.2313232Z 60 │ setLoadState("pending"); 2026-10-24T23:04:39.2313309Z ·  ──────┬───── 2026-10-24T23:04:39.2313475Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:04:39.2313635Z 61 │ // A renewed signature is used on Retry, not as a reason to reset the native player. 2026-10-24T23:04:39.2313686Z ╰──── 2026-10-24T23:04:39.2314273Z  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-24T23:04:39.2314586Z  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-24T23:04:39.2314588Z 2026-10-24T23:04:39.2314785Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:04:39.2314917Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:71:7] 2026-10-24T23:04:39.2314999Z 70 │ return () => controller.abort(); 2026-10-24T23:04:39.2315096Z 71 │ }, [player, props.playRequested, attempt]); 2026-10-24T23:04:39.2315273Z ·  ───┬── ─────────┬───────── ───┬─── 2026-10-24T23:04:39.2315548Z · │ │ ╰── Unnecessary dependency `attempt` 2026-10-24T23:04:39.2315777Z · │ ╰── Unnecessary dependency `props.playRequested` 2026-10-24T23:04:39.2315914Z · ╰── Unnecessary dependency `player_0` 2026-10-24T23:04:39.2315969Z 72 │ 2026-10-24T23:04:39.2316019Z ╰──── 2026-10-24T23:04:39.2316306Z  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-24T23:04:39.2316611Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.2316613Z 2026-10-24T23:04:39.2316912Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T23:04:39.2317048Z ╭─[packages/provider-grok/src/server/adapter.ts:408:7] 2026-10-24T23:04:39.2317103Z 407 │ 2026-10-24T23:04:39.2317174Z 408 │ const layer: Layer.Layer< 2026-10-24T23:04:39.2317244Z ·  ──┬── 2026-10-24T23:04:39.2317367Z · ╰── 'layer' is declared here 2026-10-24T23:04:39.2317458Z 409 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T23:04:39.2317510Z ╰──── 2026-10-24T23:04:39.2317614Z  help: Consider removing this declaration. 2026-10-24T23:04:39.2317616Z 2026-10-24T23:04:39.2317865Z ⚠ eslint(no-unused-vars): Function 'promptResponseHasMissingXAiStopReason' is declared but never used. 2026-10-24T23:04:39.2318023Z ╭─[packages/provider-grok/src/server/xaiAcpExtension.ts:1620:10] 2026-10-24T23:04:39.2318080Z 1619 │ 2026-10-24T23:04:39.2318290Z 1620 │ function promptResponseHasMissingXAiStopReason(response: EffectAcpSchema.PromptResponse): boolean { 2026-10-24T23:04:39.2318411Z ·  ──────────────────┬────────────────── 2026-10-24T23:04:39.2318611Z · ╰── 'promptResponseHasMissingXAiStopReason' is declared here 2026-10-24T23:04:39.2318689Z 1621 │ const meta = response._meta; 2026-10-24T23:04:39.2318743Z ╰──── 2026-10-24T23:04:39.2318843Z  help: Consider removing this declaration. 2026-10-24T23:04:39.2318845Z 2026-10-24T23:04:39.2319039Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T23:04:39.2319195Z ╭─[apps/mobile/src/components/ComposerContextSheet.tsx:272:25] 2026-10-24T23:04:39.2319306Z 271 │ {record.elements?.map((element, index) => ( 2026-10-24T23:04:39.2319472Z 272 │ 2026-10-24T23:04:39.2319635Z ·  ─────────────────────────────────────────────────────── 2026-10-24T23:04:39.2319714Z 273 │ effect.status === "succeeded", 2026-10-24T23:04:39.2326115Z 2330 │ │ ); 2026-10-24T23:04:39.2326240Z 2331 │ │ if (!settled) yield* Effect.yieldNow; 2026-10-24T23:04:39.2326382Z 2332 │ ╰─▶ } 2026-10-24T23:04:39.2326502Z 2333 │ }).pipe(Effect.provide(layerWorker), Effect.scoped); 2026-10-24T23:04:39.2326555Z ╰──── 2026-10-24T23:04:39.2326558Z 2026-10-24T23:04:39.2326723Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T23:04:39.2326893Z ╭─[apps/web/src/components/chat/useThreadLifecycle.tsx:178:58] 2026-10-24T23:04:39.2327004Z 177 │ if (snoozeClockState.shell !== activeThreadShell) { 2026-10-24T23:04:39.2327166Z 178 │ setSnoozeClockState({ shell: activeThreadShell, now: new Date().toISOString() }); 2026-10-24T23:04:39.2327287Z ·  ─────┬──── 2026-10-24T23:04:39.2327459Z · ╰── Cannot call impure function 2026-10-24T23:04:39.2327520Z 179 │ } 2026-10-24T23:04:39.2327575Z ╰──── 2026-10-24T23:04:39.2327853Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T23:04:39.2328143Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T23:04:39.2328145Z 2026-10-24T23:04:39.2328637Z ⚠ 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-24T23:04:39.2328752Z ╭─[packages/contracts/src/auth.test.ts:17:12] 2026-10-24T23:04:39.2328911Z 16 │ it("decodes legacy review credentials without offering them in new grants", () => { 2026-10-24T23:04:39.2329077Z 17 │ expect(Schema.decodeUnknownSync(AuthEnvironmentScopes)(["review:write"])).toEqual([ 2026-10-24T23:04:39.2329187Z ·  ──────────────────────── 2026-10-24T23:04:39.2329254Z 18 │ "review:write", 2026-10-24T23:04:39.2329306Z ╰──── 2026-10-24T23:04:39.2329308Z 2026-10-24T23:04:39.2329667Z ⚠ 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-24T23:04:39.2329777Z ╭─[packages/contracts/src/auth.test.ts:20:18] 2026-10-24T23:04:39.2329836Z 19 │ ]); 2026-10-24T23:04:39.2329997Z 20 │ expect(() => Schema.decodeUnknownSync(AuthGrantScopes)(["review:write"])).toThrow(); 2026-10-24T23:04:39.2330107Z ·  ──────────────────────── 2026-10-24T23:04:39.2330304Z 21 │ expect(AuthStandardClientScopes).not.toContain("review:write"); 2026-10-24T23:04:39.2330402Z ╰──── 2026-10-24T23:04:39.2330404Z 2026-10-24T23:04:39.2330759Z ⚠ 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-24T23:04:39.2330870Z ╭─[packages/contracts/src/auth.test.ts:58:21] 2026-10-24T23:04:39.2331036Z 57 │ it("ignores unknown response permissions without falling back to broader scopes", () => { 2026-10-24T23:04:39.2331161Z 58 │ const session = Schema.decodeUnknownSync(AuthSessionState)({ 2026-10-24T23:04:39.2331273Z ·  ──────────────────────── 2026-10-24T23:04:39.2331343Z 59 │ authenticated: true, 2026-10-24T23:04:39.2331393Z ╰──── 2026-10-24T23:04:39.2331396Z 2026-10-24T23:04:39.2331862Z ⚠ 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-24T23:04:39.2332016Z ╭─[apps/server/src/background/HostPowerMonitor.test.ts:133:11] 2026-10-24T23:04:39.2332150Z 132 │ const monitor = yield* HostPowerMonitor.HostPowerMonitor; 2026-10-24T23:04:39.2332294Z 133 │ ╭─▶ for ( 2026-10-24T23:04:39.2332394Z 134 │ │ let attempt = 0; 2026-10-24T23:04:39.2332561Z 135 │ │ attempt < 100 && (yield* monitor.snapshot).onBattery !== "true"; 2026-10-24T23:04:39.2332659Z 136 │ │ attempt += 1 2026-10-24T23:04:39.2332748Z 137 │ │ ) { 2026-10-24T23:04:39.2332860Z 138 │ │ yield* Effect.yieldNow; 2026-10-24T23:04:39.2332996Z 139 │ ╰─▶ } 2026-10-24T23:04:39.2333121Z 140 │ expect((yield* monitor.snapshot).onBattery).toBe("true"); 2026-10-24T23:04:39.2333173Z ╰──── 2026-10-24T23:04:39.2333175Z 2026-10-24T23:04:39.2333373Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:04:39.2333536Z ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:155:7] 2026-10-24T23:04:39.2333594Z 154 │ } 2026-10-24T23:04:39.2333663Z 155 │ }, [wrappedRender]); 2026-10-24T23:04:39.2333742Z ·  ──────┬────── 2026-10-24T23:04:39.2333900Z · ╰── Unnecessary dependency `wrappedRender` 2026-10-24T23:04:39.2333957Z 156 │ 2026-10-24T23:04:39.2334009Z ╰──── 2026-10-24T23:04:39.2334299Z  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-24T23:04:39.2334608Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.2334610Z 2026-10-24T23:04:39.2334850Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T23:04:39.2335010Z ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:800:42] 2026-10-24T23:04:39.2335067Z 799 │ > 2026-10-24T23:04:39.2335243Z 800 │ 2026-10-24T23:04:39.2335396Z ·  ──────────────────── 2026-10-24T23:04:39.2335496Z 801 │ 2026-10-24T23:04:39.2335548Z ╰──── 2026-10-24T23:04:39.2335765Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T23:04:39.2335903Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T23:04:39.2335906Z 2026-10-24T23:04:39.2336072Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T23:04:39.2336190Z ╭─[apps/web/src/components/Sidebar.tsx:1136:11] 2026-10-24T23:04:39.2336288Z 1135 │ foldSearchQuery(threadSearchQuery), 2026-10-24T23:04:39.2336354Z 1136 │ Date.now(), 2026-10-24T23:04:39.2336442Z ·  ─────┬──── 2026-10-24T23:04:39.2336581Z · ╰── Cannot call impure function 2026-10-24T23:04:39.2336718Z 1137 │ // A list filter, as on mobile: a pick would move rows unexplained. 2026-10-24T23:04:39.2336772Z ╰──── 2026-10-24T23:04:39.2337099Z  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-24T23:04:39.2337388Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T23:04:39.2337391Z 2026-10-24T23:04:39.2337619Z ⚠ eslint(no-unused-vars): Function 'resolveThreadWorkspaceCwd' is declared but never used. 2026-10-24T23:04:39.2337740Z ╭─[apps/server/src/checkpointing/Utils.ts:12:10] 2026-10-24T23:04:39.2337797Z 11 │ 2026-10-24T23:04:39.2337893Z 12 │ function resolveThreadWorkspaceCwd(input: { 2026-10-24T23:04:39.2337998Z ·  ────────────┬──────────── 2026-10-24T23:04:39.2338167Z · ╰── 'resolveThreadWorkspaceCwd' is declared here 2026-10-24T23:04:39.2338236Z 13 │ readonly thread: { 2026-10-24T23:04:39.2338288Z ╰──── 2026-10-24T23:04:39.2338389Z  help: Consider removing this declaration. 2026-10-24T23:04:39.2338394Z 2026-10-24T23:04:39.2338678Z ⚠ eslint(no-unused-vars): Variable 'revokeActiveMcpThread' is declared but never used. Unused variables should start with a '_'. 2026-10-24T23:04:39.2338807Z ╭─[apps/server/src/mcp/McpSessionRegistry.ts:218:7] 2026-10-24T23:04:39.2338860Z 217 │ 2026-10-24T23:04:39.2339060Z 218 │ const revokeActiveMcpThread = (threadId: ThreadId): Effect.Effect => 2026-10-24T23:04:39.2339177Z ·  ──────────┬────────── 2026-10-24T23:04:39.2339334Z · ╰── 'revokeActiveMcpThread' is declared here 2026-10-24T23:04:39.2339518Z 219 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeThread(threadId) : Effect.void; 2026-10-24T23:04:39.2339570Z ╰──── 2026-10-24T23:04:39.2339671Z  help: Consider removing this declaration. 2026-10-24T23:04:39.2339674Z 2026-10-24T23:04:39.2339976Z ⚠ eslint(no-unused-vars): Variable 'revokeAllActiveMcpCredentials' is declared but never used. Unused variables should start with a '_'. 2026-10-24T23:04:39.2340099Z ╭─[apps/server/src/mcp/McpSessionRegistry.ts:221:7] 2026-10-24T23:04:39.2340151Z 220 │ 2026-10-24T23:04:39.2340286Z 221 │ const revokeAllActiveMcpCredentials = (): Effect.Effect => 2026-10-24T23:04:39.2340397Z ·  ──────────────┬────────────── 2026-10-24T23:04:39.2340575Z · ╰── 'revokeAllActiveMcpCredentials' is declared here 2026-10-24T23:04:39.2340738Z 222 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeAll : Effect.void; 2026-10-24T23:04:39.2340787Z ╰──── 2026-10-24T23:04:39.2340892Z  help: Consider removing this declaration. 2026-10-24T23:04:39.2340894Z 2026-10-24T23:04:39.2341051Z ⚠ react(immutability): This value cannot be modified 2026-10-24T23:04:39.2341212Z ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:42:5] 2026-10-24T23:04:39.2341263Z 35 │ 2026-10-24T23:04:39.2341407Z 36 │ const inspectorProgress = useSharedValue(inspectorVisible ? 1 : 0); 2026-10-24T23:04:39.2341498Z ·  ────────┬──────── 2026-10-24T23:04:39.2341647Z · ╰── `inspectorProgress` originates here 2026-10-24T23:04:39.2341739Z 37 │ const { renderedInspectorWidth } = props; 2026-10-24T23:04:39.2341870Z 38 │ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0); 2026-10-24T23:04:39.2341923Z 39 │ 2026-10-24T23:04:39.2342005Z 40 │ const onClosed = props.onClosed; 2026-10-24T23:04:39.2342068Z 41 │ useEffect(() => { 2026-10-24T23:04:39.2342157Z 42 │ inspectorProgress.value = withTiming( 2026-10-24T23:04:39.2342240Z ·  ────────┬──────── 2026-10-24T23:04:39.2342390Z · ╰── `inspectorProgress` cannot be modified 2026-10-24T23:04:39.2342467Z 43 │ inspectorVisible ? 1 : 0, 2026-10-24T23:04:39.2342527Z ╰──── 2026-10-24T23:04:39.2342792Z  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-24T23:04:39.2343092Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:04:39.2343094Z 2026-10-24T23:04:39.2343250Z ⚠ react(immutability): This value cannot be modified 2026-10-24T23:04:39.2343406Z ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:67:7] 2026-10-24T23:04:39.2343499Z 37 │ const { renderedInspectorWidth } = props; 2026-10-24T23:04:39.2343629Z 38 │ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0); 2026-10-24T23:04:39.2343719Z ·  ──────────┬───────── 2026-10-24T23:04:39.2343930Z · ╰── `renderedContentWidth` originates here 2026-10-24T23:04:39.2344014Z 39 │ 2026-10-24T23:04:39.2344095Z 40 │ const onClosed = props.onClosed; 2026-10-24T23:04:39.2344159Z 41 │ useEffect(() => { 2026-10-24T23:04:39.2344246Z 42 │ inspectorProgress.value = withTiming( 2026-10-24T23:04:39.2344323Z 43 │ inspectorVisible ? 1 : 0, 2026-10-24T23:04:39.2344395Z 44 │ WORKSPACE_PANE_TIMING, 2026-10-24T23:04:39.2344461Z 45 │ (finished) => { 2026-10-24T23:04:39.2344596Z 46 │ if (finished === true && !inspectorVisible && onClosed !== undefined) { 2026-10-24T23:04:39.2344669Z 47 │ runOnJS(onClosed)(); 2026-10-24T23:04:39.2344728Z 48 │ } 2026-10-24T23:04:39.2344781Z 49 │ }, 2026-10-24T23:04:39.2344836Z 50 │ ); 2026-10-24T23:04:39.2344973Z 51 │ const targetWidth = inspectorVisible ? (inspectorWidth ?? 0) : 0; 2026-10-24T23:04:39.2345056Z 52 │ renderedInspectorWidth.set( 2026-10-24T23:04:39.2345196Z 53 │ resizing ? targetWidth : withTiming(targetWidth, WORKSPACE_PANE_TIMING), 2026-10-24T23:04:39.2345252Z 54 │ ); 2026-10-24T23:04:39.2345306Z 55 │ }, [ 2026-10-24T23:04:39.2345374Z 56 │ inspectorProgress, 2026-10-24T23:04:39.2345437Z 57 │ inspectorVisible, 2026-10-24T23:04:39.2345500Z 58 │ inspectorWidth, 2026-10-24T23:04:39.2345560Z 59 │ onClosed, 2026-10-24T23:04:39.2345632Z 60 │ renderedInspectorWidth, 2026-10-24T23:04:39.2345688Z 61 │ resizing, 2026-10-24T23:04:39.2345742Z 62 │ ]); 2026-10-24T23:04:39.2345794Z 63 │ 2026-10-24T23:04:39.2345854Z 64 │ useEffect(() => { 2026-10-24T23:04:39.2345946Z 65 │ const targetWidth = inspectorWidth ?? 0; 2026-10-24T23:04:39.2346038Z 66 │ if (!inspectorVisible || resizing) { 2026-10-24T23:04:39.2346140Z 67 │ renderedContentWidth.value = targetWidth; 2026-10-24T23:04:39.2346227Z ·  ──────────┬───────── 2026-10-24T23:04:39.2346391Z · ╰── `renderedContentWidth` cannot be modified 2026-10-24T23:04:39.2346450Z 68 │ return; 2026-10-24T23:04:39.2346503Z ╰──── 2026-10-24T23:04:39.2346758Z  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-24T23:04:39.2347105Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:04:39.2347108Z 2026-10-24T23:04:39.2347367Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:04:39.2347545Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:123:7] 2026-10-24T23:04:39.2347599Z 118 │ 2026-10-24T23:04:39.2347662Z 119 │ useEffect(() => { 2026-10-24T23:04:39.2347736Z ·  ────┬──── 2026-10-24T23:04:39.2347869Z · ╰── This is the containing effect 2026-10-24T23:04:39.2347952Z 120 │ if (orientationSettled) return; 2026-10-24T23:04:39.2348064Z 121 │ const orientation = getNativeShowcaseOrientation(); 2026-10-24T23:04:39.2348138Z 122 │ if (orientation === null) { 2026-10-24T23:04:39.2348219Z 123 │ setOrientationSettled(true); 2026-10-24T23:04:39.2348311Z ·  ──────────┬────────── 2026-10-24T23:04:39.2348483Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:04:39.2348602Z 124 │ return; 2026-10-24T23:04:39.2348695Z ╰──── 2026-10-24T23:04:39.2349287Z  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-24T23:04:39.2349600Z  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-24T23:04:39.2349605Z 2026-10-24T23:04:39.2349857Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:04:39.2350034Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:304:7] 2026-10-24T23:04:39.2350091Z 292 │ 2026-10-24T23:04:39.2350156Z 293 │ useEffect(() => { 2026-10-24T23:04:39.2350226Z ·  ────┬──── 2026-10-24T23:04:39.2350360Z · ╰── This is the containing effect 2026-10-24T23:04:39.2350420Z 294 │ if ( 2026-10-24T23:04:39.2350488Z 295 │ scene === null || 2026-10-24T23:04:39.2350564Z 296 │ requestedScene === null || 2026-10-24T23:04:39.2350641Z 297 │ scene !== requestedScene || 2026-10-24T23:04:39.2350705Z 298 │ !hasFixture || 2026-10-24T23:04:39.2350776Z 299 │ !orientationSettled || 2026-10-24T23:04:39.2350842Z 300 │ !themeApplied || 2026-10-24T23:04:39.2350959Z 301 │ (scene === "agent-activity" && !agentActivityStaged) || 2026-10-24T23:04:39.2351098Z 302 │ !isShowcaseNativeContentReady({ scene, themeId, renderSignal }) 2026-10-24T23:04:39.2351155Z 303 │ ) { 2026-10-24T23:04:39.2351228Z 304 │ setReadyScene(null); 2026-10-24T23:04:39.2351311Z ·  ──────┬────── 2026-10-24T23:04:39.2351483Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:04:39.2351544Z 305 │ return; 2026-10-24T23:04:39.2351597Z ╰──── 2026-10-24T23:04:39.2352185Z  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-24T23:04:39.2352505Z  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-24T23:04:39.2352511Z 2026-10-24T23:04:39.2352781Z ⚠ eslint(no-unused-vars): Variable 'lastOutcome' is declared but never used. Unused variables should start with a '_'. 2026-10-24T23:04:39.2352950Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:128:9] 2026-10-24T23:04:39.2353020Z 127 │ let cancelled = false; 2026-10-24T23:04:39.2353111Z 128 │ let lastOutcome: string | null = null; 2026-10-24T23:04:39.2353191Z ·  ─────┬───── 2026-10-24T23:04:39.2353323Z · ╰── 'lastOutcome' is declared here 2026-10-24T23:04:39.2353501Z 129 │ void retryShowcaseOperation(async () => applyNativeShowcaseOrientation(orientation), { 2026-10-24T23:04:39.2353554Z ╰──── 2026-10-24T23:04:39.2353710Z  help: Consider removing this declaration. 2026-10-24T23:04:39.2353745Z 2026-10-24T23:04:39.2353942Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T23:04:39.2354073Z ╭─[packages/client-runtime/src/state/filesystem.ts:3:8] 2026-10-24T23:04:39.2354147Z 2 │ AuthFilesystemReadScope, 2026-10-24T23:04:39.2354220Z 3 │ type AuthSessionState, 2026-10-24T23:04:39.2354304Z ·  ────────┬─────── 2026-10-24T23:04:39.2354450Z · ╰── 'AuthSessionState' is imported here 2026-10-24T23:04:39.2354524Z 4 │ type FilesystemBrowseEntry, 2026-10-24T23:04:39.2354578Z ╰──── 2026-10-24T23:04:39.2354673Z  help: Consider removing this import. 2026-10-24T23:04:39.2354676Z 2026-10-24T23:04:39.2354878Z ⚠ eslint(no-unused-vars): Type 'EnvironmentId' is imported but never used. 2026-10-24T23:04:39.2355019Z ╭─[packages/client-runtime/src/state/sharedSettings.ts:2:3] 2026-10-24T23:04:39.2355083Z 1 │ import type { 2026-10-24T23:04:39.2355147Z 2 │ EnvironmentId, 2026-10-24T23:04:39.2355222Z ·  ──────┬────── 2026-10-24T23:04:39.2355360Z · ╰── 'EnvironmentId' is imported here 2026-10-24T23:04:39.2355445Z 3 │ ExecutionEnvironmentCapabilities, 2026-10-24T23:04:39.2355495Z ╰──── 2026-10-24T23:04:39.2355591Z  help: Consider removing this import. 2026-10-24T23:04:39.2355594Z 2026-10-24T23:04:39.2355825Z ⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence. 2026-10-24T23:04:39.2355962Z ╭─[apps/web/src/components/chat/useComposerSend.ts:985:13] 2026-10-24T23:04:39.2356092Z 984 │ const changedBeforeDecline = draftChangedSinceSend(); 2026-10-24T23:04:39.2356335Z 985 │ ╭─▶ const pendingIdsBeforeDecline = pendingApprovalsRef.current.map( 2026-10-24T23:04:39.2356456Z 986 │ │ (approval) => approval.requestId, 2026-10-24T23:04:39.2356591Z 987 │ ╰─▶ ); 2026-10-24T23:04:39.2356729Z 988 │ const approvalResponding = approvalsToDecline.some((approval) => 2026-10-24T23:04:39.2356792Z ╰──── 2026-10-24T23:04:39.2356870Z  help: Switch to `Set` 2026-10-24T23:04:39.2356873Z 2026-10-24T23:04:39.2357165Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:04:39.2357386Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:79:5] 2026-10-24T23:04:39.2357467Z 76 │ 2026-10-24T23:04:39.2357533Z 77 │ useEffect(() => { 2026-10-24T23:04:39.2357605Z ·  ────┬──── 2026-10-24T23:04:39.2357735Z · ╰── This is the containing effect 2026-10-24T23:04:39.2357859Z 78 │ const { host, code } = parsePairingUrl(connectionPairingUrl); 2026-10-24T23:04:39.2357927Z 79 │ setHostInput(host); 2026-10-24T23:04:39.2358003Z ·  ──────┬───── 2026-10-24T23:04:39.2358173Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:04:39.2358238Z 80 │ setCodeInput(code); 2026-10-24T23:04:39.2358290Z ╰──── 2026-10-24T23:04:39.2358880Z  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-24T23:04:39.2359199Z  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-24T23:04:39.2359201Z 2026-10-24T23:04:39.2359456Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:04:39.2359625Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:89:5] 2026-10-24T23:04:39.2359680Z 82 │ 2026-10-24T23:04:39.2359745Z 83 │ useEffect(() => { 2026-10-24T23:04:39.2359815Z ·  ────┬──── 2026-10-24T23:04:39.2359947Z · ╰── This is the containing effect 2026-10-24T23:04:39.2360040Z 84 │ if (routePairingUrl.length === 0) { 2026-10-24T23:04:39.2360100Z 85 │ return; 2026-10-24T23:04:39.2360157Z 86 │ } 2026-10-24T23:04:39.2360207Z 87 │ 2026-10-24T23:04:39.2360324Z 88 │ const { host, code } = parsePairingUrl(routePairingUrl); 2026-10-24T23:04:39.2360389Z 89 │ setHostInput(host); 2026-10-24T23:04:39.2360463Z ·  ──────┬───── 2026-10-24T23:04:39.2360634Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:04:39.2360699Z 90 │ setCodeInput(code); 2026-10-24T23:04:39.2360751Z ╰──── 2026-10-24T23:04:39.2361336Z  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-24T23:04:39.2361656Z  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-24T23:04:39.2361658Z 2026-10-24T23:04:39.2361911Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:04:39.2362080Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:95:7] 2026-10-24T23:04:39.2362133Z 92 │ 2026-10-24T23:04:39.2362194Z 93 │ useEffect(() => { 2026-10-24T23:04:39.2362265Z ·  ────┬──── 2026-10-24T23:04:39.2362396Z · ╰── This is the containing effect 2026-10-24T23:04:39.2362527Z 94 │ if (pairingConnectionError) { 2026-10-24T23:04:39.2362626Z 95 │ setIsSubmitting(false); 2026-10-24T23:04:39.2362707Z ·  ───────┬─────── 2026-10-24T23:04:39.2362878Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:04:39.2362934Z 96 │ } 2026-10-24T23:04:39.2362983Z ╰──── 2026-10-24T23:04:39.2363565Z  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-24T23:04:39.2363884Z  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-24T23:04:39.2363889Z 2026-10-24T23:04:39.2364047Z ⚠ react(immutability): This value cannot be modified 2026-10-24T23:04:39.2364203Z ╭─[apps/mobile/src/features/connection/ConnectionStatusDot.tsx:58:7] 2026-10-24T23:04:39.2364297Z 53 │ function usePulseAnimation(pulse: boolean) { 2026-10-24T23:04:39.2364391Z 54 │ const pulseProgress = useSharedValue(0); 2026-10-24T23:04:39.2364473Z ·  ──────┬────── 2026-10-24T23:04:39.2364613Z · ╰── `pulseProgress` originates here 2026-10-24T23:04:39.2364663Z 55 │ 2026-10-24T23:04:39.2364728Z 56 │ useEffect(() => { 2026-10-24T23:04:39.2364791Z 57 │ if (pulse) { 2026-10-24T23:04:39.2364878Z 58 │ pulseProgress.value = withRepeat( 2026-10-24T23:04:39.2364959Z ·  ──────┬────── 2026-10-24T23:04:39.2365107Z · ╰── `pulseProgress` cannot be modified 2026-10-24T23:04:39.2365174Z 59 │ withTiming(1, { 2026-10-24T23:04:39.2365227Z ╰──── 2026-10-24T23:04:39.2365482Z  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-24T23:04:39.2365782Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:04:39.2365784Z 2026-10-24T23:04:39.2365972Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-24T23:04:39.2366099Z ╭─[packages/client-runtime/src/state/shell.ts:189:5] 2026-10-24T23:04:39.2366211Z 186 │ let waiting = yield* Ref.get(awaitingCompletion); 2026-10-24T23:04:39.2366282Z 187 │ let next = initial; 2026-10-24T23:04:39.2366353Z ·  ──┬─ 2026-10-24T23:04:39.2366478Z · ╰── From this accumulator 2026-10-24T23:04:39.2366556Z 188 │ let receivedSnapshot = false; 2026-10-24T23:04:39.2366634Z 189 │ for (const item of items) { 2026-10-24T23:04:39.2366703Z ·  ─┬─ 2026-10-24T23:04:39.2366820Z · ╰── For this loop 2026-10-24T23:04:39.2366932Z 190 │ if (item.kind === "synchronized") { 2026-10-24T23:04:39.2367000Z 191 │ waiting = false; 2026-10-24T23:04:39.2367091Z 192 │ if (Option.isSome(next.snapshot)) { 2026-10-24T23:04:39.2367209Z 193 │ next = { ...next, status: "live", error: Option.none() }; 2026-10-24T23:04:39.2367345Z ·  ───┬─── 2026-10-24T23:04:39.2367605Z · ╰── From this spread 2026-10-24T23:04:39.2367664Z 194 │ } 2026-10-24T23:04:39.2367717Z ╰──── 2026-10-24T23:04:39.2367870Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-24T23:04:39.2368029Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T23:04:39.2368032Z 2026-10-24T23:04:39.2368604Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-24T23:04:39.2368749Z ╭─[packages/client-runtime/src/operations/projects.ts:238:51] 2026-10-24T23:04:39.2368810Z 237 │ ): string { 2026-10-24T23:04:39.2368965Z 238 │ const folderName = workspaceRoot.split(/[\\/]/).filter(Boolean).at(-1) ?? ""; 2026-10-24T23:04:39.2369085Z ·  ────── 2026-10-24T23:04:39.2369221Z 239 │ return target.owner ? `${target.owner}/${folderName}` : folderName; 2026-10-24T23:04:39.2369275Z ╰──── 2026-10-24T23:04:39.2369441Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T23:04:39.2369443Z 2026-10-24T23:04:39.2369636Z ⚠ eslint(no-unused-vars): Identifier 'Arr' is imported but never used. 2026-10-24T23:04:39.2369768Z ╭─[packages/client-runtime/src/state/threadSort.ts:4:13] 2026-10-24T23:04:39.2369887Z 3 │ import type { EnvironmentThreadShell } from "./models.ts"; 2026-10-24T23:04:39.2369965Z 4 │ import * as Arr from "effect/Array"; 2026-10-24T23:04:39.2370038Z ·  ─┬─ 2026-10-24T23:04:39.2370169Z · ╰── 'Arr' is imported here 2026-10-24T23:04:39.2370256Z 5 │ import * as Order from "effect/Order"; 2026-10-24T23:04:39.2370307Z ╰──── 2026-10-24T23:04:39.2370406Z  help: Consider removing this import. 2026-10-24T23:04:39.2370409Z 2026-10-24T23:04:39.2370600Z ⚠ eslint(no-unused-vars): Identifier 'Order' is imported but never used. 2026-10-24T23:04:39.2370732Z ╭─[packages/client-runtime/src/state/threadSort.ts:5:13] 2026-10-24T23:04:39.2370810Z 4 │ import * as Arr from "effect/Array"; 2026-10-24T23:04:39.2370892Z 5 │ import * as Order from "effect/Order"; 2026-10-24T23:04:39.2370967Z ·  ──┬── 2026-10-24T23:04:39.2371098Z · ╰── 'Order' is imported here 2026-10-24T23:04:39.2371149Z 6 │ 2026-10-24T23:04:39.2371203Z ╰──── 2026-10-24T23:04:39.2371305Z  help: Consider removing this import. 2026-10-24T23:04:39.2371310Z 2026-10-24T23:04:39.2371566Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:04:39.2371705Z ╭─[apps/mobile/src/features/files/FileTreeBrowser.tsx:155:5] 2026-10-24T23:04:39.2371759Z 150 │ 2026-10-24T23:04:39.2371825Z 151 │ useEffect(() => { 2026-10-24T23:04:39.2371899Z ·  ────┬──── 2026-10-24T23:04:39.2372026Z · ╰── This is the containing effect 2026-10-24T23:04:39.2372111Z 152 │ if (!controlledSelectedPath) { 2026-10-24T23:04:39.2372174Z 153 │ return; 2026-10-24T23:04:39.2372230Z 154 │ } 2026-10-24T23:04:39.2372313Z 155 │ setExpandedPaths((current) => { 2026-10-24T23:04:39.2372393Z ·  ────────┬─────── 2026-10-24T23:04:39.2372639Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:04:39.2372802Z 156 │ const ancestors = ancestorPaths(controlledSelectedPath); 2026-10-24T23:04:39.2372854Z ╰──── 2026-10-24T23:04:39.2373444Z  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-24T23:04:39.2373762Z  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-24T23:04:39.2373764Z 2026-10-24T23:04:39.2374231Z ⚠ 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-24T23:04:39.2374389Z ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1680:7] 2026-10-24T23:04:39.2374479Z 1679 │ yield* harness.replaceSession; 2026-10-24T23:04:39.2374695Z 1680 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T23:04:39.2374850Z 1681 │ │ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) { 2026-10-24T23:04:39.2374940Z 1682 │ │ break; 2026-10-24T23:04:39.2375018Z 1683 │ │ } 2026-10-24T23:04:39.2375127Z 1684 │ │ yield* Effect.yieldNow; 2026-10-24T23:04:39.2375268Z 1685 │ ╰─▶ } 2026-10-24T23:04:39.2375347Z 1686 │ yield* Queue.offer( 2026-10-24T23:04:39.2375398Z ╰──── 2026-10-24T23:04:39.2375401Z 2026-10-24T23:04:39.2375861Z ⚠ 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-24T23:04:39.2376016Z ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1789:7] 2026-10-24T23:04:39.2376106Z 1788 │ yield* harness.replaceSession; 2026-10-24T23:04:39.2376313Z 1789 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T23:04:39.2376476Z 1790 │ │ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) break; 2026-10-24T23:04:39.2376586Z 1791 │ │ yield* Effect.yieldNow; 2026-10-24T23:04:39.2376722Z 1792 │ ╰─▶ } 2026-10-24T23:04:39.2376875Z 1793 │ expect(yield* Ref.get(harness.subscriptionCount)).toBe(2); 2026-10-24T23:04:39.2376960Z ╰──── 2026-10-24T23:04:39.2376963Z 2026-10-24T23:04:39.2377417Z ⚠ 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-24T23:04:39.2377563Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:169:7] 2026-10-24T23:04:39.2377627Z 168 │ }); 2026-10-24T23:04:39.2377870Z 169 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T23:04:39.2378100Z 170 │ │ if ((yield* SubscriptionRef.get(shellState)).status === "synchronizing") break; 2026-10-24T23:04:39.2378210Z 171 │ │ yield* Effect.yieldNow; 2026-10-24T23:04:39.2378341Z 172 │ ╰─▶ } 2026-10-24T23:04:39.2378397Z 173 │ 2026-10-24T23:04:39.2378450Z ╰──── 2026-10-24T23:04:39.2378452Z 2026-10-24T23:04:39.2378905Z ⚠ 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-24T23:04:39.2379057Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:178:7] 2026-10-24T23:04:39.2379172Z 177 │ yield* Deferred.succeed(releaseSave, undefined); 2026-10-24T23:04:39.2379362Z 178 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T23:04:39.2379500Z 179 │ │ if ((yield* Ref.get(saved)).length > 0) break; 2026-10-24T23:04:39.2379607Z 180 │ │ yield* Effect.yieldNow; 2026-10-24T23:04:39.2379740Z 181 │ ╰─▶ } 2026-10-24T23:04:39.2379792Z 182 │ 2026-10-24T23:04:39.2379847Z ╰──── 2026-10-24T23:04:39.2379849Z 2026-10-24T23:04:39.2380305Z ⚠ 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-24T23:04:39.2380451Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:307:7] 2026-10-24T23:04:39.2380578Z 306 │ yield* Deferred.succeed(releaseUnenrichedSave, undefined); 2026-10-24T23:04:39.2380768Z 307 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T23:04:39.2380892Z 308 │ │ const values = yield* Ref.get(saved); 2026-10-24T23:04:39.2381088Z 309 │ │ if (values.length > 0 && values.at(-1)?.projects[0]?.repositoryIdentity != null) { 2026-10-24T23:04:39.2381178Z 310 │ │ break; 2026-10-24T23:04:39.2381255Z 311 │ │ } 2026-10-24T23:04:39.2381363Z 312 │ │ yield* Effect.yieldNow; 2026-10-24T23:04:39.2381499Z 313 │ ╰─▶ } 2026-10-24T23:04:39.2381558Z 314 │ 2026-10-24T23:04:39.2381608Z ╰──── 2026-10-24T23:04:39.2381610Z 2026-10-24T23:04:39.2381813Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:04:39.2381962Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:257:7] 2026-10-24T23:04:39.2382059Z 256 │ return () => cancelAnimationFrame(frame); 2026-10-24T23:04:39.2382136Z 257 │ }, [props.path, targetIndex]); 2026-10-24T23:04:39.2382216Z ·  ─────┬──── 2026-10-24T23:04:39.2382364Z · ╰── Unnecessary dependency `props.path` 2026-10-24T23:04:39.2382419Z 258 │ 2026-10-24T23:04:39.2382469Z ╰──── 2026-10-24T23:04:39.2382809Z  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-24T23:04:39.2383149Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.2383152Z 2026-10-24T23:04:39.2383345Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T23:04:39.2383494Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:293:23] 2026-10-24T23:04:39.2383566Z 292 │ 2026-10-24T23:04:39.2384668Z ·  ─────────── 2026-10-24T23:04:39.2384735Z 310 │ {body} 2026-10-24T23:04:39.2384786Z ╰──── 2026-10-24T23:04:39.2384930Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T23:04:39.2384932Z 2026-10-24T23:04:39.2385392Z ⚠ 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-24T23:04:39.2385530Z ╭─[packages/client-runtime/src/rpc/session.test.ts:226:3] 2026-10-24T23:04:39.2385584Z 225 │ ) { 2026-10-24T23:04:39.2385790Z 226 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T23:04:39.2385904Z 227 │ │ const socket = sockets[index]; 2026-10-24T23:04:39.2385994Z 228 │ │ if (socket) { 2026-10-24T23:04:39.2386087Z 229 │ │ return socket; 2026-10-24T23:04:39.2386165Z 230 │ │ } 2026-10-24T23:04:39.2386318Z 231 │ │ yield* Effect.yieldNow; 2026-10-24T23:04:39.2386477Z 232 │ ╰─▶ } 2026-10-24T23:04:39.2386648Z 233 │ return yield* Effect.die(new Error("Expected the RPC protocol to create a websocket.")); 2026-10-24T23:04:39.2386701Z ╰──── 2026-10-24T23:04:39.2386703Z 2026-10-24T23:04:39.2387199Z ⚠ 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-24T23:04:39.2387333Z ╭─[packages/client-runtime/src/rpc/session.test.ts:240:3] 2026-10-24T23:04:39.2387391Z 239 │ ) { 2026-10-24T23:04:39.2387589Z 240 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T23:04:39.2387809Z 241 │ │ const request = socket.sent.map((message) => decodeJson(message)).filter(isRpcRequest)[index]; 2026-10-24T23:04:39.2387905Z 242 │ │ if (request) { 2026-10-24T23:04:39.2388000Z 243 │ │ return request; 2026-10-24T23:04:39.2388072Z 244 │ │ } 2026-10-24T23:04:39.2388174Z 245 │ │ yield* Effect.yieldNow; 2026-10-24T23:04:39.2388303Z 246 │ ╰─▶ } 2026-10-24T23:04:39.2388469Z 247 │ return yield* Effect.die(new Error("Expected the RPC protocol to send a request.")); 2026-10-24T23:04:39.2388518Z ╰──── 2026-10-24T23:04:39.2388520Z 2026-10-24T23:04:39.2388983Z ⚠ 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-24T23:04:39.2389120Z ╭─[packages/client-runtime/src/rpc/client.test.ts:131:9] 2026-10-24T23:04:39.2389182Z 130 │ ) { 2026-10-24T23:04:39.2389393Z 131 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T23:04:39.2389515Z 132 │ │ if (subscriptions.length >= count) { 2026-10-24T23:04:39.2389608Z 133 │ │ return; 2026-10-24T23:04:39.2389692Z 134 │ │ } 2026-10-24T23:04:39.2389803Z 135 │ │ yield* Effect.yieldNow; 2026-10-24T23:04:39.2389937Z 136 │ ╰─▶ } 2026-10-24T23:04:39.2390107Z 137 │ return yield* Effect.die(new Error(`Expected ${count} durable subscriptions.`)); 2026-10-24T23:04:39.2390165Z ╰──── 2026-10-24T23:04:39.2390167Z 2026-10-24T23:04:39.2390620Z ⚠ 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-24T23:04:39.2390749Z ╭─[packages/client-runtime/src/rpc/client.test.ts:252:7] 2026-10-24T23:04:39.2390911Z 251 │ yield* SubscriptionRef.set(activeSession, Option.some(session(firstClient))); 2026-10-24T23:04:39.2391165Z 252 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 1; attempt += 1) { 2026-10-24T23:04:39.2391272Z 253 │ │ yield* Effect.yieldNow; 2026-10-24T23:04:39.2391454Z 254 │ ╰─▶ } 2026-10-24T23:04:39.2391609Z 255 │ yield* SubscriptionRef.set(activeSession, Option.none()); 2026-10-24T23:04:39.2391664Z ╰──── 2026-10-24T23:04:39.2391666Z 2026-10-24T23:04:39.2392120Z ⚠ 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-24T23:04:39.2392251Z ╭─[packages/client-runtime/src/rpc/client.test.ts:258:7] 2026-10-24T23:04:39.2392303Z 257 │ 2026-10-24T23:04:39.2392552Z 258 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-24T23:04:39.2392664Z 259 │ │ yield* Effect.yieldNow; 2026-10-24T23:04:39.2392799Z 260 │ ╰─▶ } 2026-10-24T23:04:39.2392904Z 261 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-24T23:04:39.2392958Z ╰──── 2026-10-24T23:04:39.2392960Z 2026-10-24T23:04:39.2393414Z ⚠ 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-24T23:04:39.2393545Z ╭─[packages/client-runtime/src/rpc/client.test.ts:322:7] 2026-10-24T23:04:39.2393608Z 321 │ ); 2026-10-24T23:04:39.2393866Z 322 │ ╭─▶ for (let attempt = 0; attempt < 100 && observedFailures.length < 1; attempt += 1) { 2026-10-24T23:04:39.2393976Z 323 │ │ yield* Effect.yieldNow; 2026-10-24T23:04:39.2394108Z 324 │ ╰─▶ } 2026-10-24T23:04:39.2394163Z 325 │ 2026-10-24T23:04:39.2394214Z ╰──── 2026-10-24T23:04:39.2394216Z 2026-10-24T23:04:39.2394672Z ⚠ 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-24T23:04:39.2394804Z ╭─[packages/client-runtime/src/rpc/client.test.ts:330:7] 2026-10-24T23:04:39.2394971Z 329 │ yield* SubscriptionRef.set(activeSession, Option.some(session(secondClient))); 2026-10-24T23:04:39.2395227Z 330 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-24T23:04:39.2395331Z 331 │ │ yield* Effect.yieldNow; 2026-10-24T23:04:39.2395461Z 332 │ ╰─▶ } 2026-10-24T23:04:39.2395567Z 333 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-24T23:04:39.2395620Z ╰──── 2026-10-24T23:04:39.2395622Z 2026-10-24T23:04:39.2395788Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T23:04:39.2395914Z ╭─[apps/web/src/hooks/useThreadActions.ts:821:56] 2026-10-24T23:04:39.2396018Z 820 │ const resolved = resolveThreadTarget(target); 2026-10-24T23:04:39.2396177Z 821 │ if (resolved && !canSnooze(resolved.thread, { now: new Date().toISOString() })) { 2026-10-24T23:04:39.2396354Z ·  ─────┬──── 2026-10-24T23:04:39.2396552Z · ╰── Cannot call impure function 2026-10-24T23:04:39.2396636Z 822 │ return AsyncResult.failure( 2026-10-24T23:04:39.2396690Z ╰──── 2026-10-24T23:04:39.2396988Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T23:04:39.2397280Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T23:04:39.2397282Z 2026-10-24T23:04:39.2397447Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T23:04:39.2397572Z ╭─[apps/web/src/hooks/useThreadActions.ts:709:46] 2026-10-24T23:04:39.2397647Z 708 │ const wokeAt = resolved 2026-10-24T23:04:39.2397779Z 709 │ ? threadWokeAt(resolved.thread, { now: new Date().toISOString() }) 2026-10-24T23:04:39.2397895Z ·  ─────┬──── 2026-10-24T23:04:39.2398056Z · ╰── Cannot call impure function 2026-10-24T23:04:39.2398118Z 710 │ : null; 2026-10-24T23:04:39.2398168Z ╰──── 2026-10-24T23:04:39.2398440Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T23:04:39.2398728Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T23:04:39.2398731Z 2026-10-24T23:04:39.2398937Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T23:04:39.2399069Z ╭─[packages/client-runtime/src/state/usageAccess.ts:3:8] 2026-10-24T23:04:39.2399144Z 2 │ AuthDiagnosticsReadScope, 2026-10-24T23:04:39.2399220Z 3 │ type AuthSessionState, 2026-10-24T23:04:39.2399307Z ·  ────────┬─────── 2026-10-24T23:04:39.2399452Z · ╰── 'AuthSessionState' is imported here 2026-10-24T23:04:39.2399523Z 4 │ sessionGrantsScope, 2026-10-24T23:04:39.2399575Z ╰──── 2026-10-24T23:04:39.2399675Z  help: Consider removing this import. 2026-10-24T23:04:39.2399677Z 2026-10-24T23:04:39.2400044Z ⚠ 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-24T23:04:39.2400176Z ╭─[apps/server/src/assets/AssetAccess.test.ts:975:35] 2026-10-24T23:04:39.2400328Z 974 │ // Every client and server release spells the resource this way on the wire. 2026-10-24T23:04:39.2400483Z 975 │ const { resource } = yield* Schema.decodeUnknownEffect(AssetCreateUrlInput)({ 2026-10-24T23:04:39.2400611Z ·  ────────────────────────── 2026-10-24T23:04:39.2400727Z 976 │ resource: { _tag: "github-media", cwd: "/repo", url }, 2026-10-24T23:04:39.2400780Z ╰──── 2026-10-24T23:04:39.2400782Z 2026-10-24T23:04:39.2401225Z ⚠ 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-24T23:04:39.2401408Z ╭─[apps/server/src/assets/AssetAccess.test.ts:1012:32] 2026-10-24T23:04:39.2401573Z 1011 │ expect(error._tag).toBe("AssetGitHubMediaUrlValidationError"); 2026-10-24T23:04:39.2401761Z 1012 │ const encoded = yield* Schema.encodeEffect(Schema.fromJsonString(AssetAccessError))(error); 2026-10-24T23:04:39.2401877Z ·  ─────────────────── 2026-10-24T23:04:39.2401973Z 1013 │ expect(encoded).not.toContain(url); 2026-10-24T23:04:39.2402024Z ╰──── 2026-10-24T23:04:39.2402030Z 2026-10-24T23:04:39.2402194Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T23:04:39.2402345Z ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:372:47] 2026-10-24T23:04:39.2402479Z 371 │ const { open, onOpenChange, onSnooze, timestampFormat } = props; 2026-10-24T23:04:39.2402640Z 372 │ const presets = open ? resolveSnoozePresets(new Date(), timestampFormat) : []; 2026-10-24T23:04:39.2402754Z ·  ─────┬──── 2026-10-24T23:04:39.2402918Z · ╰── Cannot call impure function 2026-10-24T23:04:39.2402981Z 373 │ return ( 2026-10-24T23:04:39.2403033Z ╰──── 2026-10-24T23:04:39.2403303Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T23:04:39.2403598Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T23:04:39.2403601Z 2026-10-24T23:04:39.2403777Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T23:04:39.2403929Z ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:853:39] 2026-10-24T23:04:39.2404020Z 852 │ if (snoozeGateClock.thread !== thread) { 2026-10-24T23:04:39.2404148Z 853 │ setSnoozeGateClock({ thread, now: new Date().toISOString() }); 2026-10-24T23:04:39.2404258Z ·  ─────┬──── 2026-10-24T23:04:39.2404414Z · ╰── Cannot call impure function 2026-10-24T23:04:39.2404468Z 854 │ } 2026-10-24T23:04:39.2404522Z ╰──── 2026-10-24T23:04:39.2404794Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T23:04:39.2405087Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T23:04:39.2405093Z 2026-10-24T23:04:39.2405298Z ⚠ eslint(no-unused-vars): Function 'describeSchedule' is declared but never used. 2026-10-24T23:04:39.2405422Z ╭─[apps/server/src/scheduledTasks/Schedule.ts:79:10] 2026-10-24T23:04:39.2405474Z 78 │ 2026-10-24T23:04:39.2405611Z 79 │ function describeSchedule(schedule: ScheduledTaskSchedule): string { 2026-10-24T23:04:39.2405699Z ·  ────────┬─────── 2026-10-24T23:04:39.2405845Z · ╰── 'describeSchedule' is declared here 2026-10-24T23:04:39.2405955Z 80 │ if (schedule.type === "webhook") return "On webhook"; 2026-10-24T23:04:39.2406008Z ╰──── 2026-10-24T23:04:39.2406114Z  help: Consider removing this declaration. 2026-10-24T23:04:39.2406162Z 2026-10-24T23:04:39.2406649Z ⚠ 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-24T23:04:39.2406832Z ╭─[packages/client-runtime/src/connection/supervisor.test.ts:135:3] 2026-10-24T23:04:39.2406949Z 134 │ let lastState = yield* SubscriptionRef.get(state); 2026-10-24T23:04:39.2407164Z 135 │ ╭─▶ for (let iteration = 0; iteration < 100; iteration += 1) { 2026-10-24T23:04:39.2407301Z 136 │ │ lastState = yield* SubscriptionRef.get(state); 2026-10-24T23:04:39.2407404Z 137 │ │ if (predicate(lastState)) { 2026-10-24T23:04:39.2407508Z 138 │ │ return lastState; 2026-10-24T23:04:39.2407587Z 139 │ │ } 2026-10-24T23:04:39.2407691Z 140 │ │ yield* Effect.yieldNow; 2026-10-24T23:04:39.2407817Z 141 │ ╰─▶ } 2026-10-24T23:04:39.2407894Z 142 │ return yield* Effect.die( 2026-10-24T23:04:39.2407948Z ╰──── 2026-10-24T23:04:39.2407950Z 2026-10-24T23:04:39.2408462Z ⚠ 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-24T23:04:39.2408642Z ╭─[apps/server/src/scheduledTasks/ScheduledTaskService.webhook.test.ts:521:13] 2026-10-24T23:04:39.2408714Z 520 │ })).delivery; 2026-10-24T23:04:39.2408914Z 521 │ ╭─▶ while (delivery.outcome === "accepted") { 2026-10-24T23:04:39.2409030Z 522 │ │ yield* Effect.yieldNow; 2026-10-24T23:04:39.2409176Z 523 │ │ delivery = (yield* service.getWebhookDelivery({ 2026-10-24T23:04:39.2409280Z 524 │ │ id: task.id, 2026-10-24T23:04:39.2409396Z 525 │ │ deliveryId: deliveryId!, 2026-10-24T23:04:39.2409497Z 526 │ │ })).delivery; 2026-10-24T23:04:39.2409635Z 527 │ ╰─▶ } 2026-10-24T23:04:39.2409753Z 528 │ assert.equal(delivery.outcome, "dispatch_failed"); 2026-10-24T23:04:39.2409806Z ╰──── 2026-10-24T23:04:39.2409809Z 2026-10-24T23:04:39.2410006Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T23:04:39.2410126Z ╭─[apps/mobile/src/lib/useHoverGesture.ts:8:15] 2026-10-24T23:04:39.2410181Z 7 │ () => 2026-10-24T23:04:39.2410248Z 8 │ Gesture.Hover() 2026-10-24T23:04:39.2410326Z ·  ──┬── 2026-10-24T23:04:39.2410462Z · ╰── `Hover` may be a component 2026-10-24T23:04:39.2410534Z 9 │ .manualActivation(true) 2026-10-24T23:04:39.2412704Z ╰──── 2026-10-24T23:04:39.2412990Z  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-24T23:04:39.2413516Z  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-24T23:04:39.2413565Z 2026-10-24T23:04:39.2413778Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T23:04:39.2413887Z ╭─[apps/mobile/src/Stack.tsx:1079:21] 2026-10-24T23:04:39.2413953Z 1078 │ } 2026-10-24T23:04:39.2414229Z ·  ───────────────────────────────────────────── 2026-10-24T23:04:39.2414315Z 1080 │ screenOptions={({ route }) => 2026-10-24T23:04:39.2414370Z ╰──── 2026-10-24T23:04:39.2414735Z  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-24T23:04:39.2414741Z 2026-10-24T23:04:39.2414951Z ⚠ eslint(no-unused-vars): Function 'summarizePayload' is declared but never used. 2026-10-24T23:04:39.2415087Z ╭─[packages/provider-acp/src/server/nativeLogging.ts:22:10] 2026-10-24T23:04:39.2415142Z 21 │ 2026-10-24T23:04:39.2415301Z 22 │ function summarizePayload(payload: unknown): Readonly> { 2026-10-24T23:04:39.2415388Z ·  ────────┬─────── 2026-10-24T23:04:39.2415536Z · ╰── 'summarizePayload' is declared here 2026-10-24T23:04:39.2415641Z 23 │ if (payload === null) return { valueType: "null" }; 2026-10-24T23:04:39.2415694Z ╰──── 2026-10-24T23:04:39.2415801Z  help: Consider removing this declaration. 2026-10-24T23:04:39.2415803Z 2026-10-24T23:04:39.2416006Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:04:39.2416150Z ╭─[apps/mobile/src/state/use-thread-outbox-drain.ts:1321:5] 2026-10-24T23:04:39.2416231Z 1320 │ queuedMessagesByThreadKey, 2026-10-24T23:04:39.2416294Z 1321 │ retryTick, 2026-10-24T23:04:39.2416366Z ·  ────┬──── 2026-10-24T23:04:39.2416507Z · ╰── Unnecessary dependency `retryTick` 2026-10-24T23:04:39.2416580Z 1322 │ restoreQueuedMessage, 2026-10-24T23:04:39.2416635Z ╰──── 2026-10-24T23:04:39.2416960Z  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-24T23:04:39.2417324Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.2417355Z 2026-10-24T23:04:39.2417550Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T23:04:39.2417697Z ╭─[apps/mobile/modules/t3-source-text/src/SourceText.tsx:36:9] 2026-10-24T23:04:39.2417783Z 35 │ { 2026-10-24T23:04:39.2420368Z  84 │ │ const fetchImplementation = options.fetchImplementation ?? fetch; 2026-10-24T23:04:39.2420502Z  85 │ │ const connections = new Map(); 2026-10-24T23:04:39.2420572Z  86 │ │ 2026-10-24T23:04:39.2420785Z  87 │ │ const connectionFor = (connectionId: string): Effect.Effect => 2026-10-24T23:04:39.2420891Z  88 │ │ Effect.suspend(() => { 2026-10-24T23:04:39.2421030Z  89 │ │ const connection = connections.get(connectionId); 2026-10-24T23:04:39.2421144Z  90 │ │ return connection === undefined 2026-10-24T23:04:39.2421354Z  91 │ │ ? Effect.fail(new AcpMcpOverAcpError(`Unknown MCP-over-ACP connection "${connectionId}".`)) 2026-10-24T23:04:39.2421466Z  92 │ │ : Effect.succeed(connection); 2026-10-24T23:04:39.2421539Z  93 │ │ }); 2026-10-24T23:04:39.2421610Z  94 │ │ 2026-10-24T23:04:39.2421699Z  95 │ │ const send = ( 2026-10-24T23:04:39.2421799Z  96 │ │ connection: Connection, 2026-10-24T23:04:39.2421890Z  97 │ │ message: unknown, 2026-10-24T23:04:39.2422096Z  98 │ │ ): Effect.Effect, AcpMcpOverAcpError> => 2026-10-24T23:04:39.2422244Z  99 │ │ connection.mutex.withPermits(1)( 2026-10-24T23:04:39.2422352Z 100 │ │ Effect.gen(function* () { 2026-10-24T23:04:39.2422474Z 101 │ │ const body = JSON.stringify(message); 2026-10-24T23:04:39.2422617Z 102 │ │ if (Buffer.byteLength(body) > MAX_MESSAGE_BYTES) { 2026-10-24T23:04:39.2422827Z 103 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("MCP-over-ACP message exceeds 8 MiB.")); 2026-10-24T23:04:39.2422907Z 104 │ │ } 2026-10-24T23:04:39.2423041Z 105 │ │ const response = yield* Effect.tryPromise({ 2026-10-24T23:04:39.2423144Z 106 │ │ try: (signal) => 2026-10-24T23:04:39.2423278Z 107 │ │ fetchImplementation(options.endpoint, { 2026-10-24T23:04:39.2423382Z 108 │ │ method: "POST", 2026-10-24T23:04:39.2423474Z 109 │ │ signal, 2026-10-24T23:04:39.2423570Z 110 │ │ headers: { 2026-10-24T23:04:39.2423698Z 111 │ │ "content-type": "application/json", 2026-10-24T23:04:39.2423843Z 112 │ │ accept: "application/json, text/event-stream", 2026-10-24T23:04:39.2423976Z 113 │ │ authorization: options.authorization, 2026-10-24T23:04:39.2424099Z 114 │ │ ...(connection.sessionId === null 2026-10-24T23:04:39.2424195Z 115 │ │ ? {} 2026-10-24T23:04:39.2424347Z 116 │ │ : { "mcp-session-id": connection.sessionId }), 2026-10-24T23:04:39.2424484Z 117 │ │ ...(connection.protocolVersion === null 2026-10-24T23:04:39.2424575Z 118 │ │ ? {} 2026-10-24T23:04:39.2424741Z 119 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-24T23:04:39.2424828Z 120 │ │ }, 2026-10-24T23:04:39.2424919Z 121 │ │ body, 2026-10-24T23:04:39.2425000Z 122 │ │ }), 2026-10-24T23:04:39.2425102Z 123 │ │ catch: bridgeError, 2026-10-24T23:04:39.2425184Z 124 │ │ }); 2026-10-24T23:04:39.2425403Z 125 │ │ connection.sessionId = response.headers.get("mcp-session-id") ?? connection.sessionId; 2026-10-24T23:04:39.2425504Z 126 │ │ if (!response.ok) { 2026-10-24T23:04:39.2425612Z 127 │ │ yield* Effect.promise( 2026-10-24T23:04:39.2425793Z 128 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-24T23:04:39.2425876Z 129 │ │ ); 2026-10-24T23:04:39.2425987Z 130 │ │ return yield* Effect.fail( 2026-10-24T23:04:39.2426201Z 131 │ │ new AcpMcpOverAcpError(`T3 Code MCP endpoint responded with HTTP ${response.status}.`), 2026-10-24T23:04:39.2426282Z 132 │ │ ); 2026-10-24T23:04:39.2426361Z 133 │ │ } 2026-10-24T23:04:39.2426618Z 134 │ │ const payloads = [...(yield* Stream.runCollect(responsePayloads(response, bridgeError)))]; 2026-10-24T23:04:39.2426769Z 135 │ │ for (const payload of payloads) { 2026-10-24T23:04:39.2427023Z 136 │ │ connection.protocolVersion = protocolVersionOf(payload) ?? connection.protocolVersion; 2026-10-24T23:04:39.2427102Z 137 │ │ } 2026-10-24T23:04:39.2427199Z 138 │ │ return payloads; 2026-10-24T23:04:39.2427322Z 139 │ │ }).pipe(Effect.mapError(bridgeError)), 2026-10-24T23:04:39.2427400Z 140 │ │ ); 2026-10-24T23:04:39.2427471Z 141 │ │ 2026-10-24T23:04:39.2427643Z 142 │ │ const disconnect = Effect.fn("mcpOverAcpBridge.disconnect")(function* ( 2026-10-24T23:04:39.2427776Z 143 │ │ request: AcpSchema.DisconnectMcpRequest, 2026-10-24T23:04:39.2427966Z 144 │ │ ): Effect.fn.Return { 2026-10-24T23:04:39.2428126Z 145 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T23:04:39.2428255Z 146 │ │ connections.delete(request.connectionId); 2026-10-24T23:04:39.2428376Z 147 │ │ const sessionId = connection.sessionId; 2026-10-24T23:04:39.2428479Z 148 │ │ if (sessionId !== null) { 2026-10-24T23:04:39.2428608Z 149 │ │ const response = yield* Effect.tryPromise({ 2026-10-24T23:04:39.2428706Z 150 │ │ try: (signal) => 2026-10-24T23:04:39.2428833Z 151 │ │ fetchImplementation(options.endpoint, { 2026-10-24T23:04:39.2428941Z 152 │ │ method: "DELETE", 2026-10-24T23:04:39.2429034Z 153 │ │ signal, 2026-10-24T23:04:39.2429127Z 154 │ │ headers: { 2026-10-24T23:04:39.2429254Z 155 │ │ authorization: options.authorization, 2026-10-24T23:04:39.2429374Z 156 │ │ "mcp-session-id": sessionId, 2026-10-24T23:04:39.2429508Z 157 │ │ ...(connection.protocolVersion === null 2026-10-24T23:04:39.2429600Z 158 │ │ ? {} 2026-10-24T23:04:39.2429759Z 159 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-24T23:04:39.2429845Z 160 │ │ }, 2026-10-24T23:04:39.2429929Z 161 │ │ }), 2026-10-24T23:04:39.2430035Z 162 │ │ catch: bridgeError, 2026-10-24T23:04:39.2430115Z 163 │ │ }); 2026-10-24T23:04:39.2430249Z 164 │ │ if (!response.ok && response.status !== 404) { 2026-10-24T23:04:39.2430359Z 165 │ │ return yield* Effect.fail( 2026-10-24T23:04:39.2430468Z 166 │ │ new AcpMcpOverAcpError( 2026-10-24T23:04:39.2430648Z 167 │ │ `T3 Code MCP endpoint rejected disconnect with HTTP ${response.status}.`, 2026-10-24T23:04:39.2430731Z 168 │ │ ), 2026-10-24T23:04:39.2430811Z 169 │ │ ); 2026-10-24T23:04:39.2430890Z 170 │ │ } 2026-10-24T23:04:39.2430992Z 171 │ │ yield* Effect.promise( 2026-10-24T23:04:39.2431216Z 172 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-24T23:04:39.2431338Z 173 │ │ ); 2026-10-24T23:04:39.2431414Z 174 │ │ } 2026-10-24T23:04:39.2431494Z 175 │ │ return {}; 2026-10-24T23:04:39.2431570Z 176 │ │ }); 2026-10-24T23:04:39.2431639Z 177 │ │ 2026-10-24T23:04:39.2431719Z 178 │ │ return { 2026-10-24T23:04:39.2431892Z 179 │ │ connect: Effect.fn("mcpOverAcpBridge.connect")(function* (request) { 2026-10-24T23:04:39.2432016Z 180 │ │ if (request.serverId !== "t3-code") { 2026-10-24T23:04:39.2432126Z 181 │ │ return yield* Effect.fail( 2026-10-24T23:04:39.2432317Z 182 │ │ new AcpMcpOverAcpError(`Unknown ACP MCP server "${request.serverId}".`), 2026-10-24T23:04:39.2432396Z 183 │ │ ); 2026-10-24T23:04:39.2432472Z 184 │ │ } 2026-10-24T23:04:39.2432601Z 185 │ │ if (connections.size >= MAX_CONNECTIONS) { 2026-10-24T23:04:39.2432810Z 186 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("Too many MCP-over-ACP connections.")); 2026-10-24T23:04:39.2432884Z 187 │ │ } 2026-10-24T23:04:39.2433039Z 188 │ │ const connectionId = yield* options.allocateConnectionId; 2026-10-24T23:04:39.2433157Z 189 │ │ connections.set(connectionId, { 2026-10-24T23:04:39.2433275Z 190 │ │ mutex: yield* Semaphore.make(1), 2026-10-24T23:04:39.2433376Z 191 │ │ sessionId: null, 2026-10-24T23:04:39.2433484Z 192 │ │ protocolVersion: null, 2026-10-24T23:04:39.2433586Z 193 │ │ nextRequestId: 0, 2026-10-24T23:04:39.2433671Z 194 │ │ }); 2026-10-24T23:04:39.2433773Z 195 │ │ return { connectionId }; 2026-10-24T23:04:39.2433850Z 196 │ │ }), 2026-10-24T23:04:39.2434020Z 197 │ │ message: Effect.fn("mcpOverAcpBridge.message")(function* (request) { 2026-10-24T23:04:39.2434187Z 198 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T23:04:39.2434308Z 199 │ │ const id = ++connection.nextRequestId; 2026-10-24T23:04:39.2434437Z 200 │ │ const payloads = yield* send(connection, { 2026-10-24T23:04:39.2434541Z 201 │ │ jsonrpc: "2.0", 2026-10-24T23:04:39.2434624Z 202 │ │ id, 2026-10-24T23:04:39.2434729Z 203 │ │ method: request.method, 2026-10-24T23:04:39.2434884Z 204 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-24T23:04:39.2434961Z 205 │ │ }); 2026-10-24T23:04:39.2435147Z 206 │ │ const response = payloads.find((payload) => asEnvelope(payload)?.id === id); 2026-10-24T23:04:39.2435269Z 207 │ │ const envelope = asEnvelope(response); 2026-10-24T23:04:39.2435369Z 208 │ │ if (envelope === null) { 2026-10-24T23:04:39.2435478Z 209 │ │ return yield* Effect.fail( 2026-10-24T23:04:39.2435712Z 210 │ │ new AcpMcpOverAcpError("MCP server did not return a matching response."), 2026-10-24T23:04:39.2435819Z 211 │ │ ); 2026-10-24T23:04:39.2435893Z 212 │ │ } 2026-10-24T23:04:39.2436011Z 213 │ │ if (envelope.error !== undefined) { 2026-10-24T23:04:39.2436207Z 214 │ │ return yield* Effect.fail(new AcpMcpOverAcpError(errorMessage(envelope.error))); 2026-10-24T23:04:39.2436282Z 215 │ │ } 2026-10-24T23:04:39.2436450Z 216 │ │ return (envelope.result ?? null) as AcpSchema.MessageMcpResponse; 2026-10-24T23:04:39.2436525Z 217 │ │ }), 2026-10-24T23:04:39.2436714Z 218 │ │ notification: Effect.fn("mcpOverAcpBridge.notification")(function* (request) { 2026-10-24T23:04:39.2436919Z 219 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T23:04:39.2437024Z 220 │ │ yield* send(connection, { 2026-10-24T23:04:39.2437122Z 221 │ │ jsonrpc: "2.0", 2026-10-24T23:04:39.2437228Z 222 │ │ method: request.method, 2026-10-24T23:04:39.2437385Z 223 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-24T23:04:39.2437461Z 224 │ │ }); 2026-10-24T23:04:39.2437536Z 225 │ │ }), 2026-10-24T23:04:39.2437621Z 226 │ │ disconnect, 2026-10-24T23:04:39.2437730Z 227 │ │ dispose: Effect.suspend(() => 2026-10-24T23:04:39.2437823Z 228 │ │ Effect.forEach( 2026-10-24T23:04:39.2437935Z 229 │ │ [...connections.keys()], 2026-10-24T23:04:39.2438107Z 230 │ │ (connectionId) => disconnect({ connectionId }).pipe(Effect.ignore), 2026-10-24T23:04:39.2438208Z 231 │ │ { discard: true }, 2026-10-24T23:04:39.2438284Z 232 │ │ ), 2026-10-24T23:04:39.2438361Z 233 │ │ ), 2026-10-24T23:04:39.2438435Z 234 │ │ }; 2026-10-24T23:04:39.2438563Z 235 │ ╰─▶ }); 2026-10-24T23:04:39.2438615Z ╰──── 2026-10-24T23:04:39.2438871Z  help: Add a `yield` expression inside the generator body, or convert it to a regular function if iteration behavior is not needed. 2026-10-24T23:04:39.2438874Z 2026-10-24T23:04:39.2439100Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T23:04:39.2439238Z ╭─[apps/mobile/src/state/use-composer-drafts.ts:1022:15] 2026-10-24T23:04:39.2439304Z 1021 │ instanceId, 2026-10-24T23:04:39.2439445Z 1022 │ { ...(persisted.modelOptionMemory[instanceId] ?? {}), ...models }, 2026-10-24T23:04:39.2439598Z ·  ────────────────────────────────────────────────── 2026-10-24T23:04:39.2439661Z 1023 │ ]), 2026-10-24T23:04:39.2439711Z ╰──── 2026-10-24T23:04:39.2439976Z  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-24T23:04:39.2439978Z 2026-10-24T23:04:39.2440158Z ⚠ unicorn(no-new-array): Do not use `new Array(singleArgument)`. 2026-10-24T23:04:39.2440337Z ╭─[apps/web/src/terminal/ghostty/core.ts:194:19] 2026-10-24T23:04:39.2440490Z 193 │ const count = Math.min(CHUNK_SIZE, graphemeLength - start); 2026-10-24T23:04:39.2440578Z 194 │ const codes = new Array(count); 2026-10-24T23:04:39.2440691Z ·  ──────────────────────── 2026-10-24T23:04:39.2440794Z 195 │ for (let index = 0; index < count; index += 1) { 2026-10-24T23:04:39.2440848Z ╰──── 2026-10-24T23:04:39.2441257Z  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-24T23:04:39.2441259Z 2026-10-24T23:04:39.2441429Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T23:04:39.2441625Z ╭─[packages/provider-opencode/src/server/OpenCodeRuntime.environment.test.ts:53:14] 2026-10-24T23:04:39.2441682Z 52 │ 2026-10-24T23:04:39.2441749Z 53 │ for (const {} of [ 2026-10-24T23:04:39.2441823Z ·  ── 2026-10-24T23:04:39.2441891Z 54 │ { healthy: true }, 2026-10-24T23:04:39.2441945Z ╰──── 2026-10-24T23:04:39.2442169Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T23:04:39.2442171Z 2026-10-24T23:04:39.2442392Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T23:04:39.2442511Z ╭─[packages/shared/src/serverSettings.ts:346:9] 2026-10-24T23:04:39.2442613Z 345 │ const entry: ProjectSettingsOverrides = { 2026-10-24T23:04:39.2442740Z 346 │ ...(entries.get(projectId) ?? currentEntries[projectId] ?? {}), 2026-10-24T23:04:39.2442911Z ·  ────────────────────────────────────────────────────────────── 2026-10-24T23:04:39.2442973Z 347 │ }; 2026-10-24T23:04:39.2443027Z ╰──── 2026-10-24T23:04:39.2443288Z  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-24T23:04:39.2443293Z 2026-10-24T23:04:39.2443507Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in Array.prototype.reduce() 2026-10-24T23:04:39.2443626Z ╭─[packages/shared/src/serverSettings.ts:448:24] 2026-10-24T23:04:39.2443692Z 447 │ const favorites = 2026-10-24T23:04:39.2443800Z 448 │ setModelFavorites?.reduce((current, change) => { 2026-10-24T23:04:39.2443884Z ·  ───┬── 2026-10-24T23:04:39.2444153Z · ╰── For this reduce 2026-10-24T23:04:39.2444264Z 449 │ const exists = current.some( 2026-10-24T23:04:39.2444435Z 450 │ (favorite) => favorite.provider === change.provider && favorite.model === change.model, 2026-10-24T23:04:39.2444491Z 451 │ ); 2026-10-24T23:04:39.2444564Z 452 │ return change.favorite 2026-10-24T23:04:39.2444625Z 453 │ ? exists 2026-10-24T23:04:39.2444688Z 454 │ ? current 2026-10-24T23:04:39.2444820Z 455 │ : [...current, { provider: change.provider, model: change.model }] 2026-10-24T23:04:39.2444905Z ·  ─────┬──── 2026-10-24T23:04:39.2445025Z · ╰── From this spread 2026-10-24T23:04:39.2445095Z 456 │ : current.filter( 2026-10-24T23:04:39.2445144Z ╰──── 2026-10-24T23:04:39.2445354Z  help: Consider using `Object.assign()` or `Array.prototype.push()` to mutate the accumulator instead. 2026-10-24T23:04:39.2445510Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T23:04:39.2445513Z 2026-10-24T23:04:39.2445698Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-24T23:04:39.2445812Z ╭─[packages/shared/src/serverSettings.ts:466:3] 2026-10-24T23:04:39.2445874Z 464 │ null; 2026-10-24T23:04:39.2445987Z 465 │ let nextModelPreferences = initialModelPreferences; 2026-10-24T23:04:39.2446078Z ·  ──────────┬───────── 2026-10-24T23:04:39.2446202Z · ╰── From this accumulator 2026-10-24T23:04:39.2446303Z 466 │ for (const change of setModelsHidden ?? []) { 2026-10-24T23:04:39.2446372Z ·  ─┬─ 2026-10-24T23:04:39.2446484Z · ╰── For this loop 2026-10-24T23:04:39.2446620Z 467 │ const preferences = nextModelPreferences?.[change.provider] ?? { 2026-10-24T23:04:39.2446694Z 468 │ hiddenModels: [], 2026-10-24T23:04:39.2446761Z 469 │ modelOrder: [], 2026-10-24T23:04:39.2446828Z 470 │ }; 2026-10-24T23:04:39.2447030Z 471 │ const hiddenModels = preferences.hiddenModels.filter((model) => model !== change.model); 2026-10-24T23:04:39.2447140Z 472 │ if (change.hidden) hiddenModels.push(change.model); 2026-10-24T23:04:39.2447214Z 473 │ nextModelPreferences = { 2026-10-24T23:04:39.2447289Z 474 │ ...nextModelPreferences, 2026-10-24T23:04:39.2447385Z ·  ───────────┬─────────── 2026-10-24T23:04:39.2447508Z · ╰── From this spread 2026-10-24T23:04:39.2447625Z 475 │ [change.provider]: { ...preferences, hiddenModels }, 2026-10-24T23:04:39.2447679Z ╰──── 2026-10-24T23:04:39.2447830Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-24T23:04:39.2447983Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T23:04:39.2447985Z 2026-10-24T23:04:39.2448171Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T23:04:39.2448396Z ╭─[packages/shared/src/qrCode.ts:458:44] 2026-10-24T23:04:39.2448463Z 457 │ ): Array { 2026-10-24T23:04:39.2448568Z 458 │ let result: Array = divisor.map((_) => 0); 2026-10-24T23:04:39.2448671Z ·  ┬ 2026-10-24T23:04:39.2448888Z · ╰── '_' is declared here 2026-10-24T23:04:39.2448995Z 459 │ for (const b of data) { 2026-10-24T23:04:39.2449047Z ╰──── 2026-10-24T23:04:39.2449148Z  help: Consider removing this parameter. 2026-10-24T23:04:39.2449151Z 2026-10-24T23:04:39.2449406Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T23:04:39.2449546Z ╭─[packages/provider-opencode/src/server/adapter.ts:3755:7] 2026-10-24T23:04:39.2449603Z 3754 │ 2026-10-24T23:04:39.2449798Z 3755 │ const layer: Layer.Layer = 2026-10-24T23:04:39.2449869Z ·  ──┬── 2026-10-24T23:04:39.2449994Z · ╰── 'layer' is declared here 2026-10-24T23:04:39.2450059Z 3756 │ Layer.effect( 2026-10-24T23:04:39.2450118Z ╰──── 2026-10-24T23:04:39.2450225Z  help: Consider removing this declaration. 2026-10-24T23:04:39.2450227Z 2026-10-24T23:04:39.2450443Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T23:04:39.2450581Z ╭─[apps/mobile/src/state/use-model-option-memory.ts:21:7] 2026-10-24T23:04:39.2450645Z 20 │ [instanceId]: { 2026-10-24T23:04:39.2450726Z 21 │ ...(state[instanceId] ?? {}), 2026-10-24T23:04:39.2450829Z ·  ──────────────────────────── 2026-10-24T23:04:39.2450898Z 22 │ [model]: options, 2026-10-24T23:04:39.2450949Z ╰──── 2026-10-24T23:04:39.2451208Z  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-24T23:04:39.2451211Z 2026-10-24T23:04:39.2451492Z ⚠ eslint(no-unused-vars): Variable 'legacyCredentials' is declared but never used. Unused variables should start with a '_'. 2026-10-24T23:04:39.2451654Z ╭─[packages/provider-cursor/src/server/credentialStore.test.ts:15:7] 2026-10-24T23:04:39.2451708Z 14 │ 2026-10-24T23:04:39.2451780Z 15 │ const legacyCredentials = { 2026-10-24T23:04:39.2451863Z ·  ────────┬──────── 2026-10-24T23:04:39.2452013Z · ╰── 'legacyCredentials' is declared here 2026-10-24T23:04:39.2452081Z 16 │ version: 1 as const, 2026-10-24T23:04:39.2452134Z ╰──── 2026-10-24T23:04:39.2452235Z  help: Consider removing this declaration. 2026-10-24T23:04:39.2452240Z 2026-10-24T23:04:39.2452521Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T23:04:39.2452695Z ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:473:19] 2026-10-24T23:04:39.2452755Z 472 │ onFilters, 2026-10-24T23:04:39.2452822Z 473 │ authorOptions = [], 2026-10-24T23:04:39.2452897Z ·  ── 2026-10-24T23:04:39.2452965Z 474 │ labelOptions = [], 2026-10-24T23:04:39.2453017Z ╰──── 2026-10-24T23:04:39.2453331Z  help: Default values are re-created on every render and break referential equality, causing unnecessary re-renders. Move the value out of the component or memoize it. 2026-10-24T23:04:39.2453334Z 2026-10-24T23:04:39.2453608Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T23:04:39.2453828Z ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:474:18] 2026-10-24T23:04:39.2453924Z 473 │ authorOptions = [], 2026-10-24T23:04:39.2453990Z 474 │ labelOptions = [], 2026-10-24T23:04:39.2454065Z ·  ── 2026-10-24T23:04:39.2454129Z 475 │ optionScope, 2026-10-24T23:04:39.2454180Z ╰──── 2026-10-24T23:04:39.2454488Z  help: Default values are re-created on every render and break referential equality, causing unnecessary re-renders. Move the value out of the component or memoize it. 2026-10-24T23:04:39.2454491Z 2026-10-24T23:04:39.2454653Z ⚠ eslint(no-control-regex): Unexpected control character 2026-10-24T23:04:39.2454848Z ╭─[apps/mobile/src/features/settings/SettingsProviderAccountsRouteScreen.tsx:220:46] 2026-10-24T23:04:39.2454990Z 219 │ 2026-10-24T23:04:39.2455136Z 220 │ {interaction.output.replace(/\x1b\[[0-?]*[ -/]*[@-~]/g, "")} 2026-10-24T23:04:39.2455246Z ·  ──┬─ 2026-10-24T23:04:39.2455414Z · ╰── 'U+001B' is a control character. 2026-10-24T23:04:39.2455478Z 221 │ 2026-10-24T23:04:39.2455531Z ╰──── 2026-10-24T23:04:39.2455756Z  help: Avoid matching control characters in regular expressions. If intentional, disable this rule for the expression. 2026-10-24T23:04:39.2455760Z 2026-10-24T23:04:39.2456013Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:04:39.2456147Z ╭─[apps/mobile/src/state/use-vcs-action-state.ts:86:5] 2026-10-24T23:04:39.2456263Z 83 │ const [nowMs, setNowMs] = useState(() => Date.now()); 2026-10-24T23:04:39.2456329Z 84 │ useEffect(() => { 2026-10-24T23:04:39.2456399Z ·  ────┬──── 2026-10-24T23:04:39.2456533Z · ╰── This is the containing effect 2026-10-24T23:04:39.2456620Z 85 │ if (!actionState.isRunning) return; 2026-10-24T23:04:39.2456688Z 86 │ setNowMs(Date.now()); 2026-10-24T23:04:39.2456756Z ·  ────┬─── 2026-10-24T23:04:39.2456971Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:04:39.2457098Z 87 │ const interval = setInterval(() => setNowMs(Date.now()), 1000); 2026-10-24T23:04:39.2457153Z ╰──── 2026-10-24T23:04:39.2457741Z  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-24T23:04:39.2458066Z  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-24T23:04:39.2458068Z 2026-10-24T23:04:39.2458297Z ⚠ eslint(no-unneeded-ternary): Unnecessary use of boolean literals in conditional expression 2026-10-24T23:04:39.2458423Z ╭─[packages/shared/src/serverSettings.test.ts:35:7] 2026-10-24T23:04:39.2458604Z 34 │ const fallback = fallbackTextGenerationModelSelection(providerInstances, (instanceId) => 2026-10-24T23:04:39.2458697Z 35 │ instanceId === configured ? true : false, 2026-10-24T23:04:39.2458870Z ·  ──────────────────────────────────────── 2026-10-24T23:04:39.2458955Z 36 │ ); 2026-10-24T23:04:39.2459006Z ╰──── 2026-10-24T23:04:39.2459100Z  help: Remove this ternary operator 2026-10-24T23:04:39.2459103Z 2026-10-24T23:04:39.2459333Z ⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence. 2026-10-24T23:04:39.2459497Z ╭─[apps/web/src/components/pullRequest/pullRequestList.logic.ts:262:9] 2026-10-24T23:04:39.2459559Z 261 │ ): boolean { 2026-10-24T23:04:39.2459708Z 262 │ const labels = entry.labels.map((label) => label.name.trim().toLowerCase()); 2026-10-24T23:04:39.2459890Z ·  ───────────────────────────────────────────────────────────────────── 2026-10-24T23:04:39.2460036Z 263 │ const holds = (label: string) => labels.includes(label.trim().toLowerCase()); 2026-10-24T23:04:39.2460096Z ╰──── 2026-10-24T23:04:39.2460175Z  help: Switch to `Set` 2026-10-24T23:04:39.2460177Z 2026-10-24T23:04:39.2460371Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T23:04:39.2460542Z ╭─[apps/web/src/components/pullRequest/PullRequestChecksPopover.tsx:88:15] 2026-10-24T23:04:39.2460606Z 87 │
  • 2026-10-24T23:04:39.2462984Z ·  ──────┬───── 2026-10-24T23:04:39.2463133Z · ╰── 'stopSessions' is declared here 2026-10-24T23:04:39.2463197Z 250 │ effect.pipe( 2026-10-24T23:04:39.2463250Z ╰──── 2026-10-24T23:04:39.2463349Z  help: Consider removing this parameter. 2026-10-24T23:04:39.2463351Z 2026-10-24T23:04:39.2463550Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:04:39.2463670Z ╭─[apps/mobile/src/state/thread-order.ts:29:7] 2026-10-24T23:04:39.2463746Z 28 │ getPendingThreadOrder(); 2026-10-24T23:04:39.2463825Z 29 │ }, [nowMinute, snoozeWakeTick]); 2026-10-24T23:04:39.2463952Z ·  ────┬──── ───────┬────── 2026-10-24T23:04:39.2464143Z · │ ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T23:04:39.2464285Z · ╰── Unnecessary dependency `nowMinute` 2026-10-24T23:04:39.2464348Z 30 │ return pending; 2026-10-24T23:04:39.2464400Z ╰──── 2026-10-24T23:04:39.2464689Z  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-24T23:04:39.2465004Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.2465009Z 2026-10-24T23:04:39.2465188Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T23:04:39.2465346Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:100:85] 2026-10-24T23:04:39.2465448Z  99 │ const startEditor = startScheduledTaskEditor; 2026-10-24T23:04:39.2465628Z 100 │ const resetEditor = useCallback(() => startEditor(defaultEditor), [defaultEditor, startEditor]); 2026-10-24T23:04:39.2465774Z ·  ─────┬───── 2026-10-24T23:04:39.2465972Z · ╰── Unnecessary dependency `startEditor` 2026-10-24T23:04:39.2466058Z 101 │ const readEditor = useCallback( 2026-10-24T23:04:39.2466114Z ╰──── 2026-10-24T23:04:39.2466423Z  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-24T23:04:39.2466730Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.2466735Z 2026-10-24T23:04:39.2466942Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T23:04:39.2467102Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:121:7] 2026-10-24T23:04:39.2467165Z 120 │ setEditor, 2026-10-24T23:04:39.2467228Z 121 │ startEditor, 2026-10-24T23:04:39.2467303Z ·  ─────┬───── 2026-10-24T23:04:39.2467506Z · ╰── Unnecessary dependency `startEditor` 2026-10-24T23:04:39.2467596Z 122 │ hasChanges, 2026-10-24T23:04:39.2467648Z ╰──── 2026-10-24T23:04:39.2467951Z  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-24T23:04:39.2468255Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.2468257Z 2026-10-24T23:04:39.2468519Z ⚠ eslint(no-unused-vars): Variable 'claudeCaps' is declared but never used. Unused variables should start with a '_'. 2026-10-24T23:04:39.2468628Z ╭─[packages/shared/src/model.test.ts:36:7] 2026-10-24T23:04:39.2468683Z 35 │ 2026-10-24T23:04:39.2468818Z 36 │ const claudeCaps: ModelCapabilities = createModelCapabilities({ 2026-10-24T23:04:39.2468896Z ·  ─────┬──── 2026-10-24T23:04:39.2469033Z · ╰── 'claudeCaps' is declared here 2026-10-24T23:04:39.2469099Z 37 │ optionDescriptors: [ 2026-10-24T23:04:39.2469152Z ╰──── 2026-10-24T23:04:39.2469256Z  help: Consider removing this declaration. 2026-10-24T23:04:39.2469258Z 2026-10-24T23:04:39.2469467Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T23:04:39.2469587Z ╭─[apps/mobile/src/lib/markdownDocument.ts:259:28] 2026-10-24T23:04:39.2469689Z 258 │ visit(parser.parse(markdown), false, false); 2026-10-24T23:04:39.2469777Z 259 │ for (const edit of edits.reverse()) 2026-10-24T23:04:39.2469878Z ·  ─────── 2026-10-24T23:04:39.2470040Z 260 │ markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end); 2026-10-24T23:04:39.2470093Z ╰──── 2026-10-24T23:04:39.2470350Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T23:04:39.2470353Z 2026-10-24T23:04:39.2470561Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T23:04:39.2470683Z ╭─[apps/mobile/src/lib/markdownDocument.ts:290:28] 2026-10-24T23:04:39.2470762Z 289 │ visit(parser.parse(markdown)); 2026-10-24T23:04:39.2470847Z 290 │ for (const edit of edits.reverse()) 2026-10-24T23:04:39.2470942Z ·  ─────── 2026-10-24T23:04:39.2471107Z 291 │ markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end); 2026-10-24T23:04:39.2471159Z ╰──── 2026-10-24T23:04:39.2471411Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T23:04:39.2471413Z 2026-10-24T23:04:39.2471624Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T23:04:39.2471745Z ╭─[apps/mobile/src/lib/markdownDocument.ts:344:38] 2026-10-24T23:04:39.2471822Z 343 │ visit(parser.parse(markdown)); 2026-10-24T23:04:39.2471928Z 344 │ for (const lineStart of lineStarts.reverse()) { 2026-10-24T23:04:39.2472031Z ·  ─────── 2026-10-24T23:04:39.2472245Z 345 │ // The header row may be a lazy line without its container markers (`>` or list indent), 2026-10-24T23:04:39.2472322Z ╰──── 2026-10-24T23:04:39.2472577Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T23:04:39.2472579Z 2026-10-24T23:04:39.2472771Z ⚠ eslint(no-unused-vars): Identifier 'Image' is imported but never used. 2026-10-24T23:04:39.2472916Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:17:10] 2026-10-24T23:04:39.2473053Z 16 │ import type { NativeSyntheticEvent, ViewProps } from "react-native"; 2026-10-24T23:04:39.2473166Z 17 │ import { Image, Platform, StyleSheet } from "react-native"; 2026-10-24T23:04:39.2473241Z ·  ──┬── 2026-10-24T23:04:39.2473368Z · ╰── 'Image' is imported here 2026-10-24T23:04:39.2473420Z 18 │ 2026-10-24T23:04:39.2473476Z ╰──── 2026-10-24T23:04:39.2473576Z  help: Consider removing this import. 2026-10-24T23:04:39.2473579Z 2026-10-24T23:04:39.2473780Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T23:04:39.2473921Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:229:6] 2026-10-24T23:04:39.2474081Z 225 │ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents( 2026-10-24T23:04:39.2474174Z 226 │ nativeEventSnapshotsRef.current, 2026-10-24T23:04:39.2474267Z ·  ───────────┬─────────── 2026-10-24T23:04:39.2474734Z · ╰── 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-24T23:04:39.2474809Z 227 │ mostRecentEventCount, 2026-10-24T23:04:39.2474867Z 228 │ ); 2026-10-24T23:04:39.2474991Z 229 │ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]); 2026-10-24T23:04:39.2475136Z ·  ──────────────────────────┬────────────────────────── 2026-10-24T23:04:39.2475333Z · ╰── This dependency list is missing values used by the callback 2026-10-24T23:04:39.2475418Z 230 │ const assumedValue = props.value; 2026-10-24T23:04:39.2475472Z ╰──── 2026-10-24T23:04:39.2475640Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T23:04:39.2475946Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.2475958Z 2026-10-24T23:04:39.2476171Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T23:04:39.2476313Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:237:7] 2026-10-24T23:04:39.2476462Z 236 │ nativeEventSnapshotsRef.current = assumeComposerControlledState( 2026-10-24T23:04:39.2476553Z 237 │ nativeEventSnapshotsRef.current, 2026-10-24T23:04:39.2476643Z ·  ───────────┬─────────── 2026-10-24T23:04:39.2477135Z · ╰── 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-24T23:04:39.2477209Z 238 │ controlledEventCount, 2026-10-24T23:04:39.2477274Z 239 │ assumedValue, 2026-10-24T23:04:39.2477374Z 240 │ ); 2026-10-24T23:04:39.2477562Z 241 │ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]); 2026-10-24T23:04:39.2477700Z ·  ───────────┬────────── 2026-10-24T23:04:39.2477906Z · ╰── Unnecessary dependency `controlledDocumentJson` 2026-10-24T23:04:39.2477993Z 242 │ const acceptNativeEvent = useCallback( 2026-10-24T23:04:39.2478046Z ╰──── 2026-10-24T23:04:39.2478459Z  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-24T23:04:39.2478772Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.2478777Z 2026-10-24T23:04:39.2478924Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:04:39.2479067Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29] 2026-10-24T23:04:39.2479192Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T23:04:39.2479305Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T23:04:39.2479426Z ·  ─────────────┬──────────── 2026-10-24T23:04:39.2479591Z · ╰── Cannot access ref value during render 2026-10-24T23:04:39.2479650Z 163 │ }); 2026-10-24T23:04:39.2479702Z ╰──── 2026-10-24T23:04:39.2480166Z  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-24T23:04:39.2480454Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:04:39.2480456Z 2026-10-24T23:04:39.2480597Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:04:39.2480742Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29] 2026-10-24T23:04:39.2480863Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T23:04:39.2480975Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T23:04:39.2481135Z ·  ─────────────┬──────────── 2026-10-24T23:04:39.2481379Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T23:04:39.2481438Z 163 │ }); 2026-10-24T23:04:39.2481491Z ╰──── 2026-10-24T23:04:39.2481944Z  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-24T23:04:39.2482230Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:04:39.2482233Z 2026-10-24T23:04:39.2482377Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:04:39.2482523Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:164:23] 2026-10-24T23:04:39.2482583Z 163 │ }); 2026-10-24T23:04:39.2482671Z 164 │ confirmedTokensRef.current = tokens; 2026-10-24T23:04:39.2482800Z ·  ─────────┬────────────┬─── 2026-10-24T23:04:39.2482989Z · │ ╰── Cannot update ref value during render 2026-10-24T23:04:39.2483109Z · ╰── This value is a ref 2026-10-24T23:04:39.2483180Z 165 │ return JSON.stringify( 2026-10-24T23:04:39.2483233Z ╰──── 2026-10-24T23:04:39.2483692Z  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-24T23:04:39.2483979Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:04:39.2483981Z 2026-10-24T23:04:39.2484127Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:04:39.2484267Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:206:5] 2026-10-24T23:04:39.2484338Z 205 │ mostRecentEventCount, 2026-10-24T23:04:39.2484427Z 206 │ nativeEventSnapshotsRef.current, 2026-10-24T23:04:39.2484534Z ·  ───────────────┬─────────────── 2026-10-24T23:04:39.2484720Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T23:04:39.2484776Z 207 │ ); 2026-10-24T23:04:39.2484828Z ╰──── 2026-10-24T23:04:39.2485286Z  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-24T23:04:39.2485570Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:04:39.2485572Z 2026-10-24T23:04:39.2485718Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:04:39.2485859Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:212:5] 2026-10-24T23:04:39.2485929Z 211 │ mostRecentEventCount, 2026-10-24T23:04:39.2486014Z 212 │ nativeEventSnapshotsRef.current, 2026-10-24T23:04:39.2486120Z ·  ───────────────┬─────────────── 2026-10-24T23:04:39.2486354Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T23:04:39.2486436Z 213 │ ); 2026-10-24T23:04:39.2486486Z ╰──── 2026-10-24T23:04:39.2486966Z  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-24T23:04:39.2487249Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:04:39.2487252Z 2026-10-24T23:04:39.2487437Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T23:04:39.2487582Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:197:6] 2026-10-24T23:04:39.2487705Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T23:04:39.2487818Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T23:04:39.2487931Z ·  ─────────┬──────── 2026-10-24T23:04:39.2488481Z · ╰── 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-24T23:04:39.2488539Z 163 │ }); 2026-10-24T23:04:39.2488627Z 164 │ confirmedTokensRef.current = tokens; 2026-10-24T23:04:39.2488698Z 165 │ return JSON.stringify( 2026-10-24T23:04:39.2488862Z 166 │ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => { 2026-10-24T23:04:39.2488934Z 167 │ const record = 2026-10-24T23:04:39.2489013Z 168 │ token.type === "context" 2026-10-24T23:04:39.2489175Z 169 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-24T23:04:39.2489241Z 170 │ : undefined; 2026-10-24T23:04:39.2489348Z 171 │ const presentation = contextChipPresentation( 2026-10-24T23:04:39.2489459Z 172 │ token.type === "context" ? token.kind : token.type, 2026-10-24T23:04:39.2489522Z 173 │ record, 2026-10-24T23:04:39.2489582Z 174 │ ); 2026-10-24T23:04:39.2489663Z 175 │ const icon = contextChipIcon( 2026-10-24T23:04:39.2489733Z 176 │ presentation, 2026-10-24T23:04:39.2489875Z 177 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-24T23:04:39.2489933Z 178 │ ); 2026-10-24T23:04:39.2489998Z 179 │ return { 2026-10-24T23:04:39.2490072Z 180 │ type: token.type, 2026-10-24T23:04:39.2490148Z 181 │ source: token.source, 2026-10-24T23:04:39.2490221Z 182 │ start: token.start, 2026-10-24T23:04:39.2490285Z 183 │ end: token.end, 2026-10-24T23:04:39.2490434Z 184 │ accent: contextChipAccent(presentation.accent, theme, chipTextColor), 2026-10-24T23:04:39.2490498Z 185 │ label: 2026-10-24T23:04:39.2490577Z 186 │ token.type === "skill" 2026-10-24T23:04:39.2490682Z 187 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-24T23:04:39.2490766Z 188 │ : token.type === "context" 2026-10-24T23:04:39.2491000Z 189 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-24T23:04:39.2491152Z 190 │ : basename(token.value), 2026-10-24T23:04:39.2491330Z 191 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-24T23:04:39.2491424Z 192 │ iconUri: contextChipIconUri(icon), 2026-10-24T23:04:39.2491514Z 193 │ tintsIcon: icon.kind === "chip", 2026-10-24T23:04:39.2491572Z 194 │ }; 2026-10-24T23:04:39.2491628Z 195 │ }), 2026-10-24T23:04:39.2491684Z 196 │ ); 2026-10-24T23:04:39.2491817Z 197 │ }, [props.value, props.context, skillLabels, theme, chipTextColor]); 2026-10-24T23:04:39.2491985Z ·  ───────────────────────────────┬─────────────────────────────── 2026-10-24T23:04:39.2492189Z · ╰── This dependency list is missing values used by the callback 2026-10-24T23:04:39.2492335Z 198 │ // Every render resolves against the snapshot history, so a render whose 2026-10-24T23:04:39.2492391Z ╰──── 2026-10-24T23:04:39.2492595Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T23:04:39.2492902Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.2492907Z 2026-10-24T23:04:39.2493092Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T23:04:39.2493234Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:259:5] 2026-10-24T23:04:39.2493364Z 251 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-24T23:04:39.2493466Z 252 │ nativeEventSnapshotsRef.current.push({ 2026-10-24T23:04:39.2493557Z ·  ───────────┬─────────── 2026-10-24T23:04:39.2494016Z · ╰── 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-24T23:04:39.2494111Z 253 │ eventCount: acknowledgedEventCount, 2026-10-24T23:04:39.2494173Z 254 │ value, 2026-10-24T23:04:39.2494250Z 255 │ selection: nextSelection, 2026-10-24T23:04:39.2494308Z 256 │ }); 2026-10-24T23:04:39.2494392Z 257 │ return acknowledgedEventCount; 2026-10-24T23:04:39.2494448Z 258 │ }, 2026-10-24T23:04:39.2494500Z 259 │ [], 2026-10-24T23:04:39.2494570Z ·  ─┬ 2026-10-24T23:04:39.2494749Z · ╰── This dependency list is missing values used by the callback 2026-10-24T23:04:39.2494809Z 260 │ ); 2026-10-24T23:04:39.2494862Z ╰──── 2026-10-24T23:04:39.2495063Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T23:04:39.2495369Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.2495371Z 2026-10-24T23:04:39.2495739Z ⚠ 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-24T23:04:39.2495859Z ╭─[packages/shared/src/otelEnvironment.ts:146:14] 2026-10-24T23:04:39.2495921Z 145 │ name, 2026-10-24T23:04:39.2496060Z 146 │ (raw) => Schema.decodeUnknownOption(OtlpProtocol)(raw.toLowerCase()), 2026-10-24T23:04:39.2496220Z ·  ────────────────────────── 2026-10-24T23:04:39.2496371Z 147 │ `${name} is not http/protobuf or http/json, ${NOT_EXPORTED}`, 2026-10-24T23:04:39.2496423Z ╰──── 2026-10-24T23:04:39.2496425Z 2026-10-24T23:04:39.2496628Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T23:04:39.2496764Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:231:6] 2026-10-24T23:04:39.2496966Z 227 │ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents( 2026-10-24T23:04:39.2497057Z 228 │ nativeEventSnapshotsRef.current, 2026-10-24T23:04:39.2497149Z ·  ───────────┬─────────── 2026-10-24T23:04:39.2497605Z · ╰── 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-24T23:04:39.2497682Z 229 │ mostRecentEventCount, 2026-10-24T23:04:39.2497735Z 230 │ ); 2026-10-24T23:04:39.2497858Z 231 │ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]); 2026-10-24T23:04:39.2498001Z ·  ──────────────────────────┬────────────────────────── 2026-10-24T23:04:39.2498197Z · ╰── This dependency list is missing values used by the callback 2026-10-24T23:04:39.2498279Z 232 │ const assumedValue = props.value; 2026-10-24T23:04:39.2498333Z ╰──── 2026-10-24T23:04:39.2498500Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T23:04:39.2498813Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.2498819Z 2026-10-24T23:04:39.2499027Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T23:04:39.2499165Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:239:7] 2026-10-24T23:04:39.2499308Z 238 │ nativeEventSnapshotsRef.current = assumeComposerControlledState( 2026-10-24T23:04:39.2499398Z 239 │ nativeEventSnapshotsRef.current, 2026-10-24T23:04:39.2499487Z ·  ───────────┬─────────── 2026-10-24T23:04:39.2499938Z · ╰── 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-24T23:04:39.2500059Z 240 │ controlledEventCount, 2026-10-24T23:04:39.2500160Z 241 │ assumedValue, 2026-10-24T23:04:39.2500215Z 242 │ ); 2026-10-24T23:04:39.2500368Z 243 │ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]); 2026-10-24T23:04:39.2500508Z ·  ───────────┬────────── 2026-10-24T23:04:39.2500713Z · ╰── Unnecessary dependency `controlledDocumentJson` 2026-10-24T23:04:39.2500808Z 244 │ const acceptNativeEvent = useCallback( 2026-10-24T23:04:39.2500858Z ╰──── 2026-10-24T23:04:39.2501272Z  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-24T23:04:39.2501583Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.2501589Z 2026-10-24T23:04:39.2501735Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:04:39.2501874Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:29] 2026-10-24T23:04:39.2501994Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T23:04:39.2502106Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T23:04:39.2502226Z ·  ─────────────┬──────────── 2026-10-24T23:04:39.2502393Z · ╰── Cannot access ref value during render 2026-10-24T23:04:39.2502447Z 165 │ }); 2026-10-24T23:04:39.2502505Z ╰──── 2026-10-24T23:04:39.2502973Z  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-24T23:04:39.2503261Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:04:39.2503263Z 2026-10-24T23:04:39.2503406Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:04:39.2503545Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:29] 2026-10-24T23:04:39.2503667Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T23:04:39.2503777Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T23:04:39.2503898Z ·  ─────────────┬──────────── 2026-10-24T23:04:39.2504104Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T23:04:39.2504160Z 165 │ }); 2026-10-24T23:04:39.2504212Z ╰──── 2026-10-24T23:04:39.2504669Z  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-24T23:04:39.2504951Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:04:39.2504953Z 2026-10-24T23:04:39.2505146Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:04:39.2505311Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:166:23] 2026-10-24T23:04:39.2505367Z 165 │ }); 2026-10-24T23:04:39.2505456Z 166 │ confirmedTokensRef.current = tokens; 2026-10-24T23:04:39.2505584Z ·  ─────────┬────────────┬─── 2026-10-24T23:04:39.2505773Z · │ ╰── Cannot update ref value during render 2026-10-24T23:04:39.2505891Z · ╰── This value is a ref 2026-10-24T23:04:39.2505962Z 167 │ return JSON.stringify( 2026-10-24T23:04:39.2506013Z ╰──── 2026-10-24T23:04:39.2506475Z  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-24T23:04:39.2506760Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:04:39.2506762Z 2026-10-24T23:04:39.2506938Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:04:39.2507071Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:208:5] 2026-10-24T23:04:39.2507142Z 207 │ mostRecentEventCount, 2026-10-24T23:04:39.2507231Z 208 │ nativeEventSnapshotsRef.current, 2026-10-24T23:04:39.2507339Z ·  ───────────────┬─────────────── 2026-10-24T23:04:39.2507525Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T23:04:39.2507587Z 209 │ ); 2026-10-24T23:04:39.2507645Z ╰──── 2026-10-24T23:04:39.2508098Z  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-24T23:04:39.2508380Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:04:39.2508383Z 2026-10-24T23:04:39.2508524Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:04:39.2508661Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:214:5] 2026-10-24T23:04:39.2508732Z 213 │ mostRecentEventCount, 2026-10-24T23:04:39.2508819Z 214 │ nativeEventSnapshotsRef.current, 2026-10-24T23:04:39.2508925Z ·  ───────────────┬─────────────── 2026-10-24T23:04:39.2509112Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T23:04:39.2509168Z 215 │ ); 2026-10-24T23:04:39.2509221Z ╰──── 2026-10-24T23:04:39.2509671Z  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-24T23:04:39.2509955Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:04:39.2509957Z 2026-10-24T23:04:39.2510143Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T23:04:39.2510324Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:199:6] 2026-10-24T23:04:39.2510473Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T23:04:39.2510583Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T23:04:39.2510695Z ·  ─────────┬──────── 2026-10-24T23:04:39.2511154Z · ╰── 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-24T23:04:39.2511212Z 165 │ }); 2026-10-24T23:04:39.2511299Z 166 │ confirmedTokensRef.current = tokens; 2026-10-24T23:04:39.2511371Z 167 │ return JSON.stringify( 2026-10-24T23:04:39.2511538Z 168 │ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => { 2026-10-24T23:04:39.2511607Z 169 │ const record = 2026-10-24T23:04:39.2511685Z 170 │ token.type === "context" 2026-10-24T23:04:39.2511853Z 171 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-24T23:04:39.2511921Z 172 │ : undefined; 2026-10-24T23:04:39.2512028Z 173 │ const presentation = contextChipPresentation( 2026-10-24T23:04:39.2512134Z 174 │ token.type === "context" ? token.kind : token.type, 2026-10-24T23:04:39.2512199Z 175 │ record, 2026-10-24T23:04:39.2512258Z 176 │ ); 2026-10-24T23:04:39.2512343Z 177 │ const icon = contextChipIcon( 2026-10-24T23:04:39.2512410Z 178 │ presentation, 2026-10-24T23:04:39.2512552Z 179 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-24T23:04:39.2512615Z 180 │ ); 2026-10-24T23:04:39.2512679Z 181 │ return { 2026-10-24T23:04:39.2512748Z 182 │ type: token.type, 2026-10-24T23:04:39.2512823Z 183 │ source: token.source, 2026-10-24T23:04:39.2512897Z 184 │ start: token.start, 2026-10-24T23:04:39.2512964Z 185 │ end: token.end, 2026-10-24T23:04:39.2513110Z 186 │ accent: contextChipAccent(presentation.accent, theme, chipTextColor), 2026-10-24T23:04:39.2513171Z 187 │ label: 2026-10-24T23:04:39.2513251Z 188 │ token.type === "skill" 2026-10-24T23:04:39.2513356Z 189 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-24T23:04:39.2513440Z 190 │ : token.type === "context" 2026-10-24T23:04:39.2513678Z 191 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-24T23:04:39.2513765Z 192 │ : basename(token.value), 2026-10-24T23:04:39.2513907Z 193 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-24T23:04:39.2513998Z 194 │ iconUri: contextChipIconUri(icon), 2026-10-24T23:04:39.2514087Z 195 │ tintsIcon: icon.kind === "chip", 2026-10-24T23:04:39.2514145Z 196 │ }; 2026-10-24T23:04:39.2514202Z 197 │ }), 2026-10-24T23:04:39.2514255Z 198 │ ); 2026-10-24T23:04:39.2514388Z 199 │ }, [props.value, props.context, skillLabels, theme, chipTextColor]); 2026-10-24T23:04:39.2514554Z ·  ───────────────────────────────┬─────────────────────────────── 2026-10-24T23:04:39.2514757Z · ╰── This dependency list is missing values used by the callback 2026-10-24T23:04:39.2514946Z 200 │ // Every render resolves against the snapshot history, so a render whose 2026-10-24T23:04:39.2515118Z ╰──── 2026-10-24T23:04:39.2515320Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T23:04:39.2515627Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.2515630Z 2026-10-24T23:04:39.2515812Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T23:04:39.2515948Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:261:5] 2026-10-24T23:04:39.2516077Z 253 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-24T23:04:39.2516177Z 254 │ nativeEventSnapshotsRef.current.push({ 2026-10-24T23:04:39.2516271Z ·  ───────────┬─────────── 2026-10-24T23:04:39.2516726Z · ╰── 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-24T23:04:39.2516846Z 255 │ eventCount: acknowledgedEventCount, 2026-10-24T23:04:39.2516909Z 256 │ value, 2026-10-24T23:04:39.2516986Z 257 │ selection: nextSelection, 2026-10-24T23:04:39.2517043Z 258 │ }); 2026-10-24T23:04:39.2517128Z 259 │ return acknowledgedEventCount; 2026-10-24T23:04:39.2517183Z 260 │ }, 2026-10-24T23:04:39.2517236Z 261 │ [], 2026-10-24T23:04:39.2517306Z ·  ─┬ 2026-10-24T23:04:39.2517493Z · ╰── This dependency list is missing values used by the callback 2026-10-24T23:04:39.2517552Z 262 │ ); 2026-10-24T23:04:39.2517602Z ╰──── 2026-10-24T23:04:39.2517805Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T23:04:39.2518112Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:04:39.2518115Z 2026-10-24T23:04:39.2518443Z ⚠ 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-24T23:04:39.2518592Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:50:18] 2026-10-24T23:04:39.2518754Z 49 │ for (const tool of ["sendMessage", "followupTask", "interruptAgent", "listAgents"]) { 2026-10-24T23:04:39.2518930Z 50 │ assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true); 2026-10-24T23:04:39.2519019Z ·  ───────── 2026-10-24T23:04:39.2519198Z 51 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true); 2026-10-24T23:04:39.2519248Z ╰──── 2026-10-24T23:04:39.2519250Z 2026-10-24T23:04:39.2519579Z ⚠ 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-24T23:04:39.2519721Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:51:18] 2026-10-24T23:04:39.2519890Z 50 │ assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true); 2026-10-24T23:04:39.2520062Z 51 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true); 2026-10-24T23:04:39.2520202Z ·  ───────── 2026-10-24T23:04:39.2520285Z 52 │ } 2026-10-24T23:04:39.2520338Z ╰──── 2026-10-24T23:04:39.2520340Z 2026-10-24T23:04:39.2520667Z ⚠ 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-24T23:04:39.2520804Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:55:5] 2026-10-24T23:04:39.2520868Z 54 │ assert.equal( 2026-10-24T23:04:39.2521039Z 55 │ Schema.is(CodexSchema.ServerNotification__CollabAgentToolCallStatus)("interrupted"), 2026-10-24T23:04:39.2521112Z ·  ───────── 2026-10-24T23:04:39.2521167Z 56 │ true, 2026-10-24T23:04:39.2521221Z ╰──── 2026-10-24T23:04:39.2521224Z 2026-10-24T23:04:39.2521553Z ⚠ 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-24T23:04:39.2521693Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:59:5] 2026-10-24T23:04:39.2521754Z 58 │ assert.equal( 2026-10-24T23:04:39.2521935Z 59 │ Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentToolCallStatus)("interrupted"), 2026-10-24T23:04:39.2522007Z ·  ───────── 2026-10-24T23:04:39.2522066Z 60 │ true, 2026-10-24T23:04:39.2522116Z ╰──── 2026-10-24T23:04:39.2522119Z 2026-10-24T23:04:39.2522443Z ⚠ 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-24T23:04:39.2522591Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:103:16] 2026-10-24T23:04:39.2522650Z 102 │ 2026-10-24T23:04:39.2522816Z 103 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse)(resumeResponse), true); 2026-10-24T23:04:39.2522904Z ·  ───────── 2026-10-24T23:04:39.2522958Z 104 │ }); 2026-10-24T23:04:39.2523010Z ╰──── 2026-10-24T23:04:39.2523013Z 2026-10-24T23:04:39.2523153Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:04:39.2523275Z ╭─[apps/mobile/src/native/StackHeader.tsx:185:9] 2026-10-24T23:04:39.2523342Z 184 │ "options", 2026-10-24T23:04:39.2523437Z 185 │ latestOptionFunctionsRef.current, 2026-10-24T23:04:39.2523549Z ·  ────────────────┬─────────────── 2026-10-24T23:04:39.2523747Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T23:04:39.2523892Z 186 │ optionFunctionWrappersRef.current, 2026-10-24T23:04:39.2523975Z ╰──── 2026-10-24T23:04:39.2524434Z  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-24T23:04:39.2524727Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:04:39.2524729Z 2026-10-24T23:04:39.2524872Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:04:39.2524990Z ╭─[apps/mobile/src/native/StackHeader.tsx:186:9] 2026-10-24T23:04:39.2525082Z 185 │ latestOptionFunctionsRef.current, 2026-10-24T23:04:39.2525178Z 186 │ optionFunctionWrappersRef.current, 2026-10-24T23:04:39.2525296Z ·  ────────────────┬──────────────── 2026-10-24T23:04:39.2525485Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T23:04:39.2525578Z 187 │ ) as NativeStackNavigationOptions) 2026-10-24T23:04:39.2525627Z ╰──── 2026-10-24T23:04:39.2526083Z  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-24T23:04:39.2526368Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:04:39.2526370Z 2026-10-24T23:04:39.2526861Z ⚠ 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-24T23:04:39.2526988Z ╭─[packages/shared/src/atomicWrite.test.ts:139:5] 2026-10-24T23:04:39.2527062Z 138 │ Effect.gen(function* () { 2026-10-24T23:04:39.2527255Z 139 │ ╭─▶ while (fiber.pollUnsafe() === undefined) { 2026-10-24T23:04:39.2527380Z 140 │ │ yield* TestClock.adjust("100 millis"); 2026-10-24T23:04:39.2527698Z 141 │ │ // oxlint-disable-next-line t3code/no-real-time-wait-in-tests -- a macrotask boundary so the real stat I/O can finish; time moves only via TestClock 2026-10-24T23:04:39.2527889Z 142 │ │ yield* Effect.promise(() => new Promise((resolve) => setImmediate(resolve))); 2026-10-24T23:04:39.2528021Z 143 │ ╰─▶ } 2026-10-24T23:04:39.2528108Z 144 │ return yield* Fiber.join(fiber); 2026-10-24T23:04:39.2528161Z ╰──── 2026-10-24T23:04:39.2528163Z 2026-10-24T23:04:39.2528482Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T23:04:39.2528610Z ╭─[scripts/lib/cli-external-packages.test.ts:114:11] 2026-10-24T23:04:39.2528680Z 113 │ const declared = { 2026-10-24T23:04:39.2528771Z 114 │ ...(manifest.dependencies ?? {}), 2026-10-24T23:04:39.2528888Z ·  ──────────────────────────────── 2026-10-24T23:04:39.2528992Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T23:04:39.2529122Z ╰──── 2026-10-24T23:04:39.2529423Z  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-24T23:04:39.2529426Z 2026-10-24T23:04:39.2529641Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T23:04:39.2529767Z ╭─[scripts/lib/cli-external-packages.test.ts:115:11] 2026-10-24T23:04:39.2529857Z 114 │ ...(manifest.dependencies ?? {}), 2026-10-24T23:04:39.2529959Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T23:04:39.2530085Z ·  ──────────────────────────────────────── 2026-10-24T23:04:39.2530180Z 116 │ ...(manifest.peerDependencies ?? {}), 2026-10-24T23:04:39.2530233Z ╰──── 2026-10-24T23:04:39.2530500Z  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-24T23:04:39.2530505Z 2026-10-24T23:04:39.2530719Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T23:04:39.2530843Z ╭─[scripts/lib/cli-external-packages.test.ts:116:11] 2026-10-24T23:04:39.2530942Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T23:04:39.2531040Z 116 │ ...(manifest.peerDependencies ?? {}), 2026-10-24T23:04:39.2531159Z ·  ──────────────────────────────────── 2026-10-24T23:04:39.2531219Z 117 │ }; 2026-10-24T23:04:39.2531268Z ╰──── 2026-10-24T23:04:39.2531526Z  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-24T23:04:39.2531533Z 2026-10-24T23:04:39.2531622Z Found 0 errors and 367 warnings in 5480 files (5.2s, 8 threads) 2026-10-24T23:04:39.2950522Z Post job cleanup. 2026-10-24T23:04:39.3537159Z Cache hit occurred on the primary key electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309, not saving cache. 2026-10-24T23:04:39.3607659Z Post job cleanup. 2026-10-24T23:04:39.3620290Z ##[start-action display=Cache full pnpm store;id=__9d21ae10-8771-49db-80b7-9443abd82dfb.__actions_cache] 2026-10-24T23:04:39.3915698Z Post job cleanup. 2026-10-24T23:04:39.4567409Z [command]/usr/bin/tar --posix -cf cache.tzst --exclude cache.tzst -P -C /home/runner/_work/t3code/t3code --files-from manifest.txt --use-compress-program zstdmt 2026-10-24T23:04:42.9070058Z Failed to save: Unable to reserve cache with key pnpm-full-v1-Linux-X64-00603bf3edbe5c5c110144002d8c9a314f8b592aed66db22932aa917c61d6447, another job may be creating this cache. 2026-10-24T23:04:42.9524657Z ##[end-action id=__9d21ae10-8771-49db-80b7-9443abd82dfb.__actions_cache;outcome=success;conclusion=success;duration_ms=3590] 2026-10-24T23:04:42.9526603Z ##[start-action display=Cache Vite+;id=__9d21ae10-8771-49db-80b7-9443abd82dfb.vp_cache] 2026-10-24T23:04:42.9547067Z Post job cleanup. 2026-10-24T23:04:43.0139353Z Cache hit occurred on the primary key vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0, not saving cache. 2026-10-24T23:04:43.0164762Z ##[end-action id=__9d21ae10-8771-49db-80b7-9443abd82dfb.vp_cache;outcome=success;conclusion=success;duration_ms=63] 2026-10-24T23:04:43.0199650Z Post job cleanup. 2026-10-24T23:04:43.0583319Z [command]/usr/local/bin/git version 2026-10-24T23:04:43.0608134Z git version 2.55.0 2026-10-24T23:04:43.0625433Z Temporarily overriding HOME='/home/runner/_work/_temp/b5a0aba0-d7c0-45b6-a960-299c6825cb9d' before making global git config changes 2026-10-24T23:04:43.0626025Z Adding repository directory to the temporary git global config as a safe directory 2026-10-24T23:04:43.0628634Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code 2026-10-24T23:04:43.0648410Z Removing SSH command configuration 2026-10-24T23:04:43.0651503Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand 2026-10-24T23:04:43.0694918Z [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-24T23:04:43.0807376Z fatal: No url found for submodule path '.repos/alchemy-effect/submodules/distilled' in .gitmodules 2026-10-24T23:04:43.0828548Z ##[warning]The process '/usr/local/bin/git' failed with exit code 128 2026-10-24T23:04:43.0860164Z A job completed hook has been configured by the self-hosted runner administrator 2026-10-24T23:04:43.0883703Z ##[group]Run '/job_completed.sh' 2026-10-24T23:04:43.0896885Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T23:04:43.0897080Z env: 2026-10-24T23:04:43.0897196Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-24T23:04:43.0897352Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 352 2026-10-24T23:04:43.0897490Z BLACKSMITH_CHECK_RUN_ID: 121013057479 2026-10-24T23:04:43.0897628Z BLACKSMITH_JOB_DISPLAY_NAME: Lint 2026-10-24T23:04:43.0897760Z GITHUB_ACTIONS_CACHE_MODE: write 2026-10-24T23:04:43.0897888Z ##[endgroup] 2026-10-24T23:04:43.0970707Z Docker container cache not activated, skipping hash computation. 2026-10-24T23:04:43.1215510Z No active SSH sessions detected. Proceeding with shutdown immediately. 2026-10-24T23:04:43.1262611Z Cleaning up orphan processes