2026-10-23T06:45:00.2062739Z Current runner version: '2.337.0' 2026-10-23T06:45:00.2066425Z Runner name: 'blacksmith-8vcpu-ubuntu-2404-rv2v3jm63cpwnigq' 2026-10-23T06:45:00.2067132Z Runner group name: 'blacksmith scale sets - blacksmith-8vcpu-ubuntu-2404' 2026-10-23T06:45:00.2067933Z Machine name: 'ip-172-31-73-130' 2026-10-23T06:45:00.2069764Z ##[group]GITHUB_TOKEN Permissions 2026-10-23T06:45:00.2071138Z Contents: read 2026-10-23T06:45:00.2071508Z Metadata: read 2026-10-23T06:45:00.2072031Z ##[endgroup] 2026-10-23T06:45:00.2073254Z Secret source: Actions 2026-10-23T06:45:00.2074016Z Cache mode: write 2026-10-23T06:45:00.2074542Z Prepare workflow directory 2026-10-23T06:45:00.2251571Z Prepare all required actions 2026-10-23T06:45:00.2278086Z Getting action download info 2026-10-23T06:45:00.3364345Z Download action repository 'actions/checkout@v6' (SHA:d23441a48e516b6c34aea4fa41551a30e30af803) 2026-10-23T06:45:00.3787887Z Download action repository 'actions/cache@v6' (SHA:55cc8345863c7cc4c66a329aec7e433d2d1c52a9) 2026-10-23T06:45:00.5067079Z Setting BLACKSMITH_ACTIONS_RESULTS_URL to https://results-receiver.actions.githubusercontent.com/ 2026-10-23T06:45:00.5106796Z Complete job name: Lint 2026-10-23T06:45:00.5453279Z A job started hook has been configured by the self-hosted runner administrator 2026-10-23T06:45:00.5517252Z ##[group]Run '/setup.sh' 2026-10-23T06:45:00.5529513Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-23T06:45:00.5529927Z env: 2026-10-23T06:45:00.5530158Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 155 2026-10-23T06:45:00.5530453Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 367 2026-10-23T06:45:00.5530739Z BLACKSMITH_CHECK_RUN_ID: 120281317441 2026-10-23T06:45:00.5531027Z BLACKSMITH_JOB_DISPLAY_NAME: Lint 2026-10-23T06:45:00.5531305Z GITHUB_ACTIONS_CACHE_MODE: write 2026-10-23T06:45:00.5531573Z ##[endgroup] 2026-10-23T06:45:00.5767518Z Logging daemon started (blacksmithd for logs) 2026-10-23T06:45:00.5895889Z Results daemon started (blacksmithd for results) 2026-10-23T06:45:00.6045158Z Background adoption and SSH setup started (PID: 3151) 2026-10-23T06:45:00.6048701Z 2026-10-23T06:45:00.6048881Z ---------------------------------------- 2026-10-23T06:45:00.6049438Z View this job: https://app.blacksmith.sh/pingdotgg/runs/39913393625/jobs/120281317441 2026-10-23T06:45:00.6049897Z SSH Access (using your GitHub SSH key): 2026-10-23T06:45:00.6050325Z ssh -p 64000 runner@blacksmith-8vcpu-ubuntu-2404-rv2v3jm63cpwnigq.vm.blacksmith.sh 2026-10-23T06:45:00.6050633Z 2026-10-23T06:45:00.6050747Z No GitHub SSH key? Add one at: 2026-10-23T06:45:00.6051233Z https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account 2026-10-23T06:45:00.6051634Z 2026-10-23T06:45:00.6051747Z ---------------------------------------- 2026-10-23T06:45:00.6051925Z 2026-10-23T06:45:00.6052067Z VM ID: blacksmith-8vcpu-ubuntu-2404-rv2v3jm63cpwnigq 2026-10-23T06:45:00.6052577Z Host: production-152.236.41.164-x8664 2026-10-23T06:45:00.6052856Z Host Agent PID: 3302394 2026-10-23T06:45:00.6053114Z Host Agent Git SHA: af74fd76b 2026-10-23T06:45:00.6053383Z Host CPU Manufacturer: AuthenticAMD 2026-10-23T06:45:00.6053667Z Blacksmith Host Generation: gen 2 2026-10-23T06:45:00.6053963Z Petname: production-hardy-ram-ae8b080b 2026-10-23T06:45:00.6054241Z Region: us-east 2026-10-23T06:45:00.6054488Z Rootfs Version: ubuntu24-full-x64-081926 2026-10-23T06:45:00.6063408Z OS Version: Ubuntu 24.04.4 LTS 2026-10-23T06:45:00.6063809Z 2026-10-23T06:45:00.6063933Z Enabling Blacksmith transparent cache 2026-10-23T06:45:00.6293497Z ##[group]Run actions/checkout@v6 2026-10-23T06:45:00.6293802Z with: 2026-10-23T06:45:00.6294130Z sparse-checkout: /* !/.repos/ !/apps/mobile/modules/t3-terminal/Vendor/**/*.a 2026-10-23T06:45:00.6294531Z sparse-checkout-cone-mode: false 2026-10-23T06:45:00.6294807Z repository: pingdotgg/t3code 2026-10-23T06:45:00.6296605Z token: *** 2026-10-23T06:45:00.6296822Z ssh-strict: true 2026-10-23T06:45:00.6297049Z ssh-user: git 2026-10-23T06:45:00.6297276Z persist-credentials: true 2026-10-23T06:45:00.6297733Z clean: true 2026-10-23T06:45:00.6297950Z fetch-depth: 1 2026-10-23T06:45:00.6298175Z fetch-tags: false 2026-10-23T06:45:00.6298407Z show-progress: true 2026-10-23T06:45:00.6298689Z lfs: false 2026-10-23T06:45:00.6298906Z submodules: false 2026-10-23T06:45:00.6299139Z set-safe-directory: true 2026-10-23T06:45:00.6299400Z allow-unsafe-pr-checkout: false 2026-10-23T06:45:00.6299662Z env: 2026-10-23T06:45:00.6299907Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 155 2026-10-23T06:45:00.6300200Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 367 2026-10-23T06:45:00.6300485Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T06:45:00.6300752Z ##[endgroup] 2026-10-23T06:45:00.7371356Z Syncing repository: pingdotgg/t3code 2026-10-23T06:45:00.7372619Z ##[group]Getting Git version info 2026-10-23T06:45:00.7373128Z Working directory is '/home/runner/_work/t3code/t3code' 2026-10-23T06:45:00.7373818Z [command]/usr/local/bin/git version 2026-10-23T06:45:00.7451823Z git version 2.55.0 2026-10-23T06:45:00.7461937Z ##[endgroup] 2026-10-23T06:45:00.7468556Z Temporarily overriding HOME='/home/runner/_work/_temp/408bcc34-36aa-4d0b-9f41-8ced876eaad5' before making global git config changes 2026-10-23T06:45:00.7469268Z Adding repository directory to the temporary git global config as a safe directory 2026-10-23T06:45:00.7471810Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code 2026-10-23T06:45:00.7504339Z Deleting the contents of '/home/runner/_work/t3code/t3code' 2026-10-23T06:45:00.7505991Z ##[group]Determining repository object format 2026-10-23T06:45:00.7506759Z ##[endgroup] 2026-10-23T06:45:00.7507149Z ##[group]Initializing the repository 2026-10-23T06:45:00.7509469Z [command]/usr/local/bin/git init /home/runner/_work/t3code/t3code 2026-10-23T06:45:00.7544955Z hint: Using 'master' as the name for the initial branch. This default branch name 2026-10-23T06:45:00.7545448Z hint: will change to "main" in Git 3.0. To configure the initial branch name 2026-10-23T06:45:00.7545923Z hint: to use in all of your new repositories, which will suppress this warning, 2026-10-23T06:45:00.7546288Z hint: call: 2026-10-23T06:45:00.7546501Z hint: 2026-10-23T06:45:00.7546777Z hint: git config --global init.defaultBranch 2026-10-23T06:45:00.7547084Z hint: 2026-10-23T06:45:00.7547383Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and 2026-10-23T06:45:00.7547832Z hint: 'development'. The just-created branch can be renamed via this command: 2026-10-23T06:45:00.7548206Z hint: 2026-10-23T06:45:00.7548426Z hint: git branch -m 2026-10-23T06:45:00.7548704Z hint: 2026-10-23T06:45:00.7549020Z hint: Disable this message with "git config set advice.defaultBranchName false" 2026-10-23T06:45:00.7549557Z Initialized empty Git repository in /home/runner/_work/t3code/t3code/.git/ 2026-10-23T06:45:00.7550477Z [command]/usr/local/bin/git remote add origin https://github.com/pingdotgg/t3code 2026-10-23T06:45:00.7578967Z ##[endgroup] 2026-10-23T06:45:00.7579355Z ##[group]Disabling automatic garbage collection 2026-10-23T06:45:00.7581382Z [command]/usr/local/bin/git config --local gc.auto 0 2026-10-23T06:45:00.7602614Z ##[endgroup] 2026-10-23T06:45:00.7602975Z ##[group]Setting up auth 2026-10-23T06:45:00.7603533Z Removing SSH command configuration 2026-10-23T06:45:00.7606809Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand 2026-10-23T06:45:00.7632093Z [command]/usr/local/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :" 2026-10-23T06:45:00.7787488Z Removing HTTP extra header 2026-10-23T06:45:00.7791090Z [command]/usr/local/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader 2026-10-23T06:45:00.7817124Z [command]/usr/local/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :" 2026-10-23T06:45:00.7925859Z Removing includeIf entries pointing to credentials config files 2026-10-23T06:45:00.7928851Z [command]/usr/local/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir: 2026-10-23T06:45:00.7953220Z [command]/usr/local/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url 2026-10-23T06:45:00.8072756Z [command]/usr/local/bin/git config --file /home/runner/_work/_temp/git-credentials-ff13e794-b6b7-4300-80b7-eae072d184a5.config http.https://github.com/.extraheader AUTHORIZATION: basic *** 2026-10-23T06:45:00.8100678Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git.path /home/runner/_work/_temp/git-credentials-ff13e794-b6b7-4300-80b7-eae072d184a5.config 2026-10-23T06:45:00.8123203Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git/worktrees/*.path /home/runner/_work/_temp/git-credentials-ff13e794-b6b7-4300-80b7-eae072d184a5.config 2026-10-23T06:45:00.8145989Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git.path /github/runner_temp/git-credentials-ff13e794-b6b7-4300-80b7-eae072d184a5.config 2026-10-23T06:45:00.8169748Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git/worktrees/*.path /github/runner_temp/git-credentials-ff13e794-b6b7-4300-80b7-eae072d184a5.config 2026-10-23T06:45:00.8189069Z ##[endgroup] 2026-10-23T06:45:00.8189509Z ##[group]Fetching the repository 2026-10-23T06:45:00.8193639Z [command]/usr/local/bin/git -c protocol.version=2 fetch --no-tags --prune --no-recurse-submodules --filter=blob:none --depth=1 origin +e64a6d4ca84e8f7adab8066173d432e76ebf1996:refs/remotes/origin/main 2026-10-23T06:45:01.1142601Z From https://github.com/pingdotgg/t3code 2026-10-23T06:45:01.1143528Z * [new ref] e64a6d4ca84e8f7adab8066173d432e76ebf1996 -> origin/main 2026-10-23T06:45:01.1174512Z [command]/usr/local/bin/git branch --list --remote origin/main 2026-10-23T06:45:01.1194910Z origin/main 2026-10-23T06:45:01.1199373Z [command]/usr/local/bin/git rev-parse refs/remotes/origin/main 2026-10-23T06:45:01.1217767Z e64a6d4ca84e8f7adab8066173d432e76ebf1996 2026-10-23T06:45:01.1220158Z ##[endgroup] 2026-10-23T06:45:01.1221045Z ##[group]Determining the checkout info 2026-10-23T06:45:01.1222001Z ##[endgroup] 2026-10-23T06:45:01.1222983Z ##[group]Setting up sparse checkout 2026-10-23T06:45:01.1223739Z [command]/usr/local/bin/git config core.sparseCheckout true 2026-10-23T06:45:01.1247679Z [command]/usr/local/bin/git rev-parse --git-path info/sparse-checkout 2026-10-23T06:45:01.1264754Z .git/info/sparse-checkout 2026-10-23T06:45:01.1268467Z ##[endgroup] 2026-10-23T06:45:01.1269716Z ##[group]Checking out the ref 2026-10-23T06:45:01.1271046Z [command]/usr/local/bin/git checkout --progress --force -B main refs/remotes/origin/main 2026-10-23T06:45:10.1909471Z Updating files: 0% (1/6311) 2026-10-23T06:45:10.1938190Z Updating files: 1% (64/6311) 2026-10-23T06:45:10.1957173Z Updating files: 2% (127/6311) 2026-10-23T06:45:10.1979443Z Updating files: 3% (190/6311) 2026-10-23T06:45:10.2001830Z Updating files: 4% (253/6311) 2026-10-23T06:45:10.2034425Z Updating files: 5% (316/6311) 2026-10-23T06:45:10.2056482Z Updating files: 6% (379/6311) 2026-10-23T06:45:10.2117338Z Updating files: 7% (442/6311) 2026-10-23T06:45:10.2150591Z Updating files: 8% (505/6311) 2026-10-23T06:45:10.2176453Z Updating files: 9% (568/6311) 2026-10-23T06:45:10.2496792Z Updating files: 10% (632/6311) 2026-10-23T06:45:10.2513919Z Updating files: 11% (695/6311) 2026-10-23T06:45:10.2525525Z Updating files: 12% (758/6311) 2026-10-23T06:45:10.2541118Z Updating files: 13% (821/6311) 2026-10-23T06:45:10.2560641Z Updating files: 14% (884/6311) 2026-10-23T06:45:10.2579399Z Updating files: 15% (947/6311) 2026-10-23T06:45:10.2599178Z Updating files: 16% (1010/6311) 2026-10-23T06:45:10.2614664Z Updating files: 17% (1073/6311) 2026-10-23T06:45:10.2634450Z Updating files: 18% (1136/6311) 2026-10-23T06:45:10.2650253Z Updating files: 19% (1200/6311) 2026-10-23T06:45:10.2675322Z Updating files: 20% (1263/6311) 2026-10-23T06:45:10.2694267Z Updating files: 21% (1326/6311) 2026-10-23T06:45:10.2714640Z Updating files: 22% (1389/6311) 2026-10-23T06:45:10.2729034Z Updating files: 23% (1452/6311) 2026-10-23T06:45:10.2743026Z Updating files: 24% (1515/6311) 2026-10-23T06:45:10.2759557Z Updating files: 25% (1578/6311) 2026-10-23T06:45:10.2774152Z Updating files: 26% (1641/6311) 2026-10-23T06:45:10.2792028Z Updating files: 27% (1704/6311) 2026-10-23T06:45:10.2812372Z Updating files: 28% (1768/6311) 2026-10-23T06:45:10.2847260Z Updating files: 29% (1831/6311) 2026-10-23T06:45:10.2867887Z Updating files: 30% (1894/6311) 2026-10-23T06:45:10.2892999Z Updating files: 31% (1957/6311) 2026-10-23T06:45:10.2925020Z Updating files: 32% (2020/6311) 2026-10-23T06:45:10.2956181Z Updating files: 33% (2083/6311) 2026-10-23T06:45:10.3030200Z Updating files: 34% (2146/6311) 2026-10-23T06:45:10.3088396Z Updating files: 35% (2209/6311) 2026-10-23T06:45:10.3123407Z Updating files: 36% (2272/6311) 2026-10-23T06:45:10.3161003Z Updating files: 37% (2336/6311) 2026-10-23T06:45:10.3208928Z Updating files: 38% (2399/6311) 2026-10-23T06:45:10.3236544Z Updating files: 39% (2462/6311) 2026-10-23T06:45:10.3269904Z Updating files: 40% (2525/6311) 2026-10-23T06:45:10.3306693Z Updating files: 41% (2588/6311) 2026-10-23T06:45:10.3324299Z Updating files: 42% (2651/6311) 2026-10-23T06:45:10.3335346Z Updating files: 43% (2714/6311) 2026-10-23T06:45:10.3356710Z Updating files: 44% (2777/6311) 2026-10-23T06:45:10.3388511Z Updating files: 45% (2840/6311) 2026-10-23T06:45:10.3413794Z Updating files: 46% (2904/6311) 2026-10-23T06:45:10.3443651Z Updating files: 47% (2967/6311) 2026-10-23T06:45:10.3473585Z Updating files: 48% (3030/6311) 2026-10-23T06:45:10.3508525Z Updating files: 49% (3093/6311) 2026-10-23T06:45:10.3548162Z Updating files: 50% (3156/6311) 2026-10-23T06:45:10.3565760Z Updating files: 51% (3219/6311) 2026-10-23T06:45:10.3600896Z Updating files: 52% (3282/6311) 2026-10-23T06:45:10.3629288Z Updating files: 53% (3345/6311) 2026-10-23T06:45:10.3651732Z Updating files: 54% (3408/6311) 2026-10-23T06:45:10.3677115Z Updating files: 55% (3472/6311) 2026-10-23T06:45:10.3697281Z Updating files: 56% (3535/6311) 2026-10-23T06:45:10.3718042Z Updating files: 57% (3598/6311) 2026-10-23T06:45:10.3738855Z Updating files: 58% (3661/6311) 2026-10-23T06:45:10.4142328Z Updating files: 59% (3724/6311) 2026-10-23T06:45:10.4155447Z Updating files: 60% (3787/6311) 2026-10-23T06:45:10.4172905Z Updating files: 61% (3850/6311) 2026-10-23T06:45:10.4192573Z Updating files: 62% (3913/6311) 2026-10-23T06:45:10.4215651Z Updating files: 63% (3976/6311) 2026-10-23T06:45:10.4244859Z Updating files: 64% (4040/6311) 2026-10-23T06:45:10.4267408Z Updating files: 65% (4103/6311) 2026-10-23T06:45:10.4284661Z Updating files: 66% (4166/6311) 2026-10-23T06:45:10.4311243Z Updating files: 67% (4229/6311) 2026-10-23T06:45:10.4325139Z Updating files: 68% (4292/6311) 2026-10-23T06:45:10.4345534Z Updating files: 69% (4355/6311) 2026-10-23T06:45:10.4361282Z Updating files: 70% (4418/6311) 2026-10-23T06:45:10.4378662Z Updating files: 71% (4481/6311) 2026-10-23T06:45:10.4396659Z Updating files: 72% (4544/6311) 2026-10-23T06:45:10.4423791Z Updating files: 73% (4608/6311) 2026-10-23T06:45:10.4702157Z Updating files: 74% (4671/6311) 2026-10-23T06:45:10.4904094Z Updating files: 75% (4734/6311) 2026-10-23T06:45:10.4927194Z Updating files: 76% (4797/6311) 2026-10-23T06:45:10.4948601Z Updating files: 77% (4860/6311) 2026-10-23T06:45:10.4978932Z Updating files: 78% (4923/6311) 2026-10-23T06:45:10.4998925Z Updating files: 79% (4986/6311) 2026-10-23T06:45:10.5019477Z Updating files: 80% (5049/6311) 2026-10-23T06:45:10.5037902Z Updating files: 81% (5112/6311) 2026-10-23T06:45:10.5058585Z Updating files: 82% (5176/6311) 2026-10-23T06:45:10.5078141Z Updating files: 83% (5239/6311) 2026-10-23T06:45:10.5100553Z Updating files: 84% (5302/6311) 2026-10-23T06:45:10.5121867Z Updating files: 85% (5365/6311) 2026-10-23T06:45:10.5146849Z Updating files: 86% (5428/6311) 2026-10-23T06:45:10.5221290Z Updating files: 87% (5491/6311) 2026-10-23T06:45:10.5255149Z Updating files: 88% (5554/6311) 2026-10-23T06:45:10.5274665Z Updating files: 89% (5617/6311) 2026-10-23T06:45:10.5301157Z Updating files: 90% (5680/6311) 2026-10-23T06:45:10.5339741Z Updating files: 91% (5744/6311) 2026-10-23T06:45:10.5355813Z Updating files: 92% (5807/6311) 2026-10-23T06:45:10.5372932Z Updating files: 93% (5870/6311) 2026-10-23T06:45:10.5395993Z Updating files: 94% (5933/6311) 2026-10-23T06:45:10.5429053Z Updating files: 95% (5996/6311) 2026-10-23T06:45:10.5478983Z Updating files: 96% (6059/6311) 2026-10-23T06:45:10.5505414Z Updating files: 97% (6122/6311) 2026-10-23T06:45:10.5557904Z Updating files: 98% (6185/6311) 2026-10-23T06:45:10.5577950Z Updating files: 99% (6248/6311) 2026-10-23T06:45:10.5578165Z Updating files: 100% (6311/6311) 2026-10-23T06:45:10.5578530Z Updating files: 100% (6311/6311), done. 2026-10-23T06:45:10.5745891Z Switched to a new branch 'main' 2026-10-23T06:45:10.5746733Z branch 'main' set up to track 'origin/main'. 2026-10-23T06:45:10.5760804Z ##[endgroup] 2026-10-23T06:45:10.5796059Z [command]/usr/local/bin/git log -1 --format=%H 2026-10-23T06:45:10.5823214Z e64a6d4ca84e8f7adab8066173d432e76ebf1996 2026-10-23T06:45:10.5909769Z ##[group]Run files="$(git ls-files .github/pr-assets)" 2026-10-23T06:45:10.5910012Z files="$(git ls-files .github/pr-assets)" 2026-10-23T06:45:10.5910205Z if test -n "$files"; then 2026-10-23T06:45:10.5910447Z  printf 'PR evidence must be uploaded to GitHub, not committed:\n%s\n' "$files" >&2 2026-10-23T06:45:10.5910667Z  exit 1 2026-10-23T06:45:10.5910777Z fi 2026-10-23T06:45:10.5925178Z shell: /usr/bin/bash -e {0} 2026-10-23T06:45:10.5925318Z env: 2026-10-23T06:45:10.5925442Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 155 2026-10-23T06:45:10.5925618Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 367 2026-10-23T06:45:10.5925767Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T06:45:10.5925905Z ##[endgroup] 2026-10-23T06:45:10.6079510Z Prepare all required actions 2026-10-23T06:45:10.6079846Z Getting action download info 2026-10-23T06:45:10.6890154Z Download action repository 'voidzero-dev/setup-vp@v1' (SHA:250f29ce396baf5e8f24498e17c0dfdebabc26eb) 2026-10-23T06:45:10.7813115Z ##[group]Run ./.github/actions/setup-ci-deps 2026-10-23T06:45:10.7813284Z env: 2026-10-23T06:45:10.7813405Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 155 2026-10-23T06:45:10.7813559Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 367 2026-10-23T06:45:10.7813710Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T06:45:10.7813852Z ##[endgroup] 2026-10-23T06:45:10.7892062Z ##[start-action display=Resolve Vite+ version;id=__self.vp] 2026-10-23T06:45:10.7904630Z ##[group]Run echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-23T06:45:10.7905054Z echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-23T06:45:10.7905356Z echo "node=$(jq -r '.engines.node' package.json)" >> "$GITHUB_OUTPUT" 2026-10-23T06:45:10.7905606Z echo "pnpm=$(jq -r '.packageManager' package.json)" >> "$GITHUB_OUTPUT" 2026-10-23T06:45:10.7916744Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-23T06:45:10.7916916Z env: 2026-10-23T06:45:10.7917035Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 155 2026-10-23T06:45:10.7917185Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 367 2026-10-23T06:45:10.7917334Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T06:45:10.7917472Z ##[endgroup] 2026-10-23T06:45:10.7997638Z ##[end-action id=__self.vp;outcome=success;conclusion=success;duration_ms=10] 2026-10-23T06:45:10.7999762Z ##[start-action display=Cache Vite+;id=__self.vp_cache] 2026-10-23T06:45:10.8044075Z ##[group]Run actions/cache@v6 2026-10-23T06:45:10.8044221Z with: 2026-10-23T06:45:10.8044537Z path: ~/.vite-plus 2026-10-23T06:45:10.8044756Z key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-23T06:45:10.8044970Z enableCrossOsArchive: false 2026-10-23T06:45:10.8045107Z fail-on-cache-miss: false 2026-10-23T06:45:10.8045239Z lookup-only: false 2026-10-23T06:45:10.8045355Z save-always: false 2026-10-23T06:45:10.8045473Z env: 2026-10-23T06:45:10.8045589Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 155 2026-10-23T06:45:10.8045742Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 367 2026-10-23T06:45:10.8045890Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T06:45:10.8046026Z ##[endgroup] 2026-10-23T06:45:11.0083942Z Cache hit for: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-23T06:45:11.3920082Z Received 170349591 of 170349591 (100.0%), 446.3 MBs/sec 2026-10-23T06:45:11.3920328Z Cache Size: ~162 MB (170349591 B) 2026-10-23T06:45:11.3956624Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/5f589fb6-5dd3-4631-a400-9bb8b592b0fb/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-23T06:45:12.2005438Z Cache restored successfully 2026-10-23T06:45:12.2158776Z Cache restored from key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-23T06:45:12.2248132Z ##[end-action id=__self.vp_cache;outcome=success;conclusion=success;duration_ms=1424] 2026-10-23T06:45:12.2250499Z ##[start-action display=Use cached Vite+;id=__self.__run] 2026-10-23T06:45:12.2268471Z ##[group]Run echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-23T06:45:12.2268698Z echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-23T06:45:12.2268878Z "$HOME/.vite-plus/bin/vp" env use "26.12.1" 2026-10-23T06:45:12.2282594Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-23T06:45:12.2282767Z env: 2026-10-23T06:45:12.2282892Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 155 2026-10-23T06:45:12.2283041Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 367 2026-10-23T06:45:12.2283191Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T06:45:12.2283341Z ##[endgroup] 2026-10-23T06:45:12.2326966Z Using Node.js v26.12.1 (resolved from 26.12.1) 2026-10-23T06:45:12.2335289Z ##[end-action id=__self.__run;outcome=success;conclusion=success;duration_ms=8] 2026-10-23T06:45:12.2336608Z ##[start-action display=Setup Vite+;id=__self.__voidzero-dev_setup-vp] 2026-10-23T06:45:12.2340322Z ##[end-action id=__self.__voidzero-dev_setup-vp;outcome=skipped;conclusion=skipped;duration_ms=0] 2026-10-23T06:45:12.2341440Z ##[start-action display=Resolve pnpm store path;id=__self.pnpm_store] 2026-10-23T06:45:12.2350692Z ##[group]Run store_path="$(vp pm cache dir)" 2026-10-23T06:45:12.2350868Z store_path="$(vp pm cache dir)" 2026-10-23T06:45:12.2351037Z echo "path=$store_path" >> "$GITHUB_OUTPUT" 2026-10-23T06:45:12.2362240Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-23T06:45:12.2362414Z env: 2026-10-23T06:45:12.2362530Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 155 2026-10-23T06:45:12.2362679Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 367 2026-10-23T06:45:12.2362830Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T06:45:12.2362965Z ##[endgroup] 2026-10-23T06:45:12.2505854Z ##[end-action id=__self.pnpm_store;outcome=success;conclusion=success;duration_ms=16] 2026-10-23T06:45:12.2507961Z ##[start-action display=Cache full pnpm store;id=__self.__actions_cache] 2026-10-23T06:45:12.3121550Z ##[group]Run actions/cache@v6 2026-10-23T06:45:12.3121696Z with: 2026-10-23T06:45:12.3121832Z path: /home/runner/.local/share/pnpm/store/v11 2026-10-23T06:45:12.3122099Z key: pnpm-full-v1-Linux-X64-00e587c1edf31fe669c96bc4768c0e07a969fff8e8228235fb75ec6c0abf4161 2026-10-23T06:45:12.3122362Z restore-keys: pnpm-full-v1-Linux-X64- 2026-10-23T06:45:12.3122517Z enableCrossOsArchive: false 2026-10-23T06:45:12.3122659Z fail-on-cache-miss: false 2026-10-23T06:45:12.3122787Z lookup-only: false 2026-10-23T06:45:12.3122909Z save-always: false 2026-10-23T06:45:12.3123030Z env: 2026-10-23T06:45:12.3123157Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 155 2026-10-23T06:45:12.3123477Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 367 2026-10-23T06:45:12.3123692Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T06:45:12.3123895Z ##[endgroup] 2026-10-23T06:45:12.5074880Z Cache hit for: pnpm-full-v1-Linux-X64-00e587c1edf31fe669c96bc4768c0e07a969fff8e8228235fb75ec6c0abf4161 2026-10-23T06:45:13.5291880Z Received 717225984 of 995198885 (72.1%), 682.0 MBs/sec 2026-10-23T06:45:13.9447459Z Received 995198885 of 995198885 (100.0%), 668.8 MBs/sec 2026-10-23T06:45:13.9448285Z Cache Size: ~949 MB (995198885 B) 2026-10-23T06:45:13.9486688Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/fbe74c1d-36c8-446b-af53-f752e8e73a87/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-23T06:45:19.8682612Z Cache restored successfully 2026-10-23T06:45:19.9167782Z Cache restored from key: pnpm-full-v1-Linux-X64-00e587c1edf31fe669c96bc4768c0e07a969fff8e8228235fb75ec6c0abf4161 2026-10-23T06:45:19.9279436Z ##[end-action id=__self.__actions_cache;outcome=success;conclusion=success;duration_ms=7677] 2026-10-23T06:45:19.9281902Z ##[start-action display=Install dependencies;id=__self.__run_2] 2026-10-23T06:45:19.9292225Z ##[group]Run vp install 2026-10-23T06:45:19.9292369Z vp install 2026-10-23T06:45:19.9305647Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-23T06:45:19.9305820Z env: 2026-10-23T06:45:19.9305941Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 155 2026-10-23T06:45:19.9306093Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 367 2026-10-23T06:45:19.9306246Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T06:45:19.9306387Z ##[endgroup] 2026-10-23T06:45:19.9642901Z Scope: all 33 workspace projects 2026-10-23T06:45:20.0647643Z ? Verifying lockfile against supply-chain policies (2088 entries)... 2026-10-23T06:45:20.4113727Z Packages are hard linked from the content-addressable store to the virtual store. 2026-10-23T06:45:20.4114304Z Content-addressable store is at: /home/runner/.local/share/pnpm/store/v11 2026-10-23T06:45:20.4114662Z Virtual store is at: node_modules/.pnpm 2026-10-23T06:45:22.7150897Z ✓ Lockfile passes supply-chain policies (2088 entries in 2.7s) 2026-10-23T06:45:22.7151164Z Lockfile is up to date, resolution step is skipped 2026-10-23T06:45:22.7323669Z Packages: +1721 2026-10-23T06:45:22.7323957Z ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2026-10-23T06:45:22.7630598Z Progress: resolved 1721, reused 1718, downloaded 0, added 1721, done 2026-10-23T06:45:23.8012632Z . prepare$ vp config --no-agent 2026-10-23T06:45:23.8986667Z . prepare: Done 2026-10-23T06:45:23.9002221Z 2026-10-23T06:45:23.9002564Z devDependencies: 2026-10-23T06:45:23.9002752Z + @coderabbitai/config 1.1.0 2026-10-23T06:45:23.9002902Z + @shadcn/lint 0.1.5 2026-10-23T06:45:23.9003070Z + @types/node 24.12.4 2026-10-23T06:45:23.9003201Z + knip 6.34.0 2026-10-23T06:45:23.9003356Z + typescript <- @tsc-rs/typescript 0.8.0 2026-10-23T06:45:23.9003512Z + vite-plus 1.3.0 2026-10-23T06:45:23.9003611Z 2026-10-23T06:45:23.9021578Z Done in 4s using pnpm v12.14.0 2026-10-23T06:45:23.9223434Z ##[end-action id=__self.__run_2;outcome=success;conclusion=success;duration_ms=3994] 2026-10-23T06:45:23.9782936Z ##[group]Run actions/cache@v6 2026-10-23T06:45:23.9783111Z with: 2026-10-23T06:45:23.9783231Z path: ~/.cache/electron 2026-10-23T06:45:23.9783476Z key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-23T06:45:23.9783717Z enableCrossOsArchive: false 2026-10-23T06:45:23.9783857Z fail-on-cache-miss: false 2026-10-23T06:45:23.9783984Z lookup-only: false 2026-10-23T06:45:23.9784101Z save-always: false 2026-10-23T06:45:23.9784214Z env: 2026-10-23T06:45:23.9784329Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 155 2026-10-23T06:45:23.9784480Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 367 2026-10-23T06:45:23.9784642Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T06:45:23.9784782Z ##[endgroup] 2026-10-23T06:45:24.1773151Z Cache hit for: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-23T06:45:24.3526132Z Received 122906203 of 122906203 (100.0%), 741.9 MBs/sec 2026-10-23T06:45:24.3526682Z Cache Size: ~117 MB (122906203 B) 2026-10-23T06:45:24.3578079Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/69aaf022-7702-42a3-a0f7-1eec3a7a1ab0/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-23T06:45:24.4371649Z Cache restored successfully 2026-10-23T06:45:24.4510722Z Cache restored from key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-23T06:45:24.4615156Z ##[group]Run vp run --filter @t3tools/desktop ensure:electron 2026-10-23T06:45:24.4615592Z vp run --filter @t3tools/desktop ensure:electron 2026-10-23T06:45:24.4633133Z shell: /usr/bin/bash -e {0} 2026-10-23T06:45:24.4633291Z env: 2026-10-23T06:45:24.4633597Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 155 2026-10-23T06:45:24.4633769Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 367 2026-10-23T06:45:24.4633929Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T06:45:24.4634074Z ##[endgroup] 2026-10-23T06:45:24.6436241Z ~/apps/desktop$ node scripts/ensure-electron-runtime.mjs ⊘ cache disabled 2026-10-23T06:45:25.2425612Z /home/runner/_work/t3code/t3code/node_modules/.pnpm/electron@44.9.3_supports-color@8.1.1/node_modules/electron/dist/electron 2026-10-23T06:45:25.2443466Z 2026-10-23T06:45:25.2531680Z ##[group]Run vp run knip:check 2026-10-23T06:45:25.2531858Z vp run knip:check 2026-10-23T06:45:25.2545604Z shell: /usr/bin/bash -e {0} 2026-10-23T06:45:25.2545731Z env: 2026-10-23T06:45:25.2545851Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 155 2026-10-23T06:45:25.2546000Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 367 2026-10-23T06:45:25.2546148Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T06:45:25.2546286Z ##[endgroup] 2026-10-23T06:45:25.4115853Z $ knip --include files,dependencies --no-config-hints ⊘ cache disabled 2026-10-23T06:45:29.4556698Z 2026-10-23T06:45:29.4559803Z $ knip --workspace apps/server --workspace apps/desktop --workspace apps/web --workspace packages/client-runtime --workspace packages/contracts --workspace packages/effect-acp --workspace packages/effect-codex-app-server --workspace packages/shared --workspace packages/ssh --workspace packages/tailscale --workspace packages/provider-core --workspace packages/provider-acp --workspace packages/provider-acp-registry --workspace packages/provider-testing --workspace packages/provider-pi --workspace packages/provider-muse --workspace packages/provider-opencode --workspace packages/provider-cursor --workspace packages/provider-grok --workspace packages/source-control-core --workspace packages/source-control-azure-devops --workspace packages/source-control-bitbucket --workspace packages/source-control-forgejo --workspace packages/source-control-gitcafe --workspace packages/source-control-github --workspace packages/source-control-gitlab --workspace packages/source-control-testing --exports --preprocessor ./scripts/knip-schemas.ts --no-config-hints ⊘ cache disabled 2026-10-23T06:45:59.3668459Z 2026-10-23T06:45:59.3669680Z --- 2026-10-23T06:45:59.3670007Z vp run: 2/2 successful. (Run `vp run --last-details` for full details) 2026-10-23T06:45:59.3758410Z ##[group]Run vp run --filter @t3tools/source-control-github generate --check 2026-10-23T06:45:59.3758722Z vp run --filter @t3tools/source-control-github generate --check 2026-10-23T06:45:59.3772842Z shell: /usr/bin/bash -e {0} 2026-10-23T06:45:59.3772984Z env: 2026-10-23T06:45:59.3773103Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 155 2026-10-23T06:45:59.3773263Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 367 2026-10-23T06:45:59.3773413Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T06:45:59.3773560Z ##[endgroup] 2026-10-23T06:45:59.5303301Z ~/packages/source-control-github$ graphqlgen --check ⊘ cache disabled 2026-10-23T06:45:59.7361262Z 2026-10-23T06:45:59.7470186Z ##[group]Run vp run --filter t3 generate --check 2026-10-23T06:45:59.7470531Z vp run --filter t3 generate --check 2026-10-23T06:45:59.7485605Z shell: /usr/bin/bash -e {0} 2026-10-23T06:45:59.7485799Z env: 2026-10-23T06:45:59.7485937Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 155 2026-10-23T06:45:59.7486091Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 367 2026-10-23T06:45:59.7486238Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T06:45:59.7486381Z ##[endgroup] 2026-10-23T06:45:59.9020919Z ~/apps/server$ graphqlgen --check ⊘ cache disabled 2026-10-23T06:46:00.0622746Z 2026-10-23T06:46:00.0701531Z ##[group]Run vp check 2026-10-23T06:46:00.0701703Z vp check 2026-10-23T06:46:00.0715233Z shell: /usr/bin/bash -e {0} 2026-10-23T06:46:00.0715364Z env: 2026-10-23T06:46:00.0715482Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 155 2026-10-23T06:46:00.0715636Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 367 2026-10-23T06:46:00.0715780Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T06:46:00.0715922Z ##[endgroup] 2026-10-23T06:46:00.6466117Z pass: All 5669 files are correctly formatted (419ms, 8 threads) 2026-10-23T06:46:06.0343141Z warn: Lint warnings found 2026-10-23T06:46:06.0345627Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T06:46:06.0346100Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:444:5] 2026-10-23T06:46:06.0346380Z 434 │ : null; 2026-10-23T06:46:06.0346552Z 435 │ useEffect(() => { 2026-10-23T06:46:06.0346756Z ·  ────┬──── 2026-10-23T06:46:06.0347004Z · ╰── This is the containing effect 2026-10-23T06:46:06.0347207Z 436 │ if ( 2026-10-23T06:46:06.0347362Z 437 │ props.active === false || 2026-10-23T06:46:06.0347542Z 438 │ activeDraftKey !== null || 2026-10-23T06:46:06.0347745Z 439 │ editingPendingTask !== null || 2026-10-23T06:46:06.0347933Z 440 │ selectedProject === null 2026-10-23T06:46:06.0348111Z 441 │ ) { 2026-10-23T06:46:06.0348251Z 442 │ return; 2026-10-23T06:46:06.0348384Z 443 │ } 2026-10-23T06:46:06.0348567Z 444 │ setActiveDraftKey( 2026-10-23T06:46:06.0348745Z ·  ────────┬──────── 2026-10-23T06:46:06.0349038Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T06:46:06.0349769Z 445 │ createNewTaskDraft({ 2026-10-23T06:46:06.0349927Z ╰──── 2026-10-23T06:46:06.0350617Z  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-23T06:46:06.0351561Z  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-23T06:46:06.0351887Z 2026-10-23T06:46:06.0352152Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-23T06:46:06.0352574Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:1244:36] 2026-10-23T06:46:06.0352875Z 1243 │ 2026-10-23T06:46:06.0353205Z 1244 │ {props.children} 2026-10-23T06:46:06.0353524Z ·  ───────────── 2026-10-23T06:46:06.0353729Z 1245 │ 2026-10-23T06:46:06.0353881Z ╰──── 2026-10-23T06:46:06.0354180Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-23T06:46:06.0354549Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-23T06:46:06.0354732Z 2026-10-23T06:46:06.0355004Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T06:46:06.0355414Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:512:5] 2026-10-23T06:46:06.0355649Z 510 │ }, []); 2026-10-23T06:46:06.0355793Z 511 │ useEffect(() => { 2026-10-23T06:46:06.0355959Z ·  ────┬──── 2026-10-23T06:46:06.0356187Z · ╰── This is the containing effect 2026-10-23T06:46:06.0356420Z 512 │ setKeyboardStateSuspect(false); 2026-10-23T06:46:06.0356623Z ·  ───────────┬─────────── 2026-10-23T06:46:06.0357105Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T06:46:06.0357466Z 513 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-23T06:46:06.0357641Z ╰──── 2026-10-23T06:46:06.0358317Z  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-23T06:46:06.0359247Z  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-23T06:46:06.0359558Z 2026-10-23T06:46:06.0359833Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T06:46:06.0360242Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:872:7] 2026-10-23T06:46:06.0360567Z 869 │ const [lastKnownKeyboardHeight, setLastKnownKeyboardHeight] = useState(0); 2026-10-23T06:46:06.0360809Z 870 │ useEffect(() => { 2026-10-23T06:46:06.0360970Z ·  ────┬──── 2026-10-23T06:46:06.0361192Z · ╰── This is the containing effect 2026-10-23T06:46:06.0361492Z 871 │ if (liveKeyboardHeight > 0 && liveKeyboardHeight !== lastKnownKeyboardHeight) { 2026-10-23T06:46:06.0361778Z 872 │ setLastKnownKeyboardHeight(liveKeyboardHeight); 2026-10-23T06:46:06.0362009Z ·  ─────────────┬──────────── 2026-10-23T06:46:06.0362306Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T06:46:06.0362547Z 873 │ } 2026-10-23T06:46:06.0362670Z ╰──── 2026-10-23T06:46:06.0363333Z  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-23T06:46:06.0364204Z  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-23T06:46:06.0364511Z 2026-10-23T06:46:06.0364777Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T06:46:06.0365220Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1119:5] 2026-10-23T06:46:06.0365451Z 1117 │ 2026-10-23T06:46:06.0365585Z 1118 │ useEffect(() => { 2026-10-23T06:46:06.0365750Z ·  ────┬──── 2026-10-23T06:46:06.0365975Z · ╰── This is the containing effect 2026-10-23T06:46:06.0366197Z 1119 │ setAnchorMessageId(null); 2026-10-23T06:46:06.0366383Z ·  ─────────┬──────── 2026-10-23T06:46:06.0366663Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T06:46:06.0366917Z 1120 │ setSubmittedMessageId(null); 2026-10-23T06:46:06.0367080Z ╰──── 2026-10-23T06:46:06.0367832Z  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-23T06:46:06.0368793Z  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-23T06:46:06.0369119Z 2026-10-23T06:46:06.0369325Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T06:46:06.0369686Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:513:7] 2026-10-23T06:46:06.0369938Z 512 │ setKeyboardStateSuspect(false); 2026-10-23T06:46:06.0370151Z 513 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-23T06:46:06.0370418Z ·  ────────┬──────── ─────────┬──────── 2026-10-23T06:46:06.0370782Z · │ ╰── Unnecessary dependency `liveKeyboardHeight` 2026-10-23T06:46:06.0371144Z · ╰── Unnecessary dependency `isKeyboardVisible` 2026-10-23T06:46:06.0371447Z 514 │ const handleOwnedInputFocusChange = (focused: boolean) => { 2026-10-23T06:46:06.0371646Z ╰──── 2026-10-23T06:46:06.0372010Z  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-23T06:46:06.0372603Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.0372905Z 2026-10-23T06:46:06.0373114Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T06:46:06.0373480Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1067:7] 2026-10-23T06:46:06.0373737Z 1066 │ userInputInsetProgress.set(1); 2026-10-23T06:46:06.0374012Z 1067 │ }, [activeUserInputRequestId, userInputCardProgress, userInputInsetProgress]); 2026-10-23T06:46:06.0374290Z ·  ────────────┬─────────── 2026-10-23T06:46:06.0374579Z · ╰── Unnecessary dependency `activeUserInputRequestId` 2026-10-23T06:46:06.0374867Z 1068 │ const showContent = props.showContent ?? true; 2026-10-23T06:46:06.0375042Z ╰──── 2026-10-23T06:46:06.0375841Z  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-23T06:46:06.0376445Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.0376753Z 2026-10-23T06:46:06.0376958Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T06:46:06.0377318Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1125:15] 2026-10-23T06:46:06.0377557Z 1124 │ freeze.set(false); 2026-10-23T06:46:06.0377734Z 1125 │ }, [freeze, selectedThreadKey]); 2026-10-23T06:46:06.0377941Z ·  ────────┬──────── 2026-10-23T06:46:06.0378218Z · ╰── Unnecessary dependency `selectedThreadKey` 2026-10-23T06:46:06.0378475Z 1126 │ 2026-10-23T06:46:06.0378592Z ╰──── 2026-10-23T06:46:06.0379016Z  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-23T06:46:06.0379697Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.0379999Z 2026-10-23T06:46:06.0380170Z ⚠ react(immutability): This value cannot be modified 2026-10-23T06:46:06.0380486Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:955:5] 2026-10-23T06:46:06.0380765Z 950 │ const composerPopoverHeight = useSharedValue(0); 2026-10-23T06:46:06.0380998Z 951 │ const floatingControlCoverage = useSharedValue( 2026-10-23T06:46:06.0381219Z ·  ───────────┬─────────── 2026-10-23T06:46:06.0381495Z · ╰── `floatingControlCoverage` originates here 2026-10-23T06:46:06.0381793Z 952 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-23T06:46:06.0382000Z 953 │ ); 2026-10-23T06:46:06.0382134Z 954 │ useEffect(() => { 2026-10-23T06:46:06.0382328Z 955 │ floatingControlCoverage.value = withTiming( 2026-10-23T06:46:06.0382542Z ·  ───────────┬─────────── 2026-10-23T06:46:06.0382813Z · ╰── `floatingControlCoverage` cannot be modified 2026-10-23T06:46:06.0383105Z 956 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-23T06:46:06.0383302Z ╰──── 2026-10-23T06:46:06.0383630Z  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-23T06:46:06.0384208Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T06:46:06.0384509Z 2026-10-23T06:46:06.0384671Z ⚠ react(immutability): This value cannot be modified 2026-10-23T06:46:06.0384988Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:973:7] 2026-10-23T06:46:06.0385337Z 963 │ const userInputCoverageApplies = Platform.OS === "ios" && activeUserInputRequestId !== null; 2026-10-23T06:46:06.0385658Z 964 │ const combinedContentInsetEndAdjustment = useSharedValue( 2026-10-23T06:46:06.0385913Z ·  ────────────────┬──────────────── 2026-10-23T06:46:06.0386226Z · ╰── `combinedContentInsetEndAdjustment` originates here 2026-10-23T06:46:06.0386541Z 965 │ Math.max(0, estimatedOverlayHeight - nativeInsetOvercount), 2026-10-23T06:46:06.0386748Z 966 │ ); 2026-10-23T06:46:06.0386892Z 967 │ useAnimatedReaction( 2026-10-23T06:46:06.0387048Z 968 │ () => 2026-10-23T06:46:06.0387219Z 969 │ contentInsetEndAdjustment.value + 2026-10-23T06:46:06.0387514Z 970 │ floatingControlCoverage.value + 2026-10-23T06:46:06.0387844Z 971 │ (userInputCoverageApplies ? userInputInsetProgress.value * userInputCardCoverage.value : 0), 2026-10-23T06:46:06.0388117Z 972 │ (value) => { 2026-10-23T06:46:06.0388314Z 973 │ combinedContentInsetEndAdjustment.value = value; 2026-10-23T06:46:06.0388606Z ·  ────────────────┬──────────────── 2026-10-23T06:46:06.0388921Z · ╰── `combinedContentInsetEndAdjustment` cannot be modified 2026-10-23T06:46:06.0389251Z 974 │ }, 2026-10-23T06:46:06.0389377Z ╰──── 2026-10-23T06:46:06.0389818Z  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-23T06:46:06.0390446Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T06:46:06.0390758Z 2026-10-23T06:46:06.0390963Z ⚠ eslint(no-unused-vars): Identifier 'Arr' is imported but never used. 2026-10-23T06:46:06.0391293Z ╭─[packages/client-runtime/src/state/threadSort.ts:4:13] 2026-10-23T06:46:06.0391561Z 3 │ import type { EnvironmentThreadShell } from "./models.ts"; 2026-10-23T06:46:06.0391780Z 4 │ import * as Arr from "effect/Array"; 2026-10-23T06:46:06.0391959Z ·  ─┬─ 2026-10-23T06:46:06.0392180Z · ╰── 'Arr' is imported here 2026-10-23T06:46:06.0392406Z 5 │ import * as Order from "effect/Order"; 2026-10-23T06:46:06.0392574Z ╰──── 2026-10-23T06:46:06.0392733Z  help: Consider removing this import. 2026-10-23T06:46:06.0392855Z 2026-10-23T06:46:06.0393057Z ⚠ eslint(no-unused-vars): Identifier 'Order' is imported but never used. 2026-10-23T06:46:06.0393383Z ╭─[packages/client-runtime/src/state/threadSort.ts:5:13] 2026-10-23T06:46:06.0393612Z 4 │ import * as Arr from "effect/Array"; 2026-10-23T06:46:06.0393799Z 5 │ import * as Order from "effect/Order"; 2026-10-23T06:46:06.0393981Z ·  ──┬── 2026-10-23T06:46:06.0394204Z · ╰── 'Order' is imported here 2026-10-23T06:46:06.0394402Z 6 │ 2026-10-23T06:46:06.0394515Z ╰──── 2026-10-23T06:46:06.0394673Z  help: Consider removing this import. 2026-10-23T06:46:06.0394792Z 2026-10-23T06:46:06.0395045Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-23T06:46:06.0395405Z ╭─[scripts/lib/cli-external-packages.test.ts:114:11] 2026-10-23T06:46:06.0395626Z 113 │ const declared = { 2026-10-23T06:46:06.0395817Z 114 │ ...(manifest.dependencies ?? {}), 2026-10-23T06:46:06.0396048Z ·  ──────────────────────────────── 2026-10-23T06:46:06.0396277Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-23T06:46:06.0396458Z ╰──── 2026-10-23T06:46:06.0396787Z  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-23T06:46:06.0397052Z 2026-10-23T06:46:06.0397356Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-23T06:46:06.0397741Z ╭─[scripts/lib/cli-external-packages.test.ts:115:11] 2026-10-23T06:46:06.0397982Z 114 │ ...(manifest.dependencies ?? {}), 2026-10-23T06:46:06.0398201Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-23T06:46:06.0398490Z ·  ──────────────────────────────────────── 2026-10-23T06:46:06.0398720Z 116 │ ...(manifest.peerDependencies ?? {}), 2026-10-23T06:46:06.0398898Z ╰──── 2026-10-23T06:46:06.0399221Z  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-23T06:46:06.0399482Z 2026-10-23T06:46:06.0399707Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-23T06:46:06.0400060Z ╭─[scripts/lib/cli-external-packages.test.ts:116:11] 2026-10-23T06:46:06.0400318Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-23T06:46:06.0400538Z 116 │ ...(manifest.peerDependencies ?? {}), 2026-10-23T06:46:06.0400773Z ·  ──────────────────────────────────── 2026-10-23T06:46:06.0400961Z 117 │ }; 2026-10-23T06:46:06.0401090Z ╰──── 2026-10-23T06:46:06.0401415Z  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-23T06:46:06.0401676Z 2026-10-23T06:46:06.0401869Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-23T06:46:06.0402189Z ╭─[packages/client-runtime/src/state/shell.ts:189:5] 2026-10-23T06:46:06.0402446Z 186 │ let waiting = yield* Ref.get(awaitingCompletion); 2026-10-23T06:46:06.0402658Z 187 │ let next = initial; 2026-10-23T06:46:06.0402826Z ·  ──┬─ 2026-10-23T06:46:06.0403044Z · ╰── From this accumulator 2026-10-23T06:46:06.0403262Z 188 │ let receivedSnapshot = false; 2026-10-23T06:46:06.0403449Z 189 │ for (const item of items) { 2026-10-23T06:46:06.0403621Z ·  ─┬─ 2026-10-23T06:46:06.0403812Z · ╰── For this loop 2026-10-23T06:46:06.0404028Z 190 │ if (item.kind === "synchronized") { 2026-10-23T06:46:06.0404205Z 191 │ waiting = false; 2026-10-23T06:46:06.0404393Z 192 │ if (Option.isSome(next.snapshot)) { 2026-10-23T06:46:06.0404630Z 193 │ next = { ...next, status: "live", error: Option.none() }; 2026-10-23T06:46:06.0404856Z ·  ───┬─── 2026-10-23T06:46:06.0405098Z · ╰── From this spread 2026-10-23T06:46:06.0405305Z 194 │ } 2026-10-23T06:46:06.0405429Z ╰──── 2026-10-23T06:46:06.0405650Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-23T06:46:06.0405979Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-23T06:46:06.0406152Z 2026-10-23T06:46:06.0406421Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T06:46:06.0406829Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:361:7] 2026-10-23T06:46:06.0407138Z 355 │ }, [cancelledIncomingShareId, navigation, props.incomingShareId]); 2026-10-23T06:46:06.0407363Z 356 │ useEffect(() => { 2026-10-23T06:46:06.0407600Z ·  ────┬──── 2026-10-23T06:46:06.0407878Z · ╰── This is the containing effect 2026-10-23T06:46:06.0408110Z 357 │ if (!isReturningToProjectPicker) { 2026-10-23T06:46:06.0408291Z 358 │ return; 2026-10-23T06:46:06.0408473Z 359 │ } 2026-10-23T06:46:06.0408648Z 360 │ if (requestedInitialProjectAvailable) { 2026-10-23T06:46:06.0408871Z 361 │ setIsReturningToProjectPicker(false); 2026-10-23T06:46:06.0409099Z ·  ──────────────┬────────────── 2026-10-23T06:46:06.0409401Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T06:46:06.0409641Z 362 │ return; 2026-10-23T06:46:06.0409772Z ╰──── 2026-10-23T06:46:06.0410448Z  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-23T06:46:06.0411335Z  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-23T06:46:06.0411647Z 2026-10-23T06:46:06.0411910Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T06:46:06.0412316Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:504:9] 2026-10-23T06:46:06.0412541Z 447 │ 2026-10-23T06:46:06.0412670Z 448 │ useEffect(() => { 2026-10-23T06:46:06.0412832Z ·  ────┬──── 2026-10-23T06:46:06.0413059Z · ╰── This is the containing effect 2026-10-23T06:46:06.0413305Z 449 │ if (props.pendingTaskId || props.draftId) { 2026-10-23T06:46:06.0413491Z 450 │ return; 2026-10-23T06:46:06.0413625Z 451 │ } 2026-10-23T06:46:06.0413841Z 452 │ if (lastInitialProjectRefRef.current !== props.initialProjectRef) { 2026-10-23T06:46:06.0414138Z 453 │ lastInitialProjectRefRef.current = props.initialProjectRef; 2026-10-23T06:46:06.0414402Z 454 │ appliedInitialProjectKeyRef.current = null; 2026-10-23T06:46:06.0414582Z 455 │ } 2026-10-23T06:46:06.0414803Z 456 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-23T06:46:06.0415098Z 457 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-23T06:46:06.0415353Z 458 │ if (initialEnvironmentId && initialProjectId) { 2026-10-23T06:46:06.0415551Z 459 │ const directProject = 2026-10-23T06:46:06.0415723Z 460 │ projects.find( 2026-10-23T06:46:06.0415885Z 461 │ (project) => 2026-10-23T06:46:06.0416151Z 462 │ project.environmentId === initialEnvironmentId && project.id === initialProjectId, 2026-10-23T06:46:06.0416402Z 463 │ ) ?? null; 2026-10-23T06:46:06.0416540Z 464 │ 2026-10-23T06:46:06.0416680Z 465 │ if (directProject) { 2026-10-23T06:46:06.0416915Z 466 │ // Apply the route's project once. Re-applying on every change would 2026-10-23T06:46:06.0417215Z 467 │ // instantly revert environment/project switches made in the picker. 2026-10-23T06:46:06.0417535Z 468 │ const directProjectKey = `${directProject.environmentId}:${directProject.id}`; 2026-10-23T06:46:06.0417859Z 469 │ if (appliedInitialProjectKeyRef.current === directProjectKey) { 2026-10-23T06:46:06.0418081Z 470 │ return; 2026-10-23T06:46:06.0418307Z 471 │ } 2026-10-23T06:46:06.0418667Z 472 │ if (props.initialProjectRef?.branch) { 2026-10-23T06:46:06.0418850Z 473 │ if ( 2026-10-23T06:46:06.0419079Z 474 │ selectedProject?.environmentId !== directProject.environmentId || 2026-10-23T06:46:06.0419343Z 475 │ selectedProject.id !== directProject.id 2026-10-23T06:46:06.0419528Z 476 │ ) { 2026-10-23T06:46:06.0419695Z 477 │ setProject(directProject); 2026-10-23T06:46:06.0419870Z 478 │ return; 2026-10-23T06:46:06.0420014Z 479 │ } 2026-10-23T06:46:06.0420170Z 480 │ if (!flow.draftKey) return; 2026-10-23T06:46:06.0420420Z 481 │ // The route completes checkout before mounting this composer. Local 2026-10-23T06:46:06.0420722Z 482 │ // mode reuses an existing worktree; worktree mode would create another. 2026-10-23T06:46:06.0421007Z 483 │ updateComposerDraftSettings(flow.draftKey, { 2026-10-23T06:46:06.0421221Z 484 │ workspaceSelection: { 2026-10-23T06:46:06.0421400Z 485 │ mode: "local", 2026-10-23T06:46:06.0421601Z 486 │ branch: props.initialProjectRef.branch, 2026-10-23T06:46:06.0421870Z 487 │ worktreePath: props.initialProjectRef.worktreePath ?? null, 2026-10-23T06:46:06.0422110Z 488 │ startFromOrigin: false, 2026-10-23T06:46:06.0422279Z 489 │ }, 2026-10-23T06:46:06.0422421Z 490 │ }); 2026-10-23T06:46:06.0422560Z 491 │ } 2026-10-23T06:46:06.0422761Z 492 │ appliedInitialProjectKeyRef.current = directProjectKey; 2026-10-23T06:46:06.0422967Z 493 │ if ( 2026-10-23T06:46:06.0423195Z 494 │ selectedProject?.environmentId === directProject.environmentId && 2026-10-23T06:46:06.0423462Z 495 │ selectedProject.id === directProject.id 2026-10-23T06:46:06.0423652Z 496 │ ) { 2026-10-23T06:46:06.0423792Z 497 │ return; 2026-10-23T06:46:06.0423939Z 498 │ } 2026-10-23T06:46:06.0424094Z 499 │ setProject(directProject); 2026-10-23T06:46:06.0424268Z 500 │ return; 2026-10-23T06:46:06.0424406Z 501 │ } 2026-10-23T06:46:06.0424529Z 502 │ 2026-10-23T06:46:06.0424674Z 503 │ if (projects.length > 0) { 2026-10-23T06:46:06.0424876Z 504 │ setIsReturningToProjectPicker(true); 2026-10-23T06:46:06.0425112Z ·  ──────────────┬────────────── 2026-10-23T06:46:06.0425417Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T06:46:06.0425656Z 505 │ } 2026-10-23T06:46:06.0425778Z ╰──── 2026-10-23T06:46:06.0426459Z  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-23T06:46:06.0427345Z  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-23T06:46:06.0427658Z 2026-10-23T06:46:06.0427925Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T06:46:06.0428331Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:604:5] 2026-10-23T06:46:06.0428602Z 545 │ 2026-10-23T06:46:06.0428730Z 546 │ useEffect(() => { 2026-10-23T06:46:06.0428975Z ·  ────┬──── 2026-10-23T06:46:06.0429349Z · ╰── This is the containing effect 2026-10-23T06:46:06.0429592Z 547 │ const shareId = props.incomingShareId; 2026-10-23T06:46:06.0429789Z 548 │ const draftKey = flow.draftKey; 2026-10-23T06:46:06.0430000Z 549 │ const destinationProject = selectedProject; 2026-10-23T06:46:06.0430265Z 550 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-23T06:46:06.0430560Z 551 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-23T06:46:06.0430795Z 552 │ const selectedProjectMatchesRoute = 2026-10-23T06:46:06.0430983Z 553 │ !initialEnvironmentId || 2026-10-23T06:46:06.0431161Z 554 │ !initialProjectId || 2026-10-23T06:46:06.0431389Z 555 │ (destinationProject?.environmentId === initialEnvironmentId && 2026-10-23T06:46:06.0431658Z 556 │ destinationProject.id === initialProjectId); 2026-10-23T06:46:06.0431848Z 557 │ if ( 2026-10-23T06:46:06.0431989Z 558 │ !shareId || 2026-10-23T06:46:06.0432136Z 559 │ !draftKey || 2026-10-23T06:46:06.0432296Z 560 │ !destinationProject || 2026-10-23T06:46:06.0432481Z 561 │ !selectedProjectMatchesRoute || 2026-10-23T06:46:06.0432685Z 562 │ cancelledIncomingShareId === shareId 2026-10-23T06:46:06.0432854Z 563 │ ) { 2026-10-23T06:46:06.0432983Z 564 │ return; 2026-10-23T06:46:06.0433119Z 565 │ } 2026-10-23T06:46:06.0433283Z 566 │ const importKey = `${shareId}:${draftKey}`; 2026-10-23T06:46:06.0433462Z 567 │ if ( 2026-10-23T06:46:06.0433647Z 568 │ startedShareImportKeyRef.current === importKey || 2026-10-23T06:46:06.0433896Z 569 │ cancellingShareImportKeyRef.current === importKey 2026-10-23T06:46:06.0434085Z 570 │ ) { 2026-10-23T06:46:06.0434226Z 571 │ return; 2026-10-23T06:46:06.0434364Z 572 │ } 2026-10-23T06:46:06.0434484Z 573 │ 2026-10-23T06:46:06.0434624Z 574 │ if (!incomingShare) { 2026-10-23T06:46:06.0434914Z 575 │ if (isIncomingShareUnavailable && alertedUnavailableIncomingShareIdRef.current !== shareId) { 2026-10-23T06:46:06.0435251Z 576 │ alertedUnavailableIncomingShareIdRef.current = shareId; 2026-10-23T06:46:06.0435466Z 577 │ Dialog.alert( 2026-10-23T06:46:06.0435642Z 578 │ "Shared content unavailable", 2026-10-23T06:46:06.0435925Z 579 │ "The shared content is no longer in the inbox. You can continue editing this task draft.", 2026-10-23T06:46:06.0436170Z 580 │ ); 2026-10-23T06:46:06.0436301Z 581 │ } 2026-10-23T06:46:06.0436429Z 582 │ return; 2026-10-23T06:46:06.0436566Z 583 │ } 2026-10-23T06:46:06.0436692Z 584 │ 2026-10-23T06:46:06.0436818Z 585 │ if ( 2026-10-23T06:46:06.0437050Z 586 │ incomingShare.attachments.some((attachment) => attachment.type === "file") && 2026-10-23T06:46:06.0437332Z 587 │ selectedEnvironmentServerConfig === null 2026-10-23T06:46:06.0437511Z 588 │ ) { 2026-10-23T06:46:06.0437648Z 589 │ return; 2026-10-23T06:46:06.0437781Z 590 │ } 2026-10-23T06:46:06.0437903Z 591 │ 2026-10-23T06:46:06.0438111Z 592 │ if (alertedUnavailableIncomingShareIdRef.current === shareId) { 2026-10-23T06:46:06.0438389Z 593 │ alertedUnavailableIncomingShareIdRef.current = null; 2026-10-23T06:46:06.0438646Z 594 │ } 2026-10-23T06:46:06.0438820Z 595 │ startedShareImportKeyRef.current = importKey; 2026-10-23T06:46:06.0439023Z 596 │ const draftBackup = 2026-10-23T06:46:06.0439410Z 597 │ shareImportDraftBackupRef.current.get(importKey) ?? getComposerDraftSnapshot(draftKey); 2026-10-23T06:46:06.0439802Z 598 │ shareImportDraftBackupRef.current.set(importKey, draftBackup); 2026-10-23T06:46:06.0440048Z 599 │ const importToken = Symbol(importKey); 2026-10-23T06:46:06.0440240Z 600 │ let didReserveShare = false; 2026-10-23T06:46:06.0440428Z 601 │ let didConsumeShare = false; 2026-10-23T06:46:06.0440612Z 602 │ let needsDraftRestore = false; 2026-10-23T06:46:06.0440832Z 603 │ activeShareImportTokenRef.current = importToken; 2026-10-23T06:46:06.0441047Z 604 │ setImportingShareKey(importKey); 2026-10-23T06:46:06.0441249Z ·  ──────────┬───────── 2026-10-23T06:46:06.0441530Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T06:46:06.0441776Z 605 │ void (async () => { 2026-10-23T06:46:06.0441919Z ╰──── 2026-10-23T06:46:06.0442599Z  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-23T06:46:06.0443483Z  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-23T06:46:06.0443795Z 2026-10-23T06:46:06.0444005Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T06:46:06.0444364Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:524:5] 2026-10-23T06:46:06.0444608Z 523 │ props.initialProjectRef, 2026-10-23T06:46:06.0444788Z 524 │ props.incomingShareId, 2026-10-23T06:46:06.0444986Z ·  ──────────┬────────── 2026-10-23T06:46:06.0445263Z · ╰── Unnecessary dependency `props.incomingShareId` 2026-10-23T06:46:06.0445514Z 525 │ props.pendingTaskId, 2026-10-23T06:46:06.0445663Z ╰──── 2026-10-23T06:46:06.0446027Z  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-23T06:46:06.0446633Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.0446940Z 2026-10-23T06:46:06.0447165Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-23T06:46:06.0447600Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:543:5] 2026-10-23T06:46:06.0447924Z 542 │ loadedBranchesProjectKeyRef.current = projectKey; 2026-10-23T06:46:06.0448131Z 543 │ flow.loadBranches(); 2026-10-23T06:46:06.0448301Z ·  ──┬─ 2026-10-23T06:46:06.0448560Z · ╰── Missing dependency `flow` 2026-10-23T06:46:06.0448796Z 544 │ }, [flow.loadBranches, selectedProject]); 2026-10-23T06:46:06.0449007Z ·  ────────┬──────── 2026-10-23T06:46:06.0449317Z · ╰── Overly precise dependency `flow.loadBranches`, use `flow` instead 2026-10-23T06:46:06.0449589Z 545 │ 2026-10-23T06:46:06.0449708Z ╰──── 2026-10-23T06:46:06.0450219Z  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-23T06:46:06.0450928Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.0451230Z 2026-10-23T06:46:06.0451442Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T06:46:06.0488230Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:766:5] 2026-10-23T06:46:06.0488517Z 765 │ flow.draftKey, 2026-10-23T06:46:06.0488685Z 766 │ hasImportedIncomingShare, 2026-10-23T06:46:06.0488894Z ·  ────────────┬─────────── 2026-10-23T06:46:06.0489201Z · ╰── Unnecessary dependency `hasImportedIncomingShare` 2026-10-23T06:46:06.0489501Z 767 │ incomingShare, 2026-10-23T06:46:06.0489675Z 768 │ isIncomingShareInboxLoading, 2026-10-23T06:46:06.0489873Z ·  ─────────────┬───────────── 2026-10-23T06:46:06.0490172Z · ╰── Unnecessary dependency `isIncomingShareInboxLoading` 2026-10-23T06:46:06.0490436Z 769 │ isIncomingShareUnavailable, 2026-10-23T06:46:06.0490607Z 770 │ props.incomingShareId, 2026-10-23T06:46:06.0490794Z 771 │ props.initialProjectRef?.environmentId, 2026-10-23T06:46:06.0490994Z 772 │ props.initialProjectRef?.projectId, 2026-10-23T06:46:06.0491174Z 773 │ releaseShareReservation, 2026-10-23T06:46:06.0491330Z 774 │ reserveShare, 2026-10-23T06:46:06.0491496Z 775 │ selectedEnvironmentServerConfig, 2026-10-23T06:46:06.0491670Z 776 │ selectedProject, 2026-10-23T06:46:06.0491823Z 777 │ shareImportAttempt, 2026-10-23T06:46:06.0492009Z ·  ─────────┬──────── 2026-10-23T06:46:06.0492284Z · ╰── Unnecessary dependency `shareImportAttempt` 2026-10-23T06:46:06.0492513Z 778 │ ]); 2026-10-23T06:46:06.0492635Z ╰──── 2026-10-23T06:46:06.0493003Z  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-23T06:46:06.0493606Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.0493917Z 2026-10-23T06:46:06.0494118Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-23T06:46:06.0494474Z ╭─[apps/mobile/src/features/threads/ThreadQueueControl.tsx:602:27] 2026-10-23T06:46:06.0494991Z 601 │ const onEnd = useEffectEvent((y: number, success: boolean) => props.onEnd(y, success)); 2026-10-23T06:46:06.0495306Z 602 │ const gesture = Gesture.Pan() 2026-10-23T06:46:06.0495509Z ·  ─┬─ 2026-10-23T06:46:06.0495763Z · ╰── `Pan` may be a component 2026-10-23T06:46:06.0495993Z 603 │ .enabled(!props.disabled) 2026-10-23T06:46:06.0496148Z ╰──── 2026-10-23T06:46:06.0496499Z  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-23T06:46:06.0497238Z  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-23T06:46:06.0497659Z 2026-10-23T06:46:06.0498147Z ⚠ 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-23T06:46:06.0498764Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:169:7] 2026-10-23T06:46:06.0498992Z 168 │ }); 2026-10-23T06:46:06.0499281Z 169 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-23T06:46:06.0499684Z 170 │ │ if ((yield* SubscriptionRef.get(shellState)).status === "synchronizing") break; 2026-10-23T06:46:06.0499997Z 171 │ │ yield* Effect.yieldNow; 2026-10-23T06:46:06.0500270Z 172 │ ╰─▶ } 2026-10-23T06:46:06.0500473Z 173 │ 2026-10-23T06:46:06.0500595Z ╰──── 2026-10-23T06:46:06.0500653Z 2026-10-23T06:46:06.0501135Z ⚠ 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-23T06:46:06.0501717Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:178:7] 2026-10-23T06:46:06.0501990Z 177 │ yield* Deferred.succeed(releaseSave, undefined); 2026-10-23T06:46:06.0502327Z 178 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-23T06:46:06.0502661Z 179 │ │ if ((yield* Ref.get(saved)).length > 0) break; 2026-10-23T06:46:06.0502925Z 180 │ │ yield* Effect.yieldNow; 2026-10-23T06:46:06.0503186Z 181 │ ╰─▶ } 2026-10-23T06:46:06.0503389Z 182 │ 2026-10-23T06:46:06.0503507Z ╰──── 2026-10-23T06:46:06.0503567Z 2026-10-23T06:46:06.0504039Z ⚠ 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-23T06:46:06.0504614Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:307:7] 2026-10-23T06:46:06.0504907Z 306 │ yield* Deferred.succeed(releaseUnenrichedSave, undefined); 2026-10-23T06:46:06.0505322Z 307 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-23T06:46:06.0505676Z 308 │ │ const values = yield* Ref.get(saved); 2026-10-23T06:46:06.0506025Z 309 │ │ if (values.length > 0 && values.at(-1)?.projects[0]?.repositoryIdentity != null) { 2026-10-23T06:46:06.0506318Z 310 │ │ break; 2026-10-23T06:46:06.0506508Z 311 │ │ } 2026-10-23T06:46:06.0506722Z 312 │ │ yield* Effect.yieldNow; 2026-10-23T06:46:06.0506983Z 313 │ ╰─▶ } 2026-10-23T06:46:06.0507184Z 314 │ 2026-10-23T06:46:06.0507308Z ╰──── 2026-10-23T06:46:06.0507368Z 2026-10-23T06:46:06.0507543Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T06:46:06.0507862Z ╭─[apps/web/src/components/CommandPalette.tsx:1996:20] 2026-10-23T06:46:06.0508132Z 1995 │ title: inferProjectTitleFromPath(destinationPath), 2026-10-23T06:46:06.0508369Z 1996 │ createdAt: new Date().toISOString(), 2026-10-23T06:46:06.0508604Z ·  ─────┬──── 2026-10-23T06:46:06.0508866Z · ╰── Cannot call impure function 2026-10-23T06:46:06.0509183Z 1997 │ remoteUrl: addProjectCloneFlow.remoteUrl, 2026-10-23T06:46:06.0509368Z ╰──── 2026-10-23T06:46:06.0509713Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-23T06:46:06.0510292Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T06:46:06.0510582Z 2026-10-23T06:46:06.0511067Z ⚠ 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-23T06:46:06.0511662Z ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1228:7] 2026-10-23T06:46:06.0511921Z 1227 │ yield* harness.replaceSession; 2026-10-23T06:46:06.0512261Z 1228 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-23T06:46:06.0512623Z 1229 │ │ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) { 2026-10-23T06:46:06.0512880Z 1230 │ │ break; 2026-10-23T06:46:06.0513073Z 1231 │ │ } 2026-10-23T06:46:06.0513293Z 1232 │ │ yield* Effect.yieldNow; 2026-10-23T06:46:06.0513559Z 1233 │ ╰─▶ } 2026-10-23T06:46:06.0513781Z 1234 │ yield* Queue.offer( 2026-10-23T06:46:06.0513934Z ╰──── 2026-10-23T06:46:06.0513996Z 2026-10-23T06:46:06.0514471Z ⚠ 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-23T06:46:06.0515051Z ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1337:7] 2026-10-23T06:46:06.0515310Z 1336 │ yield* harness.replaceSession; 2026-10-23T06:46:06.0515729Z 1337 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-23T06:46:06.0516142Z 1338 │ │ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) break; 2026-10-23T06:46:06.0516423Z 1339 │ │ yield* Effect.yieldNow; 2026-10-23T06:46:06.0516687Z 1340 │ ╰─▶ } 2026-10-23T06:46:06.0516962Z 1341 │ expect(yield* Ref.get(harness.subscriptionCount)).toBe(2); 2026-10-23T06:46:06.0517166Z ╰──── 2026-10-23T06:46:06.0517224Z 2026-10-23T06:46:06.0517419Z ⚠ eslint(no-unused-vars): Type 'Scope' is imported but never used. 2026-10-23T06:46:06.0517754Z ╭─[apps/server/src/provider/ProviderAuthService.ts:15:18] 2026-10-23T06:46:06.0517995Z 14 │ import * as Layer from "effect/Layer"; 2026-10-23T06:46:06.0518199Z 15 │ import type * as Scope from "effect/Scope"; 2026-10-23T06:46:06.0518453Z ·  ──┬── 2026-10-23T06:46:06.0518697Z · ╰── 'Scope' is imported here 2026-10-23T06:46:06.0518932Z 16 │ import * as Stream from "effect/Stream"; 2026-10-23T06:46:06.0519093Z ╰──── 2026-10-23T06:46:06.0519254Z  help: Consider removing this import. 2026-10-23T06:46:06.0519370Z 2026-10-23T06:46:06.0519575Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T06:46:06.0519946Z ╭─[apps/web/src/components/pullRequest/PullRequestSummaryTab.tsx:814:17] 2026-10-23T06:46:06.0520186Z 813 │
{ 2026-10-23T06:46:06.0522806Z ·  ────┬──── 2026-10-23T06:46:06.0523029Z · ╰── This is the containing effect 2026-10-23T06:46:06.0523336Z 63 │ if (playbackUrl === null && resolvedUrl !== null) setPlaybackUrl(resolvedUrl); 2026-10-23T06:46:06.0523631Z ·  ───────┬────── 2026-10-23T06:46:06.0523984Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T06:46:06.0524266Z 64 │ }, [playbackUrl, resolvedUrl]); 2026-10-23T06:46:06.0524430Z ╰──── 2026-10-23T06:46:06.0525096Z  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-23T06:46:06.0526050Z  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-23T06:46:06.0526409Z 2026-10-23T06:46:06.0526842Z ⚠ 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-23T06:46:06.0527390Z ╭─[apps/server/src/provider/acp/AntigravityProtocol.ts:263:20] 2026-10-23T06:46:06.0527635Z 262 │ ...(update._meta !== undefined 2026-10-23T06:46:06.0527917Z 263 │ ? { _meta: Schema.is(Schema.Record(Schema.String, Schema.Json))(meta) ? meta : null } 2026-10-23T06:46:06.0528185Z ·  ───────── 2026-10-23T06:46:06.0528359Z 264 │ : {}), 2026-10-23T06:46:06.0528530Z ╰──── 2026-10-23T06:46:06.0528591Z 2026-10-23T06:46:06.0528805Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T06:46:06.0529158Z ╭─[apps/mobile/src/components/ComposerContextSheet.tsx:267:25] 2026-10-23T06:46:06.0529434Z 266 │ {record.elements?.map((element, index) => ( 2026-10-23T06:46:06.0529734Z 267 │ 2026-10-23T06:46:06.0530075Z ·  ─────────────────────────────────────────────────────── 2026-10-23T06:46:06.0530312Z 268 │ (null); 2026-10-23T06:46:06.0535106Z 154 │ useLayoutEffect(() => { 2026-10-23T06:46:06.0535280Z ·  ───────┬─────── 2026-10-23T06:46:06.0535519Z · ╰── This is the containing effect 2026-10-23T06:46:06.0535754Z 155 │ if (faviconRequest === null) return; 2026-10-23T06:46:06.0535920Z 156 │ 2026-10-23T06:46:06.0536123Z 157 │ const endRequest = beginProjectFaviconRequest(faviconRequest); 2026-10-23T06:46:06.0536376Z 158 │ setActiveFaviconRequest(faviconRequest); 2026-10-23T06:46:06.0536596Z ·  ───────────┬─────────── 2026-10-23T06:46:06.0536886Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T06:46:06.0537130Z 159 │ return endRequest; 2026-10-23T06:46:06.0537271Z ╰──── 2026-10-23T06:46:06.0537940Z  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-23T06:46:06.0538861Z  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-23T06:46:06.0539171Z 2026-10-23T06:46:06.0539443Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T06:46:06.0539838Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:68:5] 2026-10-23T06:46:06.0540099Z 66 │ const { id: attachmentId, fileUri } = attachment; 2026-10-23T06:46:06.0540288Z 67 │ useEffect(() => { 2026-10-23T06:46:06.0540444Z ·  ────┬──── 2026-10-23T06:46:06.0540669Z · ╰── This is the containing effect 2026-10-23T06:46:06.0540873Z 68 │ setUri(null); 2026-10-23T06:46:06.0541025Z ·  ───┬── 2026-10-23T06:46:06.0541284Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T06:46:06.0541517Z 69 │ setError(null); 2026-10-23T06:46:06.0541658Z ╰──── 2026-10-23T06:46:06.0542332Z  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-23T06:46:06.0543209Z  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-23T06:46:06.0543521Z 2026-10-23T06:46:06.0543731Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T06:46:06.0544074Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:91:7] 2026-10-23T06:46:06.0544281Z 90 │ }; 2026-10-23T06:46:06.0544429Z 91 │ }, [attachmentId, fileUri]); 2026-10-23T06:46:06.0544723Z ·  ──────┬───── ───┬─── 2026-10-23T06:46:06.0545075Z · │ ╰── Unnecessary dependency `fileUri` 2026-10-23T06:46:06.0545406Z · ╰── Unnecessary dependency `attachmentId` 2026-10-23T06:46:06.0545701Z 92 │ const mimeType = videoMimeType(attachment) ?? attachment.mimeType; 2026-10-23T06:46:06.0545903Z ╰──── 2026-10-23T06:46:06.0546259Z  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-23T06:46:06.0546856Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.0547160Z 2026-10-23T06:46:06.0547388Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-23T06:46:06.0547750Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:213:34] 2026-10-23T06:46:06.0547974Z 212 │ useEffect(() => { 2026-10-23T06:46:06.0548175Z 213 │ if (!isFocused && hasSource) props.onRequestClose(); 2026-10-23T06:46:06.0548438Z ·  ──┬── 2026-10-23T06:46:06.0548706Z · ╰── Missing dependency `props` 2026-10-23T06:46:06.0548970Z 214 │ }, [isFocused, hasSource, props.onRequestClose]); 2026-10-23T06:46:06.0549263Z ·  ──────────┬───────── 2026-10-23T06:46:06.0549623Z · ╰── Overly precise dependency `props.onRequestClose`, use `props` instead 2026-10-23T06:46:06.0549921Z 215 │ const { source } = props; 2026-10-23T06:46:06.0550075Z ╰──── 2026-10-23T06:46:06.0550559Z  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-23T06:46:06.0551266Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.0551569Z 2026-10-23T06:46:06.0551838Z ⚠ unicorn(prefer-add-event-listener): Prefer `addEventListener()` over their `on`-function counterparts. 2026-10-23T06:46:06.0552236Z ╭─[apps/web/src/components/device/deviceHubApi.test.ts:12:14] 2026-10-23T06:46:06.0552552Z 11 │ addEventListener(_type: string, listener: (event: { data: string }) => void) { 2026-10-23T06:46:06.0552808Z 12 │ this.onmessage = listener; 2026-10-23T06:46:06.0553001Z ·  ───────── 2026-10-23T06:46:06.0553161Z 13 │ } 2026-10-23T06:46:06.0553283Z ╰──── 2026-10-23T06:46:06.0553667Z  help: `addEventListener()` can register multiple handlers and accepts options such as `{ once: true }`; assigning to `on` replaces any previously registered handler. 2026-10-23T06:46:06.0553969Z 2026-10-23T06:46:06.0554180Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable. 2026-10-23T06:46:06.0554531Z ╭─[apps/web/src/components/device/deviceHubApi.test.ts:16:9] 2026-10-23T06:46:06.0554754Z 15 │ constructor() { 2026-10-23T06:46:06.0554908Z 16 │ source = this; 2026-10-23T06:46:06.0555070Z ·  ────── 2026-10-23T06:46:06.0555303Z 17 │ } 2026-10-23T06:46:06.0555481Z ╰──── 2026-10-23T06:46:06.0555818Z  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-23T06:46:06.0556082Z 2026-10-23T06:46:06.0556303Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-23T06:46:06.0556649Z ╭─[apps/web/src/lib/composerContextReferences.ts:90:40] 2026-10-23T06:46:06.0556875Z 89 │ let cursor = prompt.length; 2026-10-23T06:46:06.0557081Z 90 │ for (const occurrence of occurrences.reverse()) { 2026-10-23T06:46:06.0557313Z ·  ─────── 2026-10-23T06:46:06.0557511Z 91 │ let { start, end } = occurrence; 2026-10-23T06:46:06.0557667Z ╰──── 2026-10-23T06:46:06.0557998Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-23T06:46:06.0558255Z 2026-10-23T06:46:06.0558510Z ⚠ typescript(no-extraneous-class): Unexpected class with only a constructor. 2026-10-23T06:46:06.0558841Z ╭─[apps/desktop/src/preview/Manager.test.ts:158:18] 2026-10-23T06:46:06.0559089Z 157 │ BrowserWindow: browserWindowConstructor, 2026-10-23T06:46:06.0559377Z 158 │ ╭─▶ ClipboardItem: class { 2026-10-23T06:46:06.0559674Z 159 │ │ constructor(data: Record) { 2026-10-23T06:46:06.0559941Z 160 │ │ clipboardItemConstructor(data); 2026-10-23T06:46:06.0560151Z 161 │ │ } 2026-10-23T06:46:06.0560389Z 162 │ ╰─▶ }, 2026-10-23T06:46:06.0560597Z 163 │ clipboard: { 2026-10-23T06:46:06.0560737Z ╰──── 2026-10-23T06:46:06.0560969Z  help: Try replacing this class with a standalone function or deleting it entirely 2026-10-23T06:46:06.0561148Z 2026-10-23T06:46:06.0561322Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-23T06:46:06.0561645Z ╭─[apps/server/src/provider/Drivers/CodexDriver.test.ts:466:14] 2026-10-23T06:46:06.0561862Z 465 │ 2026-10-23T06:46:06.0562033Z 466 │ for (const {} of ["direct", "wrapper"] as const) { 2026-10-23T06:46:06.0562235Z ·  ── 2026-10-23T06:46:06.0562381Z 467 │ } 2026-10-23T06:46:06.0562497Z ╰──── 2026-10-23T06:46:06.0562799Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-23T06:46:06.0563033Z 2026-10-23T06:46:06.0563303Z ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'. 2026-10-23T06:46:06.0563695Z ╭─[apps/server/src/telemetry/AnalyticsService.ts:340:7] 2026-10-23T06:46:06.0563894Z 339 │ 2026-10-23T06:46:06.0564067Z 340 │ const layerTest = AnalyticsService.layerTest; 2026-10-23T06:46:06.0564265Z ·  ────┬──── 2026-10-23T06:46:06.0564499Z · ╰── 'layerTest' is declared here 2026-10-23T06:46:06.0564692Z ╰──── 2026-10-23T06:46:06.0564859Z  help: Consider removing this declaration. 2026-10-23T06:46:06.0564979Z 2026-10-23T06:46:06.0565129Z ⚠ react(refs): Cannot access refs during render 2026-10-23T06:46:06.0565542Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:152:27] 2026-10-23T06:46:06.0565941Z 151 │ 2026-10-23T06:46:06.0566213Z 152 │ {props.children(open)} 2026-10-23T06:46:06.0566407Z ·  ──┬─ 2026-10-23T06:46:06.0566682Z · ╰── Cannot access ref value during render 2026-10-23T06:46:06.0566905Z 153 │ 2026-10-23T06:46:06.0567037Z ╰──── 2026-10-23T06:46:06.0567575Z  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-23T06:46:06.0568311Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T06:46:06.0568628Z 2026-10-23T06:46:06.0568831Z ⚠ react(memo-dependencies): Found missing/extra memoization dependencies 2026-10-23T06:46:06.0569183Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:140:9] 2026-10-23T06:46:06.0569427Z 139 │ if (action.id !== undefined) { 2026-10-23T06:46:06.0569615Z 140 │ props.onPressAction?.({ 2026-10-23T06:46:06.0569790Z ·  ──┬── 2026-10-23T06:46:06.0570013Z · ╰── Missing dependency `props` 2026-10-23T06:46:06.0570251Z 141 │ nativeEvent: { event: action.id }, 2026-10-23T06:46:06.0570513Z 142 │ } as Parameters>[0]); 2026-10-23T06:46:06.0570742Z 143 │ } 2026-10-23T06:46:06.0570873Z 144 │ }, 2026-10-23T06:46:06.0571024Z 145 │ [close, props.onPressAction], 2026-10-23T06:46:06.0571226Z ·  ─────────┬───────── 2026-10-23T06:46:06.0571558Z · ╰── Overly precise dependency `props.onPressAction`, use `props` instead 2026-10-23T06:46:06.0571822Z 146 │ ); 2026-10-23T06:46:06.0571943Z ╰──── 2026-10-23T06:46:06.0572493Z  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-23T06:46:06.0573260Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.0573567Z 2026-10-23T06:46:06.0573800Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-23T06:46:06.0574152Z ╭─[apps/server/src/terminal/Manager.test.ts:731:31] 2026-10-23T06:46:06.0574349Z 730 │ ); 2026-10-23T06:46:06.0574599Z 731 │ const snapshot = events.filter((event) => event.type === "snapshot").at(-1)?.snapshot; 2026-10-23T06:46:06.0574881Z ·  ────── 2026-10-23T06:46:06.0575121Z 732 │ expect(snapshot?.history).toBe("aa😀\rEND"); 2026-10-23T06:46:06.0575295Z ╰──── 2026-10-23T06:46:06.0575527Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-23T06:46:06.0575709Z 2026-10-23T06:46:06.0576035Z ⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence. 2026-10-23T06:46:06.0576470Z ╭─[apps/web/src/components/pullRequest/pullRequestList.logic.ts:187:9] 2026-10-23T06:46:06.0576707Z 186 │ ): boolean { 2026-10-23T06:46:06.0576937Z 187 │ const labels = entry.labels.map((label) => label.name.trim().toLowerCase()); 2026-10-23T06:46:06.0577290Z ·  ───────────────────────────────────────────────────────────────────── 2026-10-23T06:46:06.0577600Z 188 │ const holds = (label: string) => labels.includes(label.trim().toLowerCase()); 2026-10-23T06:46:06.0577816Z ╰──── 2026-10-23T06:46:06.0577953Z  help: Switch to `Set` 2026-10-23T06:46:06.0578055Z 2026-10-23T06:46:06.0578295Z ⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence. 2026-10-23T06:46:06.0578711Z ╭─[apps/web/src/components/chat/useComposerSend.ts:985:13] 2026-10-23T06:46:06.0579000Z 984 │ const changedBeforeDecline = draftChangedSinceSend(); 2026-10-23T06:46:06.0579388Z 985 │ ╭─▶ const pendingIdsBeforeDecline = pendingApprovalsRef.current.map( 2026-10-23T06:46:06.0579750Z 986 │ │ (approval) => approval.requestId, 2026-10-23T06:46:06.0580023Z 987 │ ╰─▶ ); 2026-10-23T06:46:06.0580307Z 988 │ const approvalResponding = approvalsToDecline.some((approval) => 2026-10-23T06:46:06.0580513Z ╰──── 2026-10-23T06:46:06.0580652Z  help: Switch to `Set` 2026-10-23T06:46:06.0580749Z 2026-10-23T06:46:06.0581011Z ⚠ eslint(no-unused-vars): Function 'normalizeTerminalContextSelection' is declared but never used. 2026-10-23T06:46:06.0581374Z ╭─[apps/web/src/lib/terminalContext.ts:56:10] 2026-10-23T06:46:06.0581560Z 55 │ 2026-10-23T06:46:06.0581725Z 56 │ function normalizeTerminalContextSelection( 2026-10-23T06:46:06.0581959Z ·  ────────────────┬──────────────── 2026-10-23T06:46:06.0582276Z · ╰── 'normalizeTerminalContextSelection' is declared here 2026-10-23T06:46:06.0582558Z 57 │ selection: TerminalContextSelection, 2026-10-23T06:46:06.0582720Z ╰──── 2026-10-23T06:46:06.0582890Z  help: Consider removing this declaration. 2026-10-23T06:46:06.0583011Z 2026-10-23T06:46:06.0583291Z ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'. 2026-10-23T06:46:06.0583758Z ╭─[apps/server/src/provider/AntigravityAuth.ts:285:20] 2026-10-23T06:46:06.0583988Z 284 │ }, 2026-10-23T06:46:06.0584145Z 285 │ (effect, flow, stopSessions) => 2026-10-23T06:46:06.0584348Z ·  ──────┬───── 2026-10-23T06:46:06.0584611Z · ╰── 'stopSessions' is declared here 2026-10-23T06:46:06.0584832Z 286 │ effect.pipe( 2026-10-23T06:46:06.0584976Z ╰──── 2026-10-23T06:46:06.0585139Z  help: Consider removing this parameter. 2026-10-23T06:46:06.0585263Z 2026-10-23T06:46:06.0585436Z ⚠ eslint(no-empty-pattern): Empty array binding pattern 2026-10-23T06:46:06.0585765Z ╭─[apps/server/src/pullRequest/PullRequestService.test.ts:1429:12] 2026-10-23T06:46:06.0585991Z 1428 │ 2026-10-23T06:46:06.0586126Z 1429 │ for (const [] of [ 2026-10-23T06:46:06.0586295Z ·  ── 2026-10-23T06:46:06.0586471Z 1430 │ ["github", "github.com"], 2026-10-23T06:46:06.0586618Z ╰──── 2026-10-23T06:46:06.0586964Z  help: Passing non-iterable values (null, undefined, numbers, booleans, etc.) will result in a runtime error because these values are not iterable. 2026-10-23T06:46:06.0587237Z 2026-10-23T06:46:06.0587433Z ⚠ eslint(no-unused-vars): Identifier 'Fiber' is imported but never used. 2026-10-23T06:46:06.0587731Z ╭─[apps/server/src/ws.ts:10:13] 2026-10-23T06:46:06.0587932Z  9 │ import * as Effect from "effect/Effect"; 2026-10-23T06:46:06.0588131Z 10 │ import * as Fiber from "effect/Fiber"; 2026-10-23T06:46:06.0588314Z ·  ──┬── 2026-10-23T06:46:06.0588607Z · ╰── 'Fiber' is imported here 2026-10-23T06:46:06.0588858Z 11 │ import * as FileSystem from "effect/FileSystem"; 2026-10-23T06:46:06.0589036Z ╰──── 2026-10-23T06:46:06.0589257Z  help: Consider removing this import. 2026-10-23T06:46:06.0589376Z 2026-10-23T06:46:06.0589576Z ⚠ eslint(no-unused-vars): Identifier 'Schedule' is imported but never used. 2026-10-23T06:46:06.0589873Z ╭─[apps/server/src/ws.ts:17:13] 2026-10-23T06:46:06.0590065Z 16 │ import * as Ref from "effect/Ref"; 2026-10-23T06:46:06.0590264Z 17 │ import * as Schedule from "effect/Schedule"; 2026-10-23T06:46:06.0590461Z ·  ────┬─── 2026-10-23T06:46:06.0590697Z · ╰── 'Schedule' is imported here 2026-10-23T06:46:06.0590929Z 18 │ import * as Schema from "effect/Schema"; 2026-10-23T06:46:06.0591094Z ╰──── 2026-10-23T06:46:06.0591258Z  help: Consider removing this import. 2026-10-23T06:46:06.0591381Z 2026-10-23T06:46:06.0591691Z ⚠ eslint(no-unused-vars): Variable 'projectSetupScriptRunner' is declared but never used. Unused variables should start with a '_'. 2026-10-23T06:46:06.0592081Z ╭─[apps/server/src/ws.ts:1290:13] 2026-10-23T06:46:06.0592358Z 1289 │ const usageLimitSources = yield* UsageLimitSources.UsageLimitSources; 2026-10-23T06:46:06.0592731Z 1290 │ const projectSetupScriptRunner = yield* ProjectSetupScriptRunner.ProjectSetupScriptRunner; 2026-10-23T06:46:06.0593056Z ·  ────────────┬─────────── 2026-10-23T06:46:06.0593349Z · ╰── 'projectSetupScriptRunner' is declared here 2026-10-23T06:46:06.0593786Z 1291 │ const worktreeSetupTracker = yield* WorktreeSetupTracker.WorktreeSetupTracker; 2026-10-23T06:46:06.0594065Z ╰──── 2026-10-23T06:46:06.0594231Z  help: Consider removing this declaration. 2026-10-23T06:46:06.0594355Z 2026-10-23T06:46:06.0594559Z ⚠ eslint(no-unused-vars): Identifier 'identity' is imported but never used. 2026-10-23T06:46:06.0594863Z ╭─[apps/server/src/auth/http.ts:28:10] 2026-10-23T06:46:06.0595075Z 27 │ import * as Schema from "effect/Schema"; 2026-10-23T06:46:06.0595276Z 28 │ import { identity } from "effect/Function"; 2026-10-23T06:46:06.0595471Z ·  ────┬─── 2026-10-23T06:46:06.0595701Z · ╰── 'identity' is imported here 2026-10-23T06:46:06.0595931Z 29 │ import * as Layer from "effect/Layer"; 2026-10-23T06:46:06.0596091Z ╰──── 2026-10-23T06:46:06.0596249Z  help: Consider removing this import. 2026-10-23T06:46:06.0596373Z 2026-10-23T06:46:06.0596671Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-23T06:46:06.0597122Z ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:387:19] 2026-10-23T06:46:06.0597362Z 386 │ onFilters, 2026-10-23T06:46:06.0597512Z 387 │ authorOptions = [], 2026-10-23T06:46:06.0597682Z ·  ── 2026-10-23T06:46:06.0597850Z 388 │ labelOptions = [], 2026-10-23T06:46:06.0597997Z ╰──── 2026-10-23T06:46:06.0598383Z  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-23T06:46:06.0598734Z 2026-10-23T06:46:06.0599029Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-23T06:46:06.0599470Z ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:388:18] 2026-10-23T06:46:06.0599716Z 387 │ authorOptions = [], 2026-10-23T06:46:06.0599872Z 388 │ labelOptions = [], 2026-10-23T06:46:06.0600041Z ·  ── 2026-10-23T06:46:06.0600194Z 389 │ host, 2026-10-23T06:46:06.0600319Z ╰──── 2026-10-23T06:46:06.0600697Z  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-23T06:46:06.0601002Z 2026-10-23T06:46:06.0601202Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T06:46:06.0601577Z ╭─[apps/web/src/components/pullRequest/PullRequestChecksPopover.tsx:88:15] 2026-10-23T06:46:06.0601830Z 87 │
  • { 2026-10-23T06:46:06.0604627Z 236 │ const input = Schema.decodeUnknownSync(SettingsUpdate)(payload); 2026-10-23T06:46:06.0604883Z ·  ──────────────────────── 2026-10-23T06:46:06.0605151Z 237 │ const scopes = requiredScopesForServerSettingsPatch(input.patch); 2026-10-23T06:46:06.0605361Z ╰──── 2026-10-23T06:46:06.0605421Z 2026-10-23T06:46:06.0605795Z ⚠ 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-23T06:46:06.0606259Z ╭─[apps/server/src/auth/RpcAuthorization.ts:255:26] 2026-10-23T06:46:06.0606505Z 254 │ if (method === WS_METHODS.assetsCreateUrl) { 2026-10-23T06:46:06.0606783Z 255 │ const { resource } = Schema.decodeUnknownSync(AssetCreateUrlInput)(payload); 2026-10-23T06:46:06.0607080Z ·  ──────────────────────── 2026-10-23T06:46:06.0607274Z 256 │ return [ 2026-10-23T06:46:06.0607407Z ╰──── 2026-10-23T06:46:06.0607465Z 2026-10-23T06:46:06.0607675Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable. 2026-10-23T06:46:06.0608007Z ╭─[apps/web/src/contextMenuFallback.test.ts:38:9] 2026-10-23T06:46:06.0608213Z 37 │ get isConnected() { 2026-10-23T06:46:06.0608397Z 38 │ let current: FakeElement | null = this; 2026-10-23T06:46:06.0608645Z ·  ─────── 2026-10-23T06:46:06.0608814Z 39 │ while (current?.parent) { 2026-10-23T06:46:06.0608959Z ╰──── 2026-10-23T06:46:06.0609303Z  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-23T06:46:06.0609572Z 2026-10-23T06:46:06.0609840Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-23T06:46:06.0610215Z ╭─[apps/server/src/serverRuntimeStartup.ts:728:7] 2026-10-23T06:46:06.0610413Z 727 │ 2026-10-23T06:46:06.0610558Z 728 │ const layer = layerWithOptions(); 2026-10-23T06:46:06.0610738Z ·  ──┬── 2026-10-23T06:46:06.0610957Z · ╰── 'layer' is declared here 2026-10-23T06:46:06.0611152Z ╰──── 2026-10-23T06:46:06.0611315Z  help: Consider removing this declaration. 2026-10-23T06:46:06.0611439Z 2026-10-23T06:46:06.0611907Z ⚠ 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-23T06:46:06.0612450Z ╭─[apps/server/src/assets/AssetAccess.test.ts:1043:32] 2026-10-23T06:46:06.0612740Z 1042 │ expect(error._tag).toBe("AssetGitHubMediaUrlValidationError"); 2026-10-23T06:46:06.0613083Z 1043 │ const encoded = yield* Schema.encodeEffect(Schema.fromJsonString(AssetAccessError))(error); 2026-10-23T06:46:06.0613401Z ·  ─────────────────── 2026-10-23T06:46:06.0613620Z 1044 │ expect(encoded).not.toContain(url); 2026-10-23T06:46:06.0613795Z ╰──── 2026-10-23T06:46:06.0613851Z 2026-10-23T06:46:06.0614380Z ⚠ 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-23T06:46:06.0614949Z ╭─[apps/server/src/serverSettings.test.ts:1741:32] 2026-10-23T06:46:06.0615259Z 1740 │ const model = createModelSelection(ProviderInstanceId.make("codex"), "gpt-5.5"); 2026-10-23T06:46:06.0615628Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-23T06:46:06.0615937Z ·  ─────────────────── 2026-10-23T06:46:06.0616175Z 1742 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-23T06:46:06.0616356Z ╰──── 2026-10-23T06:46:06.0616415Z 2026-10-23T06:46:06.0616872Z ⚠ 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-23T06:46:06.0617406Z ╭─[apps/server/src/serverSettings.test.ts:1742:34] 2026-10-23T06:46:06.0617735Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-23T06:46:06.0618038Z 1742 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-23T06:46:06.0618287Z ·  ─────────────────── 2026-10-23T06:46:06.0618580Z 1743 │ Schema.fromJsonString(Schema.Array(ProjectScript)), 2026-10-23T06:46:06.0618776Z ╰──── 2026-10-23T06:46:06.0618832Z 2026-10-23T06:46:06.0619313Z ⚠ 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-23T06:46:06.0619934Z ╭─[apps/server/src/scheduledTasks/ScheduledTaskService.webhook.test.ts:521:13] 2026-10-23T06:46:06.0620202Z 520 │ })).delivery; 2026-10-23T06:46:06.0620501Z 521 │ ╭─▶ while (delivery.outcome === "accepted") { 2026-10-23T06:46:06.0620810Z 522 │ │ yield* Effect.yieldNow; 2026-10-23T06:46:06.0621091Z 523 │ │ delivery = (yield* service.getWebhookDelivery({ 2026-10-23T06:46:06.0621350Z 524 │ │ id: task.id, 2026-10-23T06:46:06.0621590Z 525 │ │ deliveryId: deliveryId!, 2026-10-23T06:46:06.0621820Z 526 │ │ })).delivery; 2026-10-23T06:46:06.0622079Z 527 │ ╰─▶ } 2026-10-23T06:46:06.0622416Z 528 │ assert.equal(delivery.outcome, "dispatch_failed"); 2026-10-23T06:46:06.0622643Z ╰──── 2026-10-23T06:46:06.0622705Z 2026-10-23T06:46:06.0623186Z ⚠ 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-23T06:46:06.0623763Z ╭─[apps/server/src/background/HostPowerMonitor.test.ts:133:11] 2026-10-23T06:46:06.0624059Z 132 │ const monitor = yield* HostPowerMonitor.HostPowerMonitor; 2026-10-23T06:46:06.0624352Z 133 │ ╭─▶ for ( 2026-10-23T06:46:06.0624606Z 134 │ │ let attempt = 0; 2026-10-23T06:46:06.0624904Z 135 │ │ attempt < 100 && (yield* monitor.snapshot).onBattery !== "true"; 2026-10-23T06:46:06.0625185Z 136 │ │ attempt += 1 2026-10-23T06:46:06.0625390Z 137 │ │ ) { 2026-10-23T06:46:06.0625609Z 138 │ │ yield* Effect.yieldNow; 2026-10-23T06:46:06.0625871Z 139 │ ╰─▶ } 2026-10-23T06:46:06.0626143Z 140 │ expect((yield* monitor.snapshot).onBattery).toBe("true"); 2026-10-23T06:46:06.0626339Z ╰──── 2026-10-23T06:46:06.0626399Z 2026-10-23T06:46:06.0626613Z ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed 2026-10-23T06:46:06.0626990Z ╭─[apps/server/src/sourceControl/SourceControlProviderRegistry.ts:15:13] 2026-10-23T06:46:06.0627243Z 14 │ } from "@t3tools/contracts"; 2026-10-23T06:46:06.0627436Z 15 │ import type {} from "@t3tools/contracts"; 2026-10-23T06:46:06.0627628Z ·  ── 2026-10-23T06:46:06.0627903Z 16 │ import { detectSourceControlProviderFromRemoteUrl } from "@t3tools/shared/sourceControl"; 2026-10-23T06:46:06.0628147Z ╰──── 2026-10-23T06:46:06.0628294Z  help: Remove empty braces 2026-10-23T06:46:06.0628402Z 2026-10-23T06:46:06.0628647Z ⚠ eslint(no-unused-vars): Function 'describeSchedule' is declared but never used. 2026-10-23T06:46:06.0628984Z ╭─[apps/server/src/scheduledTasks/Schedule.ts:79:10] 2026-10-23T06:46:06.0629268Z 78 │ 2026-10-23T06:46:06.0629472Z 79 │ function describeSchedule(schedule: ScheduledTaskSchedule): string { 2026-10-23T06:46:06.0629712Z ·  ────────┬─────── 2026-10-23T06:46:06.0629971Z · ╰── 'describeSchedule' is declared here 2026-10-23T06:46:06.0630237Z 80 │ if (schedule.type === "webhook") return "On webhook"; 2026-10-23T06:46:06.0630423Z ╰──── 2026-10-23T06:46:06.0630583Z  help: Consider removing this declaration. 2026-10-23T06:46:06.0630702Z 2026-10-23T06:46:06.0630863Z ⚠ react(immutability): This value cannot be modified 2026-10-23T06:46:06.0631184Z ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:42:5] 2026-10-23T06:46:06.0631408Z 35 │ 2026-10-23T06:46:06.0631607Z 36 │ const inspectorProgress = useSharedValue(inspectorVisible ? 1 : 0); 2026-10-23T06:46:06.0631845Z ·  ────────┬──────── 2026-10-23T06:46:06.0632096Z · ╰── `inspectorProgress` originates here 2026-10-23T06:46:06.0632339Z 37 │ const { renderedInspectorWidth } = props; 2026-10-23T06:46:06.0632679Z 38 │ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0); 2026-10-23T06:46:06.0632925Z 39 │ 2026-10-23T06:46:06.0633068Z 40 │ const onClosed = props.onClosed; 2026-10-23T06:46:06.0633237Z 41 │ useEffect(() => { 2026-10-23T06:46:06.0633413Z 42 │ inspectorProgress.value = withTiming( 2026-10-23T06:46:06.0633603Z ·  ────────┬──────── 2026-10-23T06:46:06.0633855Z · ╰── `inspectorProgress` cannot be modified 2026-10-23T06:46:06.0634087Z 43 │ inspectorVisible ? 1 : 0, 2026-10-23T06:46:06.0634237Z ╰──── 2026-10-23T06:46:06.0634565Z  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-23T06:46:06.0635146Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T06:46:06.0635452Z 2026-10-23T06:46:06.0635614Z ⚠ react(immutability): This value cannot be modified 2026-10-23T06:46:06.0635939Z ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:67:7] 2026-10-23T06:46:06.0636205Z 37 │ const { renderedInspectorWidth } = props; 2026-10-23T06:46:06.0636450Z 38 │ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0); 2026-10-23T06:46:06.0636695Z ·  ──────────┬───────── 2026-10-23T06:46:06.0636953Z · ╰── `renderedContentWidth` originates here 2026-10-23T06:46:06.0637164Z 39 │ 2026-10-23T06:46:06.0637307Z 40 │ const onClosed = props.onClosed; 2026-10-23T06:46:06.0637475Z 41 │ useEffect(() => { 2026-10-23T06:46:06.0637659Z 42 │ inspectorProgress.value = withTiming( 2026-10-23T06:46:06.0637849Z 43 │ inspectorVisible ? 1 : 0, 2026-10-23T06:46:06.0638020Z 44 │ WORKSPACE_PANE_TIMING, 2026-10-23T06:46:06.0638181Z 45 │ (finished) => { 2026-10-23T06:46:06.0638405Z 46 │ if (finished === true && !inspectorVisible && onClosed !== undefined) { 2026-10-23T06:46:06.0638674Z 47 │ runOnJS(onClosed)(); 2026-10-23T06:46:06.0638829Z 48 │ } 2026-10-23T06:46:06.0639029Z 49 │ }, 2026-10-23T06:46:06.0639155Z 50 │ ); 2026-10-23T06:46:06.0639354Z 51 │ const targetWidth = inspectorVisible ? (inspectorWidth ?? 0) : 0; 2026-10-23T06:46:06.0639585Z 52 │ renderedInspectorWidth.set( 2026-10-23T06:46:06.0639831Z 53 │ resizing ? targetWidth : withTiming(targetWidth, WORKSPACE_PANE_TIMING), 2026-10-23T06:46:06.0640046Z 54 │ ); 2026-10-23T06:46:06.0640167Z 55 │ }, [ 2026-10-23T06:46:06.0640307Z 56 │ inspectorProgress, 2026-10-23T06:46:06.0640468Z 57 │ inspectorVisible, 2026-10-23T06:46:06.0640619Z 58 │ inspectorWidth, 2026-10-23T06:46:06.0640767Z 59 │ onClosed, 2026-10-23T06:46:06.0640913Z 60 │ renderedInspectorWidth, 2026-10-23T06:46:06.0641070Z 61 │ resizing, 2026-10-23T06:46:06.0641198Z 62 │ ]); 2026-10-23T06:46:06.0641317Z 63 │ 2026-10-23T06:46:06.0641443Z 64 │ useEffect(() => { 2026-10-23T06:46:06.0641617Z 65 │ const targetWidth = inspectorWidth ?? 0; 2026-10-23T06:46:06.0641817Z 66 │ if (!inspectorVisible || resizing) { 2026-10-23T06:46:06.0642021Z 67 │ renderedContentWidth.value = targetWidth; 2026-10-23T06:46:06.0642229Z ·  ──────────┬───────── 2026-10-23T06:46:06.0642492Z · ╰── `renderedContentWidth` cannot be modified 2026-10-23T06:46:06.0642785Z 68 │ return; 2026-10-23T06:46:06.0642970Z ╰──── 2026-10-23T06:46:06.0643299Z  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-23T06:46:06.0643867Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T06:46:06.0644163Z 2026-10-23T06:46:06.0644336Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T06:46:06.0644658Z ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:372:47] 2026-10-23T06:46:06.0644950Z 371 │ const { open, onOpenChange, onSnooze, timestampFormat } = props; 2026-10-23T06:46:06.0645245Z 372 │ const presets = open ? resolveSnoozePresets(new Date(), timestampFormat) : []; 2026-10-23T06:46:06.0645531Z ·  ─────┬──── 2026-10-23T06:46:06.0645819Z · ╰── Cannot call impure function 2026-10-23T06:46:06.0646040Z 373 │ return ( 2026-10-23T06:46:06.0646165Z ╰──── 2026-10-23T06:46:06.0646502Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-23T06:46:06.0647073Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T06:46:06.0647358Z 2026-10-23T06:46:06.0647529Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T06:46:06.0647855Z ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:853:39] 2026-10-23T06:46:06.0648116Z 852 │ if (snoozeGateClock.thread !== thread) { 2026-10-23T06:46:06.0648359Z 853 │ setSnoozeGateClock({ thread, now: new Date().toISOString() }); 2026-10-23T06:46:06.0648652Z ·  ─────┬──── 2026-10-23T06:46:06.0648931Z · ╰── Cannot call impure function 2026-10-23T06:46:06.0649142Z 854 │ } 2026-10-23T06:46:06.0649262Z ╰──── 2026-10-23T06:46:06.0649598Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-23T06:46:06.0650168Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T06:46:06.0650456Z 2026-10-23T06:46:06.0650646Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-23T06:46:06.0651023Z ╭─[apps/mobile/src/features/keyboard/HardwareKeyboardCommandProvider.tsx:116:34] 2026-10-23T06:46:06.0651288Z 115 │ return [...commands]; 2026-10-23T06:46:06.0651520Z 116 │ }, [activeThreadRef, pathname, registrationVersion, navigation]); 2026-10-23T06:46:06.0651784Z ·  ─────────┬───────── 2026-10-23T06:46:06.0652099Z · ╰── Unnecessary dependency `registrationVersion` 2026-10-23T06:46:06.0652334Z 117 │ 2026-10-23T06:46:06.0652453Z ╰──── 2026-10-23T06:46:06.0652901Z  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-23T06:46:06.0653556Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.0653860Z 2026-10-23T06:46:06.0654103Z ⚠ unicorn(prefer-string-starts-ends-with): Prefer String#startsWith over a regex with a caret. 2026-10-23T06:46:06.0654462Z ╭─[apps/server/src/vcs/GitVcsDriverCore.ts:509:11] 2026-10-23T06:46:06.0654706Z 508 │ GIT_DIAGNOSTIC_LINE_PATTERN.test(line) || 2026-10-23T06:46:06.0654969Z 509 │ (!/^remote:/.test(line) && SSH_TRANSPORT_REFUSAL_PATTERN.test(line)), 2026-10-23T06:46:06.0655207Z ·  ─────────────── 2026-10-23T06:46:06.0655369Z 510 │ ) 2026-10-23T06:46:06.0655491Z ╰──── 2026-10-23T06:46:06.0655712Z  help: Replace `/^remote:/.test(line)` with `line.startsWith('remote:')`. 2026-10-23T06:46:06.0655881Z 2026-10-23T06:46:06.0656247Z ⚠ 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-23T06:46:06.0656723Z ╭─[apps/server/src/vcs/GitVcsDriverCore.test.ts:1786:34] 2026-10-23T06:46:06.0657015Z 1785 │ const stat = branch.files!.find((file) => file.path === path)!; 2026-10-23T06:46:06.0657319Z 1786 │ const request = yield* Schema.decodeEffect(ReviewDiffPreviewInput)({ 2026-10-23T06:46:06.0657600Z ·  ─────────────────── 2026-10-23T06:46:06.0657792Z 1787 │ cwd, 2026-10-23T06:46:06.0663633Z ╰──── 2026-10-23T06:46:06.0663693Z 2026-10-23T06:46:06.0663879Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T06:46:06.0664179Z ╭─[apps/web/src/hooks/useThreadActions.ts:821:56] 2026-10-23T06:46:06.0664416Z 820 │ const resolved = resolveThreadTarget(target); 2026-10-23T06:46:06.0664694Z 821 │ if (resolved && !canSnooze(resolved.thread, { now: new Date().toISOString() })) { 2026-10-23T06:46:06.0664982Z ·  ─────┬──── 2026-10-23T06:46:06.0665283Z · ╰── Cannot call impure function 2026-10-23T06:46:06.0665526Z 822 │ return AsyncResult.failure( 2026-10-23T06:46:06.0665678Z ╰──── 2026-10-23T06:46:06.0666015Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-23T06:46:06.0666590Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T06:46:06.0666876Z 2026-10-23T06:46:06.0667048Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T06:46:06.0667339Z ╭─[apps/web/src/hooks/useThreadActions.ts:709:46] 2026-10-23T06:46:06.0667539Z 708 │ const wokeAt = resolved 2026-10-23T06:46:06.0667769Z 709 │ ? threadWokeAt(resolved.thread, { now: new Date().toISOString() }) 2026-10-23T06:46:06.0668031Z ·  ─────┬──── 2026-10-23T06:46:06.0668316Z · ╰── Cannot call impure function 2026-10-23T06:46:06.0668574Z 710 │ : null; 2026-10-23T06:46:06.0668705Z ╰──── 2026-10-23T06:46:06.0669216Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-23T06:46:06.0669833Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T06:46:06.0670113Z 2026-10-23T06:46:06.0670287Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-23T06:46:06.0670655Z ╭─[packages/provider-opencode/src/server/OpenCodeRuntime.environment.test.ts:53:14] 2026-10-23T06:46:06.0670905Z 52 │ 2026-10-23T06:46:06.0671031Z 53 │ for (const {} of [ 2026-10-23T06:46:06.0671194Z ·  ── 2026-10-23T06:46:06.0671354Z 54 │ { healthy: true }, 2026-10-23T06:46:06.0671494Z ╰──── 2026-10-23T06:46:06.0671794Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-23T06:46:06.0672029Z 2026-10-23T06:46:06.0672266Z ⚠ eslint(no-unused-vars): Function 'resolveThreadWorkspaceCwd' is declared but never used. 2026-10-23T06:46:06.0672614Z ╭─[apps/server/src/checkpointing/Utils.ts:12:10] 2026-10-23T06:46:06.0672802Z 11 │ 2026-10-23T06:46:06.0672963Z 12 │ function resolveThreadWorkspaceCwd(input: { 2026-10-23T06:46:06.0673189Z ·  ────────────┬──────────── 2026-10-23T06:46:06.0673475Z · ╰── 'resolveThreadWorkspaceCwd' is declared here 2026-10-23T06:46:06.0673715Z 13 │ readonly thread: { 2026-10-23T06:46:06.0673852Z ╰──── 2026-10-23T06:46:06.0674012Z  help: Consider removing this declaration. 2026-10-23T06:46:06.0674140Z 2026-10-23T06:46:06.0674316Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-23T06:46:06.0674627Z ╭─[apps/server/src/process/externalLauncher.test.ts:186:12] 2026-10-23T06:46:06.0674835Z 185 │ 2026-10-23T06:46:06.0675002Z 186 │ for (const {} of ["darwin", "linux"] as const) { 2026-10-23T06:46:06.0675194Z ·  ── 2026-10-23T06:46:06.0675337Z 187 │ } 2026-10-23T06:46:06.0675454Z ╰──── 2026-10-23T06:46:06.0675742Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-23T06:46:06.0675972Z 2026-10-23T06:46:06.0676143Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-23T06:46:06.0676456Z ╭─[apps/server/src/process/externalLauncher.test.ts:189:12] 2026-10-23T06:46:06.0676670Z 188 │ 2026-10-23T06:46:06.0676802Z 189 │ for (const {} of [ 2026-10-23T06:46:06.0676957Z ·  ── 2026-10-23T06:46:06.0677139Z 190 │ { kind: "browser", folderVerb: "none" }, 2026-10-23T06:46:06.0677301Z ╰──── 2026-10-23T06:46:06.0677588Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-23T06:46:06.0677817Z 2026-10-23T06:46:06.0677986Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-23T06:46:06.0678299Z ╭─[apps/server/src/process/externalLauncher.test.ts:311:12] 2026-10-23T06:46:06.0678547Z 310 │ 2026-10-23T06:46:06.0678741Z 311 │ for (const {} of ["rejected", "spawn-error", "stalled"] as const) { 2026-10-23T06:46:06.0678954Z ·  ── 2026-10-23T06:46:06.0679100Z 312 │ } 2026-10-23T06:46:06.0679201Z ╰──── 2026-10-23T06:46:06.0679432Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-23T06:46:06.0679435Z 2026-10-23T06:46:06.0679604Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-23T06:46:06.0679749Z ╭─[apps/server/src/process/externalLauncher.test.ts:314:12] 2026-10-23T06:46:06.0679806Z 313 │ 2026-10-23T06:46:06.0679872Z 314 │ for (const {} of [ 2026-10-23T06:46:06.0679945Z ·  ── 2026-10-23T06:46:06.0680004Z 315 │ { 2026-10-23T06:46:06.0680059Z ╰──── 2026-10-23T06:46:06.0680287Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-23T06:46:06.0680290Z 2026-10-23T06:46:06.0680480Z ⚠ unicorn(no-new-array): Do not use `new Array(singleArgument)`. 2026-10-23T06:46:06.0680609Z ╭─[apps/web/src/terminal/ghostty/core.ts:194:19] 2026-10-23T06:46:06.0680742Z 193 │ const count = Math.min(CHUNK_SIZE, graphemeLength - start); 2026-10-23T06:46:06.0680840Z 194 │ const codes = new Array(count); 2026-10-23T06:46:06.0680951Z ·  ──────────────────────── 2026-10-23T06:46:06.0681062Z 195 │ for (let index = 0; index < count; index += 1) { 2026-10-23T06:46:06.0681117Z ╰──── 2026-10-23T06:46:06.0681553Z  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-23T06:46:06.0681556Z 2026-10-23T06:46:06.0681825Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-23T06:46:06.0681975Z ╭─[packages/provider-opencode/src/server/adapter.ts:3755:7] 2026-10-23T06:46:06.0682033Z 3754 │ 2026-10-23T06:46:06.0682240Z 3755 │ const layer: Layer.Layer = 2026-10-23T06:46:06.0682311Z ·  ──┬── 2026-10-23T06:46:06.0682443Z · ╰── 'layer' is declared here 2026-10-23T06:46:06.0682513Z 3756 │ Layer.effect( 2026-10-23T06:46:06.0682570Z ╰──── 2026-10-23T06:46:06.0682676Z  help: Consider removing this declaration. 2026-10-23T06:46:06.0682679Z 2026-10-23T06:46:06.0682869Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T06:46:06.0683078Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:121:27] 2026-10-23T06:46:06.0683280Z 120 │ const scope = makeScope(options.capabilities ?? new Set(["preview", "worktree"])); 2026-10-23T06:46:06.0683370Z 121 │ const dispatch = vi.fn((_: unknown) => 2026-10-23T06:46:06.0683460Z ·  ┬ 2026-10-23T06:46:06.0683599Z · ╰── '_' is declared here 2026-10-23T06:46:06.0683710Z 122 │ (options.dispatchGate ?? Effect.void).pipe( 2026-10-23T06:46:06.0683762Z ╰──── 2026-10-23T06:46:06.0683871Z  help: Consider removing this parameter. 2026-10-23T06:46:06.0683874Z 2026-10-23T06:46:06.0684062Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T06:46:06.0684211Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:134:39] 2026-10-23T06:46:06.0684271Z 133 │ ); 2026-10-23T06:46:06.0684384Z 134 │ const listLocalBranchNames = vi.fn((_: string) => 2026-10-23T06:46:06.0684485Z ·  ┬ 2026-10-23T06:46:06.0684631Z · ╰── '_' is declared here 2026-10-23T06:46:06.0684699Z 135 │ Effect.succeed( 2026-10-23T06:46:06.0684755Z ╰──── 2026-10-23T06:46:06.0684860Z  help: Consider removing this parameter. 2026-10-23T06:46:06.0684863Z 2026-10-23T06:46:06.0685048Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T06:46:06.0685186Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:178:31] 2026-10-23T06:46:06.0685244Z 177 │ }); 2026-10-23T06:46:06.0685355Z 178 │ const sendToThread = vi.fn((_: unknown) => { 2026-10-23T06:46:06.0685450Z ·  ┬ 2026-10-23T06:46:06.0685589Z · ╰── '_' is declared here 2026-10-23T06:46:06.0685690Z 179 │ switch (options.continuation ?? "queued") { 2026-10-23T06:46:06.0685745Z ╰──── 2026-10-23T06:46:06.0685849Z  help: Consider removing this parameter. 2026-10-23T06:46:06.0685851Z 2026-10-23T06:46:06.0686036Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T06:46:06.0686173Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:203:33] 2026-10-23T06:46:06.0686232Z 202 │ ); 2026-10-23T06:46:06.0686334Z 203 │ const removeWorktree = vi.fn((_: unknown) => 2026-10-23T06:46:06.0686428Z ·  ┬ 2026-10-23T06:46:06.0686572Z · ╰── '_' is declared here 2026-10-23T06:46:06.0686659Z 204 │ options.removeWorktreeFails 2026-10-23T06:46:06.0686714Z ╰──── 2026-10-23T06:46:06.0686819Z  help: Consider removing this parameter. 2026-10-23T06:46:06.0686821Z 2026-10-23T06:46:06.0687003Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T06:46:06.0687142Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:208:36] 2026-10-23T06:46:06.0687202Z 207 │ ); 2026-10-23T06:46:06.0687308Z 208 │ const deleteLocalBranch = vi.fn((_: unknown) => 2026-10-23T06:46:06.0687406Z ·  ┬ 2026-10-23T06:46:06.0687549Z · ╰── '_' is declared here 2026-10-23T06:46:06.0687700Z 209 │ options.deleteLocalBranchFails 2026-10-23T06:46:06.0687787Z ╰──── 2026-10-23T06:46:06.0687889Z  help: Consider removing this parameter. 2026-10-23T06:46:06.0687892Z 2026-10-23T06:46:06.0688077Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T06:46:06.0688216Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:213:42] 2026-10-23T06:46:06.0688275Z 212 │ ); 2026-10-23T06:46:06.0688390Z 213 │ const fetchWorktreeBaseCommit = vi.fn((_: unknown) => 2026-10-23T06:46:06.0688540Z ·  ┬ 2026-10-23T06:46:06.0688688Z · ╰── '_' is declared here 2026-10-23T06:46:06.0688777Z 214 │ options.fetchWorktreeBaseFails 2026-10-23T06:46:06.0688830Z ╰──── 2026-10-23T06:46:06.0688939Z  help: Consider removing this parameter. 2026-10-23T06:46:06.0688944Z 2026-10-23T06:46:06.0689129Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T06:46:06.0689267Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:254:30] 2026-10-23T06:46:06.0689322Z 253 │ ); 2026-10-23T06:46:06.0689419Z 254 │ const localStatus = vi.fn((_: unknown) => 2026-10-23T06:46:06.0689509Z ·  ┬ 2026-10-23T06:46:06.0689649Z · ╰── '_' is declared here 2026-10-23T06:46:06.0689719Z 255 │ Effect.succeed({ 2026-10-23T06:46:06.0689775Z ╰──── 2026-10-23T06:46:06.0689878Z  help: Consider removing this parameter. 2026-10-23T06:46:06.0689881Z 2026-10-23T06:46:06.0690073Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T06:46:06.0690213Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:264:32] 2026-10-23T06:46:06.0690271Z 263 │ ); 2026-10-23T06:46:06.0690429Z 264 │ const refreshStatus = vi.fn((_: string) => Effect.die("refreshStatus stub")); 2026-10-23T06:46:06.0690525Z ·  ┬ 2026-10-23T06:46:06.0690663Z · ╰── '_' is declared here 2026-10-23T06:46:06.0690815Z 265 │ const runForThread = vi.fn((input: { readonly worktreePath: string }) => { 2026-10-23T06:46:06.0690871Z ╰──── 2026-10-23T06:46:06.0690974Z  help: Consider removing this parameter. 2026-10-23T06:46:06.0690977Z 2026-10-23T06:46:06.0691466Z ⚠ 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-23T06:46:06.0691603Z ╭─[apps/server/src/usage/UsageService.test.ts:2383:7] 2026-10-23T06:46:06.0691706Z 2382 │ let orphanedAt: number | undefined; 2026-10-23T06:46:06.0691952Z 2383 │ ╭─▶ for (let interruptAt = 1; interruptAt <= 31; interruptAt += 1) { 2026-10-23T06:46:06.0692080Z 2384 │ │ const tasks: Array<() => void> = []; 2026-10-23T06:46:06.0692232Z 2385 │ │ const dispatcher: Scheduler.SchedulerDispatcher = { 2026-10-23T06:46:06.0692368Z 2386 │ │ scheduleTask: (task) => tasks.push(task), 2026-10-23T06:46:06.0692532Z 2387 │ │ flush: () => { 2026-10-23T06:46:06.0692691Z 2388 │ │ let task: (() => void) | undefined; 2026-10-23T06:46:06.0692841Z 2389 │ │ while ((task = tasks.shift()) !== undefined) task(); 2026-10-23T06:46:06.0692928Z 2390 │ │ }, 2026-10-23T06:46:06.0693013Z 2391 │ │ }; 2026-10-23T06:46:06.0693088Z 2392 │ │ 2026-10-23T06:46:06.0693251Z 2393 │ │ let requestFiber: Fiber.Fiber | undefined; 2026-10-23T06:46:06.0693363Z 2394 │ │ let requestChecks = 0; 2026-10-23T06:46:06.0693500Z 2395 │ │ const scheduler: Scheduler.Scheduler = { 2026-10-23T06:46:06.0693617Z 2396 │ │ executionMode: "async", 2026-10-23T06:46:06.0693747Z 2397 │ │ makeDispatcher: () => dispatcher, 2026-10-23T06:46:06.0693868Z 2398 │ │ shouldYield: (fiber) => { 2026-10-23T06:46:06.0694007Z 2399 │ │ if (fiber !== requestFiber) return false; 2026-10-23T06:46:06.0694117Z 2400 │ │ requestChecks += 1; 2026-10-23T06:46:06.0694263Z 2401 │ │ if (requestChecks !== interruptAt) return false; 2026-10-23T06:46:06.0694382Z 2402 │ │ fiber.interruptUnsafe(); 2026-10-23T06:46:06.0694483Z 2403 │ │ return true; 2026-10-23T06:46:06.0694567Z 2404 │ │ }, 2026-10-23T06:46:06.0694649Z 2405 │ │ }; 2026-10-23T06:46:06.0694721Z 2406 │ │ 2026-10-23T06:46:06.0694851Z 2407 │ │ const input: UsageSummaryInput = { 2026-10-23T06:46:06.0694950Z 2408 │ │ ...WINDOW, 2026-10-23T06:46:06.0695080Z 2409 │ │ sinceDay: UsageDay.make("2026-09-01"), 2026-10-23T06:46:06.0695278Z 2410 │ │ untilDay: UsageDay.make(`2026-08-${String(interruptAt).padStart(2, "0")}`), 2026-10-23T06:46:06.0695365Z 2411 │ │ }; 2026-10-23T06:46:06.0695482Z 2412 │ │ const first = yield* service 2026-10-23T06:46:06.0695589Z 2413 │ │ .readSummary(input) 2026-10-23T06:46:06.0695682Z 2414 │ │ .pipe( 2026-10-23T06:46:06.0695785Z 2415 │ │ Effect.exit, 2026-10-23T06:46:06.0695957Z 2416 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-23T06:46:06.0696064Z 2417 │ │ Effect.forkChild, 2026-10-23T06:46:06.0696149Z 2418 │ │ ); 2026-10-23T06:46:06.0696255Z 2419 │ │ requestFiber = first; 2026-10-23T06:46:06.0696366Z 2420 │ │ yield* Effect.yieldNow; 2026-10-23T06:46:06.0696472Z 2421 │ │ dispatcher.flush(); 2026-10-23T06:46:06.0696548Z 2422 │ │ 2026-10-23T06:46:06.0696704Z 2423 │ │ const second = yield* service.readSummary(input).pipe( 2026-10-23T06:46:06.0696807Z 2424 │ │ Effect.match({ 2026-10-23T06:46:06.0696936Z 2425 │ │ onFailure: (error) => error.reason, 2026-10-23T06:46:06.0697119Z 2426 │ │ onSuccess: () => "success" as const, 2026-10-23T06:46:06.0697252Z 2427 │ │ }), 2026-10-23T06:46:06.0697414Z 2428 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-23T06:46:06.0697520Z 2429 │ │ Effect.forkChild, 2026-10-23T06:46:06.0697602Z 2430 │ │ ); 2026-10-23T06:46:06.0697713Z 2431 │ │ yield* Effect.yieldNow; 2026-10-23T06:46:06.0697818Z 2432 │ │ dispatcher.flush(); 2026-10-23T06:46:06.0697949Z 2433 │ │ const secondExit = second.pollUnsafe(); 2026-10-23T06:46:06.0698067Z 2434 │ │ if (secondExit === undefined) { 2026-10-23T06:46:06.0698188Z 2435 │ │ second.interruptUnsafe(); 2026-10-23T06:46:06.0698310Z 2436 │ │ orphanedAt = interruptAt; 2026-10-23T06:46:06.0698439Z 2437 │ │ break; 2026-10-23T06:46:06.0698521Z 2438 │ │ } 2026-10-23T06:46:06.0698647Z 2439 │ │ if (Exit.isFailure(secondExit)) { 2026-10-23T06:46:06.0698810Z 2440 │ │ assert.fail("the matching request fiber was interrupted"); 2026-10-23T06:46:06.0698894Z 2441 │ │ } 2026-10-23T06:46:06.0699046Z 2442 │ │ assert.strictEqual(secondExit.value, "invalidWindow"); 2026-10-23T06:46:06.0699185Z 2443 │ ╰─▶ } 2026-10-23T06:46:06.0699245Z 2444 │ 2026-10-23T06:46:06.0699302Z ╰──── 2026-10-23T06:46:06.0699305Z 2026-10-23T06:46:06.0699582Z ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'. 2026-10-23T06:46:06.0699708Z ╭─[apps/server/src/usage/UsageService.ts:169:7] 2026-10-23T06:46:06.0699765Z 168 │ 2026-10-23T06:46:06.0699849Z 169 │ const layerTest = Layer.succeed( 2026-10-23T06:46:06.0699929Z ·  ────┬──── 2026-10-23T06:46:06.0700064Z · ╰── 'layerTest' is declared here 2026-10-23T06:46:06.0700134Z 170 │ UsageService, 2026-10-23T06:46:06.0700189Z ╰──── 2026-10-23T06:46:06.0700297Z  help: Consider removing this declaration. 2026-10-23T06:46:06.0700300Z 2026-10-23T06:46:06.0700470Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T06:46:06.0700610Z ╭─[apps/web/src/components/CustomSnoozeDialog.tsx:140:58] 2026-10-23T06:46:06.0700754Z 139 │ {...(weekStartsOn === undefined ? {} : { weekStartsOn })} 2026-10-23T06:46:06.0700908Z 140 │ disabled={{ before: new Date(new Date().setHours(0, 0, 0, 0)) }} 2026-10-23T06:46:06.0701034Z ·  ─────┬──── 2026-10-23T06:46:06.0701213Z · ╰── Cannot call impure function 2026-10-23T06:46:06.0701312Z 141 │ onSelect={(selected) => { 2026-10-23T06:46:06.0701364Z ╰──── 2026-10-23T06:46:06.0701646Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-23T06:46:06.0702012Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T06:46:06.0702047Z 2026-10-23T06:46:06.0702275Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-23T06:46:06.0702413Z ╭─[apps/mobile/src/state/use-composer-drafts.ts:1022:15] 2026-10-23T06:46:06.0702484Z 1021 │ instanceId, 2026-10-23T06:46:06.0702627Z 1022 │ { ...(persisted.modelOptionMemory[instanceId] ?? {}), ...models }, 2026-10-23T06:46:06.0702774Z ·  ────────────────────────────────────────────────── 2026-10-23T06:46:06.0702841Z 1023 │ ]), 2026-10-23T06:46:06.0702898Z ╰──── 2026-10-23T06:46:06.0703165Z  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-23T06:46:06.0703175Z 2026-10-23T06:46:06.0703337Z ⚠ eslint(no-new): Do not use 'new' for side effects. 2026-10-23T06:46:06.0703469Z ╭─[apps/server/src/mcp/McpToolAccess.test.ts:168:3] 2026-10-23T06:46:06.0703586Z 167 │ // @ts-expect-error a declaration constructed directly 2026-10-23T06:46:06.0703682Z 168 │ new McpToolAccess.Declaration(unchecked); 2026-10-23T06:46:06.0703783Z ·  ───────────────────────────── 2026-10-23T06:46:06.0703916Z 169 │ // @ts-expect-error a handlers layer built outside McpToolAccess 2026-10-23T06:46:06.0703971Z ╰──── 2026-10-23T06:46:06.0704131Z  help: Assign the result of 'new' to a variable or compare it to a reference. 2026-10-23T06:46:06.0704133Z 2026-10-23T06:46:06.0704440Z ⚠ eslint(no-unused-vars): Variable 'revokeActiveMcpThread' is declared but never used. Unused variables should start with a '_'. 2026-10-23T06:46:06.0704573Z ╭─[apps/server/src/mcp/McpSessionRegistry.ts:218:7] 2026-10-23T06:46:06.0704631Z 217 │ 2026-10-23T06:46:06.0704782Z 218 │ const revokeActiveMcpThread = (threadId: ThreadId): Effect.Effect => 2026-10-23T06:46:06.0704877Z ·  ──────────┬────────── 2026-10-23T06:46:06.0705040Z · ╰── 'revokeActiveMcpThread' is declared here 2026-10-23T06:46:06.0705233Z 219 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeThread(threadId) : Effect.void; 2026-10-23T06:46:06.0705285Z ╰──── 2026-10-23T06:46:06.0705393Z  help: Consider removing this declaration. 2026-10-23T06:46:06.0705395Z 2026-10-23T06:46:06.0705781Z ⚠ eslint(no-unused-vars): Variable 'revokeAllActiveMcpCredentials' is declared but never used. Unused variables should start with a '_'. 2026-10-23T06:46:06.0705939Z ╭─[apps/server/src/mcp/McpSessionRegistry.ts:221:7] 2026-10-23T06:46:06.0705994Z 220 │ 2026-10-23T06:46:06.0706129Z 221 │ const revokeAllActiveMcpCredentials = (): Effect.Effect => 2026-10-23T06:46:06.0706235Z ·  ──────────────┬────────────── 2026-10-23T06:46:06.0706421Z · ╰── 'revokeAllActiveMcpCredentials' is declared here 2026-10-23T06:46:06.0706586Z 222 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeAll : Effect.void; 2026-10-23T06:46:06.0706637Z ╰──── 2026-10-23T06:46:06.0706742Z  help: Consider removing this declaration. 2026-10-23T06:46:06.0706744Z 2026-10-23T06:46:06.0706935Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-23T06:46:06.0707060Z ╭─[apps/mobile/src/lib/useHoverGesture.ts:8:15] 2026-10-23T06:46:06.0707122Z 7 │ () => 2026-10-23T06:46:06.0707193Z 8 │ Gesture.Hover() 2026-10-23T06:46:06.0707273Z ·  ──┬── 2026-10-23T06:46:06.0707411Z · ╰── `Hover` may be a component 2026-10-23T06:46:06.0707488Z 9 │ .manualActivation(true) 2026-10-23T06:46:06.0707543Z ╰──── 2026-10-23T06:46:06.0707829Z  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-23T06:46:06.0708291Z  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-23T06:46:06.0708293Z 2026-10-23T06:46:06.0708511Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T06:46:06.0708662Z ╭─[apps/web/src/components/chat/useThreadLifecycle.tsx:178:58] 2026-10-23T06:46:06.0708777Z 177 │ if (snoozeClockState.shell !== activeThreadShell) { 2026-10-23T06:46:06.0708944Z 178 │ setSnoozeClockState({ shell: activeThreadShell, now: new Date().toISOString() }); 2026-10-23T06:46:06.0709072Z ·  ─────┬──── 2026-10-23T06:46:06.0709309Z · ╰── Cannot call impure function 2026-10-23T06:46:06.0709368Z 179 │ } 2026-10-23T06:46:06.0709423Z ╰──── 2026-10-23T06:46:06.0709709Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-23T06:46:06.0710009Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T06:46:06.0710011Z 2026-10-23T06:46:06.0710274Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T06:46:06.0710407Z ╭─[apps/mobile/src/state/use-vcs-action-state.ts:86:5] 2026-10-23T06:46:06.0710520Z 83 │ const [nowMs, setNowMs] = useState(() => Date.now()); 2026-10-23T06:46:06.0710588Z 84 │ useEffect(() => { 2026-10-23T06:46:06.0710661Z ·  ────┬──── 2026-10-23T06:46:06.0710795Z · ╰── This is the containing effect 2026-10-23T06:46:06.0710888Z 85 │ if (!actionState.isRunning) return; 2026-10-23T06:46:06.0711037Z 86 │ setNowMs(Date.now()); 2026-10-23T06:46:06.0711157Z ·  ────┬─── 2026-10-23T06:46:06.0711328Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T06:46:06.0711460Z 87 │ const interval = setInterval(() => setNowMs(Date.now()), 1000); 2026-10-23T06:46:06.0711511Z ╰──── 2026-10-23T06:46:06.0712127Z  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-23T06:46:06.0712459Z  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-23T06:46:06.0712466Z 2026-10-23T06:46:06.0712697Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-23T06:46:06.0712837Z ╭─[apps/mobile/src/state/use-model-option-memory.ts:21:7] 2026-10-23T06:46:06.0712901Z 20 │ [instanceId]: { 2026-10-23T06:46:06.0712983Z 21 │ ...(state[instanceId] ?? {}), 2026-10-23T06:46:06.0713090Z ·  ──────────────────────────── 2026-10-23T06:46:06.0713160Z 22 │ [model]: options, 2026-10-23T06:46:06.0713212Z ╰──── 2026-10-23T06:46:06.0713482Z  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-23T06:46:06.0713485Z 2026-10-23T06:46:06.0713756Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T06:46:06.0713937Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:335:7] 2026-10-23T06:46:06.0713997Z 330 │ }; 2026-10-23T06:46:06.0714063Z 331 │ useEffect(() => { 2026-10-23T06:46:06.0714137Z ·  ────┬──── 2026-10-23T06:46:06.0714270Z · ╰── This is the containing effect 2026-10-23T06:46:06.0714372Z 332 │ if (!guidesEnabled && section === "guide") { 2026-10-23T06:46:06.0714469Z 333 │ requestedSection.current = "overview"; 2026-10-23T06:46:06.0714642Z 334 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-23T06:46:06.0714717Z 335 │ setSection("overview"); 2026-10-23T06:46:06.0714793Z ·  ─────┬──── 2026-10-23T06:46:06.0714974Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T06:46:06.0715036Z 336 │ } 2026-10-23T06:46:06.0715089Z ╰──── 2026-10-23T06:46:06.0715692Z  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-23T06:46:06.0716016Z  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-23T06:46:06.0716019Z 2026-10-23T06:46:06.0716228Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-23T06:46:06.0716471Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:337:6] 2026-10-23T06:46:06.0716604Z 332 │ if (!guidesEnabled && section === "guide") { 2026-10-23T06:46:06.0716700Z 333 │ requestedSection.current = "overview"; 2026-10-23T06:46:06.0716787Z ·  ────────┬─────── 2026-10-23T06:46:06.0717241Z · ╰── 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-23T06:46:06.0717411Z 334 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-23T06:46:06.0717568Z ·  ─────────┬───────── ──────┬────── 2026-10-23T06:46:06.0718081Z · │ ╰── 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-23T06:46:06.0718582Z · ╰── 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-23T06:46:06.0718658Z 335 │ setSection("overview"); 2026-10-23T06:46:06.0718718Z 336 │ } 2026-10-23T06:46:06.0718813Z 337 │ }, [guidesEnabled, section, insets.top]); 2026-10-23T06:46:06.0718927Z ·  ──────────────────┬───────────────── 2026-10-23T06:46:06.0719125Z · ╰── This dependency list is missing values used by the callback 2026-10-23T06:46:06.0719223Z 338 │ const tabContent = activityContent; 2026-10-23T06:46:06.0719281Z ╰──── 2026-10-23T06:46:06.0719450Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-23T06:46:06.0719773Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.0719776Z 2026-10-23T06:46:06.0719987Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-23T06:46:06.0720162Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:873:6] 2026-10-23T06:46:06.0720222Z 856 │ if ( 2026-10-23T06:46:06.0720341Z 857 │ lastSelection.current.path === route.params.path && 2026-10-23T06:46:06.0720424Z ·  ──────┬────── 2026-10-23T06:46:06.0720865Z · ╰── 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-23T06:46:06.0720999Z 858 │ lastSelection.current.id === route.params.fileSelectionId 2026-10-23T06:46:06.0721055Z 859 │ ) 2026-10-23T06:46:06.0721120Z 860 │ return; 2026-10-23T06:46:06.0721299Z 861 │ lastSelection.current = { path: route.params.path, id: route.params.fileSelectionId }; 2026-10-23T06:46:06.0721439Z 862 │ if (route.params.focus) navigation.setParams({ focus: undefined }); 2026-10-23T06:46:06.0721525Z 863 │ setJumpPath(route.params.path); 2026-10-23T06:46:06.0721601Z 864 │ setSelectedRowId(null); 2026-10-23T06:46:06.0721681Z 865 │ jumpStarted.current = false; 2026-10-23T06:46:06.0721893Z 866 │ const file = data.files.find((entry) => entry.path === route.params.path); 2026-10-23T06:46:06.0722020Z 867 │ if (!file || !nativeView.current) return; 2026-10-23T06:46:06.0722112Z ·  ─────┬──── 2026-10-23T06:46:06.0722558Z · ╰── 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-23T06:46:06.0722688Z 868 │ setCollapsedIds((ids) => ids.filter((id) => id !== file.id)); 2026-10-23T06:46:06.0722766Z 869 │ jumpStarted.current = true; 2026-10-23T06:46:06.0722909Z 870 │ void nativeView.current.scrollToFile(file.id, false).catch(() => { 2026-10-23T06:46:06.0722992Z 871 │ jumpStarted.current = false; 2026-10-23T06:46:06.0723049Z 872 │ }); 2026-10-23T06:46:06.0723252Z 873 │ }, [route.params.path, route.params.fileSelectionId, route.params.focus, data.files, navigation]); 2026-10-23T06:46:06.0723471Z ·  ──────────────────────────────────────────────┬────────────────────────────────────────────── 2026-10-23T06:46:06.0723697Z · ╰── This dependency list is missing values used by the callback 2026-10-23T06:46:06.0723811Z 874 │ const appliedFilter = useRef(filter.hideTestFiles); 2026-10-23T06:46:06.0723863Z ╰──── 2026-10-23T06:46:06.0724032Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-23T06:46:06.0724353Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.0724355Z 2026-10-23T06:46:06.0724567Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T06:46:06.0724714Z ╭─[apps/mobile/src/state/use-thread-outbox-drain.ts:1315:5] 2026-10-23T06:46:06.0724795Z 1314 │ queuedMessagesByThreadKey, 2026-10-23T06:46:06.0724862Z 1315 │ retryTick, 2026-10-23T06:46:06.0724939Z ·  ────┬──── 2026-10-23T06:46:06.0725085Z · ╰── Unnecessary dependency `retryTick` 2026-10-23T06:46:06.0725157Z 1316 │ restoreQueuedMessage, 2026-10-23T06:46:06.0725213Z ╰──── 2026-10-23T06:46:06.0725511Z  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-23T06:46:06.0725883Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.0725916Z 2026-10-23T06:46:06.0726391Z ⚠ 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-23T06:46:06.0726553Z ╭─[apps/server/src/project/ProjectEnrichmentService.test.ts:28:3] 2026-10-23T06:46:06.0726611Z 27 │ ) { 2026-10-23T06:46:06.0726819Z 28 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-23T06:46:06.0726969Z 29 │ │ const available = yield* service.peek(workspaceRoot); 2026-10-23T06:46:06.0727098Z 30 │ │ if (predicate(available)) return available; 2026-10-23T06:46:06.0727209Z 31 │ │ yield* Effect.yieldNow; 2026-10-23T06:46:06.0727340Z 32 │ ╰─▶ } 2026-10-23T06:46:06.0727521Z 33 │ return yield* Effect.die(`Project metadata for ${workspaceRoot} was not resolved in time.`); 2026-10-23T06:46:06.0727573Z ╰──── 2026-10-23T06:46:06.0727576Z 2026-10-23T06:46:06.0727794Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-23T06:46:06.0727924Z ╭─[apps/mobile/src/lib/markdownDocument.ts:138:28] 2026-10-23T06:46:06.0728008Z 137 │ visit(parser.parse(markdown)); 2026-10-23T06:46:06.0728094Z 138 │ for (const edit of edits.reverse()) 2026-10-23T06:46:06.0728196Z ·  ─────── 2026-10-23T06:46:06.0728371Z 139 │ markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end); 2026-10-23T06:46:06.0728454Z ╰──── 2026-10-23T06:46:06.0728718Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-23T06:46:06.0728721Z 2026-10-23T06:46:06.0728938Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-23T06:46:06.0729065Z ╭─[apps/mobile/src/lib/markdownDocument.ts:169:28] 2026-10-23T06:46:06.0729146Z 168 │ visit(parser.parse(markdown)); 2026-10-23T06:46:06.0729230Z 169 │ for (const edit of edits.reverse()) 2026-10-23T06:46:06.0729328Z ·  ─────── 2026-10-23T06:46:06.0729492Z 170 │ markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end); 2026-10-23T06:46:06.0729546Z ╰──── 2026-10-23T06:46:06.0729811Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-23T06:46:06.0729819Z 2026-10-23T06:46:06.0730029Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-23T06:46:06.0730153Z ╭─[apps/mobile/src/lib/markdownDocument.ts:223:38] 2026-10-23T06:46:06.0730234Z 222 │ visit(parser.parse(markdown)); 2026-10-23T06:46:06.0730341Z 223 │ for (const lineStart of lineStarts.reverse()) { 2026-10-23T06:46:06.0730446Z ·  ─────── 2026-10-23T06:46:06.0730614Z 224 │ // The header row may be a lazy line without its container markers (`>` or list indent), 2026-10-23T06:46:06.0730668Z ╰──── 2026-10-23T06:46:06.0730992Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-23T06:46:06.0731030Z 2026-10-23T06:46:06.0731233Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T06:46:06.0731350Z ╭─[apps/mobile/src/state/thread-order.ts:29:7] 2026-10-23T06:46:06.0731426Z 28 │ getPendingThreadOrder(); 2026-10-23T06:46:06.0731509Z 29 │ }, [nowMinute, snoozeWakeTick]); 2026-10-23T06:46:06.0731635Z ·  ────┬──── ───────┬────── 2026-10-23T06:46:06.0731837Z · │ ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-23T06:46:06.0731981Z · ╰── Unnecessary dependency `nowMinute` 2026-10-23T06:46:06.0732050Z 30 │ return pending; 2026-10-23T06:46:06.0732108Z ╰──── 2026-10-23T06:46:06.0732407Z  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-23T06:46:06.0732724Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.0732726Z 2026-10-23T06:46:06.0733198Z ⚠ 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-23T06:46:06.0733334Z ╭─[apps/server/src/project/ProjectService.test.ts:94:3] 2026-10-23T06:46:06.0733391Z 93 │ ) { 2026-10-23T06:46:06.0733602Z 94 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-23T06:46:06.0733782Z 95 │ │ const project = Option.getOrThrow(yield* service.getById(projectId)); 2026-10-23T06:46:06.0733907Z 96 │ │ if (predicate(project)) return project; 2026-10-23T06:46:06.0734010Z 97 │ │ yield* Effect.yieldNow; 2026-10-23T06:46:06.0734139Z 98 │ ╰─▶ } 2026-10-23T06:46:06.0734290Z 99 │ return yield* Effect.die(`Project ${projectId} was not enriched in time.`); 2026-10-23T06:46:06.0734344Z ╰──── 2026-10-23T06:46:06.0734346Z 2026-10-23T06:46:06.0734557Z ⚠ eslint(no-unused-vars): Identifier 'HookForwarder' is imported but never used. 2026-10-23T06:46:06.0734668Z ╭─[infra/relay/src/http/Api.ts:69:13] 2026-10-23T06:46:06.0734813Z 68 │ import * as EnvironmentLinks from "../environments/EnvironmentLinks.ts"; 2026-10-23T06:46:06.0734929Z 69 │ import * as HookForwarder from "../hooks/HookForwarder.ts"; 2026-10-23T06:46:06.0735019Z ·  ──────┬────── 2026-10-23T06:46:06.0735165Z · ╰── 'HookForwarder' is imported here 2026-10-23T06:46:06.0735273Z 70 │ import * as HeldHooks from "../hooks/HeldHooks.ts"; 2026-10-23T06:46:06.0735327Z ╰──── 2026-10-23T06:46:06.0735427Z  help: Consider removing this import. 2026-10-23T06:46:06.0735429Z 2026-10-23T06:46:06.0735899Z ⚠ 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-23T06:46:06.0736095Z ╭─[packages/effect-acp/src/errors.test.ts:129:28] 2026-10-23T06:46:06.0736222Z 128 │ const secret = "acp-summary-secret"; 2026-10-23T06:46:06.0736335Z 129 │ const cause = yield* Schema.decodeUnknownEffect( 2026-10-23T06:46:06.0736456Z ·  ────────────────────────── 2026-10-23T06:46:06.0736529Z 130 │ Schema.Struct({ 2026-10-23T06:46:06.0736585Z ╰──── 2026-10-23T06:46:06.0736588Z 2026-10-23T06:46:06.0736853Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T06:46:06.0737044Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:119:10] 2026-10-23T06:46:06.0737101Z 117 │ 2026-10-23T06:46:06.0737170Z 118 │ useEffect(() => { 2026-10-23T06:46:06.0737250Z ·  ────┬──── 2026-10-23T06:46:06.0737386Z · ╰── This is the containing effect 2026-10-23T06:46:06.0737469Z 119 │ void refreshNotifications(); 2026-10-23T06:46:06.0737564Z ·  ──────────┬───────── 2026-10-23T06:46:06.0737745Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T06:46:06.0737891Z 120 │ const subscription = AppState.addEventListener("change", (state) => { 2026-10-23T06:46:06.0737947Z ╰──── 2026-10-23T06:46:06.0738606Z  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-23T06:46:06.0738941Z  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-23T06:46:06.0738947Z 2026-10-23T06:46:06.0739209Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T06:46:06.0739396Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:128:7] 2026-10-23T06:46:06.0739454Z 125 │ 2026-10-23T06:46:06.0739523Z 126 │ useEffect(() => { 2026-10-23T06:46:06.0739597Z ·  ────┬──── 2026-10-23T06:46:06.0739729Z · ╰── This is the containing effect 2026-10-23T06:46:06.0739798Z 127 │ if (!isLoaded) { 2026-10-23T06:46:06.0739892Z 128 │ setLiveActivityStatus("checking"); 2026-10-23T06:46:06.0739990Z ·  ──────────┬────────── 2026-10-23T06:46:06.0740167Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T06:46:06.0740233Z 129 │ return; 2026-10-23T06:46:06.0740288Z ╰──── 2026-10-23T06:46:06.0740892Z  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-23T06:46:06.0741222Z  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-23T06:46:06.0741224Z 2026-10-23T06:46:06.0741749Z ⚠ 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-23T06:46:06.0741943Z ╭─[packages/effect-acp/src/protocol.test.ts:500:31] 2026-10-23T06:46:06.0742000Z 499 │ 2026-10-23T06:46:06.0742118Z 500 │ const response = yield* Schema.decodeUnknownEffect( 2026-10-23T06:46:06.0742240Z ·  ────────────────────────── 2026-10-23T06:46:06.0742354Z 501 │ Schema.fromJsonString(JsonRpcErrorResponse), 2026-10-23T06:46:06.0742409Z ╰──── 2026-10-23T06:46:06.0742412Z 2026-10-23T06:46:06.0742802Z ⚠ 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-23T06:46:06.0742927Z ╭─[packages/effect-acp/src/client.ts:1269:11] 2026-10-23T06:46:06.0743080Z 1268 │ extNotificationHandlers.set(CLIENT_METHODS.mcp_message, (params) => 2026-10-23T06:46:06.0743257Z 1269 │ Schema.decodeUnknownEffect(AcpSchemaV2.MessageMcpNotification)(params).pipe( 2026-10-23T06:46:06.0743370Z ·  ────────────────────────── 2026-10-23T06:46:06.0743522Z 1270 │ Effect.mapError(() => AcpError.AcpRequestError.invalidParams()), 2026-10-23T06:46:06.0743576Z ╰──── 2026-10-23T06:46:06.0743578Z 2026-10-23T06:46:06.0743728Z ⚠ react(refs): Cannot access refs during render 2026-10-23T06:46:06.0743886Z ╭─[apps/mobile/src/features/home/thread-swipe-actions.tsx:494:27] 2026-10-23T06:46:06.0743948Z 493 │ > 2026-10-23T06:46:06.0744036Z 494 │ {props.children(close)} 2026-10-23T06:46:06.0744133Z ·  ──┬── 2026-10-23T06:46:06.0744300Z · ╰── Cannot access ref value during render 2026-10-23T06:46:06.0744381Z 495 │ 2026-10-23T06:46:06.0744433Z ╰──── 2026-10-23T06:46:06.0744908Z  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-23T06:46:06.0745208Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T06:46:06.0745211Z 2026-10-23T06:46:06.0745478Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T06:46:06.0745622Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:60:5] 2026-10-23T06:46:06.0745676Z 57 │ 2026-10-23T06:46:06.0745746Z 58 │ useEffect(() => { 2026-10-23T06:46:06.0745822Z ·  ────┬──── 2026-10-23T06:46:06.0745955Z · ╰── This is the containing effect 2026-10-23T06:46:06.0746050Z 59 │ const controller = new AbortController(); 2026-10-23T06:46:06.0746127Z 60 │ setLoadState("pending"); 2026-10-23T06:46:06.0746206Z ·  ──────┬───── 2026-10-23T06:46:06.0746379Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T06:46:06.0746540Z 61 │ // A renewed signature is used on Retry, not as a reason to reset the native player. 2026-10-23T06:46:06.0746661Z ╰──── 2026-10-23T06:46:06.0747303Z  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-23T06:46:06.0747629Z  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-23T06:46:06.0747632Z 2026-10-23T06:46:06.0747840Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T06:46:06.0747973Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:71:7] 2026-10-23T06:46:06.0748061Z 70 │ return () => controller.abort(); 2026-10-23T06:46:06.0748165Z 71 │ }, [player, props.playRequested, attempt]); 2026-10-23T06:46:06.0748343Z ·  ───┬── ─────────┬───────── ───┬─── 2026-10-23T06:46:06.0748617Z · │ │ ╰── Unnecessary dependency `attempt` 2026-10-23T06:46:06.0748822Z · │ ╰── Unnecessary dependency `props.playRequested` 2026-10-23T06:46:06.0748967Z · ╰── Unnecessary dependency `player_0` 2026-10-23T06:46:06.0749024Z 72 │ 2026-10-23T06:46:06.0749076Z ╰──── 2026-10-23T06:46:06.0749526Z  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-23T06:46:06.0749851Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.0749859Z 2026-10-23T06:46:06.0750201Z ⚠ 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-23T06:46:06.0750325Z ╭─[packages/effect-acp/src/schema.test.ts:18:12] 2026-10-23T06:46:06.0750487Z 17 │ const command = { name: "plan", description: "Make a plan", input: { hint: "Task" } }; 2026-10-23T06:46:06.0750616Z 18 │ expect(Schema.is(V1.AvailableCommand)(command)).toBe(true); 2026-10-23T06:46:06.0750699Z ·  ───────── 2026-10-23T06:46:06.0750764Z 19 │ expect( 2026-10-23T06:46:06.0750815Z ╰──── 2026-10-23T06:46:06.0750818Z 2026-10-23T06:46:06.0751239Z ⚠ 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-23T06:46:06.0751412Z ╭─[packages/effect-acp/src/schema.test.ts:20:7] 2026-10-23T06:46:06.0751476Z 19 │ expect( 2026-10-23T06:46:06.0751644Z 20 │ Schema.is(V2.AvailableCommand)({ ...command, input: { type: "text", hint: "Task" } }), 2026-10-23T06:46:06.0751722Z ·  ───────── 2026-10-23T06:46:06.0751789Z 21 │ ).toBe(true); 2026-10-23T06:46:06.0751845Z ╰──── 2026-10-23T06:46:06.0751847Z 2026-10-23T06:46:06.0752079Z ⚠ eslint(no-unneeded-ternary): Unnecessary use of boolean literals in conditional expression 2026-10-23T06:46:06.0752210Z ╭─[packages/shared/src/serverSettings.test.ts:35:7] 2026-10-23T06:46:06.0752400Z 34 │ const fallback = fallbackTextGenerationModelSelection(providerInstances, (instanceId) => 2026-10-23T06:46:06.0752501Z 35 │ instanceId === configured ? true : false, 2026-10-23T06:46:06.0752616Z ·  ──────────────────────────────────────── 2026-10-23T06:46:06.0752672Z 36 │ ); 2026-10-23T06:46:06.0752723Z ╰──── 2026-10-23T06:46:06.0752820Z  help: Remove this ternary operator 2026-10-23T06:46:06.0752823Z 2026-10-23T06:46:06.0753084Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-23T06:46:06.0753219Z ╭─[packages/provider-pi/src/server/adapter.ts:3389:7] 2026-10-23T06:46:06.0753277Z 3388 │ 2026-10-23T06:46:06.0753469Z 3389 │ const layer: Layer.Layer = 2026-10-23T06:46:06.0753548Z ·  ──┬── 2026-10-23T06:46:06.0753680Z · ╰── 'layer' is declared here 2026-10-23T06:46:06.0753750Z 3390 │ Layer.effect( 2026-10-23T06:46:06.0753805Z ╰──── 2026-10-23T06:46:06.0753911Z  help: Consider removing this declaration. 2026-10-23T06:46:06.0753917Z 2026-10-23T06:46:06.0754101Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-23T06:46:06.0754267Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:100:85] 2026-10-23T06:46:06.0754374Z  99 │ const startEditor = startScheduledTaskEditor; 2026-10-23T06:46:06.0754562Z 100 │ const resetEditor = useCallback(() => startEditor(defaultEditor), [defaultEditor, startEditor]); 2026-10-23T06:46:06.0754716Z ·  ─────┬───── 2026-10-23T06:46:06.0754929Z · ╰── Unnecessary dependency `startEditor` 2026-10-23T06:46:06.0755014Z 101 │ const readEditor = useCallback( 2026-10-23T06:46:06.0755069Z ╰──── 2026-10-23T06:46:06.0755385Z  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-23T06:46:06.0755703Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.0755706Z 2026-10-23T06:46:06.0755893Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-23T06:46:06.0756111Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:121:7] 2026-10-23T06:46:06.0756212Z 120 │ setEditor, 2026-10-23T06:46:06.0756278Z 121 │ startEditor, 2026-10-23T06:46:06.0756359Z ·  ─────┬───── 2026-10-23T06:46:06.0756507Z · ╰── Unnecessary dependency `startEditor` 2026-10-23T06:46:06.0756571Z 122 │ hasChanges, 2026-10-23T06:46:06.0756626Z ╰──── 2026-10-23T06:46:06.0756942Z  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-23T06:46:06.0757260Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.0757262Z 2026-10-23T06:46:06.0757463Z ⚠ eslint(require-yield): This generator function does not have `yield` 2026-10-23T06:46:06.0757616Z ╭─[packages/provider-acp/src/server/mcpOverAcpBridge.ts:81:78] 2026-10-23T06:46:06.0757676Z  80 │ 2026-10-23T06:46:06.0757955Z  81 │ ╭─▶ export const makeAcpMcpOverAcpBridge = Effect.fn("AcpMcpOverAcpBridge.make")(function* ( 2026-10-23T06:46:06.0758080Z  82 │ │ options: AcpMcpOverAcpBridgeOptions, 2026-10-23T06:46:06.0758204Z  83 │ │ ): Effect.fn.Return { 2026-10-23T06:46:06.0758374Z  84 │ │ const fetchImplementation = options.fetchImplementation ?? fetch; 2026-10-23T06:46:06.0758541Z  85 │ │ const connections = new Map(); 2026-10-23T06:46:06.0758620Z  86 │ │ 2026-10-23T06:46:06.0758838Z  87 │ │ const connectionFor = (connectionId: string): Effect.Effect => 2026-10-23T06:46:06.0758944Z  88 │ │ Effect.suspend(() => { 2026-10-23T06:46:06.0759085Z  89 │ │ const connection = connections.get(connectionId); 2026-10-23T06:46:06.0759202Z  90 │ │ return connection === undefined 2026-10-23T06:46:06.0759419Z  91 │ │ ? Effect.fail(new AcpMcpOverAcpError(`Unknown MCP-over-ACP connection "${connectionId}".`)) 2026-10-23T06:46:06.0759533Z  92 │ │ : Effect.succeed(connection); 2026-10-23T06:46:06.0759614Z  93 │ │ }); 2026-10-23T06:46:06.0759687Z  94 │ │ 2026-10-23T06:46:06.0759782Z  95 │ │ const send = ( 2026-10-23T06:46:06.0759885Z  96 │ │ connection: Connection, 2026-10-23T06:46:06.0759982Z  97 │ │ message: unknown, 2026-10-23T06:46:06.0760143Z  98 │ │ ): Effect.Effect, AcpMcpOverAcpError> => 2026-10-23T06:46:06.0760262Z  99 │ │ connection.mutex.withPermits(1)( 2026-10-23T06:46:06.0760369Z 100 │ │ Effect.gen(function* () { 2026-10-23T06:46:06.0760497Z 101 │ │ const body = JSON.stringify(message); 2026-10-23T06:46:06.0760643Z 102 │ │ if (Buffer.byteLength(body) > MAX_MESSAGE_BYTES) { 2026-10-23T06:46:06.0760864Z 103 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("MCP-over-ACP message exceeds 8 MiB.")); 2026-10-23T06:46:06.0760999Z 104 │ │ } 2026-10-23T06:46:06.0761175Z 105 │ │ const response = yield* Effect.tryPromise({ 2026-10-23T06:46:06.0761278Z 106 │ │ try: (signal) => 2026-10-23T06:46:06.0761413Z 107 │ │ fetchImplementation(options.endpoint, { 2026-10-23T06:46:06.0761516Z 108 │ │ method: "POST", 2026-10-23T06:46:06.0761614Z 109 │ │ signal, 2026-10-23T06:46:06.0761716Z 110 │ │ headers: { 2026-10-23T06:46:06.0761848Z 111 │ │ "content-type": "application/json", 2026-10-23T06:46:06.0761993Z 112 │ │ accept: "application/json, text/event-stream", 2026-10-23T06:46:06.0762129Z 113 │ │ authorization: options.authorization, 2026-10-23T06:46:06.0762265Z 114 │ │ ...(connection.sessionId === null 2026-10-23T06:46:06.0762369Z 115 │ │ ? {} 2026-10-23T06:46:06.0762515Z 116 │ │ : { "mcp-session-id": connection.sessionId }), 2026-10-23T06:46:06.0762655Z 117 │ │ ...(connection.protocolVersion === null 2026-10-23T06:46:06.0762751Z 118 │ │ ? {} 2026-10-23T06:46:06.0762922Z 119 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-23T06:46:06.0763009Z 120 │ │ }, 2026-10-23T06:46:06.0763104Z 121 │ │ body, 2026-10-23T06:46:06.0763192Z 122 │ │ }), 2026-10-23T06:46:06.0763303Z 123 │ │ catch: bridgeError, 2026-10-23T06:46:06.0763388Z 124 │ │ }); 2026-10-23T06:46:06.0763604Z 125 │ │ connection.sessionId = response.headers.get("mcp-session-id") ?? connection.sessionId; 2026-10-23T06:46:06.0763710Z 126 │ │ if (!response.ok) { 2026-10-23T06:46:06.0763821Z 127 │ │ yield* Effect.promise( 2026-10-23T06:46:06.0764006Z 128 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-23T06:46:06.0764091Z 129 │ │ ); 2026-10-23T06:46:06.0764207Z 130 │ │ return yield* Effect.fail( 2026-10-23T06:46:06.0764424Z 131 │ │ new AcpMcpOverAcpError(`T3 Code MCP endpoint responded with HTTP ${response.status}.`), 2026-10-23T06:46:06.0764514Z 132 │ │ ); 2026-10-23T06:46:06.0764596Z 133 │ │ } 2026-10-23T06:46:06.0764812Z 134 │ │ const payloads = [...(yield* Stream.runCollect(responsePayloads(response, bridgeError)))]; 2026-10-23T06:46:06.0764937Z 135 │ │ for (const payload of payloads) { 2026-10-23T06:46:06.0765161Z 136 │ │ connection.protocolVersion = protocolVersionOf(payload) ?? connection.protocolVersion; 2026-10-23T06:46:06.0765241Z 137 │ │ } 2026-10-23T06:46:06.0765347Z 138 │ │ return payloads; 2026-10-23T06:46:06.0765473Z 139 │ │ }).pipe(Effect.mapError(bridgeError)), 2026-10-23T06:46:06.0765554Z 140 │ │ ); 2026-10-23T06:46:06.0765685Z 141 │ │ 2026-10-23T06:46:06.0765902Z 142 │ │ const disconnect = Effect.fn("mcpOverAcpBridge.disconnect")(function* ( 2026-10-23T06:46:06.0766034Z 143 │ │ request: AcpSchema.DisconnectMcpRequest, 2026-10-23T06:46:06.0766227Z 144 │ │ ): Effect.fn.Return { 2026-10-23T06:46:06.0766389Z 145 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-23T06:46:06.0766520Z 146 │ │ connections.delete(request.connectionId); 2026-10-23T06:46:06.0766646Z 147 │ │ const sessionId = connection.sessionId; 2026-10-23T06:46:06.0766752Z 148 │ │ if (sessionId !== null) { 2026-10-23T06:46:06.0766884Z 149 │ │ const response = yield* Effect.tryPromise({ 2026-10-23T06:46:06.0766991Z 150 │ │ try: (signal) => 2026-10-23T06:46:06.0767128Z 151 │ │ fetchImplementation(options.endpoint, { 2026-10-23T06:46:06.0767234Z 152 │ │ method: "DELETE", 2026-10-23T06:46:06.0767325Z 153 │ │ signal, 2026-10-23T06:46:06.0767424Z 154 │ │ headers: { 2026-10-23T06:46:06.0767558Z 155 │ │ authorization: options.authorization, 2026-10-23T06:46:06.0767680Z 156 │ │ "mcp-session-id": sessionId, 2026-10-23T06:46:06.0767815Z 157 │ │ ...(connection.protocolVersion === null 2026-10-23T06:46:06.0767915Z 158 │ │ ? {} 2026-10-23T06:46:06.0768088Z 159 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-23T06:46:06.0768178Z 160 │ │ }, 2026-10-23T06:46:06.0768261Z 161 │ │ }), 2026-10-23T06:46:06.0768366Z 162 │ │ catch: bridgeError, 2026-10-23T06:46:06.0768498Z 163 │ │ }); 2026-10-23T06:46:06.0768635Z 164 │ │ if (!response.ok && response.status !== 404) { 2026-10-23T06:46:06.0768747Z 165 │ │ return yield* Effect.fail( 2026-10-23T06:46:06.0768860Z 166 │ │ new AcpMcpOverAcpError( 2026-10-23T06:46:06.0769048Z 167 │ │ `T3 Code MCP endpoint rejected disconnect with HTTP ${response.status}.`, 2026-10-23T06:46:06.0769133Z 168 │ │ ), 2026-10-23T06:46:06.0769222Z 169 │ │ ); 2026-10-23T06:46:06.0769303Z 170 │ │ } 2026-10-23T06:46:06.0769410Z 171 │ │ yield* Effect.promise( 2026-10-23T06:46:06.0769593Z 172 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-23T06:46:06.0769674Z 173 │ │ ); 2026-10-23T06:46:06.0769748Z 174 │ │ } 2026-10-23T06:46:06.0769836Z 175 │ │ return {}; 2026-10-23T06:46:06.0769913Z 176 │ │ }); 2026-10-23T06:46:06.0769982Z 177 │ │ 2026-10-23T06:46:06.0770065Z 178 │ │ return { 2026-10-23T06:46:06.0770242Z 179 │ │ connect: Effect.fn("mcpOverAcpBridge.connect")(function* (request) { 2026-10-23T06:46:06.0770427Z 180 │ │ if (request.serverId !== "t3-code") { 2026-10-23T06:46:06.0770577Z 181 │ │ return yield* Effect.fail( 2026-10-23T06:46:06.0770766Z 182 │ │ new AcpMcpOverAcpError(`Unknown ACP MCP server "${request.serverId}".`), 2026-10-23T06:46:06.0770848Z 183 │ │ ); 2026-10-23T06:46:06.0770929Z 184 │ │ } 2026-10-23T06:46:06.0771061Z 185 │ │ if (connections.size >= MAX_CONNECTIONS) { 2026-10-23T06:46:06.0771273Z 186 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("Too many MCP-over-ACP connections.")); 2026-10-23T06:46:06.0771352Z 187 │ │ } 2026-10-23T06:46:06.0771512Z 188 │ │ const connectionId = yield* options.allocateConnectionId; 2026-10-23T06:46:06.0771641Z 189 │ │ connections.set(connectionId, { 2026-10-23T06:46:06.0771764Z 190 │ │ mutex: yield* Semaphore.make(1), 2026-10-23T06:46:06.0771866Z 191 │ │ sessionId: null, 2026-10-23T06:46:06.0771975Z 192 │ │ protocolVersion: null, 2026-10-23T06:46:06.0772079Z 193 │ │ nextRequestId: 0, 2026-10-23T06:46:06.0772158Z 194 │ │ }); 2026-10-23T06:46:06.0772266Z 195 │ │ return { connectionId }; 2026-10-23T06:46:06.0772344Z 196 │ │ }), 2026-10-23T06:46:06.0772519Z 197 │ │ message: Effect.fn("mcpOverAcpBridge.message")(function* (request) { 2026-10-23T06:46:06.0772682Z 198 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-23T06:46:06.0772816Z 199 │ │ const id = ++connection.nextRequestId; 2026-10-23T06:46:06.0772951Z 200 │ │ const payloads = yield* send(connection, { 2026-10-23T06:46:06.0773054Z 201 │ │ jsonrpc: "2.0", 2026-10-23T06:46:06.0773136Z 202 │ │ id, 2026-10-23T06:46:06.0773244Z 203 │ │ method: request.method, 2026-10-23T06:46:06.0773408Z 204 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-23T06:46:06.0773489Z 205 │ │ }); 2026-10-23T06:46:06.0773677Z 206 │ │ const response = payloads.find((payload) => asEnvelope(payload)?.id === id); 2026-10-23T06:46:06.0773803Z 207 │ │ const envelope = asEnvelope(response); 2026-10-23T06:46:06.0773915Z 208 │ │ if (envelope === null) { 2026-10-23T06:46:06.0774033Z 209 │ │ return yield* Effect.fail( 2026-10-23T06:46:06.0774221Z 210 │ │ new AcpMcpOverAcpError("MCP server did not return a matching response."), 2026-10-23T06:46:06.0774305Z 211 │ │ ); 2026-10-23T06:46:06.0774385Z 212 │ │ } 2026-10-23T06:46:06.0774508Z 213 │ │ if (envelope.error !== undefined) { 2026-10-23T06:46:06.0774705Z 214 │ │ return yield* Effect.fail(new AcpMcpOverAcpError(errorMessage(envelope.error))); 2026-10-23T06:46:06.0774784Z 215 │ │ } 2026-10-23T06:46:06.0774960Z 216 │ │ return (envelope.result ?? null) as AcpSchema.MessageMcpResponse; 2026-10-23T06:46:06.0775097Z 217 │ │ }), 2026-10-23T06:46:06.0775325Z 218 │ │ notification: Effect.fn("mcpOverAcpBridge.notification")(function* (request) { 2026-10-23T06:46:06.0775491Z 219 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-23T06:46:06.0775600Z 220 │ │ yield* send(connection, { 2026-10-23T06:46:06.0775701Z 221 │ │ jsonrpc: "2.0", 2026-10-23T06:46:06.0775805Z 222 │ │ method: request.method, 2026-10-23T06:46:06.0775967Z 223 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-23T06:46:06.0776048Z 224 │ │ }); 2026-10-23T06:46:06.0776126Z 225 │ │ }), 2026-10-23T06:46:06.0776214Z 226 │ │ disconnect, 2026-10-23T06:46:06.0776333Z 227 │ │ dispose: Effect.suspend(() => 2026-10-23T06:46:06.0776435Z 228 │ │ Effect.forEach( 2026-10-23T06:46:06.0776544Z 229 │ │ [...connections.keys()], 2026-10-23T06:46:06.0776718Z 230 │ │ (connectionId) => disconnect({ connectionId }).pipe(Effect.ignore), 2026-10-23T06:46:06.0776819Z 231 │ │ { discard: true }, 2026-10-23T06:46:06.0776901Z 232 │ │ ), 2026-10-23T06:46:06.0776981Z 233 │ │ ), 2026-10-23T06:46:06.0777055Z 234 │ │ }; 2026-10-23T06:46:06.0777188Z 235 │ ╰─▶ }); 2026-10-23T06:46:06.0777244Z ╰──── 2026-10-23T06:46:06.0777509Z  help: Add a `yield` expression inside the generator body, or convert it to a regular function if iteration behavior is not needed. 2026-10-23T06:46:06.0777515Z 2026-10-23T06:46:06.0777731Z ⚠ eslint(no-unused-vars): Function 'summarizePayload' is declared but never used. 2026-10-23T06:46:06.0777872Z ╭─[packages/provider-acp/src/server/nativeLogging.ts:22:10] 2026-10-23T06:46:06.0777930Z 21 │ 2026-10-23T06:46:06.0778095Z 22 │ function summarizePayload(payload: unknown): Readonly> { 2026-10-23T06:46:06.0778187Z ·  ────────┬─────── 2026-10-23T06:46:06.0778338Z · ╰── 'summarizePayload' is declared here 2026-10-23T06:46:06.0778484Z 23 │ if (payload === null) return { valueType: "null" }; 2026-10-23T06:46:06.0778540Z ╰──── 2026-10-23T06:46:06.0778648Z  help: Consider removing this declaration. 2026-10-23T06:46:06.0778651Z 2026-10-23T06:46:06.0778876Z ⚠ eslint(no-control-regex): Unexpected control character 2026-10-23T06:46:06.0779111Z ╭─[apps/mobile/src/features/settings/SettingsProviderAccountsRouteScreen.tsx:220:46] 2026-10-23T06:46:06.0779254Z 219 │ 2026-10-23T06:46:06.0779397Z 220 │ {interaction.output.replace(/\x1b\[[0-?]*[ -/]*[@-~]/g, "")} 2026-10-23T06:46:06.0779507Z ·  ──┬─ 2026-10-23T06:46:06.0779679Z · ╰── 'U+001B' is a control character. 2026-10-23T06:46:06.0779748Z 221 │ 2026-10-23T06:46:06.0779803Z ╰──── 2026-10-23T06:46:06.0780045Z  help: Avoid matching control characters in regular expressions. If intentional, disable this rule for the expression. 2026-10-23T06:46:06.0780056Z 2026-10-23T06:46:06.0780260Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-23T06:46:06.0780434Z ╭─[apps/web/src/components/settings/ProviderSettingsPanel.logic.ts:4:8] 2026-10-23T06:46:06.0780512Z 3 │ AuthProvidersManageScope, 2026-10-23T06:46:06.0780585Z 4 │ type AuthSessionState, 2026-10-23T06:46:06.0780670Z ·  ────────┬─────── 2026-10-23T06:46:06.0780820Z · ╰── 'AuthSessionState' is imported here 2026-10-23T06:46:06.0780891Z 5 │ type EnvironmentId, 2026-10-23T06:46:06.0780943Z ╰──── 2026-10-23T06:46:06.0781045Z  help: Consider removing this import. 2026-10-23T06:46:06.0781047Z 2026-10-23T06:46:06.0781274Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-23T06:46:06.0781386Z ╭─[apps/mobile/src/Stack.tsx:1044:21] 2026-10-23T06:46:06.0781455Z 1043 │ } 2026-10-23T06:46:06.0781732Z ·  ───────────────────────────────────────────── 2026-10-23T06:46:06.0781805Z 1045 │ screenListeners={{ 2026-10-23T06:46:06.0781860Z ╰──── 2026-10-23T06:46:06.0782228Z  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-23T06:46:06.0782231Z 2026-10-23T06:46:06.0782621Z ⚠ 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-23T06:46:06.0782751Z ╭─[packages/shared/src/otelEnvironment.ts:146:14] 2026-10-23T06:46:06.0782814Z 145 │ name, 2026-10-23T06:46:06.0782956Z 146 │ (raw) => Schema.decodeUnknownOption(OtlpProtocol)(raw.toLowerCase()), 2026-10-23T06:46:06.0783067Z ·  ────────────────────────── 2026-10-23T06:46:06.0783194Z 147 │ `${name} is not http/protobuf or http/json, ${NOT_EXPORTED}`, 2026-10-23T06:46:06.0783250Z ╰──── 2026-10-23T06:46:06.0783253Z 2026-10-23T06:46:06.0783456Z ⚠ eslint(no-unused-vars): Type 'ThreadRunSummary' is imported but never used. 2026-10-23T06:46:06.0783552Z ╭─[apps/web/src/types.ts:22:3] 2026-10-23T06:46:06.0783628Z 21 │ EnvironmentThreadShell, 2026-10-23T06:46:06.0783699Z 22 │ ThreadRunSummary, 2026-10-23T06:46:06.0783838Z ·  ────────┬─────── 2026-10-23T06:46:06.0784016Z · ╰── 'ThreadRunSummary' is imported here 2026-10-23T06:46:06.0784089Z 23 │ ThreadRuntimeSummary, 2026-10-23T06:46:06.0784144Z ╰──── 2026-10-23T06:46:06.0784242Z  help: Consider removing this import. 2026-10-23T06:46:06.0784245Z 2026-10-23T06:46:06.0784536Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-23T06:46:06.0784695Z ╭─[apps/web/src/components/settings/SettingInheritance.tsx:163:24] 2026-10-23T06:46:06.0784757Z 162 │ keys, 2026-10-23T06:46:06.0784830Z 163 │ overridingProjects = [], 2026-10-23T06:46:06.0784918Z ·  ── 2026-10-23T06:46:06.0784995Z 164 │ onClearOverrides, 2026-10-23T06:46:06.0785053Z ╰──── 2026-10-23T06:46:06.0785375Z  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-23T06:46:06.0785381Z 2026-10-23T06:46:06.0785589Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-23T06:46:06.0785732Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:229:6] 2026-10-23T06:46:06.0785902Z 225 │ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents( 2026-10-23T06:46:06.0785998Z 226 │ nativeEventSnapshotsRef.current, 2026-10-23T06:46:06.0786092Z ·  ───────────┬─────────── 2026-10-23T06:46:06.0786571Z · ╰── 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-23T06:46:06.0786651Z 227 │ mostRecentEventCount, 2026-10-23T06:46:06.0786711Z 228 │ ); 2026-10-23T06:46:06.0786837Z 229 │ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]); 2026-10-23T06:46:06.0786979Z ·  ──────────────────────────┬────────────────────────── 2026-10-23T06:46:06.0787185Z · ╰── This dependency list is missing values used by the callback 2026-10-23T06:46:06.0787273Z 230 │ const assumedValue = props.value; 2026-10-23T06:46:06.0787325Z ╰──── 2026-10-23T06:46:06.0787498Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-23T06:46:06.0787829Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.0787835Z 2026-10-23T06:46:06.0788056Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-23T06:46:06.0788197Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:237:7] 2026-10-23T06:46:06.0788342Z 236 │ nativeEventSnapshotsRef.current = assumeComposerControlledState( 2026-10-23T06:46:06.0788472Z 237 │ nativeEventSnapshotsRef.current, 2026-10-23T06:46:06.0788570Z ·  ───────────┬─────────── 2026-10-23T06:46:06.0789103Z · ╰── 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-23T06:46:06.0789266Z 238 │ controlledEventCount, 2026-10-23T06:46:06.0789334Z 239 │ assumedValue, 2026-10-23T06:46:06.0789394Z 240 │ ); 2026-10-23T06:46:06.0789556Z 241 │ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]); 2026-10-23T06:46:06.0789695Z ·  ───────────┬────────── 2026-10-23T06:46:06.0789909Z · ╰── Unnecessary dependency `controlledDocumentJson` 2026-10-23T06:46:06.0790004Z 242 │ const acceptNativeEvent = useCallback( 2026-10-23T06:46:06.0790059Z ╰──── 2026-10-23T06:46:06.0790489Z  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-23T06:46:06.0790816Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.0790818Z 2026-10-23T06:46:06.0790968Z ⚠ react(refs): Cannot access refs during render 2026-10-23T06:46:06.0791110Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:162:29] 2026-10-23T06:46:06.0791239Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-23T06:46:06.0791354Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-23T06:46:06.0791477Z ·  ─────────────┬──────────── 2026-10-23T06:46:06.0791651Z · ╰── Cannot access ref value during render 2026-10-23T06:46:06.0791717Z 163 │ }); 2026-10-23T06:46:06.0791772Z ╰──── 2026-10-23T06:46:06.0792244Z  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-23T06:46:06.0792540Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T06:46:06.0792542Z 2026-10-23T06:46:06.0792691Z ⚠ react(refs): Cannot access refs during render 2026-10-23T06:46:06.0792831Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:162:29] 2026-10-23T06:46:06.0792955Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-23T06:46:06.0793075Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-23T06:46:06.0793199Z ·  ─────────────┬──────────── 2026-10-23T06:46:06.0793413Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T06:46:06.0793470Z 163 │ }); 2026-10-23T06:46:06.0793525Z ╰──── 2026-10-23T06:46:06.0793998Z  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-23T06:46:06.0794294Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T06:46:06.0794296Z 2026-10-23T06:46:06.0794519Z ⚠ react(refs): Cannot access refs during render 2026-10-23T06:46:06.0794699Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:23] 2026-10-23T06:46:06.0794760Z 163 │ }); 2026-10-23T06:46:06.0794855Z 164 │ confirmedTokensRef.current = tokens; 2026-10-23T06:46:06.0794983Z ·  ─────────┬────────────┬─── 2026-10-23T06:46:06.0795175Z · │ ╰── Cannot update ref value during render 2026-10-23T06:46:06.0795297Z · ╰── This value is a ref 2026-10-23T06:46:06.0795373Z 165 │ return JSON.stringify( 2026-10-23T06:46:06.0795429Z ╰──── 2026-10-23T06:46:06.0795902Z  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-23T06:46:06.0796200Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T06:46:06.0796203Z 2026-10-23T06:46:06.0796350Z ⚠ react(refs): Cannot access refs during render 2026-10-23T06:46:06.0796490Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:206:5] 2026-10-23T06:46:06.0796565Z 205 │ mostRecentEventCount, 2026-10-23T06:46:06.0796654Z 206 │ nativeEventSnapshotsRef.current, 2026-10-23T06:46:06.0796763Z ·  ───────────────┬─────────────── 2026-10-23T06:46:06.0796962Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T06:46:06.0797024Z 207 │ ); 2026-10-23T06:46:06.0797077Z ╰──── 2026-10-23T06:46:06.0797548Z  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-23T06:46:06.0797841Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T06:46:06.0797844Z 2026-10-23T06:46:06.0797992Z ⚠ react(refs): Cannot access refs during render 2026-10-23T06:46:06.0798129Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:212:5] 2026-10-23T06:46:06.0798203Z 211 │ mostRecentEventCount, 2026-10-23T06:46:06.0798347Z 212 │ nativeEventSnapshotsRef.current, 2026-10-23T06:46:06.0798525Z ·  ───────────────┬─────────────── 2026-10-23T06:46:06.0798715Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T06:46:06.0798774Z 213 │ ); 2026-10-23T06:46:06.0798829Z ╰──── 2026-10-23T06:46:06.0799298Z  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-23T06:46:06.0799592Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T06:46:06.0799595Z 2026-10-23T06:46:06.0799790Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-23T06:46:06.0799931Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:197:6] 2026-10-23T06:46:06.0800059Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-23T06:46:06.0800174Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-23T06:46:06.0800285Z ·  ─────────┬──────── 2026-10-23T06:46:06.0800760Z · ╰── 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-23T06:46:06.0800820Z 163 │ }); 2026-10-23T06:46:06.0800915Z 164 │ confirmedTokensRef.current = tokens; 2026-10-23T06:46:06.0800986Z 165 │ return JSON.stringify( 2026-10-23T06:46:06.0801159Z 166 │ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => { 2026-10-23T06:46:06.0801233Z 167 │ const record = 2026-10-23T06:46:06.0801316Z 168 │ token.type === "context" 2026-10-23T06:46:06.0801481Z 169 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-23T06:46:06.0801551Z 170 │ : undefined; 2026-10-23T06:46:06.0801665Z 171 │ const presentation = contextChipPresentation( 2026-10-23T06:46:06.0801779Z 172 │ token.type === "context" ? token.kind : token.type, 2026-10-23T06:46:06.0801843Z 173 │ record, 2026-10-23T06:46:06.0801905Z 174 │ ); 2026-10-23T06:46:06.0801992Z 175 │ const icon = contextChipIcon( 2026-10-23T06:46:06.0802065Z 176 │ presentation, 2026-10-23T06:46:06.0802218Z 177 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-23T06:46:06.0802283Z 178 │ ); 2026-10-23T06:46:06.0802349Z 179 │ return { 2026-10-23T06:46:06.0802424Z 180 │ type: token.type, 2026-10-23T06:46:06.0802500Z 181 │ source: token.source, 2026-10-23T06:46:06.0802576Z 182 │ start: token.start, 2026-10-23T06:46:06.0802647Z 183 │ end: token.end, 2026-10-23T06:46:06.0802735Z 184 │ accent: presentation.accent, 2026-10-23T06:46:06.0802798Z 185 │ label: 2026-10-23T06:46:06.0802880Z 186 │ token.type === "skill" 2026-10-23T06:46:06.0802992Z 187 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-23T06:46:06.0803078Z 188 │ : token.type === "context" 2026-10-23T06:46:06.0803383Z 189 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-23T06:46:06.0803499Z 190 │ : basename(token.value), 2026-10-23T06:46:06.0803649Z 191 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-23T06:46:06.0803747Z 192 │ iconUri: contextChipIconUri(icon), 2026-10-23T06:46:06.0803837Z 193 │ tintsIcon: icon.kind === "chip", 2026-10-23T06:46:06.0803898Z 194 │ }; 2026-10-23T06:46:06.0803959Z 195 │ }), 2026-10-23T06:46:06.0804018Z 196 │ ); 2026-10-23T06:46:06.0804118Z 197 │ }, [props.value, props.context, skillLabels]); 2026-10-23T06:46:06.0804244Z ·  ────────────────────┬──────────────────── 2026-10-23T06:46:06.0804447Z · ╰── This dependency list is missing values used by the callback 2026-10-23T06:46:06.0804597Z 198 │ // Every render resolves against the snapshot history, so a render whose 2026-10-23T06:46:06.0804654Z ╰──── 2026-10-23T06:46:06.0804866Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-23T06:46:06.0805186Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.0805189Z 2026-10-23T06:46:06.0805382Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-23T06:46:06.0805521Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:259:5] 2026-10-23T06:46:06.0805656Z 251 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-23T06:46:06.0805762Z 252 │ nativeEventSnapshotsRef.current.push({ 2026-10-23T06:46:06.0805865Z ·  ───────────┬─────────── 2026-10-23T06:46:06.0806334Z · ╰── 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-23T06:46:06.0806429Z 253 │ eventCount: acknowledgedEventCount, 2026-10-23T06:46:06.0806497Z 254 │ value, 2026-10-23T06:46:06.0806578Z 255 │ selection: nextSelection, 2026-10-23T06:46:06.0806641Z 256 │ }); 2026-10-23T06:46:06.0806725Z 257 │ return acknowledgedEventCount; 2026-10-23T06:46:06.0806783Z 258 │ }, 2026-10-23T06:46:06.0806842Z 259 │ [], 2026-10-23T06:46:06.0806910Z ·  ─┬ 2026-10-23T06:46:06.0807097Z · ╰── This dependency list is missing values used by the callback 2026-10-23T06:46:06.0807161Z 260 │ ); 2026-10-23T06:46:06.0807219Z ╰──── 2026-10-23T06:46:06.0807427Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-23T06:46:06.0807745Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.0807748Z 2026-10-23T06:46:06.0808034Z ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'. 2026-10-23T06:46:06.0808170Z ╭─[packages/provider-cursor/src/server/auth.ts:249:20] 2026-10-23T06:46:06.0808229Z 248 │ }, 2026-10-23T06:46:06.0808310Z 249 │ (effect, flow, stopSessions) => 2026-10-23T06:46:06.0808445Z ·  ──────┬───── 2026-10-23T06:46:06.0808675Z · ╰── 'stopSessions' is declared here 2026-10-23T06:46:06.0808807Z 250 │ effect.pipe( 2026-10-23T06:46:06.0808860Z ╰──── 2026-10-23T06:46:06.0808967Z  help: Consider removing this parameter. 2026-10-23T06:46:06.0808970Z 2026-10-23T06:46:06.0809256Z ⚠ eslint(no-unused-vars): Variable 'legacyCredentials' is declared but never used. Unused variables should start with a '_'. 2026-10-23T06:46:06.0809417Z ╭─[packages/provider-cursor/src/server/credentialStore.test.ts:15:7] 2026-10-23T06:46:06.0809471Z 14 │ 2026-10-23T06:46:06.0809547Z 15 │ const legacyCredentials = { 2026-10-23T06:46:06.0809635Z ·  ────────┬──────── 2026-10-23T06:46:06.0809785Z · ╰── 'legacyCredentials' is declared here 2026-10-23T06:46:06.0809862Z 16 │ version: 1 as const, 2026-10-23T06:46:06.0809925Z ╰──── 2026-10-23T06:46:06.0810034Z  help: Consider removing this declaration. 2026-10-23T06:46:06.0810037Z 2026-10-23T06:46:06.0810300Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T06:46:06.0810455Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:57:5] 2026-10-23T06:46:06.0810511Z 55 │ 2026-10-23T06:46:06.0810579Z 56 │ useEffect(() => { 2026-10-23T06:46:06.0810653Z ·  ────┬──── 2026-10-23T06:46:06.0810783Z · ╰── This is the containing effect 2026-10-23T06:46:06.0810855Z 57 │ setDecodedSize(null); 2026-10-23T06:46:06.0810938Z ·  ───────┬────── 2026-10-23T06:46:06.0811119Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T06:46:06.0811197Z 58 │ }, [props.sourceKey]); 2026-10-23T06:46:06.0811254Z ╰──── 2026-10-23T06:46:06.0811867Z  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-23T06:46:06.0812195Z  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-23T06:46:06.0812198Z 2026-10-23T06:46:06.0812464Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T06:46:06.0812619Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:61:5] 2026-10-23T06:46:06.0812675Z 59 │ 2026-10-23T06:46:06.0812743Z 60 │ useEffect(() => { 2026-10-23T06:46:06.0812817Z ·  ────┬──── 2026-10-23T06:46:06.0812944Z · ╰── This is the containing effect 2026-10-23T06:46:06.0813015Z 61 │ setFailedUri(null); 2026-10-23T06:46:06.0813094Z ·  ──────┬───── 2026-10-23T06:46:06.0813266Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T06:46:06.0813333Z 62 │ }, [props.uri]); 2026-10-23T06:46:06.0813388Z ╰──── 2026-10-23T06:46:06.0814042Z  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-23T06:46:06.0814405Z  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-23T06:46:06.0814408Z 2026-10-23T06:46:06.0814629Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-23T06:46:06.0814780Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:7:10] 2026-10-23T06:46:06.0814908Z 6 │ import { parse, SvgAst, type JsxAST } from "react-native-svg"; 2026-10-23T06:46:06.0815090Z 7 │ import { ActivityIndicator, Pressable, StyleSheet, View, type ViewStyle } from "react-native"; 2026-10-23T06:46:06.0815188Z ·  ────────┬──────── 2026-10-23T06:46:06.0815341Z · ╰── 'ActivityIndicator' is imported here 2026-10-23T06:46:06.0815399Z 8 │ 2026-10-23T06:46:06.0815455Z ╰──── 2026-10-23T06:46:06.0815559Z  help: Consider removing this import. 2026-10-23T06:46:06.0815561Z 2026-10-23T06:46:06.0815764Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T06:46:06.0815920Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:58:7] 2026-10-23T06:46:06.0815992Z 57 │ setDecodedSize(null); 2026-10-23T06:46:06.0816064Z 58 │ }, [props.sourceKey]); 2026-10-23T06:46:06.0816147Z ·  ───────┬─────── 2026-10-23T06:46:06.0816306Z · ╰── Unnecessary dependency `props.sourceKey` 2026-10-23T06:46:06.0816363Z 59 │ 2026-10-23T06:46:06.0816426Z ╰──── 2026-10-23T06:46:06.0816726Z  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-23T06:46:06.0817044Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.0817047Z 2026-10-23T06:46:06.0817254Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T06:46:06.0817409Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:62:7] 2026-10-23T06:46:06.0817477Z 61 │ setFailedUri(null); 2026-10-23T06:46:06.0817548Z 62 │ }, [props.uri]); 2026-10-23T06:46:06.0817628Z ·  ────┬──── 2026-10-23T06:46:06.0817779Z · ╰── Unnecessary dependency `props.uri` 2026-10-23T06:46:06.0817835Z 63 │ 2026-10-23T06:46:06.0817890Z ╰──── 2026-10-23T06:46:06.0818186Z  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-23T06:46:06.0818537Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.0818539Z 2026-10-23T06:46:06.0818803Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T06:46:06.0818982Z ╭─[apps/mobile/src/features/threads/thread-inspector-content-stack.tsx:60:5] 2026-10-23T06:46:06.0819038Z 58 │ 2026-10-23T06:46:06.0819200Z 59 │ useEffect(() => { 2026-10-23T06:46:06.0819306Z ·  ────┬──── 2026-10-23T06:46:06.0819436Z · ╰── This is the containing effect 2026-10-23T06:46:06.0819521Z 60 │ setMountedModes((current) => { 2026-10-23T06:46:06.0819605Z ·  ───────┬─────── 2026-10-23T06:46:06.0819777Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T06:46:06.0819860Z 61 │ if (current.has(props.mode)) { 2026-10-23T06:46:06.0819916Z ╰──── 2026-10-23T06:46:06.0820518Z  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-23T06:46:06.0820850Z  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-23T06:46:06.0820855Z 2026-10-23T06:46:06.0821053Z ⚠ eslint(no-unused-vars): Identifier 'Image' is imported but never used. 2026-10-23T06:46:06.0821199Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:17:10] 2026-10-23T06:46:06.0821340Z 16 │ import type { NativeSyntheticEvent, ViewProps } from "react-native"; 2026-10-23T06:46:06.0821460Z 17 │ import { Image, Platform, StyleSheet } from "react-native"; 2026-10-23T06:46:06.0821535Z ·  ──┬── 2026-10-23T06:46:06.0821664Z · ╰── 'Image' is imported here 2026-10-23T06:46:06.0821720Z 18 │ 2026-10-23T06:46:06.0821775Z ╰──── 2026-10-23T06:46:06.0821881Z  help: Consider removing this import. 2026-10-23T06:46:06.0821886Z 2026-10-23T06:46:06.0822091Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-23T06:46:06.0822238Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:227:6] 2026-10-23T06:46:06.0822405Z 223 │ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents( 2026-10-23T06:46:06.0822502Z 224 │ nativeEventSnapshotsRef.current, 2026-10-23T06:46:06.0822595Z ·  ───────────┬─────────── 2026-10-23T06:46:06.0823061Z · ╰── 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-23T06:46:06.0823195Z 225 │ mostRecentEventCount, 2026-10-23T06:46:06.0823293Z 226 │ ); 2026-10-23T06:46:06.0823417Z 227 │ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]); 2026-10-23T06:46:06.0823557Z ·  ──────────────────────────┬────────────────────────── 2026-10-23T06:46:06.0823762Z · ╰── This dependency list is missing values used by the callback 2026-10-23T06:46:06.0823850Z 228 │ const assumedValue = props.value; 2026-10-23T06:46:06.0823903Z ╰──── 2026-10-23T06:46:06.0824076Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-23T06:46:06.0824394Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.0824396Z 2026-10-23T06:46:06.0824619Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-23T06:46:06.0824770Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:235:7] 2026-10-23T06:46:06.0824917Z 234 │ nativeEventSnapshotsRef.current = assumeComposerControlledState( 2026-10-23T06:46:06.0825011Z 235 │ nativeEventSnapshotsRef.current, 2026-10-23T06:46:06.0825107Z ·  ───────────┬─────────── 2026-10-23T06:46:06.0825572Z · ╰── 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-23T06:46:06.0825645Z 236 │ controlledEventCount, 2026-10-23T06:46:06.0825715Z 237 │ assumedValue, 2026-10-23T06:46:06.0825780Z 238 │ ); 2026-10-23T06:46:06.0825945Z 239 │ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]); 2026-10-23T06:46:06.0826084Z ·  ───────────┬────────── 2026-10-23T06:46:06.0826299Z · ╰── Unnecessary dependency `controlledDocumentJson` 2026-10-23T06:46:06.0826392Z 240 │ const acceptNativeEvent = useCallback( 2026-10-23T06:46:06.0826449Z ╰──── 2026-10-23T06:46:06.0826874Z  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-23T06:46:06.0827195Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.0827200Z 2026-10-23T06:46:06.0827349Z ⚠ react(refs): Cannot access refs during render 2026-10-23T06:46:06.0827501Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:160:29] 2026-10-23T06:46:06.0827631Z 159 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-23T06:46:06.0827746Z 160 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-23T06:46:06.0827871Z ·  ─────────────┬──────────── 2026-10-23T06:46:06.0828044Z · ╰── Cannot access ref value during render 2026-10-23T06:46:06.0828105Z 161 │ }); 2026-10-23T06:46:06.0828157Z ╰──── 2026-10-23T06:46:06.0828734Z  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-23T06:46:06.0829065Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T06:46:06.0829067Z 2026-10-23T06:46:06.0829267Z ⚠ react(refs): Cannot access refs during render 2026-10-23T06:46:06.0829416Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:160:29] 2026-10-23T06:46:06.0829540Z 159 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-23T06:46:06.0829660Z 160 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-23T06:46:06.0869644Z ·  ─────────────┬──────────── 2026-10-23T06:46:06.0870007Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T06:46:06.0870076Z 161 │ }); 2026-10-23T06:46:06.0870131Z ╰──── 2026-10-23T06:46:06.0870616Z  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-23T06:46:06.0870933Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T06:46:06.0870938Z 2026-10-23T06:46:06.0871092Z ⚠ react(refs): Cannot access refs during render 2026-10-23T06:46:06.0871252Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:23] 2026-10-23T06:46:06.0871313Z 161 │ }); 2026-10-23T06:46:06.0871408Z 162 │ confirmedTokensRef.current = tokens; 2026-10-23T06:46:06.0871537Z ·  ─────────┬────────────┬─── 2026-10-23T06:46:06.0871737Z · │ ╰── Cannot update ref value during render 2026-10-23T06:46:06.0871859Z · ╰── This value is a ref 2026-10-23T06:46:06.0871934Z 163 │ return JSON.stringify( 2026-10-23T06:46:06.0871987Z ╰──── 2026-10-23T06:46:06.0872459Z  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-23T06:46:06.0872762Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T06:46:06.0872768Z 2026-10-23T06:46:06.0872916Z ⚠ react(refs): Cannot access refs during render 2026-10-23T06:46:06.0873062Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:204:5] 2026-10-23T06:46:06.0873133Z 203 │ mostRecentEventCount, 2026-10-23T06:46:06.0873223Z 204 │ nativeEventSnapshotsRef.current, 2026-10-23T06:46:06.0873334Z ·  ───────────────┬─────────────── 2026-10-23T06:46:06.0873525Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T06:46:06.0873579Z 205 │ ); 2026-10-23T06:46:06.0873632Z ╰──── 2026-10-23T06:46:06.0874238Z  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-23T06:46:06.0874585Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T06:46:06.0874588Z 2026-10-23T06:46:06.0874735Z ⚠ react(refs): Cannot access refs during render 2026-10-23T06:46:06.0874880Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:210:5] 2026-10-23T06:46:06.0874951Z 209 │ mostRecentEventCount, 2026-10-23T06:46:06.0875039Z 210 │ nativeEventSnapshotsRef.current, 2026-10-23T06:46:06.0875145Z ·  ───────────────┬─────────────── 2026-10-23T06:46:06.0875334Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T06:46:06.0875393Z 211 │ ); 2026-10-23T06:46:06.0875446Z ╰──── 2026-10-23T06:46:06.0875907Z  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-23T06:46:06.0876197Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T06:46:06.0876199Z 2026-10-23T06:46:06.0876392Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-23T06:46:06.0876537Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:195:6] 2026-10-23T06:46:06.0876669Z 159 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-23T06:46:06.0876785Z 160 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-23T06:46:06.0876897Z ·  ─────────┬──────── 2026-10-23T06:46:06.0877364Z · ╰── 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-23T06:46:06.0877422Z 161 │ }); 2026-10-23T06:46:06.0877513Z 162 │ confirmedTokensRef.current = tokens; 2026-10-23T06:46:06.0877584Z 163 │ return JSON.stringify( 2026-10-23T06:46:06.0877749Z 164 │ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => { 2026-10-23T06:46:06.0877822Z 165 │ const record = 2026-10-23T06:46:06.0877904Z 166 │ token.type === "context" 2026-10-23T06:46:06.0878069Z 167 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-23T06:46:06.0878136Z 168 │ : undefined; 2026-10-23T06:46:06.0878244Z 169 │ const presentation = contextChipPresentation( 2026-10-23T06:46:06.0878356Z 170 │ token.type === "context" ? token.kind : token.type, 2026-10-23T06:46:06.0878464Z 171 │ record, 2026-10-23T06:46:06.0878524Z 172 │ ); 2026-10-23T06:46:06.0878608Z 173 │ const icon = contextChipIcon( 2026-10-23T06:46:06.0878675Z 174 │ presentation, 2026-10-23T06:46:06.0878817Z 175 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-23T06:46:06.0878876Z 176 │ ); 2026-10-23T06:46:06.0878938Z 177 │ return { 2026-10-23T06:46:06.0879060Z 178 │ type: token.type, 2026-10-23T06:46:06.0879164Z 179 │ source: token.source, 2026-10-23T06:46:06.0879236Z 180 │ start: token.start, 2026-10-23T06:46:06.0879302Z 181 │ end: token.end, 2026-10-23T06:46:06.0879386Z 182 │ accent: presentation.accent, 2026-10-23T06:46:06.0879447Z 183 │ label: 2026-10-23T06:46:06.0879524Z 184 │ token.type === "skill" 2026-10-23T06:46:06.0879632Z 185 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-23T06:46:06.0879714Z 186 │ : token.type === "context" 2026-10-23T06:46:06.0879951Z 187 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-23T06:46:06.0880033Z 188 │ : basename(token.value), 2026-10-23T06:46:06.0880182Z 189 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-23T06:46:06.0880277Z 190 │ iconUri: contextChipIconUri(icon), 2026-10-23T06:46:06.0880366Z 191 │ tintsIcon: icon.kind === "chip", 2026-10-23T06:46:06.0880423Z 192 │ }; 2026-10-23T06:46:06.0880481Z 193 │ }), 2026-10-23T06:46:06.0880535Z 194 │ ); 2026-10-23T06:46:06.0880636Z 195 │ }, [props.value, props.context, skillLabels]); 2026-10-23T06:46:06.0880758Z ·  ────────────────────┬──────────────────── 2026-10-23T06:46:06.0880959Z · ╰── This dependency list is missing values used by the callback 2026-10-23T06:46:06.0881098Z 196 │ // Every render resolves against the snapshot history, so a render whose 2026-10-23T06:46:06.0881150Z ╰──── 2026-10-23T06:46:06.0881364Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-23T06:46:06.0881683Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.0881686Z 2026-10-23T06:46:06.0881876Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-23T06:46:06.0882018Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:257:5] 2026-10-23T06:46:06.0882150Z 249 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-23T06:46:06.0882251Z 250 │ nativeEventSnapshotsRef.current.push({ 2026-10-23T06:46:06.0882345Z ·  ───────────┬─────────── 2026-10-23T06:46:06.0882851Z · ╰── 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-23T06:46:06.0882976Z 251 │ eventCount: acknowledgedEventCount, 2026-10-23T06:46:06.0883038Z 252 │ value, 2026-10-23T06:46:06.0883117Z 253 │ selection: nextSelection, 2026-10-23T06:46:06.0883174Z 254 │ }); 2026-10-23T06:46:06.0883258Z 255 │ return acknowledgedEventCount; 2026-10-23T06:46:06.0883313Z 256 │ }, 2026-10-23T06:46:06.0883368Z 257 │ [], 2026-10-23T06:46:06.0883435Z ·  ─┬ 2026-10-23T06:46:06.0883614Z · ╰── This dependency list is missing values used by the callback 2026-10-23T06:46:06.0883669Z 258 │ ); 2026-10-23T06:46:06.0883721Z ╰──── 2026-10-23T06:46:06.0883932Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-23T06:46:06.0884252Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.0884255Z 2026-10-23T06:46:06.0884731Z ⚠ 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-23T06:46:06.0884889Z ╭─[packages/client-runtime/src/connection/supervisor.test.ts:135:3] 2026-10-23T06:46:06.0885001Z 134 │ let lastState = yield* SubscriptionRef.get(state); 2026-10-23T06:46:06.0885218Z 135 │ ╭─▶ for (let iteration = 0; iteration < 100; iteration += 1) { 2026-10-23T06:46:06.0885361Z 136 │ │ lastState = yield* SubscriptionRef.get(state); 2026-10-23T06:46:06.0885470Z 137 │ │ if (predicate(lastState)) { 2026-10-23T06:46:06.0885568Z 138 │ │ return lastState; 2026-10-23T06:46:06.0885642Z 139 │ │ } 2026-10-23T06:46:06.0885745Z 140 │ │ yield* Effect.yieldNow; 2026-10-23T06:46:06.0885872Z 141 │ ╰─▶ } 2026-10-23T06:46:06.0885949Z 142 │ return yield* Effect.die( 2026-10-23T06:46:06.0885999Z ╰──── 2026-10-23T06:46:06.0886002Z 2026-10-23T06:46:06.0886226Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-23T06:46:06.0886344Z ╭─[packages/shared/src/serverSettings.ts:346:9] 2026-10-23T06:46:06.0886453Z 345 │ const entry: ProjectSettingsOverrides = { 2026-10-23T06:46:06.0886585Z 346 │ ...(entries.get(projectId) ?? currentEntries[projectId] ?? {}), 2026-10-23T06:46:06.0886742Z ·  ────────────────────────────────────────────────────────────── 2026-10-23T06:46:06.0886800Z 347 │ }; 2026-10-23T06:46:06.0886851Z ╰──── 2026-10-23T06:46:06.0887121Z  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-23T06:46:06.0887124Z 2026-10-23T06:46:06.0887348Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in Array.prototype.reduce() 2026-10-23T06:46:06.0887468Z ╭─[packages/shared/src/serverSettings.ts:448:24] 2026-10-23T06:46:06.0887535Z 447 │ const favorites = 2026-10-23T06:46:06.0887714Z 448 │ setModelFavorites?.reduce((current, change) => { 2026-10-23T06:46:06.0887839Z ·  ───┬── 2026-10-23T06:46:06.0887964Z · ╰── For this reduce 2026-10-23T06:46:06.0888046Z 449 │ const exists = current.some( 2026-10-23T06:46:06.0888220Z 450 │ (favorite) => favorite.provider === change.provider && favorite.model === change.model, 2026-10-23T06:46:06.0888278Z 451 │ ); 2026-10-23T06:46:06.0888350Z 452 │ return change.favorite 2026-10-23T06:46:06.0888437Z 453 │ ? exists 2026-10-23T06:46:06.0888499Z 454 │ ? current 2026-10-23T06:46:06.0888637Z 455 │ : [...current, { provider: change.provider, model: change.model }] 2026-10-23T06:46:06.0888721Z ·  ─────┬──── 2026-10-23T06:46:06.0888849Z · ╰── From this spread 2026-10-23T06:46:06.0888919Z 456 │ : current.filter( 2026-10-23T06:46:06.0888971Z ╰──── 2026-10-23T06:46:06.0889177Z  help: Consider using `Object.assign()` or `Array.prototype.push()` to mutate the accumulator instead. 2026-10-23T06:46:06.0889334Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-23T06:46:06.0889337Z 2026-10-23T06:46:06.0889524Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-23T06:46:06.0889642Z ╭─[packages/shared/src/serverSettings.ts:466:3] 2026-10-23T06:46:06.0889701Z 464 │ null; 2026-10-23T06:46:06.0889815Z 465 │ let nextModelPreferences = initialModelPreferences; 2026-10-23T06:46:06.0889904Z ·  ──────────┬───────── 2026-10-23T06:46:06.0890039Z · ╰── From this accumulator 2026-10-23T06:46:06.0890142Z 466 │ for (const change of setModelsHidden ?? []) { 2026-10-23T06:46:06.0890209Z ·  ─┬─ 2026-10-23T06:46:06.0890313Z · ╰── For this loop 2026-10-23T06:46:06.0890450Z 467 │ const preferences = nextModelPreferences?.[change.provider] ?? { 2026-10-23T06:46:06.0890517Z 468 │ hiddenModels: [], 2026-10-23T06:46:06.0890583Z 469 │ modelOrder: [], 2026-10-23T06:46:06.0890637Z 470 │ }; 2026-10-23T06:46:06.0890819Z 471 │ const hiddenModels = preferences.hiddenModels.filter((model) => model !== change.model); 2026-10-23T06:46:06.0890929Z 472 │ if (change.hidden) hiddenModels.push(change.model); 2026-10-23T06:46:06.0891004Z 473 │ nextModelPreferences = { 2026-10-23T06:46:06.0891078Z 474 │ ...nextModelPreferences, 2026-10-23T06:46:06.0891181Z ·  ───────────┬─────────── 2026-10-23T06:46:06.0891306Z · ╰── From this spread 2026-10-23T06:46:06.0891420Z 475 │ [change.provider]: { ...preferences, hiddenModels }, 2026-10-23T06:46:06.0891472Z ╰──── 2026-10-23T06:46:06.0891629Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-23T06:46:06.0891784Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-23T06:46:06.0891787Z 2026-10-23T06:46:06.0891931Z ⚠ react(refs): Cannot access refs during render 2026-10-23T06:46:06.0892051Z ╭─[apps/mobile/src/native/StackHeader.tsx:184:9] 2026-10-23T06:46:06.0892117Z 183 │ "options", 2026-10-23T06:46:06.0892212Z 184 │ latestOptionFunctionsRef.current, 2026-10-23T06:46:06.0892382Z ·  ────────────────┬─────────────── 2026-10-23T06:46:06.0892610Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T06:46:06.0892706Z 185 │ optionFunctionWrappersRef.current, 2026-10-23T06:46:06.0892757Z ╰──── 2026-10-23T06:46:06.0893228Z  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-23T06:46:06.0893522Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T06:46:06.0893524Z 2026-10-23T06:46:06.0893673Z ⚠ react(refs): Cannot access refs during render 2026-10-23T06:46:06.0893795Z ╭─[apps/mobile/src/native/StackHeader.tsx:185:9] 2026-10-23T06:46:06.0893888Z 184 │ latestOptionFunctionsRef.current, 2026-10-23T06:46:06.0893982Z 185 │ optionFunctionWrappersRef.current, 2026-10-23T06:46:06.0894092Z ·  ────────────────┬──────────────── 2026-10-23T06:46:06.0894286Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T06:46:06.0894379Z 186 │ ) as NativeStackNavigationOptions) 2026-10-23T06:46:06.0894430Z ╰──── 2026-10-23T06:46:06.0894896Z  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-23T06:46:06.0895193Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T06:46:06.0895199Z 2026-10-23T06:46:06.0895344Z ⚠ react(refs): Cannot access refs during render 2026-10-23T06:46:06.0895502Z ╭─[apps/mobile/src/features/diffs/nativeReviewDiffSurface.ts:277:39] 2026-10-23T06:46:06.0895558Z 276 │ 2026-10-23T06:46:06.0895741Z 277 │ ╭─▶ return createElement(RawNativeView, { 2026-10-23T06:46:06.0895834Z 278 │ │ ...nativeProps, 2026-10-23T06:46:06.0895982Z 279 │ │ refreshEnabled: props.onPullToRefresh !== undefined, 2026-10-23T06:46:06.0896072Z 280 │ │ ref: nativeRef, 2026-10-23T06:46:06.0896205Z 281 │ ├─▶ }); 2026-10-23T06:46:06.0896445Z · ╰──── Passing a ref to a function may read its value during render 2026-10-23T06:46:06.0896501Z 282 │ } 2026-10-23T06:46:06.0896553Z ╰──── 2026-10-23T06:46:06.0897020Z  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-23T06:46:06.0897313Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T06:46:06.0897316Z 2026-10-23T06:46:06.0897599Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-23T06:46:06.0897768Z ╭─[packages/client-runtime/src/operations/projects.ts:228:51] 2026-10-23T06:46:06.0897830Z 227 │ ): string { 2026-10-23T06:46:06.0897985Z 228 │ const folderName = workspaceRoot.split(/[\\/]/).filter(Boolean).at(-1) ?? ""; 2026-10-23T06:46:06.0898099Z ·  ────── 2026-10-23T06:46:06.0898231Z 229 │ return target.owner ? `${target.owner}/${folderName}` : folderName; 2026-10-23T06:46:06.0898282Z ╰──── 2026-10-23T06:46:06.0898480Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-23T06:46:06.0898483Z 2026-10-23T06:46:06.0898744Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T06:46:06.0898922Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:123:7] 2026-10-23T06:46:06.0898978Z 118 │ 2026-10-23T06:46:06.0899042Z 119 │ useEffect(() => { 2026-10-23T06:46:06.0899114Z ·  ────┬──── 2026-10-23T06:46:06.0899245Z · ╰── This is the containing effect 2026-10-23T06:46:06.0899329Z 120 │ if (orientationSettled) return; 2026-10-23T06:46:06.0899440Z 121 │ const orientation = getNativeShowcaseOrientation(); 2026-10-23T06:46:06.0899516Z 122 │ if (orientation === null) { 2026-10-23T06:46:06.0899599Z 123 │ setOrientationSettled(true); 2026-10-23T06:46:06.0899688Z ·  ──────────┬────────── 2026-10-23T06:46:06.0899863Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T06:46:06.0899932Z 124 │ return; 2026-10-23T06:46:06.0899986Z ╰──── 2026-10-23T06:46:06.0900593Z  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-23T06:46:06.0900920Z  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-23T06:46:06.0900922Z 2026-10-23T06:46:06.0901179Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T06:46:06.0901350Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:304:7] 2026-10-23T06:46:06.0901408Z 292 │ 2026-10-23T06:46:06.0901474Z 293 │ useEffect(() => { 2026-10-23T06:46:06.0901544Z ·  ────┬──── 2026-10-23T06:46:06.0901674Z · ╰── This is the containing effect 2026-10-23T06:46:06.0901731Z 294 │ if ( 2026-10-23T06:46:06.0901798Z 295 │ scene === null || 2026-10-23T06:46:06.0901874Z 296 │ requestedScene === null || 2026-10-23T06:46:06.0901951Z 297 │ scene !== requestedScene || 2026-10-23T06:46:06.0902016Z 298 │ !hasFixture || 2026-10-23T06:46:06.0902089Z 299 │ !orientationSettled || 2026-10-23T06:46:06.0902155Z 300 │ !themeApplied || 2026-10-23T06:46:06.0902271Z 301 │ (scene === "agent-activity" && !agentActivityStaged) || 2026-10-23T06:46:06.0902406Z 302 │ !isShowcaseNativeContentReady({ scene, themeId, renderSignal }) 2026-10-23T06:46:06.0902516Z 303 │ ) { 2026-10-23T06:46:06.0902613Z 304 │ setReadyScene(null); 2026-10-23T06:46:06.0902694Z ·  ──────┬────── 2026-10-23T06:46:06.0902867Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T06:46:06.0902930Z 305 │ return; 2026-10-23T06:46:06.0902981Z ╰──── 2026-10-23T06:46:06.0903586Z  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-23T06:46:06.0903908Z  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-23T06:46:06.0903916Z 2026-10-23T06:46:06.0904190Z ⚠ eslint(no-unused-vars): Variable 'lastOutcome' is declared but never used. Unused variables should start with a '_'. 2026-10-23T06:46:06.0904362Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:128:9] 2026-10-23T06:46:06.0904431Z 127 │ let cancelled = false; 2026-10-23T06:46:06.0904521Z 128 │ let lastOutcome: string | null = null; 2026-10-23T06:46:06.0904600Z ·  ─────┬───── 2026-10-23T06:46:06.0904737Z · ╰── 'lastOutcome' is declared here 2026-10-23T06:46:06.0904915Z 129 │ void retryShowcaseOperation(async () => applyNativeShowcaseOrientation(orientation), { 2026-10-23T06:46:06.0904966Z ╰──── 2026-10-23T06:46:06.0905071Z  help: Consider removing this declaration. 2026-10-23T06:46:06.0905074Z 2026-10-23T06:46:06.0905417Z ⚠ 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-23T06:46:06.0905564Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:50:18] 2026-10-23T06:46:06.0905728Z 49 │ for (const tool of ["sendMessage", "followupTask", "interruptAgent", "listAgents"]) { 2026-10-23T06:46:06.0905899Z 50 │ assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true); 2026-10-23T06:46:06.0905984Z ·  ───────── 2026-10-23T06:46:06.0906164Z 51 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true); 2026-10-23T06:46:06.0906217Z ╰──── 2026-10-23T06:46:06.0906220Z 2026-10-23T06:46:06.0906611Z ⚠ 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-23T06:46:06.0906785Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:51:18] 2026-10-23T06:46:06.0906952Z 50 │ assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true); 2026-10-23T06:46:06.0907128Z 51 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true); 2026-10-23T06:46:06.0907212Z ·  ───────── 2026-10-23T06:46:06.0907266Z 52 │ } 2026-10-23T06:46:06.0907318Z ╰──── 2026-10-23T06:46:06.0907321Z 2026-10-23T06:46:06.0907652Z ⚠ 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-23T06:46:06.0907798Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:55:5] 2026-10-23T06:46:06.0907866Z 54 │ assert.equal( 2026-10-23T06:46:06.0908036Z 55 │ Schema.is(CodexSchema.ServerNotification__CollabAgentToolCallStatus)("interrupted"), 2026-10-23T06:46:06.0908108Z ·  ───────── 2026-10-23T06:46:06.0908165Z 56 │ true, 2026-10-23T06:46:06.0908215Z ╰──── 2026-10-23T06:46:06.0908218Z 2026-10-23T06:46:06.0908590Z ⚠ 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-23T06:46:06.0908729Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:59:5] 2026-10-23T06:46:06.0908792Z 58 │ assert.equal( 2026-10-23T06:46:06.0908974Z 59 │ Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentToolCallStatus)("interrupted"), 2026-10-23T06:46:06.0909052Z ·  ───────── 2026-10-23T06:46:06.0909111Z 60 │ true, 2026-10-23T06:46:06.0909236Z ╰──── 2026-10-23T06:46:06.0909239Z 2026-10-23T06:46:06.0909574Z ⚠ 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-23T06:46:06.0909722Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:103:16] 2026-10-23T06:46:06.0909775Z 102 │ 2026-10-23T06:46:06.0909943Z 103 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse)(resumeResponse), true); 2026-10-23T06:46:06.0910026Z ·  ───────── 2026-10-23T06:46:06.0910080Z 104 │ }); 2026-10-23T06:46:06.0910131Z ╰──── 2026-10-23T06:46:06.0910134Z 2026-10-23T06:46:06.0910621Z ⚠ 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-23T06:46:06.0910748Z ╭─[packages/shared/src/atomicWrite.test.ts:139:5] 2026-10-23T06:46:06.0910824Z 138 │ Effect.gen(function* () { 2026-10-23T06:46:06.0911023Z 139 │ ╭─▶ while (fiber.pollUnsafe() === undefined) { 2026-10-23T06:46:06.0911147Z 140 │ │ yield* TestClock.adjust("100 millis"); 2026-10-23T06:46:06.0911472Z 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-23T06:46:06.0911662Z 142 │ │ yield* Effect.promise(() => new Promise((resolve) => setImmediate(resolve))); 2026-10-23T06:46:06.0911863Z 143 │ ╰─▶ } 2026-10-23T06:46:06.0911984Z 144 │ return yield* Fiber.join(fiber); 2026-10-23T06:46:06.0912038Z ╰──── 2026-10-23T06:46:06.0912040Z 2026-10-23T06:46:06.0912200Z ⚠ react(immutability): This value cannot be modified 2026-10-23T06:46:06.0912347Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:174:5] 2026-10-23T06:46:06.0912491Z 170 │ const expandedAngle = props.collapsedDirection === "right" ? 90 : 180; 2026-10-23T06:46:06.0912628Z 171 │ const rotation = useSharedValue(props.expanded ? expandedAngle : 0); 2026-10-23T06:46:06.0912706Z ·  ────┬─── 2026-10-23T06:46:06.0912842Z · ╰── `rotation` originates here 2026-10-23T06:46:06.0912894Z 172 │ 2026-10-23T06:46:06.0912972Z 173 │ useLayoutEffect(() => { 2026-10-23T06:46:06.0913111Z 174 │ rotation.value = withTiming(props.expanded ? expandedAngle : 0, { 2026-10-23T06:46:06.0913183Z ·  ────┬─── 2026-10-23T06:46:06.0913317Z · ╰── `rotation` cannot be modified 2026-10-23T06:46:06.0913417Z 175 │ duration: THREAD_DISCLOSURE_TRANSITION_MS, 2026-10-23T06:46:06.0913470Z ╰──── 2026-10-23T06:46:06.0913737Z  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-23T06:46:06.0914045Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T06:46:06.0914048Z 2026-10-23T06:46:06.0914247Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T06:46:06.0914404Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:1246:23] 2026-10-23T06:46:06.0914472Z 1245 │ { 2026-10-23T06:46:06.0915437Z 458 │ let result: Array = divisor.map((_) => 0); 2026-10-23T06:46:06.0915540Z ·  ┬ 2026-10-23T06:46:06.0915688Z · ╰── '_' is declared here 2026-10-23T06:46:06.0915759Z 459 │ for (const b of data) { 2026-10-23T06:46:06.0915811Z ╰──── 2026-10-23T06:46:06.0915914Z  help: Consider removing this parameter. 2026-10-23T06:46:06.0915916Z 2026-10-23T06:46:06.0916085Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T06:46:06.0916243Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:697:76] 2026-10-23T06:46:06.0916425Z 696 │ const [snoozeGateClock, setSnoozeGateClock] = useState(() => ({ thread, now: Date.now() })); 2026-10-23T06:46:06.0916645Z 697 │ if (snoozeGateClock.thread !== thread) setSnoozeGateClock({ thread, now: Date.now() }); 2026-10-23T06:46:06.0916812Z ·  ─────┬──── 2026-10-23T06:46:06.0917000Z · ╰── Cannot call impure function 2026-10-23T06:46:06.0917137Z 698 │ const snoozeGateNow = new Date(snoozeGateClock.now).toISOString(); 2026-10-23T06:46:06.0917187Z ╰──── 2026-10-23T06:46:06.0917473Z  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-23T06:46:06.0917770Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T06:46:06.0917772Z 2026-10-23T06:46:06.0917945Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T06:46:06.0918104Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:718:71] 2026-10-23T06:46:06.0918182Z 717 │ const snoozePresets = useMemo( 2026-10-23T06:46:06.0918361Z 718 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-23T06:46:06.0918539Z ·  ─────┬──── 2026-10-23T06:46:06.0918723Z · ╰── Cannot call impure function 2026-10-23T06:46:06.0918842Z 719 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-23T06:46:06.0918892Z ╰──── 2026-10-23T06:46:06.0919176Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-23T06:46:06.0919475Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T06:46:06.0919477Z 2026-10-23T06:46:06.0919660Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-23T06:46:06.0919814Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:719:6] 2026-10-23T06:46:06.0919991Z 718 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-23T06:46:06.0920109Z 719 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-23T06:46:06.0920205Z ·  ────────────┬─────────── 2026-10-23T06:46:06.0920388Z · ╰── Unnecessary dependency `props.snoozePresetMinute` 2026-10-23T06:46:06.0920449Z 720 │ ); 2026-10-23T06:46:06.0920501Z ╰──── 2026-10-23T06:46:06.0920817Z  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-23T06:46:06.0921132Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.0921135Z 2026-10-23T06:46:06.0921315Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-23T06:46:06.0921471Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:765:7] 2026-10-23T06:46:06.0921541Z 764 │ thread.pinnedAt, 2026-10-23T06:46:06.0921656Z 765 │ variant, 2026-10-23T06:46:06.0921754Z ·  ───┬─── 2026-10-23T06:46:06.0921892Z · ╰── Unnecessary dependency `variant` 2026-10-23T06:46:06.0921950Z 766 │ ], 2026-10-23T06:46:06.0922002Z ╰──── 2026-10-23T06:46:06.0922311Z  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-23T06:46:06.0922624Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.0922626Z 2026-10-23T06:46:06.0922823Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T06:46:06.0922992Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:1215:21] 2026-10-23T06:46:06.0923126Z 1214 │ {providerDrivers.slice(0, -1).map((driver, index) => ( 2026-10-23T06:46:06.0923259Z 1215 │ 2026-10-23T06:46:06.0923374Z ·  ────────────────────────── 2026-10-23T06:46:06.0923484Z 1216 │ 2026-10-23T06:46:06.0923538Z ╰──── 2026-10-23T06:46:06.0923683Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-23T06:46:06.0923686Z 2026-10-23T06:46:06.0924166Z ⚠ 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-23T06:46:06.0924309Z ╭─[packages/client-runtime/src/rpc/client.test.ts:131:9] 2026-10-23T06:46:06.0924375Z 130 │ ) { 2026-10-23T06:46:06.0924587Z 131 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-23T06:46:06.0924714Z 132 │ │ if (subscriptions.length >= count) { 2026-10-23T06:46:06.0924807Z 133 │ │ return; 2026-10-23T06:46:06.0924890Z 134 │ │ } 2026-10-23T06:46:06.0924997Z 135 │ │ yield* Effect.yieldNow; 2026-10-23T06:46:06.0925132Z 136 │ ╰─▶ } 2026-10-23T06:46:06.0925297Z 137 │ return yield* Effect.die(new Error(`Expected ${count} durable subscriptions.`)); 2026-10-23T06:46:06.0925349Z ╰──── 2026-10-23T06:46:06.0925358Z 2026-10-23T06:46:06.0925834Z ⚠ 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-23T06:46:06.0925966Z ╭─[packages/client-runtime/src/rpc/client.test.ts:252:7] 2026-10-23T06:46:06.0926130Z 251 │ yield* SubscriptionRef.set(activeSession, Option.some(session(firstClient))); 2026-10-23T06:46:06.0926387Z 252 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 1; attempt += 1) { 2026-10-23T06:46:06.0926495Z 253 │ │ yield* Effect.yieldNow; 2026-10-23T06:46:06.0926625Z 254 │ ╰─▶ } 2026-10-23T06:46:06.0926811Z 255 │ yield* SubscriptionRef.set(activeSession, Option.none()); 2026-10-23T06:46:06.0926892Z ╰──── 2026-10-23T06:46:06.0926894Z 2026-10-23T06:46:06.0927362Z ⚠ 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-23T06:46:06.0927495Z ╭─[packages/client-runtime/src/rpc/client.test.ts:258:7] 2026-10-23T06:46:06.0927549Z 257 │ 2026-10-23T06:46:06.0927800Z 258 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-23T06:46:06.0927907Z 259 │ │ yield* Effect.yieldNow; 2026-10-23T06:46:06.0928043Z 260 │ ╰─▶ } 2026-10-23T06:46:06.0928150Z 261 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-23T06:46:06.0928202Z ╰──── 2026-10-23T06:46:06.0928204Z 2026-10-23T06:46:06.0928695Z ⚠ 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-23T06:46:06.0928826Z ╭─[packages/client-runtime/src/rpc/client.test.ts:322:7] 2026-10-23T06:46:06.0928885Z 321 │ ); 2026-10-23T06:46:06.0929142Z 322 │ ╭─▶ for (let attempt = 0; attempt < 100 && observedFailures.length < 1; attempt += 1) { 2026-10-23T06:46:06.0929248Z 323 │ │ yield* Effect.yieldNow; 2026-10-23T06:46:06.0929383Z 324 │ ╰─▶ } 2026-10-23T06:46:06.0929438Z 325 │ 2026-10-23T06:46:06.0929490Z ╰──── 2026-10-23T06:46:06.0929492Z 2026-10-23T06:46:06.0929952Z ⚠ 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-23T06:46:06.0930085Z ╭─[packages/client-runtime/src/rpc/client.test.ts:330:7] 2026-10-23T06:46:06.0930251Z 329 │ yield* SubscriptionRef.set(activeSession, Option.some(session(secondClient))); 2026-10-23T06:46:06.0930500Z 330 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-23T06:46:06.0930610Z 331 │ │ yield* Effect.yieldNow; 2026-10-23T06:46:06.0930744Z 332 │ ╰─▶ } 2026-10-23T06:46:06.0930849Z 333 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-23T06:46:06.0930900Z ╰──── 2026-10-23T06:46:06.0930903Z 2026-10-23T06:46:06.0931365Z ⚠ 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-23T06:46:06.0931500Z ╭─[packages/client-runtime/src/rpc/session.test.ts:226:3] 2026-10-23T06:46:06.0931557Z 225 │ ) { 2026-10-23T06:46:06.0931760Z 226 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-23T06:46:06.0931925Z 227 │ │ const socket = sockets[index]; 2026-10-23T06:46:06.0932044Z 228 │ │ if (socket) { 2026-10-23T06:46:06.0932138Z 229 │ │ return socket; 2026-10-23T06:46:06.0932212Z 230 │ │ } 2026-10-23T06:46:06.0932313Z 231 │ │ yield* Effect.yieldNow; 2026-10-23T06:46:06.0932439Z 232 │ ╰─▶ } 2026-10-23T06:46:06.0932616Z 233 │ return yield* Effect.die(new Error("Expected the RPC protocol to create a websocket.")); 2026-10-23T06:46:06.0932669Z ╰──── 2026-10-23T06:46:06.0932672Z 2026-10-23T06:46:06.0933137Z ⚠ 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-23T06:46:06.0933274Z ╭─[packages/client-runtime/src/rpc/session.test.ts:240:3] 2026-10-23T06:46:06.0933329Z 239 │ ) { 2026-10-23T06:46:06.0933531Z 240 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-23T06:46:06.0933747Z 241 │ │ const request = socket.sent.map((message) => decodeJson(message)).filter(isRpcRequest)[index]; 2026-10-23T06:46:06.0933838Z 242 │ │ if (request) { 2026-10-23T06:46:06.0933932Z 243 │ │ return request; 2026-10-23T06:46:06.0934007Z 244 │ │ } 2026-10-23T06:46:06.0934108Z 245 │ │ yield* Effect.yieldNow; 2026-10-23T06:46:06.0934232Z 246 │ ╰─▶ } 2026-10-23T06:46:06.0934404Z 247 │ return yield* Effect.die(new Error("Expected the RPC protocol to send a request.")); 2026-10-23T06:46:06.0934460Z ╰──── 2026-10-23T06:46:06.0934462Z 2026-10-23T06:46:06.0934620Z ⚠ react(immutability): This value cannot be modified 2026-10-23T06:46:06.0934780Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-23T06:46:06.0934836Z  86 │ 2026-10-23T06:46:06.0934929Z  87 │ const cardCoverage = props.cardCoverage; 2026-10-23T06:46:06.0935011Z ·  ──────┬───── 2026-10-23T06:46:06.0935148Z · ╰── `cardCoverage` originates here 2026-10-23T06:46:06.0935230Z  88 │ const barHeightRef = useRef(0); 2026-10-23T06:46:06.0935310Z  89 │ const cardHeightRef = useRef(0); 2026-10-23T06:46:06.0935444Z  90 │ const cardHeight = useSharedValue(0); 2026-10-23T06:46:06.0935561Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-23T06:46:06.0935629Z  92 │ if (!cardCoverage) { 2026-10-23T06:46:06.0935690Z  93 │ return; 2026-10-23T06:46:06.0935744Z  94 │ } 2026-10-23T06:46:06.0935896Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-23T06:46:06.0935985Z  96 │ if (coverage === cardCoverage.value) { 2026-10-23T06:46:06.0936045Z  97 │ return; 2026-10-23T06:46:06.0936098Z  98 │ } 2026-10-23T06:46:06.0936179Z  99 │ if (cardCoverage.value === 0) { 2026-10-23T06:46:06.0936261Z 100 │ cardCoverage.value = coverage; 2026-10-23T06:46:06.0936340Z ·  ──────┬───── 2026-10-23T06:46:06.0936481Z · ╰── `cardCoverage` cannot be modified 2026-10-23T06:46:06.0936543Z 101 │ return; 2026-10-23T06:46:06.0936603Z ╰──── 2026-10-23T06:46:06.0936907Z  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-23T06:46:06.0937217Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T06:46:06.0937222Z 2026-10-23T06:46:06.0937377Z ⚠ react(immutability): This value cannot be modified 2026-10-23T06:46:06.0937535Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7] 2026-10-23T06:46:06.0937616Z  89 │ const cardHeightRef = useRef(0); 2026-10-23T06:46:06.0937702Z  90 │ const cardHeight = useSharedValue(0); 2026-10-23T06:46:06.0937780Z ·  ─────┬──── 2026-10-23T06:46:06.0937921Z · ╰── `cardHeight` originates here 2026-10-23T06:46:06.0938017Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-23T06:46:06.0938084Z  92 │ if (!cardCoverage) { 2026-10-23T06:46:06.0938142Z  93 │ return; 2026-10-23T06:46:06.0938196Z  94 │ } 2026-10-23T06:46:06.0938345Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-23T06:46:06.0938501Z  96 │ if (coverage === cardCoverage.value) { 2026-10-23T06:46:06.0938560Z  97 │ return; 2026-10-23T06:46:06.0938614Z  98 │ } 2026-10-23T06:46:06.0938693Z  99 │ if (cardCoverage.value === 0) { 2026-10-23T06:46:06.0938774Z 100 │ cardCoverage.value = coverage; 2026-10-23T06:46:06.0938833Z 101 │ return; 2026-10-23T06:46:06.0938888Z 102 │ } 2026-10-23T06:46:06.0938995Z 103 │ cardCoverage.value = withTiming(coverage, { 2026-10-23T06:46:06.0939092Z 104 │ duration: USER_INPUT_TOGGLE_DURATION_MS, 2026-10-23T06:46:06.0939178Z 105 │ easing: Easing.out(Easing.cubic), 2026-10-23T06:46:06.0939233Z 106 │ }); 2026-10-23T06:46:06.0939300Z 107 │ }, [cardCoverage]); 2026-10-23T06:46:06.0939383Z 108 │ const handleBarLayout = useCallback( 2026-10-23T06:46:06.0939464Z 109 │ (event: LayoutChangeEvent) => { 2026-10-23T06:46:06.0939591Z 110 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-23T06:46:06.0939661Z 111 │ notifyCoverage(); 2026-10-23T06:46:06.0939715Z 112 │ }, 2026-10-23T06:46:06.0939781Z 113 │ [notifyCoverage], 2026-10-23T06:46:06.0939836Z 114 │ ); 2026-10-23T06:46:06.0939919Z 115 │ const handleCardLayout = useCallback( 2026-10-23T06:46:06.0939998Z 116 │ (event: LayoutChangeEvent) => { 2026-10-23T06:46:06.0940186Z 117 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-23T06:46:06.0940332Z 118 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-23T06:46:06.0940408Z ·  ─────┬──── 2026-10-23T06:46:06.0940547Z · ╰── `cardHeight` cannot be modified 2026-10-23T06:46:06.0940615Z 119 │ notifyCoverage(); 2026-10-23T06:46:06.0940667Z ╰──── 2026-10-23T06:46:06.0940932Z  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-23T06:46:06.0941240Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T06:46:06.0941243Z 2026-10-23T06:46:06.0941450Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-23T06:46:06.0941608Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-23T06:46:06.0941695Z  90 │ const cardHeight = useSharedValue(0); 2026-10-23T06:46:06.0941786Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-23T06:46:06.0941892Z ·  ───┬─── 2026-10-23T06:46:06.0942132Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-23T06:46:06.0942200Z  92 │ if (!cardCoverage) { 2026-10-23T06:46:06.0942259Z  93 │ return; 2026-10-23T06:46:06.0942313Z  94 │ } 2026-10-23T06:46:06.0942462Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-23T06:46:06.0942556Z  96 │ if (coverage === cardCoverage.value) { 2026-10-23T06:46:06.0942617Z  97 │ return; 2026-10-23T06:46:06.0942671Z  98 │ } 2026-10-23T06:46:06.0942751Z  99 │ if (cardCoverage.value === 0) { 2026-10-23T06:46:06.0942833Z 100 │ cardCoverage.value = coverage; 2026-10-23T06:46:06.0942910Z ·  ──────┬───── 2026-10-23T06:46:06.0943047Z · ╰── This modifies `cardCoverage` 2026-10-23T06:46:06.0943107Z 101 │ return; 2026-10-23T06:46:06.0943159Z ╰──── 2026-10-23T06:46:06.0943500Z  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-23T06:46:06.0943808Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T06:46:06.0943815Z 2026-10-23T06:46:06.0944017Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-23T06:46:06.0944173Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-23T06:46:06.0944253Z  99 │ if (cardCoverage.value === 0) { 2026-10-23T06:46:06.0944335Z 100 │ cardCoverage.value = coverage; 2026-10-23T06:46:06.0944412Z ·  ──────┬───── 2026-10-23T06:46:06.0944545Z · ╰── This modifies `cardCoverage` 2026-10-23T06:46:06.0944604Z 101 │ return; 2026-10-23T06:46:06.0944660Z 102 │ } 2026-10-23T06:46:06.0944762Z 103 │ cardCoverage.value = withTiming(coverage, { 2026-10-23T06:46:06.0944859Z 104 │ duration: USER_INPUT_TOGGLE_DURATION_MS, 2026-10-23T06:46:06.0944999Z 105 │ easing: Easing.out(Easing.cubic), 2026-10-23T06:46:06.0945085Z 106 │ }); 2026-10-23T06:46:06.0945152Z 107 │ }, [cardCoverage]); 2026-10-23T06:46:06.0945236Z 108 │ const handleBarLayout = useCallback( 2026-10-23T06:46:06.0945315Z 109 │ (event: LayoutChangeEvent) => { 2026-10-23T06:46:06.0945422Z ·  ───────────────┬─────────────── 2026-10-23T06:46:06.0945647Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-23T06:46:06.0945773Z 110 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-23T06:46:06.0945824Z ╰──── 2026-10-23T06:46:06.0946165Z  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-23T06:46:06.0946477Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T06:46:06.0946482Z 2026-10-23T06:46:06.0946681Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-23T06:46:06.0946838Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7] 2026-10-23T06:46:06.0946924Z 115 │ const handleCardLayout = useCallback( 2026-10-23T06:46:06.0947004Z 116 │ (event: LayoutChangeEvent) => { 2026-10-23T06:46:06.0947109Z ·  ───────────────┬─────────────── 2026-10-23T06:46:06.0947328Z · ╰── This function may (indirectly) reassign or modify `cardHeight` after render 2026-10-23T06:46:06.0947455Z 117 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-23T06:46:06.0947573Z 118 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-23T06:46:06.0947654Z ·  ─────┬──── 2026-10-23T06:46:06.0947783Z · ╰── This modifies `cardHeight` 2026-10-23T06:46:06.0947850Z 119 │ notifyCoverage(); 2026-10-23T06:46:06.0947901Z ╰──── 2026-10-23T06:46:06.0948241Z  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-23T06:46:06.0948583Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T06:46:06.0948586Z 2026-10-23T06:46:06.0948961Z ⚠ 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-23T06:46:06.0949080Z ╭─[packages/contracts/src/auth.test.ts:17:12] 2026-10-23T06:46:06.0949299Z 16 │ it("decodes legacy review credentials without offering them in new grants", () => { 2026-10-23T06:46:06.0949469Z 17 │ expect(Schema.decodeUnknownSync(AuthEnvironmentScopes)(["review:write"])).toEqual([ 2026-10-23T06:46:06.0949571Z ·  ──────────────────────── 2026-10-23T06:46:06.0949636Z 18 │ "review:write", 2026-10-23T06:46:06.0949688Z ╰──── 2026-10-23T06:46:06.0949690Z 2026-10-23T06:46:06.0950057Z ⚠ 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-23T06:46:06.0950236Z ╭─[packages/contracts/src/auth.test.ts:20:18] 2026-10-23T06:46:06.0950333Z 19 │ ]); 2026-10-23T06:46:06.0950496Z 20 │ expect(() => Schema.decodeUnknownSync(AuthGrantScopes)(["review:write"])).toThrow(); 2026-10-23T06:46:06.0950603Z ·  ──────────────────────── 2026-10-23T06:46:06.0950738Z 21 │ expect(AuthStandardClientScopes).not.toContain("review:write"); 2026-10-23T06:46:06.0950790Z ╰──── 2026-10-23T06:46:06.0950792Z 2026-10-23T06:46:06.0951156Z ⚠ 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-23T06:46:06.0951268Z ╭─[packages/contracts/src/auth.test.ts:58:21] 2026-10-23T06:46:06.0951439Z 57 │ it("ignores unknown response permissions without falling back to broader scopes", () => { 2026-10-23T06:46:06.0951571Z 58 │ const session = Schema.decodeUnknownSync(AuthSessionState)({ 2026-10-23T06:46:06.0951681Z ·  ──────────────────────── 2026-10-23T06:46:06.0951752Z 59 │ authenticated: true, 2026-10-23T06:46:06.0951803Z ╰──── 2026-10-23T06:46:06.0951806Z 2026-10-23T06:46:06.0952068Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T06:46:06.0952207Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2109:5] 2026-10-23T06:46:06.0952264Z 2107 │ ); 2026-10-23T06:46:06.0952332Z 2108 │ useEffect(() => { 2026-10-23T06:46:06.0952406Z ·  ────┬──── 2026-10-23T06:46:06.0952538Z · ╰── This is the containing effect 2026-10-23T06:46:06.0952612Z 2109 │ setExpandedVideo(null); 2026-10-23T06:46:06.0952702Z ·  ────────┬─────── 2026-10-23T06:46:06.0952879Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T06:46:06.0952951Z 2110 │ setExpandedFile(null); 2026-10-23T06:46:06.0953004Z ╰──── 2026-10-23T06:46:06.0953607Z  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-23T06:46:06.0953934Z  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-23T06:46:06.0953937Z 2026-10-23T06:46:06.0954173Z ⚠ eslint(no-unused-vars): Identifier 'isMarkdownFileLinkLabel' is imported but never used. 2026-10-23T06:46:06.0954308Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:62:10] 2026-10-23T06:46:06.0954446Z 61 │ import { resolveAssetUrl } from "@t3tools/client-runtime/state/assets"; 2026-10-23T06:46:06.0954586Z 62 │ import { isMarkdownFileLinkLabel } from "@t3tools/shared/markdownLinks"; 2026-10-23T06:46:06.0954684Z ·  ───────────┬─────────── 2026-10-23T06:46:06.0954849Z · ╰── 'isMarkdownFileLinkLabel' is imported here 2026-10-23T06:46:06.0955008Z 63 │ import { formatAttachmentSize } from "@t3tools/client-runtime/state/attachments"; 2026-10-23T06:46:06.0955061Z ╰──── 2026-10-23T06:46:06.0955160Z  help: Consider removing this import. 2026-10-23T06:46:06.0955163Z 2026-10-23T06:46:06.0955424Z ⚠ eslint(no-unused-vars): Identifier 'createContext' is imported but never used. 2026-10-23T06:46:06.0955586Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:88:3] 2026-10-23T06:46:06.0955644Z 87 │ import { 2026-10-23T06:46:06.0955710Z 88 │ createContext, 2026-10-23T06:46:06.0955784Z ·  ──────┬────── 2026-10-23T06:46:06.0955922Z · ╰── 'createContext' is imported here 2026-10-23T06:46:06.0955979Z 89 │ memo, 2026-10-23T06:46:06.0956030Z ╰──── 2026-10-23T06:46:06.0956126Z  help: Consider removing this import. 2026-10-23T06:46:06.0956129Z 2026-10-23T06:46:06.0956345Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-23T06:46:06.0956481Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:103:3] 2026-10-23T06:46:06.0956547Z 102 │ import { 2026-10-23T06:46:06.0956617Z 103 │ ActivityIndicator, 2026-10-23T06:46:06.0956701Z ·  ────────┬──────── 2026-10-23T06:46:06.0956846Z · ╰── 'ActivityIndicator' is imported here 2026-10-23T06:46:06.0956905Z 104 │ Image, 2026-10-23T06:46:06.0956955Z ╰──── 2026-10-23T06:46:06.0957051Z  help: Consider removing this import. 2026-10-23T06:46:06.0957054Z 2026-10-23T06:46:06.0957255Z ⚠ eslint(no-unused-vars): Identifier 'ScrollView' is imported but never used. 2026-10-23T06:46:06.0957388Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:110:3] 2026-10-23T06:46:06.0957449Z 109 │ Pressable, 2026-10-23T06:46:06.0957514Z 110 │ ScrollView, 2026-10-23T06:46:06.0957588Z ·  ─────┬──── 2026-10-23T06:46:06.0957727Z · ╰── 'ScrollView' is imported here 2026-10-23T06:46:06.0957790Z 111 │ StyleSheet, 2026-10-23T06:46:06.0957842Z ╰──── 2026-10-23T06:46:06.0957937Z  help: Consider removing this import. 2026-10-23T06:46:06.0957939Z 2026-10-23T06:46:06.0958141Z ⚠ eslint(no-unused-vars): Identifier 'NativeText' is imported but never used. 2026-10-23T06:46:06.0958274Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:112:11] 2026-10-23T06:46:06.0958336Z 111 │ StyleSheet, 2026-10-23T06:46:06.0958429Z 112 │ Text as NativeText, 2026-10-23T06:46:06.0958510Z ·  ─────┬──── 2026-10-23T06:46:06.0958648Z · ╰── 'NativeText' is imported here 2026-10-23T06:46:06.0958715Z 113 │ type ColorValue, 2026-10-23T06:46:06.0958768Z ╰──── 2026-10-23T06:46:06.0958921Z  help: Consider removing this import. 2026-10-23T06:46:06.0958957Z 2026-10-23T06:46:06.0959172Z ⚠ eslint(no-unused-vars): Identifier 'tryOpenExternalUrl' is imported but never used. 2026-10-23T06:46:06.0959306Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:134:10] 2026-10-23T06:46:06.0959442Z 133 │ import { copyTextWithHaptic } from "../../lib/copyTextWithHaptic"; 2026-10-23T06:46:06.0959569Z 134 │ import { tryOpenExternalUrl } from "../../lib/openExternalUrl"; 2026-10-23T06:46:06.0959658Z ·  ─────────┬──────── 2026-10-23T06:46:06.0959812Z · ╰── 'tryOpenExternalUrl' is imported here 2026-10-23T06:46:06.0959960Z 135 │ import { downloadAndShareAttachment } from "../../lib/attachmentDownload"; 2026-10-23T06:46:06.0960011Z ╰──── 2026-10-23T06:46:06.0960110Z  help: Consider removing this import. 2026-10-23T06:46:06.0960116Z 2026-10-23T06:46:06.0960335Z ⚠ eslint(no-unused-vars): Identifier 'faviconUrlForOrigin' is imported but never used. 2026-10-23T06:46:06.0960468Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:137:10] 2026-10-23T06:46:06.0960604Z 136 │ import { hasWideMarkdownBlock } from "../../lib/wideMarkdownBlocks"; 2026-10-23T06:46:06.0960729Z 137 │ import { faviconUrlForOrigin } from "@t3tools/shared/favicon"; 2026-10-23T06:46:06.0960820Z ·  ─────────┬───────── 2026-10-23T06:46:06.0960975Z · ╰── 'faviconUrlForOrigin' is imported here 2026-10-23T06:46:06.0961034Z 138 │ import { 2026-10-23T06:46:06.0961084Z ╰──── 2026-10-23T06:46:06.0961180Z  help: Consider removing this import. 2026-10-23T06:46:06.0961188Z 2026-10-23T06:46:06.0961408Z ⚠ eslint(no-unused-vars): Identifier 'MediaVideoPlayer' is imported but never used. 2026-10-23T06:46:06.0961541Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:151:10] 2026-10-23T06:46:06.0961692Z 150 │ import { VideoAttachmentTile } from "../../components/VideoAttachmentTile"; 2026-10-23T06:46:06.0961826Z 151 │ import { MediaVideoPlayer } from "../../components/MediaVideoPlayer"; 2026-10-23T06:46:06.0961914Z ·  ────────┬─────── 2026-10-23T06:46:06.0962064Z · ╰── 'MediaVideoPlayer' is imported here 2026-10-23T06:46:06.0962204Z 152 │ import { resolveMarkdownMediaPreview } from "../../lib/markdownMedia"; 2026-10-23T06:46:06.0962254Z ╰──── 2026-10-23T06:46:06.0962350Z  help: Consider removing this import. 2026-10-23T06:46:06.0962358Z 2026-10-23T06:46:06.0962585Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoPreviewUri' is imported but never used. 2026-10-23T06:46:06.0962717Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:155:3] 2026-10-23T06:46:06.0962798Z 154 │ attachmentVideoPreviewSource, 2026-10-23T06:46:06.0962869Z 155 │ mediaVideoPreviewUri, 2026-10-23T06:46:06.0962954Z ·  ──────────┬───────── 2026-10-23T06:46:06.0963107Z · ╰── 'mediaVideoPreviewUri' is imported here 2026-10-23T06:46:06.0963179Z 156 │ mediaVideoThumbnailKey, 2026-10-23T06:46:06.0963229Z ╰──── 2026-10-23T06:46:06.0963325Z  help: Consider removing this import. 2026-10-23T06:46:06.0963327Z 2026-10-23T06:46:06.0963601Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoThumbnailKey' is imported but never used. 2026-10-23T06:46:06.0963758Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:156:3] 2026-10-23T06:46:06.0963828Z 155 │ mediaVideoPreviewUri, 2026-10-23T06:46:06.0963901Z 156 │ mediaVideoThumbnailKey, 2026-10-23T06:46:06.0963989Z ·  ───────────┬────────── 2026-10-23T06:46:06.0964145Z · ╰── 'mediaVideoThumbnailKey' is imported here 2026-10-23T06:46:06.0964225Z 157 │ type MediaVideoPreviewSource, 2026-10-23T06:46:06.0964276Z ╰──── 2026-10-23T06:46:06.0964371Z  help: Consider removing this import. 2026-10-23T06:46:06.0964373Z 2026-10-23T06:46:06.0964586Z ⚠ eslint(no-unused-vars): Type 'MediaVideoPreviewSource' is imported but never used. 2026-10-23T06:46:06.0964718Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:157:8] 2026-10-23T06:46:06.0964795Z 156 │ mediaVideoThumbnailKey, 2026-10-23T06:46:06.0964877Z 157 │ type MediaVideoPreviewSource, 2026-10-23T06:46:06.0964971Z ·  ───────────┬─────────── 2026-10-23T06:46:06.0965136Z · ╰── 'MediaVideoPreviewSource' is imported here 2026-10-23T06:46:06.0965223Z 158 │ } from "../../lib/videoPreviewSource"; 2026-10-23T06:46:06.0965276Z ╰──── 2026-10-23T06:46:06.0965369Z  help: Consider removing this import. 2026-10-23T06:46:06.0965372Z 2026-10-23T06:46:06.0965572Z ⚠ eslint(no-unused-vars): Type 'ReviewDiffTheme' is imported but never used. 2026-10-23T06:46:06.0965705Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:165:15] 2026-10-23T06:46:06.0965886Z 164 │ import { parseReviewCommentMessageSegments } from "../review/reviewCommentSelection"; 2026-10-23T06:46:06.0966029Z 165 │ import type { ReviewDiffTheme } from "../review/shikiReviewHighlighter"; 2026-10-23T06:46:06.0966120Z ·  ───────┬─────── 2026-10-23T06:46:06.0966271Z · ╰── 'ReviewDiffTheme' is imported here 2026-10-23T06:46:06.0966332Z 166 │ import { 2026-10-23T06:46:06.0966382Z ╰──── 2026-10-23T06:46:06.0966477Z  help: Consider removing this import. 2026-10-23T06:46:06.0966480Z 2026-10-23T06:46:06.0966713Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownFontSizes' is imported but never used. 2026-10-23T06:46:06.0966843Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:180:3] 2026-10-23T06:46:06.0966901Z 179 │ import { 2026-10-23T06:46:06.0966975Z 180 │ resolveMarkdownFontSizes, 2026-10-23T06:46:06.0967071Z ·  ────────────┬─────────── 2026-10-23T06:46:06.0967233Z · ╰── 'resolveMarkdownFontSizes' is imported here 2026-10-23T06:46:06.0967318Z 181 │ resolveNativeMarkdownTypography, 2026-10-23T06:46:06.0967370Z ╰──── 2026-10-23T06:46:06.0967465Z  help: Consider removing this import. 2026-10-23T06:46:06.0967468Z 2026-10-23T06:46:06.0967692Z ⚠ eslint(no-unused-vars): Identifier 'markdownLinkIconSource' is imported but never used. 2026-10-23T06:46:06.0967823Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:185:10] 2026-10-23T06:46:06.0967956Z 184 │ import { PierreEntryIcon } from "../../components/PierreEntryIcon"; 2026-10-23T06:46:06.0968092Z 185 │ import { markdownLinkIconSource } from "../../lib/markdownLinkIcons"; 2026-10-23T06:46:06.0968188Z ·  ───────────┬────────── 2026-10-23T06:46:06.0968425Z · ╰── 'markdownLinkIconSource' is imported here 2026-10-23T06:46:06.0968509Z 186 │ import { 2026-10-23T06:46:06.0968561Z ╰──── 2026-10-23T06:46:06.0968657Z  help: Consider removing this import. 2026-10-23T06:46:06.0968659Z 2026-10-23T06:46:06.0968918Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownInlineCodePresentation' is imported but never used. 2026-10-23T06:46:06.0969049Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:188:3] 2026-10-23T06:46:06.0969127Z 187 │ normalizeNativeMarkdownUrl, 2026-10-23T06:46:06.0969226Z 188 │ resolveMarkdownInlineCodePresentation, 2026-10-23T06:46:06.0969336Z ·  ──────────────────┬────────────────── 2026-10-23T06:46:06.0969539Z · ╰── 'resolveMarkdownInlineCodePresentation' is imported here 2026-10-23T06:46:06.0969616Z 189 │ resolveMarkdownLinkIcon, 2026-10-23T06:46:06.0969668Z ╰──── 2026-10-23T06:46:06.0969763Z  help: Consider removing this import. 2026-10-23T06:46:06.0969766Z 2026-10-23T06:46:06.0969992Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownLinkIcon' is imported but never used. 2026-10-23T06:46:06.0970124Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:189:3] 2026-10-23T06:46:06.0970219Z 188 │ resolveMarkdownInlineCodePresentation, 2026-10-23T06:46:06.0970293Z 189 │ resolveMarkdownLinkIcon, 2026-10-23T06:46:06.0970380Z ·  ───────────┬─────────── 2026-10-23T06:46:06.0970538Z · ╰── 'resolveMarkdownLinkIcon' is imported here 2026-10-23T06:46:06.0970630Z 190 │ resolveMarkdownLinkPresentation, 2026-10-23T06:46:06.0970685Z ╰──── 2026-10-23T06:46:06.0970778Z  help: Consider removing this import. 2026-10-23T06:46:06.0970780Z 2026-10-23T06:46:06.0971010Z ⚠ eslint(no-unused-vars): Identifier 'useMarkdownCodeHighlight' is imported but never used. 2026-10-23T06:46:06.0971144Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:228:10] 2026-10-23T06:46:06.0971249Z 227 │ import { ThreadMcpApp } from "./McpAppWebView"; 2026-10-23T06:46:06.0971394Z 228 │ import { useMarkdownCodeHighlight } from "./markdownCodeHighlightState"; 2026-10-23T06:46:06.0971498Z ·  ────────────┬─────────── 2026-10-23T06:46:06.0971665Z · ╰── 'useMarkdownCodeHighlight' is imported here 2026-10-23T06:46:06.0971725Z 229 │ import { 2026-10-23T06:46:06.0971775Z ╰──── 2026-10-23T06:46:06.0971928Z  help: Consider removing this import. 2026-10-23T06:46:06.0971962Z 2026-10-23T06:46:06.0972174Z ⚠ eslint(no-unused-vars): Identifier 'useAssetUrlState' is imported but never used. 2026-10-23T06:46:06.0972306Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:232:3] 2026-10-23T06:46:06.0972371Z 231 │ useAssetUrl, 2026-10-23T06:46:06.0972437Z 232 │ useAssetUrlState, 2026-10-23T06:46:06.0972519Z ·  ────────┬─────── 2026-10-23T06:46:06.0972662Z · ╰── 'useAssetUrlState' is imported here 2026-10-23T06:46:06.0972731Z 233 │ useRefreshAssetUrl, 2026-10-23T06:46:06.0972783Z ╰──── 2026-10-23T06:46:06.0972879Z  help: Consider removing this import. 2026-10-23T06:46:06.0972882Z 2026-10-23T06:46:06.0973092Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T06:46:06.0973234Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2111:7] 2026-10-23T06:46:06.0973306Z 2110 │ setExpandedFile(null); 2026-10-23T06:46:06.0973465Z 2111 │ }, [props.environmentId, props.threadId, props.contentPresentation.kind]); 2026-10-23T06:46:06.0973692Z ·  ─────────┬───────── ───────┬────── ───────────────┬────────────── 2026-10-23T06:46:06.0973990Z · │ │ ╰── Unnecessary dependency `props.contentPresentation.kind` 2026-10-23T06:46:06.0974190Z · │ ╰── Unnecessary dependency `props.threadId` 2026-10-23T06:46:06.0974363Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-23T06:46:06.0974512Z 2112 │ const horizontalPadding = props.layoutVariant === "split" ? 20 : 16; 2026-10-23T06:46:06.0974565Z ╰──── 2026-10-23T06:46:06.0974863Z  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-23T06:46:06.0975176Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.0975179Z 2026-10-23T06:46:06.0975382Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T06:46:06.0975520Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2578:7] 2026-10-23T06:46:06.0975622Z 2577 │ reportHeaderMaterialVisibility(false); 2026-10-23T06:46:06.0975739Z 2578 │ }, [feedThreadKey, reportHeaderMaterialVisibility]); 2026-10-23T06:46:06.0975821Z ·  ──────┬────── 2026-10-23T06:46:06.0975972Z · ╰── Unnecessary dependency `feedThreadKey` 2026-10-23T06:46:06.0976026Z 2579 │ 2026-10-23T06:46:06.0976076Z ╰──── 2026-10-23T06:46:06.0976371Z  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-23T06:46:06.0976685Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.0976687Z 2026-10-23T06:46:06.0976948Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T06:46:06.0977117Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2594:7] 2026-10-23T06:46:06.0977174Z 2593 │ } 2026-10-23T06:46:06.0977306Z 2594 │ }, [listMountKey, props.contentInsetEndAdjustment, listRef]); 2026-10-23T06:46:06.0977386Z ·  ──────┬───── 2026-10-23T06:46:06.0977532Z · ╰── Unnecessary dependency `listMountKey` 2026-10-23T06:46:06.0977585Z 2595 │ 2026-10-23T06:46:06.0977636Z ╰──── 2026-10-23T06:46:06.0977927Z  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-23T06:46:06.0978242Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.0978248Z 2026-10-23T06:46:06.0978476Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T06:46:06.0978612Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2751:7] 2026-10-23T06:46:06.0978670Z 2750 │ } 2026-10-23T06:46:06.0978856Z 2751 │ }, [expandedTurnIds, expandedWorkGroups, expandedWorkRows, settleDisclosureAfterLayout]); 2026-10-23T06:46:06.0979060Z ·  ───────┬─────── ─────────┬──────── ────────┬─────── 2026-10-23T06:46:06.0979316Z · │ │ ╰── Unnecessary dependency `expandedWorkRows` 2026-10-23T06:46:06.0979534Z · │ ╰── Unnecessary dependency `expandedWorkGroups` 2026-10-23T06:46:06.0979692Z · ╰── Unnecessary dependency `expandedTurnIds` 2026-10-23T06:46:06.0979746Z 2752 │ 2026-10-23T06:46:06.0979796Z ╰──── 2026-10-23T06:46:06.0980091Z  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-23T06:46:06.0980403Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.0980406Z 2026-10-23T06:46:06.0980593Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-23T06:46:06.0980730Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:603:9] 2026-10-23T06:46:06.0980794Z 602 │ }; 2026-10-23T06:46:06.0980914Z 603 │ }, [props.environmentId, attachment.id, httpBaseUrl]), 2026-10-23T06:46:06.0981108Z ·  ─────────┬───────── ──────┬────── ─────┬───── 2026-10-23T06:46:06.0981349Z · │ │ ╰── Unnecessary dependency `httpBaseUrl` 2026-10-23T06:46:06.0981547Z · │ ╰── Unnecessary dependency `attachment.id` 2026-10-23T06:46:06.0981715Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-23T06:46:06.0981771Z 604 │ ); 2026-10-23T06:46:06.0981824Z ╰──── 2026-10-23T06:46:06.0982193Z  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-23T06:46:06.0982540Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.0982542Z 2026-10-23T06:46:06.0982805Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T06:46:06.0982971Z ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:40:5] 2026-10-23T06:46:06.0983083Z 37 │ const [initialized, setInitialized] = useState(false); 2026-10-23T06:46:06.0983155Z 38 │ useLayoutEffect(() => { 2026-10-23T06:46:06.0983236Z ·  ───────┬─────── 2026-10-23T06:46:06.0983376Z · ╰── This is the containing effect 2026-10-23T06:46:06.0983440Z 39 │ reset(); 2026-10-23T06:46:06.0983510Z 40 │ setInitialized(true); 2026-10-23T06:46:06.0983589Z ·  ───────┬────── 2026-10-23T06:46:06.0983760Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T06:46:06.0983822Z 41 │ }, [reset]); 2026-10-23T06:46:06.0983876Z ╰──── 2026-10-23T06:46:06.0984483Z  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-23T06:46:06.0984812Z  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-23T06:46:06.0984817Z 2026-10-23T06:46:06.0985080Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T06:46:06.0985240Z ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:93:5] 2026-10-23T06:46:06.0985295Z 88 │ 2026-10-23T06:46:06.0985362Z 89 │ useEffect(() => { 2026-10-23T06:46:06.0985433Z ·  ────┬──── 2026-10-23T06:46:06.0985562Z · ╰── This is the containing effect 2026-10-23T06:46:06.0985724Z 90 │ if (!needsPreparation || !initialProjectRef.branch || waitingForProject) return; 2026-10-23T06:46:06.0985827Z 91 │ const branchName = initialProjectRef.branch; 2026-10-23T06:46:06.0985894Z 92 │ let active = true; 2026-10-23T06:46:06.0985994Z 93 │ setPendingCheckouts((count) => count + 1); 2026-10-23T06:46:06.0986086Z ·  ─────────┬───────── 2026-10-23T06:46:06.0986259Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T06:46:06.0986418Z 94 │ // Serialize replacements: ignoring a stale result cannot undo its Git mutation. 2026-10-23T06:46:06.0986468Z ╰──── 2026-10-23T06:46:06.0987069Z  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-23T06:46:06.0987442Z  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-23T06:46:06.0987473Z 2026-10-23T06:46:06.0987678Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-23T06:46:06.0987814Z ╭─[packages/client-runtime/src/state/usageAccess.ts:3:8] 2026-10-23T06:46:06.0987889Z 2 │ AuthDiagnosticsReadScope, 2026-10-23T06:46:06.0987959Z 3 │ type AuthSessionState, 2026-10-23T06:46:06.0988045Z ·  ────────┬─────── 2026-10-23T06:46:06.0988192Z · ╰── 'AuthSessionState' is imported here 2026-10-23T06:46:06.0988259Z 4 │ sessionGrantsScope, 2026-10-23T06:46:06.0988314Z ╰──── 2026-10-23T06:46:06.0988438Z  help: Consider removing this import. 2026-10-23T06:46:06.0988440Z 2026-10-23T06:46:06.0988602Z ⚠ react(immutability): This value cannot be modified 2026-10-23T06:46:06.0988771Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:111:5] 2026-10-23T06:46:06.0988827Z 107 │ ); 2026-10-23T06:46:06.0988985Z 108 │ const separationProgress = useSharedValue(props.showScrollToEnd ? 1 : 0); 2026-10-23T06:46:06.0989075Z ·  ─────────┬──────── 2026-10-23T06:46:06.0989276Z · ╰── `separationProgress` originates here 2026-10-23T06:46:06.0989332Z 109 │ 2026-10-23T06:46:06.0989399Z 110 │ useEffect(() => { 2026-10-23T06:46:06.0989575Z 111 │ separationProgress.value = withTiming(props.showScrollToEnd ? 1 : 0, CONTROL_TIMING); 2026-10-23T06:46:06.0989659Z ·  ─────────┬──────── 2026-10-23T06:46:06.0989812Z · ╰── `separationProgress` cannot be modified 2026-10-23T06:46:06.0989929Z 112 │ }, [props.showScrollToEnd, separationProgress]); 2026-10-23T06:46:06.0989986Z ╰──── 2026-10-23T06:46:06.0990250Z  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-23T06:46:06.0990558Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T06:46:06.0990561Z 2026-10-23T06:46:06.0990719Z ⚠ react(immutability): This value cannot be modified 2026-10-23T06:46:06.0990886Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5] 2026-10-23T06:46:06.0991005Z 128 │ // and repeatedly retargets the animation as it grows. 2026-10-23T06:46:06.0991122Z 129 │ const capsuleWidth = useSharedValue(null); 2026-10-23T06:46:06.0991278Z ·  ──────┬───── 2026-10-23T06:46:06.0991519Z · ╰── `capsuleWidth` originates here 2026-10-23T06:46:06.0991635Z 130 │ const measuredWidthRef = useRef(null); 2026-10-23T06:46:06.0991753Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-23T06:46:06.0991867Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-23T06:46:06.0991968Z 133 │ if (width === measuredWidthRef.current) { 2026-10-23T06:46:06.0992034Z 134 │ return; 2026-10-23T06:46:06.0992091Z 135 │ } 2026-10-23T06:46:06.0992201Z 136 │ const first = measuredWidthRef.current === null; 2026-10-23T06:46:06.0992292Z 137 │ measuredWidthRef.current = width; 2026-10-23T06:46:06.0992438Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-23T06:46:06.0992523Z ·  ──────┬───── 2026-10-23T06:46:06.0992668Z · ╰── `capsuleWidth` cannot be modified 2026-10-23T06:46:06.0992729Z 139 │ }; 2026-10-23T06:46:06.0992782Z ╰──── 2026-10-23T06:46:06.0993050Z  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-23T06:46:06.0993363Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T06:46:06.0993365Z 2026-10-23T06:46:06.0993525Z ⚠ react(immutability): This value cannot be modified 2026-10-23T06:46:06.0993696Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7] 2026-10-23T06:46:06.0993814Z 128 │ // and repeatedly retargets the animation as it grows. 2026-10-23T06:46:06.0993938Z 129 │ const capsuleWidth = useSharedValue(null); 2026-10-23T06:46:06.0994024Z ·  ──────┬───── 2026-10-23T06:46:06.0994166Z · ╰── `capsuleWidth` originates here 2026-10-23T06:46:06.0994277Z 130 │ const measuredWidthRef = useRef(null); 2026-10-23T06:46:06.0994397Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-23T06:46:06.0994506Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-23T06:46:06.0994607Z 133 │ if (width === measuredWidthRef.current) { 2026-10-23T06:46:06.0994670Z 134 │ return; 2026-10-23T06:46:06.0994729Z 135 │ } 2026-10-23T06:46:06.0994838Z 136 │ const first = measuredWidthRef.current === null; 2026-10-23T06:46:06.0994928Z 137 │ measuredWidthRef.current = width; 2026-10-23T06:46:06.0995075Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-23T06:46:06.0995136Z 139 │ }; 2026-10-23T06:46:06.0995230Z 140 │ const hasStatus = props.status !== null; 2026-10-23T06:46:06.0995367Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-23T06:46:06.0995434Z 142 │ useEffect(() => { 2026-10-23T06:46:06.0995505Z 143 │ if (!hasStatus) { 2026-10-23T06:46:06.0995596Z 144 │ measuredWidthRef.current = null; 2026-10-23T06:46:06.0995682Z 145 │ capsuleWidth.value = null; 2026-10-23T06:46:06.0995760Z ·  ──────┬───── 2026-10-23T06:46:06.0995966Z · ╰── `capsuleWidth` cannot be modified 2026-10-23T06:46:06.0996060Z 146 │ } 2026-10-23T06:46:06.0996173Z ╰──── 2026-10-23T06:46:06.0996553Z  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-23T06:46:06.0996926Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T06:46:06.0996929Z 2026-10-23T06:46:06.0997163Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-23T06:46:06.0997370Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7] 2026-10-23T06:46:06.0997539Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-23T06:46:06.0997644Z 142 │ useEffect(() => { 2026-10-23T06:46:06.0997758Z ·  ───┬─── 2026-10-23T06:46:06.0998010Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-23T06:46:06.0998114Z 143 │ if (!hasStatus) { 2026-10-23T06:46:06.0998250Z 144 │ measuredWidthRef.current = null; 2026-10-23T06:46:06.0998364Z 145 │ capsuleWidth.value = null; 2026-10-23T06:46:06.0998501Z ·  ──────┬───── 2026-10-23T06:46:06.0998647Z · ╰── This modifies `capsuleWidth` 2026-10-23T06:46:06.0998840Z 146 │ } 2026-10-23T06:46:06.0998929Z ╰──── 2026-10-23T06:46:06.0999309Z  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-23T06:46:06.0999631Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T06:46:06.0999654Z 2026-10-23T06:46:06.0999882Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-23T06:46:06.1000093Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5] 2026-10-23T06:46:06.1000245Z 130 │ const measuredWidthRef = useRef(null); 2026-10-23T06:46:06.1000400Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-23T06:46:06.1000534Z ·  ───────────────┬─────────────── 2026-10-23T06:46:06.1000834Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-23T06:46:06.1000977Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-23T06:46:06.1001117Z 133 │ if (width === measuredWidthRef.current) { 2026-10-23T06:46:06.1001205Z 134 │ return; 2026-10-23T06:46:06.1001298Z 135 │ } 2026-10-23T06:46:06.1001452Z 136 │ const first = measuredWidthRef.current === null; 2026-10-23T06:46:06.1001574Z 137 │ measuredWidthRef.current = width; 2026-10-23T06:46:06.1001737Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-23T06:46:06.1001841Z ·  ──────┬───── 2026-10-23T06:46:06.1002091Z · ╰── This modifies `capsuleWidth` 2026-10-23T06:46:06.1002182Z 139 │ }; 2026-10-23T06:46:06.1002251Z ╰──── 2026-10-23T06:46:06.1002632Z  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-23T06:46:06.1003042Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T06:46:06.1003074Z 2026-10-23T06:46:06.1003331Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T06:46:06.1003514Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:257:7] 2026-10-23T06:46:06.1003628Z 256 │ return () => cancelAnimationFrame(frame); 2026-10-23T06:46:06.1003737Z 257 │ }, [props.path, targetIndex]); 2026-10-23T06:46:06.1003866Z ·  ─────┬──── 2026-10-23T06:46:06.1004050Z · ╰── Unnecessary dependency `props.path` 2026-10-23T06:46:06.1004123Z 258 │ 2026-10-23T06:46:06.1004211Z ╰──── 2026-10-23T06:46:06.1004551Z  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-23T06:46:06.1004917Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.1004920Z 2026-10-23T06:46:06.1005152Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T06:46:06.1005398Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:293:23] 2026-10-23T06:46:06.1005499Z 292 │ 2026-10-23T06:46:06.1006967Z ·  ─────────── 2026-10-23T06:46:06.1007052Z 310 │ {body} 2026-10-23T06:46:06.1007141Z ╰──── 2026-10-23T06:46:06.1007325Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-23T06:46:06.1007328Z 2026-10-23T06:46:06.1007594Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-23T06:46:06.1007814Z ╭─[apps/mobile/src/features/threads/NewTaskContextPickerScreens.tsx:370:7] 2026-10-23T06:46:06.1007911Z 369 │ mountedRef.current = false; 2026-10-23T06:46:06.1008098Z 370 │ flow.setBranchQuery(""); 2026-10-23T06:46:06.1008200Z ·  ──┬─ 2026-10-23T06:46:06.1008383Z · ╰── Missing dependency `flow` 2026-10-23T06:46:06.1008496Z 371 │ }; 2026-10-23T06:46:06.1008606Z 372 │ }, [flow.setBranchQuery]); 2026-10-23T06:46:06.1008736Z ·  ─────────┬───────── 2026-10-23T06:46:06.1008984Z · ╰── Overly precise dependency `flow.setBranchQuery`, use `flow` instead 2026-10-23T06:46:06.1009065Z 373 │ 2026-10-23T06:46:06.1009151Z ╰──── 2026-10-23T06:46:06.1009686Z  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-23T06:46:06.1010061Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.1010064Z 2026-10-23T06:46:06.1010297Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-23T06:46:06.1010474Z ╭─[packages/client-runtime/src/state/filesystem.ts:3:8] 2026-10-23T06:46:06.1010589Z 2 │ AuthFilesystemReadScope, 2026-10-23T06:46:06.1010696Z 3 │ type AuthSessionState, 2026-10-23T06:46:06.1010788Z ·  ────────┬─────── 2026-10-23T06:46:06.1010997Z · ╰── 'AuthSessionState' is imported here 2026-10-23T06:46:06.1011181Z 4 │ type FilesystemBrowseEntry, 2026-10-23T06:46:06.1011269Z ╰──── 2026-10-23T06:46:06.1011385Z  help: Consider removing this import. 2026-10-23T06:46:06.1011399Z 2026-10-23T06:46:06.1011688Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-23T06:46:06.1011899Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:290:50] 2026-10-23T06:46:06.1011997Z 289 │ return ( 2026-10-23T06:46:06.1012171Z 290 │ 2026-10-23T06:46:06.1012301Z ·  ───────────── 2026-10-23T06:46:06.1012428Z 291 │ {props.children} 2026-10-23T06:46:06.1012521Z ╰──── 2026-10-23T06:46:06.1012788Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-23T06:46:06.1012948Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-23T06:46:06.1012951Z 2026-10-23T06:46:06.1013241Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-23T06:46:06.1013448Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:654:44] 2026-10-23T06:46:06.1013548Z 653 │ return ( 2026-10-23T06:46:06.1013686Z 654 │ 2026-10-23T06:46:06.1013829Z ·  ───────────── 2026-10-23T06:46:06.1013956Z 655 │ {props.children} 2026-10-23T06:46:06.1014107Z ╰──── 2026-10-23T06:46:06.1014370Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-23T06:46:06.1014526Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-23T06:46:06.1014529Z 2026-10-23T06:46:06.1014811Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-23T06:46:06.1015017Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:1462:55] 2026-10-23T06:46:06.1015114Z 1461 │ return ( 2026-10-23T06:46:06.1015295Z 1462 │ 2026-10-23T06:46:06.1015456Z ·  ──────────────────── 2026-10-23T06:46:06.1015611Z 1463 │ { 2026-10-23T06:46:06.1016978Z ·  ────┬──── 2026-10-23T06:46:06.1017228Z · ╰── This is the containing effect 2026-10-23T06:46:06.1017356Z 152 │ if (!controlledSelectedPath) { 2026-10-23T06:46:06.1017441Z 153 │ return; 2026-10-23T06:46:06.1017531Z 154 │ } 2026-10-23T06:46:06.1017652Z 155 │ setExpandedPaths((current) => { 2026-10-23T06:46:06.1017779Z ·  ────────┬─────── 2026-10-23T06:46:06.1017970Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T06:46:06.1018138Z 156 │ const ancestors = ancestorPaths(controlledSelectedPath); 2026-10-23T06:46:06.1018216Z ╰──── 2026-10-23T06:46:06.1018911Z  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-23T06:46:06.1019281Z  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-23T06:46:06.1019286Z 2026-10-23T06:46:06.1019563Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T06:46:06.1019766Z ╭─[apps/mobile/src/features/review/ReviewCommentComposerSheet.tsx:103:7] 2026-10-23T06:46:06.1019858Z 100 │ 2026-10-23T06:46:06.1019969Z 101 │ useEffect(() => { 2026-10-23T06:46:06.1020062Z ·  ────┬──── 2026-10-23T06:46:06.1020230Z · ╰── This is the containing effect 2026-10-23T06:46:06.1020433Z 102 │ if (!target || selectedLines.length === 0) { 2026-10-23T06:46:06.1020575Z 103 │ setHighlightedLinesById({}); 2026-10-23T06:46:06.1020745Z ·  ───────────┬─────────── 2026-10-23T06:46:06.1020989Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T06:46:06.1021086Z 104 │ return; 2026-10-23T06:46:06.1021182Z ╰──── 2026-10-23T06:46:06.1021810Z  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-23T06:46:06.1022171Z  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-23T06:46:06.1022174Z 2026-10-23T06:46:06.1022434Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-23T06:46:06.1022607Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:772:7] 2026-10-23T06:46:06.1022769Z 771 │ if (settingsSheetPresentation.isActive) { 2026-10-23T06:46:06.1022918Z 772 │ settingsRoutePresentation.present(settingsRouteSession); 2026-10-23T06:46:06.1023048Z ·  ────────────┬──────────── 2026-10-23T06:46:06.1023260Z · ╰── Missing dependency `settingsRoutePresentation` 2026-10-23T06:46:06.1023356Z 773 │ } 2026-10-23T06:46:06.1023605Z 774 │ }, [settingsRoutePresentation.present, settingsRouteSession, settingsSheetPresentation.isActive]); 2026-10-23T06:46:06.1023732Z ·  ────────────────┬──────────────── 2026-10-23T06:46:06.1024118Z · ╰── Overly precise dependency `settingsRoutePresentation.present`, use `settingsRoutePresentation` instead 2026-10-23T06:46:06.1024207Z 775 │ 2026-10-23T06:46:06.1024310Z ╰──── 2026-10-23T06:46:06.1024752Z  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-23T06:46:06.1025100Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.1025103Z 2026-10-23T06:46:06.1025299Z ⚠ react(immutability): This value cannot be modified 2026-10-23T06:46:06.1025484Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:390:5] 2026-10-23T06:46:06.1025693Z 386 │ typeof props.style.borderRadius === "number" ? props.style.borderRadius : 0; 2026-10-23T06:46:06.1025852Z 387 │ const animatedBorderRadius = useSharedValue(targetBorderRadius); 2026-10-23T06:46:06.1025986Z ·  ──────────┬───────── 2026-10-23T06:46:06.1026171Z · ╰── `animatedBorderRadius` originates here 2026-10-23T06:46:06.1026387Z 388 │ const shouldAnimate = props.animateLayout !== false && Platform.OS !== "android"; 2026-10-23T06:46:06.1026474Z 389 │ useLayoutEffect(() => { 2026-10-23T06:46:06.1026612Z 390 │ animatedBorderRadius.value = shouldAnimate 2026-10-23T06:46:06.1026741Z ·  ──────────┬───────── 2026-10-23T06:46:06.1026937Z · ╰── `animatedBorderRadius` cannot be modified 2026-10-23T06:46:06.1027052Z 391 │ ? withTiming(targetBorderRadius, { 2026-10-23T06:46:06.1027246Z ╰──── 2026-10-23T06:46:06.1027580Z  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-23T06:46:06.1027914Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T06:46:06.1027917Z 2026-10-23T06:46:06.1028230Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T06:46:06.1028458Z ╭─[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:60:5] 2026-10-23T06:46:06.1028548Z 55 │ 2026-10-23T06:46:06.1028649Z 56 │ useEffect(() => { 2026-10-23T06:46:06.1028758Z ·  ────┬──── 2026-10-23T06:46:06.1028927Z · ╰── This is the containing effect 2026-10-23T06:46:06.1029036Z 57 │ scheduler.reset(); 2026-10-23T06:46:06.1029223Z 58 │ highlightedRowIdsRef.current = new Set(); 2026-10-23T06:46:06.1029338Z 59 │ visibleChunkIndexRef.current = 0; 2026-10-23T06:46:06.1029483Z 60 │ setVisibleRange({ firstRowIndex: 0, lastRowIndex: 80 }); 2026-10-23T06:46:06.1029614Z ·  ───────┬─────── 2026-10-23T06:46:06.1029817Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T06:46:06.1029966Z 61 │ setTokensPatchJson(createEmptyTokenPatch(resetKey)); 2026-10-23T06:46:06.1030026Z ╰──── 2026-10-23T06:46:06.1030750Z  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-23T06:46:06.1031107Z  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-23T06:46:06.1031110Z 2026-10-23T06:46:06.1031350Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T06:46:06.1031550Z ╭─[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:63:7] 2026-10-23T06:46:06.1031664Z 62 │ return () => scheduler.cancel(); 2026-10-23T06:46:06.1031812Z 63 │ }, [enabled, resetKey, rows.length, scheduler]); 2026-10-23T06:46:06.1031974Z ·  ───┬─── ─────┬───── 2026-10-23T06:46:06.1032209Z · │ ╰── Unnecessary dependency `rows.length` 2026-10-23T06:46:06.1032394Z · ╰── Unnecessary dependency `enabled` 2026-10-23T06:46:06.1032472Z 64 │ 2026-10-23T06:46:06.1032560Z ╰──── 2026-10-23T06:46:06.1032889Z  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-23T06:46:06.1033235Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.1033238Z 2026-10-23T06:46:06.1033524Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T06:46:06.1033801Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:285:5] 2026-10-23T06:46:06.1034003Z 283 │ const [snoozeWakeTick, bumpSnoozeWakeTick] = useState(0); 2026-10-23T06:46:06.1034107Z 284 │ useEffect(() => { 2026-10-23T06:46:06.1034256Z ·  ────┬──── 2026-10-23T06:46:06.1034442Z · ╰── This is the containing effect 2026-10-23T06:46:06.1034564Z 285 │ setNow(new Date().toISOString()); 2026-10-23T06:46:06.1034674Z ·  ───┬── 2026-10-23T06:46:06.1034860Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T06:46:06.1035036Z 286 │ const id = setInterval(() => setNow(new Date().toISOString()), 60_000); 2026-10-23T06:46:06.1035133Z ╰──── 2026-10-23T06:46:06.1035787Z  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-23T06:46:06.1036143Z  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-23T06:46:06.1036146Z 2026-10-23T06:46:06.1036388Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T06:46:06.1036580Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:365:25] 2026-10-23T06:46:06.1036753Z 364 │ // range) the boundary string is identical and the chain would die. 2026-10-23T06:46:06.1036878Z 365 │ }, [nextSnoozeWakeAt, snoozeWakeTick]); 2026-10-23T06:46:06.1037012Z ·  ───────┬────── 2026-10-23T06:46:06.1037207Z · ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-23T06:46:06.1037371Z 366 │ const listItems = ((): readonly SidebarListItem[] => { 2026-10-23T06:46:06.1037457Z ╰──── 2026-10-23T06:46:06.1037841Z  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-23T06:46:06.1038159Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.1038201Z 2026-10-23T06:46:06.1038394Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T06:46:06.1038645Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:356:53] 2026-10-23T06:46:06.1038772Z 355 │ if (Number.isNaN(wakeAtMs)) return; 2026-10-23T06:46:06.1038953Z 356 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647); 2026-10-23T06:46:06.1039102Z ·  ─────┬──── 2026-10-23T06:46:06.1039319Z · ╰── Cannot call impure function 2026-10-23T06:46:06.1039432Z 357 │ const id = setTimeout(() => { 2026-10-23T06:46:06.1039520Z ╰──── 2026-10-23T06:46:06.1039815Z  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-23T06:46:06.1040222Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T06:46:06.1040262Z 2026-10-23T06:46:06.1040555Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T06:46:06.1040742Z ╭─[apps/mobile/src/features/threads/use-worktree-setup.ts:30:40] 2026-10-23T06:46:06.1040937Z 28 │ const snapshot = resolveWorktreeSetupSnapshot(input.threadId, query.data, live); 2026-10-23T06:46:06.1041032Z 29 │ useEffect(() => { 2026-10-23T06:46:06.1041147Z ·  ────┬──── 2026-10-23T06:46:06.1041375Z · ╰── This is the containing effect 2026-10-23T06:46:06.1041543Z 30 │ if (snapshot && snapshot !== live) setHeld({ key, snapshot }); 2026-10-23T06:46:06.1045272Z ·  ───┬─── 2026-10-23T06:46:06.1045501Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T06:46:06.1045581Z 31 │ }, [key, live, snapshot]); 2026-10-23T06:46:06.1045640Z ╰──── 2026-10-23T06:46:06.1046247Z  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-23T06:46:06.1046575Z  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-23T06:46:06.1046578Z 2026-10-23T06:46:06.1046799Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-23T06:46:06.1046943Z ╭─[packages/shared/src/composerContextLegacySend.ts:19:45] 2026-10-23T06:46:06.1047070Z 18 │ const occurrences = collectComposerContextReferences(text); 2026-10-23T06:46:06.1047181Z 19 │ for (const occurrence of [...occurrences].reverse()) { 2026-10-23T06:46:06.1047294Z ·  ─────── 2026-10-23T06:46:06.1047406Z 20 │ const record = recordsById.get(occurrence.contextId); 2026-10-23T06:46:06.1047460Z ╰──── 2026-10-23T06:46:06.1047724Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-23T06:46:06.1047726Z 2026-10-23T06:46:06.1048011Z ⚠ eslint(no-unused-vars): Variable 'useDragRegion' is declared but never used. Unused variables should start with a '_'. 2026-10-23T06:46:06.1048163Z ╭─[apps/web/src/components/preview/PreviewPanelShell.tsx:61:9] 2026-10-23T06:46:06.1048218Z 60 │ ) { 2026-10-23T06:46:06.1048389Z 61 │ const useDragRegion = isElectron && props.mode !== "sheet" && props.mode !== "embedded"; 2026-10-23T06:46:06.1048511Z ·  ──────┬────── 2026-10-23T06:46:06.1048654Z · ╰── 'useDragRegion' is declared here 2026-10-23T06:46:06.1048746Z 62 │ const isInline = props.mode === "inline"; 2026-10-23T06:46:06.1048798Z ╰──── 2026-10-23T06:46:06.1048904Z  help: Consider removing this declaration. 2026-10-23T06:46:06.1048907Z 2026-10-23T06:46:06.1049113Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T06:46:06.1049336Z ╭─[apps/mobile/src/features/review/ReviewSheet.tsx:454:7] 2026-10-23T06:46:06.1049457Z 453 │ showAuxiliaryPane("inspector"); 2026-10-23T06:46:06.1049566Z 454 │ }, [environmentId, showAuxiliaryPane, threadId]); 2026-10-23T06:46:06.1049712Z ·  ──────┬────── ────┬─── 2026-10-23T06:46:06.1049912Z · │ ╰── Unnecessary dependency `threadId` 2026-10-23T06:46:06.1050064Z · ╰── Unnecessary dependency `environmentId` 2026-10-23T06:46:06.1050126Z 455 │ const { 2026-10-23T06:46:06.1050179Z ╰──── 2026-10-23T06:46:06.1050475Z  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-23T06:46:06.1050796Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.1050802Z 2026-10-23T06:46:06.1050990Z ⚠ react(static-components): Cannot create components during render 2026-10-23T06:46:06.1051130Z ╭─[apps/mobile/src/features/review/ReviewSheet.tsx:725:20] 2026-10-23T06:46:06.1051196Z 492 │ // same check. 2026-10-23T06:46:06.1051322Z 493 │ const NativeReviewDiffView = resolveNativeReviewDiffView(); 2026-10-23T06:46:06.1051445Z ·  ─────────────┬───────────── 2026-10-23T06:46:06.1051630Z · ╰── The component is created during render here 2026-10-23T06:46:06.1051781Z 494 │ const nativeReviewDiffViewRef = useRef(null); 2026-10-23T06:46:06.1051906Z 495 │ const showcasedReviewDrawRef = useRef(null); 2026-10-23T06:46:06.1052040Z 496 │ const [isPullRefreshing, setIsPullRefreshing] = useState(false); 2026-10-23T06:46:06.1052133Z 497 │ const handlePullToRefresh = async () => { 2026-10-23T06:46:06.1052213Z 498 │ setIsPullRefreshing(true); 2026-10-23T06:46:06.1052295Z 499 │ await refreshSelectedSection(); 2026-10-23T06:46:06.1052373Z 500 │ setIsPullRefreshing(false); 2026-10-23T06:46:06.1052429Z 501 │ }; 2026-10-23T06:46:06.1052573Z 502 │ const reviewFileNavigatorRef = useRef(null); 2026-10-23T06:46:06.1052715Z 503 │ const reviewFiles = parsedDiff.kind === "files" ? parsedDiff.files : []; 2026-10-23T06:46:06.1052824Z 504 │ const fileVisibility = useReviewFileVisibility({ 2026-10-23T06:46:06.1052910Z 505 │ threadKey: reviewCache.threadKey, 2026-10-23T06:46:06.1053056Z 506 │ sectionId: selectedSection?.id ?? null, 2026-10-23T06:46:06.1053169Z 507 │ files: reviewFiles, 2026-10-23T06:46:06.1053269Z 508 │ cachedExpandedFileIds: selectedSection?.id 2026-10-23T06:46:06.1053404Z 509 │ ? reviewCache.expandedFileIdsBySection[selectedSection.id] 2026-10-23T06:46:06.1053470Z 510 │ : undefined, 2026-10-23T06:46:06.1053566Z 511 │ cachedViewedFileIds: selectedSection?.id 2026-10-23T06:46:06.1053689Z 512 │ ? reviewCache.viewedFileIdsBySection[selectedSection.id] 2026-10-23T06:46:06.1053753Z 513 │ : undefined, 2026-10-23T06:46:06.1053808Z 514 │ }); 2026-10-23T06:46:06.1054002Z 515 │ const { collapsedFileIds, toggleExpandedFile, toggleViewedFile, viewedFileIds } = fileVisibility; 2026-10-23T06:46:06.1054135Z 516 │ const commentSelection = useReviewCommentSelectionController({ 2026-10-23T06:46:06.1054200Z 517 │ environmentId, 2026-10-23T06:46:06.1054267Z 518 │ threadId, 2026-10-23T06:46:06.1054337Z 519 │ selectedSection, 2026-10-23T06:46:06.1054407Z 520 │ nativeReviewDiffData, 2026-10-23T06:46:06.1054464Z 521 │ }); 2026-10-23T06:46:06.1054568Z 522 │ const nativeBridge = useNativeReviewDiffBridge({ 2026-10-23T06:46:06.1054654Z 523 │ threadKey: reviewCache.threadKey, 2026-10-23T06:46:06.1054745Z 524 │ sectionId: selectedSection?.id ?? null, 2026-10-23T06:46:06.1054823Z 525 │ diff: selectedSection?.diff, 2026-10-23T06:46:06.1054899Z 526 │ data: nativeReviewDiffData, 2026-10-23T06:46:06.1054968Z 527 │ collapsedFileIds, 2026-10-23T06:46:06.1055031Z 528 │ viewedFileIds, 2026-10-23T06:46:06.1055143Z 529 │ selectedRowIds: commentSelection.selectedRowIds, 2026-10-23T06:46:06.1055239Z 530 │ canHighlight: parsedDiff.kind === "files", 2026-10-23T06:46:06.1055294Z 531 │ }); 2026-10-23T06:46:06.1055373Z 532 │ const showcaseReviewKey = 2026-10-23T06:46:06.1055509Z 533 │ SHOWCASE_ENABLED && parsedDiff.kind === "files" && selectedSection 2026-10-23T06:46:06.1055717Z 534 │ ? `${reviewCache.threadKey}:${selectedSection.id}:${nativeBridge.tokensResetKey}:${nativeBridge.themeId}` 2026-10-23T06:46:06.1055781Z 535 │ : null; 2026-10-23T06:46:06.1055949Z 536 │ const handleNativeDebug = (event: NativeSyntheticEvent>) => { 2026-10-23T06:46:06.1056028Z 537 │ nativeBridge.onDebug(event); 2026-10-23T06:46:06.1056086Z 538 │ if ( 2026-10-23T06:46:06.1056168Z 539 │ showcaseReviewKey === null || 2026-10-23T06:46:06.1056292Z 540 │ showcasedReviewDrawRef.current === showcaseReviewKey || 2026-10-23T06:46:06.1056404Z 541 │ !isNativeReviewDiffDrawEvent(event.nativeEvent) 2026-10-23T06:46:06.1056460Z 542 │ ) { 2026-10-23T06:46:06.1056525Z 543 │ return; 2026-10-23T06:46:06.1056582Z 544 │ } 2026-10-23T06:46:06.1056694Z 545 │ showcasedReviewDrawRef.current = showcaseReviewKey; 2026-10-23T06:46:06.1056857Z 546 │ reportShowcaseSceneRendered({ scene: "review", themeId: nativeBridge.themeId }); 2026-10-23T06:46:06.1056912Z 547 │ }; 2026-10-23T06:46:06.1056969Z 548 │ 2026-10-23T06:46:06.1057086Z 549 │ const handleSelectFile = async (fileId: string | null) => { 2026-10-23T06:46:06.1057166Z 550 │ loadVisibleFile(fileId, true); 2026-10-23T06:46:06.1057256Z 551 │ commentSelection.clearSelection(); 2026-10-23T06:46:06.1057376Z 552 │ if (fileId !== null && collapsedFileIds.includes(fileId)) { 2026-10-23T06:46:06.1057456Z 553 │ toggleExpandedFile(fileId); 2026-10-23T06:46:06.1057511Z 554 │ } 2026-10-23T06:46:06.1057624Z 555 │ const nativeView = nativeReviewDiffViewRef.current; 2026-10-23T06:46:06.1057755Z 556 │ if (!nativeView) return; 2026-10-23T06:46:06.1057878Z 557 │ const result = await settlePromise(() => 2026-10-23T06:46:06.1058053Z 558 │ fileId === null ? nativeView.scrollToTop(true) : nativeView.scrollToFile(fileId, true), 2026-10-23T06:46:06.1058109Z 559 │ ); 2026-10-23T06:46:06.1058199Z 560 │ if (AsyncResult.isFailure(result)) { 2026-10-23T06:46:06.1058379Z 561 │ console.error("[review] Failed to navigate to diff file", squashAtomCommandFailure(result)); 2026-10-23T06:46:06.1058468Z 562 │ } 2026-10-23T06:46:06.1058523Z 563 │ }; 2026-10-23T06:46:06.1058608Z 564 │ const handleVisibleFileChange = ( 2026-10-23T06:46:06.1058740Z 565 │ event: NativeSyntheticEvent<{ readonly fileId?: string | null }>, 2026-10-23T06:46:06.1058799Z 566 │ ) => { 2026-10-23T06:46:06.1058910Z 567 │ loadVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-23T06:46:06.1059086Z 568 │ reviewFileNavigatorRef.current?.setVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-23T06:46:06.1059141Z 569 │ }; 2026-10-23T06:46:06.1059221Z 570 │ const renderInspector = () => ( 2026-10-23T06:46:06.1059292Z 571 │ void handleSelectFile(fileId)} 2026-10-23T06:46:06.1059811Z 577 │ /> 2026-10-23T06:46:06.1059867Z 578 │ ); 2026-10-23T06:46:06.1059920Z 579 │ 2026-10-23T06:46:06.1060103Z 580 │ const handleNativeToggleFile = (event: NativeSyntheticEvent<{ readonly fileId?: string }>) => { 2026-10-23T06:46:06.1060196Z 581 │ const { fileId } = event.nativeEvent; 2026-10-23T06:46:06.1060263Z 582 │ if (fileId) { 2026-10-23T06:46:06.1060344Z 583 │ loadVisibleFile(fileId, true); 2026-10-23T06:46:06.1060422Z 584 │ toggleExpandedFile(fileId); 2026-10-23T06:46:06.1060477Z 585 │ } 2026-10-23T06:46:06.1060533Z 586 │ }; 2026-10-23T06:46:06.1060585Z 587 │ 2026-10-23T06:46:06.1060674Z 588 │ const handleNativeToggleViewedFile = ( 2026-10-23T06:46:06.1060795Z 589 │ event: NativeSyntheticEvent<{ readonly fileId?: string }>, 2026-10-23T06:46:06.1060853Z 590 │ ) => { 2026-10-23T06:46:06.1060939Z 591 │ const { fileId } = event.nativeEvent; 2026-10-23T06:46:06.1061000Z 592 │ if (fileId) { 2026-10-23T06:46:06.1061076Z 593 │ toggleViewedFile(fileId); 2026-10-23T06:46:06.1061132Z 594 │ } 2026-10-23T06:46:06.1061185Z 595 │ }; 2026-10-23T06:46:06.1061244Z 596 │ 2026-10-23T06:46:06.1061319Z 597 │ const parsedDiffNotice = 2026-10-23T06:46:06.1061483Z 598 │ parsedDiff.kind === "files" || parsedDiff.kind === "raw" ? parsedDiff.notice : null; 2026-10-23T06:46:06.1061604Z 599 │ const hasCachedSelectedDiff = selectedSection?.diff != null; 2026-10-23T06:46:06.1061763Z 600 │ const hasAnyCachedDiff = reviewSections.some((section) => section.diff != null); 2026-10-23T06:46:06.1061883Z 601 │ const sectionMenu = buildReviewSectionMenu(reviewSections); 2026-10-23T06:46:06.1062043Z 602 │ const { showConnectionNotice, showSectionToolbar } = resolveReviewAvailability({ 2026-10-23T06:46:06.1062152Z 603 │ hasEnvironmentPresentation: environment.isReady, 2026-10-23T06:46:06.1062255Z 604 │ isEnvironmentConnected: isEnvironmentReady, 2026-10-23T06:46:06.1062327Z 605 │ hasCachedSelectedDiff, 2026-10-23T06:46:06.1062395Z 606 │ hasAnyCachedDiff, 2026-10-23T06:46:06.1062514Z 607 │ }); 2026-10-23T06:46:06.1062631Z 608 │ const handleRetryEnvironment = () => { 2026-10-23T06:46:06.1062719Z 609 │ void retryEnvironment(environmentId); 2026-10-23T06:46:06.1062773Z 610 │ }; 2026-10-23T06:46:06.1062858Z 611 │ const handleReturnToThread = () => { 2026-10-23T06:46:06.1062938Z 612 │ if (navigation.canGoBack()) { 2026-10-23T06:46:06.1063009Z 613 │ navigation.goBack(); 2026-10-23T06:46:06.1063070Z 614 │ return; 2026-10-23T06:46:06.1063123Z 615 │ } 2026-10-23T06:46:06.1063205Z 616 │ navigation.navigate("Thread", { 2026-10-23T06:46:06.1063294Z 617 │ environmentId: String(environmentId), 2026-10-23T06:46:06.1063372Z 618 │ threadId: String(threadId), 2026-10-23T06:46:06.1063427Z 619 │ }); 2026-10-23T06:46:06.1063481Z 620 │ }; 2026-10-23T06:46:06.1063565Z 621 │ const androidHeaderSubtitle = [ 2026-10-23T06:46:06.1063639Z 622 │ selectedSection?.title, 2026-10-23T06:46:06.1063720Z 623 │ headerDiffSummary.additions, 2026-10-23T06:46:06.1063799Z 624 │ headerDiffSummary.deletions, 2026-10-23T06:46:06.1063853Z 625 │ ] 2026-10-23T06:46:06.1063957Z 626 │ .filter((part): part is string => Boolean(part)) 2026-10-23T06:46:06.1064023Z 627 │ .join(" · "); 2026-10-23T06:46:06.1064076Z 628 │ 2026-10-23T06:46:06.1064154Z 629 │ const showChangedFilesPane = 2026-10-23T06:46:06.1064225Z 630 │ !showConnectionNotice && 2026-10-23T06:46:06.1064299Z 631 │ selectedSection !== null && 2026-10-23T06:46:06.1064379Z 632 │ parsedDiff.kind === "files" && 2026-10-23T06:46:06.1064459Z 633 │ NativeReviewDiffView !== null; 2026-10-23T06:46:06.1064629Z 634 │ useRegisterWorkspaceInspector(showChangedFilesPane ? renderInspector : undefined); 2026-10-23T06:46:06.1064804Z 635 │ const showChangedFilesToggle = panes.supportsAuxiliaryPane && showChangedFilesPane; 2026-10-23T06:46:06.1064859Z 636 │ 2026-10-23T06:46:06.1064932Z 637 │ const listHeader = (() => { 2026-10-23T06:46:06.1065016Z 638 │ const children: ReactElement[] = []; 2026-10-23T06:46:06.1065069Z 639 │ 2026-10-23T06:46:06.1065131Z 640 │ if (error) { 2026-10-23T06:46:06.1065199Z 641 │ children.push( 2026-10-23T06:46:06.1065258Z 642 │ 2026-10-23T06:46:06.1065917Z 649 │ Review unavailable 2026-10-23T06:46:06.1066079Z 650 │ {error} 2026-10-23T06:46:06.1066140Z 651 │ , 2026-10-23T06:46:06.1066197Z 652 │ ); 2026-10-23T06:46:06.1066249Z 653 │ } 2026-10-23T06:46:06.1066302Z 654 │ 2026-10-23T06:46:06.1066374Z 655 │ if (parsedDiffNotice) { 2026-10-23T06:46:06.1066537Z 656 │ children.push(); 2026-10-23T06:46:06.1066590Z 657 │ } 2026-10-23T06:46:06.1066642Z 658 │ 2026-10-23T06:46:06.1066720Z 659 │ if (children.length === 0) { 2026-10-23T06:46:06.1066783Z 660 │ return null; 2026-10-23T06:46:06.1066837Z 661 │ } 2026-10-23T06:46:06.1066889Z 662 │ 2026-10-23T06:46:06.1067019Z 663 │ return <>{children}; 2026-10-23T06:46:06.1067102Z 664 │ })(); 2026-10-23T06:46:06.1067173Z 665 │ const headerSubtitle = [ 2026-10-23T06:46:06.1067254Z 666 │ headerDiffSummary.additions, 2026-10-23T06:46:06.1067333Z 667 │ headerDiffSummary.deletions, 2026-10-23T06:46:06.1067412Z 668 │ pendingReviewCommentCount > 0 2026-10-23T06:46:06.1067587Z 669 │ ? `${pendingReviewCommentCount} comment${pendingReviewCommentCount === 1 ? "" : "s"}` 2026-10-23T06:46:06.1067648Z 670 │ : null, 2026-10-23T06:46:06.1067701Z 671 │ ] 2026-10-23T06:46:06.1067764Z 672 │ .filter(Boolean) 2026-10-23T06:46:06.1067828Z 673 │ .join(" · "); 2026-10-23T06:46:06.1067963Z 674 │ const headerTitleText = selectedSection?.title ?? "Review changes"; 2026-10-23T06:46:06.1068015Z 675 │ 2026-10-23T06:46:06.1068074Z 676 │ return ( 2026-10-23T06:46:06.1068129Z 677 │ <> 2026-10-23T06:46:06.1068199Z 678 │ 2026-10-23T06:46:06.1069721Z 694 │ 2026-10-23T06:46:06.1069786Z 695 │ 2026-10-23T06:46:06.1069909Z 696 │ 2026-10-23T06:46:06.1069990Z 697 │ {showConnectionNotice ? ( 2026-10-23T06:46:06.1070131Z 698 │ 2026-10-23T06:46:06.1070220Z 699 │ 2026-10-23T06:46:06.1071233Z 711 │ 2026-10-23T06:46:06.1071391Z 712 │ ) : selectedSection && parsedDiff.kind === "files" && NativeReviewDiffView ? ( 2026-10-23T06:46:06.1071452Z 713 │ 2026-10-23T06:46:06.1072006Z 719 │ 2026-10-23T06:46:06.1072362Z 723 │ {listHeader} 2026-10-23T06:46:06.1072483Z 724 │ 2026-10-23T06:46:06.1072566Z 725 │ ( 2026-10-23T06:46:06.1075387Z 223 │ 2026-10-23T06:46:06.1075496Z ·  ─────────────── 2026-10-23T06:46:06.1075591Z 224 │ {lineIndex > 0 ? "\n" : ""} 2026-10-23T06:46:06.1075642Z ╰──── 2026-10-23T06:46:06.1075791Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-23T06:46:06.1075794Z 2026-10-23T06:46:06.1075988Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T06:46:06.1076140Z ╭─[apps/mobile/src/features/review/ReviewCommentCard.tsx:227:25] 2026-10-23T06:46:06.1076216Z 226 │ { 2026-10-23T06:46:06.1077386Z ·  ────┬──── 2026-10-23T06:46:06.1077519Z · ╰── This is the containing effect 2026-10-23T06:46:06.1077701Z 213 │ const inserted = ownerKey ? readComposerDraftSelection(ownerKey, draftMessage) : null; 2026-10-23T06:46:06.1077766Z 214 │ if (inserted) { 2026-10-23T06:46:06.1077842Z 215 │ setSelection((current) => 2026-10-23T06:46:06.1077921Z ·  ──────┬───── 2026-10-23T06:46:06.1078094Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T06:46:06.1078263Z 216 │ current.start === inserted.start && current.end === inserted.end ? current : inserted, 2026-10-23T06:46:06.1078315Z ╰──── 2026-10-23T06:46:06.1078956Z  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-23T06:46:06.1079288Z  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-23T06:46:06.1079293Z 2026-10-23T06:46:06.1079554Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T06:46:06.1079717Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:296:7] 2026-10-23T06:46:06.1079795Z 284 │ }, [hasWorkspaceSnapshot]); 2026-10-23T06:46:06.1079860Z 285 │ useEffect(() => { 2026-10-23T06:46:06.1079932Z ·  ────┬──── 2026-10-23T06:46:06.1080062Z · ╰── This is the containing effect 2026-10-23T06:46:06.1080209Z 286 │ if (!environmentId || !projectCwd || !selectedProviderInstanceId) return; 2026-10-23T06:46:06.1080419Z 287 │ const key = `${environmentId}:${selectedProviderInstanceId}:${projectCwd}`; 2026-10-23T06:46:06.1080519Z 288 │ const now = Date.now(); 2026-10-23T06:46:06.1080632Z 289 │ const lastRequest = workspaceRefreshKeyRef.current; 2026-10-23T06:46:06.1080690Z 290 │ if ( 2026-10-23T06:46:06.1080767Z 291 │ lastRequest?.key === key && 2026-10-23T06:46:06.1080909Z 292 │ now - lastRequest.requestedAt < PROVIDER_WORKSPACE_SNAPSHOT_TTL_MS 2026-10-23T06:46:06.1080963Z 293 │ ) 2026-10-23T06:46:06.1081024Z 294 │ return; 2026-10-23T06:46:06.1081204Z 295 │ if (hasCurrentProviderWorkspaceSnapshot(selectedProviderStatus, projectCwd, now)) { 2026-10-23T06:46:06.1081291Z 296 │ setWorkspaceRefreshRetry(null); 2026-10-23T06:46:06.1081385Z ·  ────────────┬─────────── 2026-10-23T06:46:06.1081563Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T06:46:06.1081630Z 297 │ return; 2026-10-23T06:46:06.1081684Z ╰──── 2026-10-23T06:46:06.1082288Z  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-23T06:46:06.1082612Z  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-23T06:46:06.1082615Z 2026-10-23T06:46:06.1082819Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T06:46:06.1082983Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:326:5] 2026-10-23T06:46:06.1083043Z 325 │ }, [ 2026-10-23T06:46:06.1083108Z 326 │ draftMessage, 2026-10-23T06:46:06.1083186Z ·  ──────┬───── 2026-10-23T06:46:06.1083333Z · ╰── Unnecessary dependency `draftMessage` 2026-10-23T06:46:06.1083397Z 327 │ environmentId, 2026-10-23T06:46:06.1083449Z ╰──── 2026-10-23T06:46:06.1083746Z  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-23T06:46:06.1084060Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.1084062Z 2026-10-23T06:46:06.1084326Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T06:46:06.1084513Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:107:5] 2026-10-23T06:46:06.1084567Z 104 │ 2026-10-23T06:46:06.1084632Z 105 │ useEffect(() => { 2026-10-23T06:46:06.1084705Z ·  ────┬──── 2026-10-23T06:46:06.1084834Z · ╰── This is the containing effect 2026-10-23T06:46:06.1084913Z 106 │ clearReviewCommentTarget(); 2026-10-23T06:46:06.1085011Z 107 │ setPendingNativeCommentSelection(null); 2026-10-23T06:46:06.1085119Z ·  ────────────────┬─────────────── 2026-10-23T06:46:06.1085294Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T06:46:06.1085368Z 108 │ }, [selectedSection?.id]); 2026-10-23T06:46:06.1085419Z ╰──── 2026-10-23T06:46:06.1086077Z  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-23T06:46:06.1086434Z  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-23T06:46:06.1086436Z 2026-10-23T06:46:06.1086694Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T06:46:06.1086879Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:112:7] 2026-10-23T06:46:06.1086933Z 109 │ 2026-10-23T06:46:06.1087002Z 110 │ useEffect(() => { 2026-10-23T06:46:06.1087074Z ·  ────┬──── 2026-10-23T06:46:06.1087204Z · ╰── This is the containing effect 2026-10-23T06:46:06.1087292Z 111 │ if (activeCommentTarget === null) { 2026-10-23T06:46:06.1087393Z 112 │ setPendingNativeCommentSelection(null); 2026-10-23T06:46:06.1087501Z ·  ────────────────┬─────────────── 2026-10-23T06:46:06.1087679Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T06:46:06.1087735Z 113 │ } 2026-10-23T06:46:06.1087788Z ╰──── 2026-10-23T06:46:06.1088395Z  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-23T06:46:06.1088742Z  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-23T06:46:06.1088745Z 2026-10-23T06:46:06.1088949Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T06:46:06.1089133Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:108:7] 2026-10-23T06:46:06.1089231Z 107 │ setPendingNativeCommentSelection(null); 2026-10-23T06:46:06.1089303Z 108 │ }, [selectedSection?.id]); 2026-10-23T06:46:06.1089390Z ·  ─────────┬───────── 2026-10-23T06:46:06.1089560Z · ╰── Unnecessary dependency `selectedSection?.id` 2026-10-23T06:46:06.1089616Z 109 │ 2026-10-23T06:46:06.1089666Z ╰──── 2026-10-23T06:46:06.1089962Z  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-23T06:46:06.1090277Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.1090280Z 2026-10-23T06:46:06.1090542Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-23T06:46:06.1090674Z ╭─[packages/provider-grok/src/server/adapter.ts:408:7] 2026-10-23T06:46:06.1090726Z 407 │ 2026-10-23T06:46:06.1090797Z 408 │ const layer: Layer.Layer< 2026-10-23T06:46:06.1090919Z ·  ──┬── 2026-10-23T06:46:06.1091076Z · ╰── 'layer' is declared here 2026-10-23T06:46:06.1091168Z 409 │ ProviderAdapter.ProviderAdapterV2, 2026-10-23T06:46:06.1091221Z ╰──── 2026-10-23T06:46:06.1091325Z  help: Consider removing this declaration. 2026-10-23T06:46:06.1091328Z 2026-10-23T06:46:06.1091805Z ⚠ 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-23T06:46:06.1091983Z ╭─[apps/mobile/src/features/agent-awareness/remoteRegistration.test.ts:223:5] 2026-10-23T06:46:06.1092055Z 222 │ let idlePasses = 0; 2026-10-23T06:46:06.1092208Z 223 │ ╭─▶ for (;;) { 2026-10-23T06:46:06.1092351Z 224 │ │ yield* Effect.promise(() => Promise.resolve()); 2026-10-23T06:46:06.1092497Z 225 │ │ const pending = backgroundRuntime.pending.shift(); 2026-10-23T06:46:06.1092594Z 226 │ │ if (!pending) { 2026-10-23T06:46:06.1092690Z 227 │ │ idlePasses++; 2026-10-23T06:46:06.1092796Z 228 │ │ if (idlePasses >= 3) { 2026-10-23T06:46:06.1092881Z 229 │ │ return; 2026-10-23T06:46:06.1092961Z 230 │ │ } 2026-10-23T06:46:06.1093049Z 231 │ │ continue; 2026-10-23T06:46:06.1093126Z 232 │ │ } 2026-10-23T06:46:06.1093219Z 233 │ │ idlePasses = 0; 2026-10-23T06:46:06.1093341Z 234 │ │ const exit = yield* Effect.exit( 2026-10-23T06:46:06.1093559Z 235 │ │ pending.operation as Effect.Effect, 2026-10-23T06:46:06.1093636Z 236 │ │ ); 2026-10-23T06:46:06.1093742Z 237 │ │ yield* Effect.sync(() => { 2026-10-23T06:46:06.1093848Z 238 │ │ pending.resolve(exit); 2026-10-23T06:46:06.1093924Z 239 │ │ }); 2026-10-23T06:46:06.1094053Z 240 │ ╰─▶ } 2026-10-23T06:46:06.1094110Z 241 │ }, 2026-10-23T06:46:06.1094163Z ╰──── 2026-10-23T06:46:06.1094165Z 2026-10-23T06:46:06.1094456Z ⚠ eslint(no-unused-vars): Variable 'layerUnavailable' is declared but never used. Unused variables should start with a '_'. 2026-10-23T06:46:06.1094606Z ╭─[apps/server/src/orchestration-v2/Orchestrator.ts:12316:7] 2026-10-23T06:46:06.1094660Z 12315 │ 2026-10-23T06:46:06.1094803Z 12316 │ const layerUnavailable: Layer.Layer = Layer.succeed( 2026-10-23T06:46:06.1094890Z ·  ────────┬─────── 2026-10-23T06:46:06.1095041Z · ╰── 'layerUnavailable' is declared here 2026-10-23T06:46:06.1095108Z 12317 │ OrchestratorV2, 2026-10-23T06:46:06.1095161Z ╰──── 2026-10-23T06:46:06.1095266Z  help: Consider removing this declaration. 2026-10-23T06:46:06.1095269Z 2026-10-23T06:46:06.1095529Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T06:46:06.1095734Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:400:5] 2026-10-23T06:46:06.1095826Z 398 │ 2026-10-23T06:46:06.1095891Z 399 │ useEffect(() => { 2026-10-23T06:46:06.1095963Z ·  ────┬──── 2026-10-23T06:46:06.1096092Z · ╰── This is the containing effect 2026-10-23T06:46:06.1096185Z 400 │ setInspectorSelection((current) => { 2026-10-23T06:46:06.1096272Z ·  ──────────┬────────── 2026-10-23T06:46:06.1096446Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T06:46:06.1096547Z 401 │ if (props.renderInspector === undefined) { 2026-10-23T06:46:06.1096600Z ╰──── 2026-10-23T06:46:06.1097211Z  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-23T06:46:06.1097540Z  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-23T06:46:06.1097543Z 2026-10-23T06:46:06.1097761Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-23T06:46:06.1097912Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:528:24] 2026-10-23T06:46:06.1098074Z 527 │ const inspectorHeaderInset = Platform.OS === "ios" ? 0 : safeAreaInsets.top; 2026-10-23T06:46:06.1098248Z 528 │ ╭─▶ const GitInspector = () => ( 2026-10-23T06:46:06.1098351Z 529 │ │ 2026-10-23T06:46:06.1098999Z 534 │ ╰─▶ ); 2026-10-23T06:46:06.1099079Z 535 │ const FilesInspector = () => 2026-10-23T06:46:06.1099130Z ╰──── 2026-10-23T06:46:06.1099353Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-23T06:46:06.1099356Z 2026-10-23T06:46:06.1099576Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-23T06:46:06.1099729Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:535:26] 2026-10-23T06:46:06.1099788Z 534 │ ); 2026-10-23T06:46:06.1099954Z 535 │ ╭─▶ const FilesInspector = () => 2026-10-23T06:46:06.1100107Z 536 │ │ selectedThread !== null && selectedThreadCwd !== null ? ( 2026-10-23T06:46:06.1100213Z 537 │ │ 2026-10-23T06:46:06.1101279Z 545 │ ╰─▶ ) : null; 2026-10-23T06:46:06.1101434Z 546 │ const RouteInspector = () => props.renderInspector?.(inspectorHeaderInset); 2026-10-23T06:46:06.1101486Z ╰──── 2026-10-23T06:46:06.1101703Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-23T06:46:06.1101706Z 2026-10-23T06:46:06.1101851Z ⚠ react(refs): Cannot access refs during render 2026-10-23T06:46:06.1102018Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:122:38] 2026-10-23T06:46:06.1102181Z 121 │ const audioLevelsRef = useRef(Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-23T06:46:06.1102302Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-23T06:46:06.1102426Z ·  ───────────┬────────── 2026-10-23T06:46:06.1102600Z · ╰── Cannot access ref value during render 2026-10-23T06:46:06.1102722Z 123 │ const sessionRef = useRef(null); 2026-10-23T06:46:06.1102773Z ╰──── 2026-10-23T06:46:06.1103256Z  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-23T06:46:06.1103553Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T06:46:06.1103557Z 2026-10-23T06:46:06.1103701Z ⚠ react(refs): Cannot access refs during render 2026-10-23T06:46:06.1103860Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:8] 2026-10-23T06:46:06.1103914Z 125 │ 2026-10-23T06:46:06.1104024Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-23T06:46:06.1104110Z ·  ─────────┬──────── 2026-10-23T06:46:06.1104261Z · ╰── Cannot access ref value during render 2026-10-23T06:46:06.1104364Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-23T06:46:06.1104414Z ╰──── 2026-10-23T06:46:06.1104940Z  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-23T06:46:06.1105268Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T06:46:06.1105271Z 2026-10-23T06:46:06.1105414Z ⚠ react(refs): Cannot access refs during render 2026-10-23T06:46:06.1105570Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:7] 2026-10-23T06:46:06.1105621Z 125 │ 2026-10-23T06:46:06.1105729Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-23T06:46:06.1105816Z ·  ─────────┬───────── 2026-10-23T06:46:06.1105970Z · ╰── Cannot access ref value during render 2026-10-23T06:46:06.1106074Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-23T06:46:06.1106126Z ╰──── 2026-10-23T06:46:06.1106594Z  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-23T06:46:06.1106885Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T06:46:06.1106888Z 2026-10-23T06:46:06.1107031Z ⚠ react(refs): Cannot access refs during render 2026-10-23T06:46:06.1107192Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:31] 2026-10-23T06:46:06.1107247Z 125 │ 2026-10-23T06:46:06.1107353Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-23T06:46:06.1107468Z ·  ─────────┬───────── 2026-10-23T06:46:06.1107635Z · ╰── Cannot access ref value during render 2026-10-23T06:46:06.1107735Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-23T06:46:06.1107787Z ╰──── 2026-10-23T06:46:06.1108254Z  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-23T06:46:06.1108573Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T06:46:06.1108579Z 2026-10-23T06:46:06.1108723Z ⚠ react(refs): Cannot access refs during render 2026-10-23T06:46:06.1108881Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:30] 2026-10-23T06:46:06.1108933Z 125 │ 2026-10-23T06:46:06.1109040Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-23T06:46:06.1109209Z ·  ──────────┬───────── 2026-10-23T06:46:06.1109375Z · ╰── Cannot access ref value during render 2026-10-23T06:46:06.1109475Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-23T06:46:06.1109527Z ╰──── 2026-10-23T06:46:06.1110056Z  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-23T06:46:06.1110389Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T06:46:06.1110392Z 2026-10-23T06:46:06.1110535Z ⚠ react(refs): Cannot access refs during render 2026-10-23T06:46:06.1110693Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:127:46] 2026-10-23T06:46:06.1110804Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-23T06:46:06.1110998Z 127 │ ╭─▶ const recorder = createLazyVoiceRecorder({ 2026-10-23T06:46:06.1111178Z 128 │ │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-23T06:46:06.1111307Z 129 │ │ onStatus: (status: RecordingStatus) => { 2026-10-23T06:46:06.1111461Z 130 │ │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-23T06:46:06.1111579Z 131 │ │ isFinished: status.isFinished, 2026-10-23T06:46:06.1111759Z 132 │ │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-23T06:46:06.1111865Z 133 │ │ error: status.error, 2026-10-23T06:46:06.1111963Z 134 │ │ url: status.url, 2026-10-23T06:46:06.1112043Z 135 │ │ }); 2026-10-23T06:46:06.1112120Z 136 │ │ }, 2026-10-23T06:46:06.1112324Z 137 │ │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-23T06:46:06.1112437Z 138 │ │ selectInput: (inputs) => { 2026-10-23T06:46:06.1112589Z 139 │ │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-23T06:46:06.1112736Z 140 │ │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-23T06:46:06.1112902Z 141 │ │ const known = microphoneOrder(preferences.value.microphones); 2026-10-23T06:46:06.1113043Z 142 │ │ const order = rememberMicrophones(known, inputs); 2026-10-23T06:46:06.1113145Z 143 │ │ if (order !== known) { 2026-10-23T06:46:06.1113282Z 144 │ │ registry.set(updateMobilePreferencesAtom, { 2026-10-23T06:46:06.1113404Z 145 │ │ transform: (current) => ({ 2026-10-23T06:46:06.1113613Z 146 │ │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-23T06:46:06.1113701Z 147 │ │ }), 2026-10-23T06:46:06.1113782Z 148 │ │ }); 2026-10-23T06:46:06.1113861Z 149 │ │ } 2026-10-23T06:46:06.1114000Z 150 │ │ return preferredMicrophoneInput(inputs, order); 2026-10-23T06:46:06.1114077Z 151 │ │ }, 2026-10-23T06:46:06.1114208Z 152 │ ├─▶ }); 2026-10-23T06:46:06.1114447Z · ╰──── Passing a ref to a function may read its value during render 2026-10-23T06:46:06.1114670Z 153 │ recorderRef.current = recorder; 2026-10-23T06:46:06.1114779Z ╰──── 2026-10-23T06:46:06.1115242Z  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-23T06:46:06.1115537Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T06:46:06.1115540Z 2026-10-23T06:46:06.1115685Z ⚠ react(refs): Cannot access refs during render 2026-10-23T06:46:06.1115844Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:153:16] 2026-10-23T06:46:06.1115902Z 152 │ }); 2026-10-23T06:46:06.1115983Z 153 │ recorderRef.current = recorder; 2026-10-23T06:46:06.1116100Z ·  ─────┬─────────┬─── 2026-10-23T06:46:06.1116288Z · │ ╰── Cannot update ref value during render 2026-10-23T06:46:06.1116407Z · ╰── This value is a ref 2026-10-23T06:46:06.1116510Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-23T06:46:06.1116562Z ╰──── 2026-10-23T06:46:06.1117030Z  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-23T06:46:06.1117321Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T06:46:06.1117324Z 2026-10-23T06:46:06.1117473Z ⚠ react(refs): Cannot access refs during render 2026-10-23T06:46:06.1117633Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:48] 2026-10-23T06:46:06.1117721Z 153 │ recorderRef.current = recorder; 2026-10-23T06:46:06.1117914Z 154 │ ╭─▶ sessionRef.current = new VoiceInputSession({ 2026-10-23T06:46:06.1118001Z 155 │ │ recorder, 2026-10-23T06:46:06.1118129Z 156 │ │ getTranscriber: getLocalVoiceTranscriber, 2026-10-23T06:46:06.1118247Z 157 │ │ requestPermission: async () => { 2026-10-23T06:46:06.1118454Z 158 │ │ const permission = await requestRecordingPermissionsAsync(); 2026-10-23T06:46:06.1118650Z 159 │ │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-23T06:46:06.1118730Z 160 │ │ }, 2026-10-23T06:46:06.1118873Z 161 │ │ configureRecording: configureVoiceRecordingAudio, 2026-10-23T06:46:06.1119009Z 162 │ │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-23T06:46:06.1119144Z 163 │ │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-23T06:46:06.1119254Z 164 │ │ onStateChange: (nextState) => 2026-10-23T06:46:06.1119347Z 165 │ │ setState({ 2026-10-23T06:46:06.1119449Z 166 │ │ state: nextState, 2026-10-23T06:46:06.1119587Z 167 │ │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-23T06:46:06.1119775Z 168 │ │ label: sessionRef.current?.label ?? null, 2026-10-23T06:46:06.1119894Z 169 │ │ }), 2026-10-23T06:46:06.1120022Z 170 │ ├─▶ }); 2026-10-23T06:46:06.1120220Z · ╰──── Cannot access ref value during render 2026-10-23T06:46:06.1120276Z 171 │ } 2026-10-23T06:46:06.1120329Z ╰──── 2026-10-23T06:46:06.1120795Z  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-23T06:46:06.1121091Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T06:46:06.1121101Z 2026-10-23T06:46:06.1121245Z ⚠ react(refs): Cannot access refs during render 2026-10-23T06:46:06.1121402Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:15] 2026-10-23T06:46:06.1121484Z 153 │ recorderRef.current = recorder; 2026-10-23T06:46:06.1121587Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-23T06:46:06.1121699Z ·  ─────┬────────┬─── 2026-10-23T06:46:06.1121882Z · │ ╰── Cannot update ref value during render 2026-10-23T06:46:06.1122000Z · ╰── This value is a ref 2026-10-23T06:46:06.1122064Z 155 │ recorder, 2026-10-23T06:46:06.1122116Z ╰──── 2026-10-23T06:46:06.1122588Z  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-23T06:46:06.1122882Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T06:46:06.1122885Z 2026-10-23T06:46:06.1123029Z ⚠ react(refs): Cannot access refs during render 2026-10-23T06:46:06.1123189Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:7] 2026-10-23T06:46:06.1123276Z 184 │ return () => subscription.remove(); 2026-10-23T06:46:06.1123340Z 185 │ }, [controller]); 2026-10-23T06:46:06.1123416Z ·  ─────┬──── 2026-10-23T06:46:06.1123565Z · ╰── Cannot access ref value during render 2026-10-23T06:46:06.1123621Z 186 │ 2026-10-23T06:46:06.1123692Z ╰──── 2026-10-23T06:46:06.1124154Z  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-23T06:46:06.1124445Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T06:46:06.1124448Z 2026-10-23T06:46:06.1124593Z ⚠ react(refs): Cannot access refs during render 2026-10-23T06:46:06.1124749Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:6] 2026-10-23T06:46:06.1124888Z 184 │ return () => subscription.remove(); 2026-10-23T06:46:06.1124990Z 185 │ }, [controller]); 2026-10-23T06:46:06.1125067Z ·  ──────┬───── 2026-10-23T06:46:06.1125208Z · ╰── Cannot access ref value during render 2026-10-23T06:46:06.1125261Z 186 │ 2026-10-23T06:46:06.1125314Z ╰──── 2026-10-23T06:46:06.1125780Z  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-23T06:46:06.1126069Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T06:46:06.1126072Z 2026-10-23T06:46:06.1126218Z ⚠ react(refs): Cannot access refs during render 2026-10-23T06:46:06.1126376Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:6] 2026-10-23T06:46:06.1126432Z 191 │ }, 2026-10-23T06:46:06.1126504Z 192 │ [controller, recorder], 2026-10-23T06:46:06.1126577Z ·  ─────┬──── 2026-10-23T06:46:06.1126721Z · ╰── Cannot access ref value during render 2026-10-23T06:46:06.1126778Z 193 │ ); 2026-10-23T06:46:06.1126829Z ╰──── 2026-10-23T06:46:06.1127293Z  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-23T06:46:06.1127587Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T06:46:06.1127592Z 2026-10-23T06:46:06.1127734Z ⚠ react(refs): Cannot access refs during render 2026-10-23T06:46:06.1127890Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:175:20] 2026-10-23T06:46:06.1127982Z 174 │ const controller = session.controller; 2026-10-23T06:46:06.1128067Z 175 │ const recorder = recorderRef.current; 2026-10-23T06:46:06.1128172Z ·  ─────────┬───────── 2026-10-23T06:46:06.1128330Z · ╰── Cannot access ref value during render 2026-10-23T06:46:06.1128383Z 176 │ 2026-10-23T06:46:06.1128459Z ╰──── 2026-10-23T06:46:06.1128932Z  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-23T06:46:06.1129223Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T06:46:06.1129225Z 2026-10-23T06:46:06.1129368Z ⚠ react(refs): Cannot access refs during render 2026-10-23T06:46:06.1129522Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:5] 2026-10-23T06:46:06.1129578Z 191 │ }, 2026-10-23T06:46:06.1129651Z 192 │ [controller, recorder], 2026-10-23T06:46:06.1129740Z ·  ───────────┬────────── 2026-10-23T06:46:06.1129886Z · ╰── Cannot access ref value during render 2026-10-23T06:46:06.1130003Z 193 │ ); 2026-10-23T06:46:06.1130089Z ╰──── 2026-10-23T06:46:06.1130555Z  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-23T06:46:06.1130844Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T06:46:06.1130847Z 2026-10-23T06:46:06.1130988Z ⚠ react(refs): Cannot access refs during render 2026-10-23T06:46:06.1131145Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:20] 2026-10-23T06:46:06.1131237Z 245 │ return () => clearInterval(intervalId); 2026-10-23T06:46:06.1131355Z 246 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-23T06:46:06.1131445Z ·  ─────┬──── 2026-10-23T06:46:06.1131602Z · ╰── Cannot access ref value during render 2026-10-23T06:46:06.1131655Z 247 │ 2026-10-23T06:46:06.1131707Z ╰──── 2026-10-23T06:46:06.1132168Z  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-23T06:46:06.1132456Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T06:46:06.1132459Z 2026-10-23T06:46:06.1132601Z ⚠ react(refs): Cannot access refs during render 2026-10-23T06:46:06.1132761Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:6] 2026-10-23T06:46:06.1132854Z 245 │ return () => clearInterval(intervalId); 2026-10-23T06:46:06.1132962Z 246 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-23T06:46:06.1133094Z ·  ────────────────────────┬─────────────────────── 2026-10-23T06:46:06.1133252Z · ╰── Cannot access ref value during render 2026-10-23T06:46:06.1133305Z 247 │ 2026-10-23T06:46:06.1133355Z ╰──── 2026-10-23T06:46:06.1133817Z  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-23T06:46:06.1134172Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T06:46:06.1134204Z 2026-10-23T06:46:06.1134348Z ⚠ react(refs): Cannot access refs during render 2026-10-23T06:46:06.1134505Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:261:5] 2026-10-23T06:46:06.1134572Z 260 │ setOwnerFocused, 2026-10-23T06:46:06.1134633Z 261 │ session, 2026-10-23T06:46:06.1134705Z ·  ───┬─── 2026-10-23T06:46:06.1134841Z · ╰── Cannot access ref value during render 2026-10-23T06:46:06.1134901Z 262 │ stop, 2026-10-23T06:46:06.1134954Z ╰──── 2026-10-23T06:46:06.1135424Z  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-23T06:46:06.1135715Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T06:46:06.1135717Z 2026-10-23T06:46:06.1135858Z ⚠ react(refs): Cannot access refs during render 2026-10-23T06:46:06.1136015Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:251:10] 2026-10-23T06:46:06.1136070Z 250 │ 2026-10-23T06:46:06.1136211Z 251 │ ╭─▶ return { 2026-10-23T06:46:06.1136422Z 252 │ │ isAvailable: getLocalVoiceTranscriber() !== null || getNativeShowcaseScene() !== null, 2026-10-23T06:46:06.1136508Z 253 │ │ state, 2026-10-23T06:46:06.1136601Z 254 │ │ audioLevels, 2026-10-23T06:46:06.1136696Z 255 │ │ elapsedSeconds, 2026-10-23T06:46:06.1136825Z 256 │ │ isBusy: voiceInputBlocksSubmission(state), 2026-10-23T06:46:06.1136907Z 257 │ │ ownerKey, 2026-10-23T06:46:06.1136985Z 258 │ │ label, 2026-10-23T06:46:06.1137075Z 259 │ │ focusedOwners, 2026-10-23T06:46:06.1137168Z 260 │ │ setOwnerFocused, 2026-10-23T06:46:06.1137249Z 261 │ │ session, 2026-10-23T06:46:06.1137328Z 262 │ │ stop, 2026-10-23T06:46:06.1137408Z 263 │ │ cancel, 2026-10-23T06:46:06.1137542Z 264 │ ├─▶ }; 2026-10-23T06:46:06.1137744Z · ╰──── Cannot access ref value during render 2026-10-23T06:46:06.1137799Z 265 │ } 2026-10-23T06:46:06.1137852Z ╰──── 2026-10-23T06:46:06.1138317Z  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-23T06:46:06.1138631Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T06:46:06.1138634Z 2026-10-23T06:46:06.1138792Z ⚠ react(immutability): This value cannot be modified 2026-10-23T06:46:06.1139009Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7] 2026-10-23T06:46:06.1139201Z 121 │ const audioLevelsRef = useRef(Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-23T06:46:06.1139324Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-23T06:46:06.1139405Z ·  ─────┬───── 2026-10-23T06:46:06.1139541Z · ╰── `audioLevels` originates here 2026-10-23T06:46:06.1139660Z 123 │ const sessionRef = useRef(null); 2026-10-23T06:46:06.1139804Z 124 │ const recorderRef = useRef | null>(null); 2026-10-23T06:46:06.1139857Z 125 │ 2026-10-23T06:46:06.1139964Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-23T06:46:06.1140064Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-23T06:46:06.1140207Z 128 │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-23T06:46:06.1140305Z 129 │ onStatus: (status: RecordingStatus) => { 2026-10-23T06:46:06.1140426Z 130 │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-23T06:46:06.1140516Z 131 │ isFinished: status.isFinished, 2026-10-23T06:46:06.1140659Z 132 │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-23T06:46:06.1140733Z 133 │ error: status.error, 2026-10-23T06:46:06.1140801Z 134 │ url: status.url, 2026-10-23T06:46:06.1140860Z 135 │ }); 2026-10-23T06:46:06.1140916Z 136 │ }, 2026-10-23T06:46:06.1141080Z 137 │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-23T06:46:06.1141158Z 138 │ selectInput: (inputs) => { 2026-10-23T06:46:06.1141288Z 139 │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-23T06:46:06.1141402Z 140 │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-23T06:46:06.1141536Z 141 │ const known = microphoneOrder(preferences.value.microphones); 2026-10-23T06:46:06.1141645Z 142 │ const order = rememberMicrophones(known, inputs); 2026-10-23T06:46:06.1141717Z 143 │ if (order !== known) { 2026-10-23T06:46:06.1141822Z 144 │ registry.set(updateMobilePreferencesAtom, { 2026-10-23T06:46:06.1141905Z 145 │ transform: (current) => ({ 2026-10-23T06:46:06.1142078Z 146 │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-23T06:46:06.1142141Z 147 │ }), 2026-10-23T06:46:06.1142201Z 148 │ }); 2026-10-23T06:46:06.1142257Z 149 │ } 2026-10-23T06:46:06.1142367Z 150 │ return preferredMicrophoneInput(inputs, order); 2026-10-23T06:46:06.1142431Z 151 │ }, 2026-10-23T06:46:06.1142488Z 152 │ }); 2026-10-23T06:46:06.1142569Z 153 │ recorderRef.current = recorder; 2026-10-23T06:46:06.1142671Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-23T06:46:06.1142731Z 155 │ recorder, 2026-10-23T06:46:06.1142830Z 156 │ getTranscriber: getLocalVoiceTranscriber, 2026-10-23T06:46:06.1142914Z 157 │ requestPermission: async () => { 2026-10-23T06:46:06.1143046Z 158 │ const permission = await requestRecordingPermissionsAsync(); 2026-10-23T06:46:06.1143203Z 159 │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-23T06:46:06.1143260Z 160 │ }, 2026-10-23T06:46:06.1143373Z 161 │ configureRecording: configureVoiceRecordingAudio, 2026-10-23T06:46:06.1143479Z 162 │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-23T06:46:06.1143636Z 163 │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-23T06:46:06.1143764Z 164 │ onStateChange: (nextState) => 2026-10-23T06:46:06.1143830Z 165 │ setState({ 2026-10-23T06:46:06.1143900Z 166 │ state: nextState, 2026-10-23T06:46:06.1144005Z 167 │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-23T06:46:06.1144105Z 168 │ label: sessionRef.current?.label ?? null, 2026-10-23T06:46:06.1144165Z 169 │ }), 2026-10-23T06:46:06.1144220Z 170 │ }); 2026-10-23T06:46:06.1144273Z 171 │ } 2026-10-23T06:46:06.1144325Z 172 │ 2026-10-23T06:46:06.1144411Z 173 │ const session = sessionRef.current; 2026-10-23T06:46:06.1144499Z 174 │ const controller = session.controller; 2026-10-23T06:46:06.1144583Z 175 │ const recorder = recorderRef.current; 2026-10-23T06:46:06.1144635Z 176 │ 2026-10-23T06:46:06.1144708Z 177 │ useEffect(() => { 2026-10-23T06:46:06.1144860Z 178 │ const subscription = AppState.addEventListener("change", (nextState) => { 2026-10-23T06:46:06.1144999Z 179 │ // iOS reports `inactive` while its permission dialog is open. Only the 2026-10-23T06:46:06.1145141Z 180 │ // real background state cancels preparation; recorder status handles 2026-10-23T06:46:06.1145247Z 181 │ // calls and route interruptions during capture. 2026-10-23T06:46:06.1145382Z 182 │ if (nextState === "background") controller.appMovedToBackground(); 2026-10-23T06:46:06.1145437Z 183 │ }); 2026-10-23T06:46:06.1145522Z 184 │ return () => subscription.remove(); 2026-10-23T06:46:06.1145587Z 185 │ }, [controller]); 2026-10-23T06:46:06.1145639Z 186 │ 2026-10-23T06:46:06.1145698Z 187 │ useEffect( 2026-10-23T06:46:06.1145760Z 188 │ () => () => { 2026-10-23T06:46:06.1145832Z 189 │ controller.dispose(); 2026-10-23T06:46:06.1145905Z 190 │ recorder.release(); 2026-10-23T06:46:06.1145963Z 191 │ }, 2026-10-23T06:46:06.1146035Z 192 │ [controller, recorder], 2026-10-23T06:46:06.1146090Z 193 │ ); 2026-10-23T06:46:06.1146141Z 194 │ 2026-10-23T06:46:06.1146204Z 195 │ useEffect(() => { 2026-10-23T06:46:06.1146299Z 196 │ if (state.phase !== "recording") return; 2026-10-23T06:46:06.1146350Z 197 │ 2026-10-23T06:46:06.1146498Z 198 │ const tag = `voice-input:${keepAwakeId}:${++keepAwakeSessionRef.current}`; 2026-10-23T06:46:06.1146604Z 199 │ const activation = activateKeepAwakeAsync(tag); 2026-10-23T06:46:06.1146684Z 200 │ void activation.catch(() => {}); 2026-10-23T06:46:06.1146751Z 201 │ return () => { 2026-10-23T06:46:06.1146900Z 202 │ // Release after activation settles, even if the recording ends immediately. 2026-10-23T06:46:06.1147046Z 203 │ void activation.then(() => deactivateKeepAwake(tag)).catch(() => {}); 2026-10-23T06:46:06.1147104Z 204 │ }; 2026-10-23T06:46:06.1147183Z 205 │ }, [keepAwakeId, state.phase]); 2026-10-23T06:46:06.1147234Z 206 │ 2026-10-23T06:46:06.1147297Z 207 │ useEffect(() => { 2026-10-23T06:46:06.1147431Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-23T06:46:06.1147482Z 209 │ 2026-10-23T06:46:06.1147604Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-23T06:46:06.1147758Z 211 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-23T06:46:06.1147861Z 212 │ audioLevels.value = audioLevelsRef.current; 2026-10-23T06:46:06.1147938Z ·  ─────┬───── 2026-10-23T06:46:06.1148078Z · ╰── `audioLevels` cannot be modified 2026-10-23T06:46:06.1148195Z 213 │ } 2026-10-23T06:46:06.1148283Z ╰──── 2026-10-23T06:46:06.1148567Z  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-23T06:46:06.1148879Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T06:46:06.1148882Z 2026-10-23T06:46:06.1149085Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-23T06:46:06.1149473Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7] 2026-10-23T06:46:06.1149527Z 206 │ 2026-10-23T06:46:06.1149590Z 207 │ useEffect(() => { 2026-10-23T06:46:06.1149669Z ·  ───┬─── 2026-10-23T06:46:06.1149893Z · ╰── This function may (indirectly) reassign or modify `audioLevels` after render 2026-10-23T06:46:06.1150033Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-23T06:46:06.1150084Z 209 │ 2026-10-23T06:46:06.1150204Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-23T06:46:06.1150357Z 211 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-23T06:46:06.1150459Z 212 │ audioLevels.value = audioLevelsRef.current; 2026-10-23T06:46:06.1150535Z ·  ─────┬───── 2026-10-23T06:46:06.1150670Z · ╰── This modifies `audioLevels` 2026-10-23T06:46:06.1150725Z 213 │ } 2026-10-23T06:46:06.1150777Z ╰──── 2026-10-23T06:46:06.1151123Z  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-23T06:46:06.1151433Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T06:46:06.1151436Z 2026-10-23T06:46:06.1151912Z ⚠ 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-23T06:46:06.1152086Z ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:566:7] 2026-10-23T06:46:06.1152189Z 565 │ let afterSequence = created[0]!.sequence; 2026-10-23T06:46:06.1152388Z 566 │ ╭─▶ for (let index = 1; index <= 32; index += 1) { 2026-10-23T06:46:06.1152492Z 567 │ │ const nextEvent = { 2026-10-23T06:46:06.1152651Z 568 │ │ id: EventId.make(`event:foundation-stream-race:${index}`), 2026-10-23T06:46:06.1152785Z 569 │ │ type: "thread.metadata-updated" as const, 2026-10-23T06:46:06.1152875Z 570 │ │ threadId, 2026-10-23T06:46:06.1152981Z 571 │ │ providerInstanceId, 2026-10-23T06:46:06.1153081Z 572 │ │ occurredAt: now, 2026-10-23T06:46:06.1153230Z 573 │ │ payload: { ...thread, title: `Race update ${index}` }, 2026-10-23T06:46:06.1153359Z 574 │ │ } satisfies OrchestrationV2DomainEvent; 2026-10-23T06:46:06.1153551Z 575 │ │ const reader = yield* eventSink 2026-10-23T06:46:06.1153712Z 576 │ │ .stream({ threadId, afterSequence }) 2026-10-23T06:46:06.1153842Z 577 │ │ .pipe(Stream.runHead, Effect.forkChild); 2026-10-23T06:46:06.1153947Z 578 │ │ yield* Effect.yieldNow; 2026-10-23T06:46:06.1154110Z 579 │ │ const written = yield* eventSink.write({ events: [nextEvent] }); 2026-10-23T06:46:06.1154239Z 580 │ │ const received = yield* Fiber.join(reader); 2026-10-23T06:46:06.1154354Z 581 │ │ if (Option.isNone(received)) { 2026-10-23T06:46:06.1154555Z 582 │ │ return yield* Effect.die("The event stream ended before delivering the live event."); 2026-10-23T06:46:06.1154634Z 583 │ │ } 2026-10-23T06:46:06.1154801Z 584 │ │ assert.equal(received.value.sequence, written[0]?.sequence); 2026-10-23T06:46:06.1154953Z 585 │ │ assert.equal(received.value.event.id, nextEvent.id); 2026-10-23T06:46:06.1155083Z 586 │ │ afterSequence = received.value.sequence; 2026-10-23T06:46:06.1155214Z 587 │ ╰─▶ } 2026-10-23T06:46:06.1155273Z 588 │ }), 2026-10-23T06:46:06.1155326Z ╰──── 2026-10-23T06:46:06.1155328Z 2026-10-23T06:46:06.1155801Z ⚠ 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-23T06:46:06.1155981Z ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:2327:9] 2026-10-23T06:46:06.1156064Z 2326 │ let settled = false; 2026-10-23T06:46:06.1156225Z 2327 │ ╭─▶ while (!settled) { 2026-10-23T06:46:06.1156384Z 2328 │ │ settled = (yield* outbox.listByCommandId(commandId)).every( 2026-10-23T06:46:06.1156515Z 2329 │ │ (effect) => effect.status === "succeeded", 2026-10-23T06:46:06.1156598Z 2330 │ │ ); 2026-10-23T06:46:06.1156723Z 2331 │ │ if (!settled) yield* Effect.yieldNow; 2026-10-23T06:46:06.1156860Z 2332 │ ╰─▶ } 2026-10-23T06:46:06.1156978Z 2333 │ }).pipe(Effect.provide(layerWorker), Effect.scoped); 2026-10-23T06:46:06.1157030Z ╰──── 2026-10-23T06:46:06.1157033Z 2026-10-23T06:46:06.1157303Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T06:46:06.1157468Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5] 2026-10-23T06:46:06.1157532Z 259 │ .join("|"); 2026-10-23T06:46:06.1157596Z 260 │ useEffect(() => { 2026-10-23T06:46:06.1157670Z ·  ────┬──── 2026-10-23T06:46:06.1157801Z · ╰── This is the containing effect 2026-10-23T06:46:06.1157862Z 261 │ stop(); 2026-10-23T06:46:06.1157930Z ·  ──┬─ 2026-10-23T06:46:06.1158095Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T06:46:06.1158163Z 262 │ }, [orderVersion]); 2026-10-23T06:46:06.1158216Z ╰──── 2026-10-23T06:46:06.1158924Z  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-23T06:46:06.1159282Z  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-23T06:46:06.1159285Z 2026-10-23T06:46:06.1159503Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-23T06:46:06.1159667Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5] 2026-10-23T06:46:06.1159732Z 260 │ useEffect(() => { 2026-10-23T06:46:06.1159792Z 261 │ stop(); 2026-10-23T06:46:06.1159864Z ·  ──┬─ 2026-10-23T06:46:06.1159992Z · ╰── Missing dependency `stop` 2026-10-23T06:46:06.1160057Z 262 │ }, [orderVersion]); 2026-10-23T06:46:06.1160138Z ·  ──────┬───── 2026-10-23T06:46:06.1160284Z · ╰── Unnecessary dependency `orderVersion` 2026-10-23T06:46:06.1160346Z 263 │ useEffect( 2026-10-23T06:46:06.1160398Z ╰──── 2026-10-23T06:46:06.1160824Z  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-23T06:46:06.1161144Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.1161150Z 2026-10-23T06:46:06.1161296Z ⚠ react(refs): Cannot access refs during render 2026-10-23T06:46:06.1161456Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:96:9] 2026-10-23T06:46:06.1161533Z 95 │ const latest = useRef(props); 2026-10-23T06:46:06.1161603Z 96 │ latest.current = props; 2026-10-23T06:46:06.1161708Z ·  ───┬──────┬─── 2026-10-23T06:46:06.1161887Z · │ ╰── Cannot update ref value during render 2026-10-23T06:46:06.1161999Z · ╰── This value is a ref 2026-10-23T06:46:06.1162069Z 97 │ const gesture = useMemo( 2026-10-23T06:46:06.1162121Z ╰──── 2026-10-23T06:46:06.1162597Z  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-23T06:46:06.1162893Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T06:46:06.1162896Z 2026-10-23T06:46:06.1163039Z ⚠ react(refs): Cannot access refs during render 2026-10-23T06:46:06.1163201Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:104:18] 2026-10-23T06:46:06.1163268Z 103 │ .runOnJS(true) 2026-10-23T06:46:06.1163369Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-23T06:46:06.1163486Z ·  ───────────────┬────────────── 2026-10-23T06:46:06.1163748Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T06:46:06.1163918Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-23T06:46:06.1163970Z ╰──── 2026-10-23T06:46:06.1164439Z  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-23T06:46:06.1164733Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T06:46:06.1164735Z 2026-10-23T06:46:06.1164880Z ⚠ react(refs): Cannot access refs during render 2026-10-23T06:46:06.1165045Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:105:19] 2026-10-23T06:46:06.1165148Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-23T06:46:06.1165277Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-23T06:46:06.1165422Z ·  ──────────────────────────┬───────────────────────── 2026-10-23T06:46:06.1165635Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T06:46:06.1165760Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-23T06:46:06.1165811Z ╰──── 2026-10-23T06:46:06.1166285Z  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-23T06:46:06.1166581Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T06:46:06.1166583Z 2026-10-23T06:46:06.1166730Z ⚠ react(refs): Cannot access refs during render 2026-10-23T06:46:06.1166888Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:106:16] 2026-10-23T06:46:06.1167017Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-23T06:46:06.1167141Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-23T06:46:06.1167283Z ·  ──────────────────────────┬───────────────────────── 2026-10-23T06:46:06.1167557Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T06:46:06.1167738Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-23T06:46:06.1167789Z ╰──── 2026-10-23T06:46:06.1168253Z  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-23T06:46:06.1168565Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T06:46:06.1168568Z 2026-10-23T06:46:06.1168713Z ⚠ react(refs): Cannot access refs during render 2026-10-23T06:46:06.1168871Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:107:21] 2026-10-23T06:46:06.1168998Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-23T06:46:06.1169125Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-23T06:46:06.1169264Z ·  ───────────────────────┬────────────────────── 2026-10-23T06:46:06.1169471Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T06:46:06.1169539Z 108 │ [props.disabled], 2026-10-23T06:46:06.1169590Z ╰──── 2026-10-23T06:46:06.1170055Z  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-23T06:46:06.1170348Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T06:46:06.1170354Z 2026-10-23T06:46:06.1170497Z ⚠ react(refs): Cannot access refs during render 2026-10-23T06:46:06.1170656Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:249:9] 2026-10-23T06:46:06.1170770Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-23T06:46:06.1170876Z 249 │ latest.current = { rows, planners, moveThread }; 2026-10-23T06:46:06.1170980Z ·  ───┬──────┬─── 2026-10-23T06:46:06.1171160Z · │ ╰── Cannot update ref value during render 2026-10-23T06:46:06.1171275Z · ╰── This value is a ref 2026-10-23T06:46:06.1171330Z 250 │ 2026-10-23T06:46:06.1171386Z ╰──── 2026-10-23T06:46:06.1171853Z  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-23T06:46:06.1172144Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T06:46:06.1172146Z 2026-10-23T06:46:06.1172291Z ⚠ react(refs): Cannot access refs during render 2026-10-23T06:46:06.1172451Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:247:22] 2026-10-23T06:46:06.1172569Z 246 │ const [preview, setPreview] = useState(null); 2026-10-23T06:46:06.1172743Z 247 │ const translateY = useRef(new Animated.Value(0)).current; 2026-10-23T06:46:06.1172903Z ·  ──────────────────┬────────────────── 2026-10-23T06:46:06.1173071Z · ╰── Cannot access ref value during render 2026-10-23T06:46:06.1173181Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-23T06:46:06.1173233Z ╰──── 2026-10-23T06:46:06.1173696Z  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-23T06:46:06.1173987Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T06:46:06.1173990Z 2026-10-23T06:46:06.1174163Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T06:46:06.1174326Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:324:16] 2026-10-23T06:46:06.1174391Z 323 │ update(0); 2026-10-23T06:46:06.1174473Z 324 │ let last = performance.now(); 2026-10-23T06:46:06.1174569Z ·  ────────┬──────── 2026-10-23T06:46:06.1174709Z · ╰── Cannot call impure function 2026-10-23T06:46:06.1174778Z 325 │ const tick = () => { 2026-10-23T06:46:06.1174829Z ╰──── 2026-10-23T06:46:06.1175130Z  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-23T06:46:06.1175430Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T06:46:06.1175435Z 2026-10-23T06:46:06.1175623Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-23T06:46:06.1175781Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:99:15] 2026-10-23T06:46:06.1175841Z  98 │ () => 2026-10-23T06:46:06.1175906Z  99 │ Gesture.Pan() 2026-10-23T06:46:06.1175982Z ·  ─┬─ 2026-10-23T06:46:06.1176113Z · ╰── `Pan` may be a component 2026-10-23T06:46:06.1176195Z 100 │ .enabled(!props.disabled) 2026-10-23T06:46:06.1176245Z ╰──── 2026-10-23T06:46:06.1176527Z  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-23T06:46:06.1176980Z  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-23T06:46:06.1176982Z 2026-10-23T06:46:06.1177169Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-23T06:46:06.1177328Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:108:5] 2026-10-23T06:46:06.1177394Z 103 │ .runOnJS(true) 2026-10-23T06:46:06.1177497Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-23T06:46:06.1177585Z ·  ───┬── 2026-10-23T06:46:06.1178081Z · ╰── 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-23T06:46:06.1178246Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-23T06:46:06.1178370Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-23T06:46:06.1178516Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-23T06:46:06.1178583Z 108 │ [props.disabled], 2026-10-23T06:46:06.1178665Z ·  ────────┬─────── 2026-10-23T06:46:06.1178853Z · ╰── This dependency list is missing values used by the callback 2026-10-23T06:46:06.1178908Z 109 │ ); 2026-10-23T06:46:06.1178960Z ╰──── 2026-10-23T06:46:06.1179171Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-23T06:46:06.1179488Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.1179491Z 2026-10-23T06:46:06.1179649Z ⚠ react(immutability): This value cannot be modified 2026-10-23T06:46:06.1179822Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:93:5] 2026-10-23T06:46:06.1179878Z 90 │ }) { 2026-10-23T06:46:06.1179992Z 91 │ const rotation = useSharedValue(props.hidden ? 1 : 0); 2026-10-23T06:46:06.1180071Z ·  ────┬─── 2026-10-23T06:46:06.1180205Z · ╰── `rotation` originates here 2026-10-23T06:46:06.1180275Z 92 │ useLayoutEffect(() => { 2026-10-23T06:46:06.1180423Z 93 │ rotation.value = withTiming(props.hidden ? 1 : 0, TOOLBAR_FLIP_TIMING); 2026-10-23T06:46:06.1180497Z ·  ────┬─── 2026-10-23T06:46:06.1180628Z · ╰── `rotation` cannot be modified 2026-10-23T06:46:06.1180705Z 94 │ }, [props.hidden, rotation]); 2026-10-23T06:46:06.1180756Z ╰──── 2026-10-23T06:46:06.1181022Z  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-23T06:46:06.1181327Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T06:46:06.1181330Z 2026-10-23T06:46:06.1181487Z ⚠ react(immutability): This value cannot be modified 2026-10-23T06:46:06.1181662Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:269:5] 2026-10-23T06:46:06.1181760Z 266 │ const variant = props.variant ?? "plain"; 2026-10-23T06:46:06.1181895Z 267 │ const loadingVisibility = useSharedValue(props.loading ? 1 : 0); 2026-10-23T06:46:06.1181983Z ·  ────────┬──────── 2026-10-23T06:46:06.1182130Z · ╰── `loadingVisibility` originates here 2026-10-23T06:46:06.1182199Z 268 │ useLayoutEffect(() => { 2026-10-23T06:46:06.1182358Z 269 │ loadingVisibility.value = withTiming(props.loading ? 1 : 0, DICTATION_TIMING); 2026-10-23T06:46:06.1182442Z ·  ────────┬──────── 2026-10-23T06:46:06.1182590Z · ╰── `loadingVisibility` cannot be modified 2026-10-23T06:46:06.1182682Z 270 │ }, [loadingVisibility, props.loading]); 2026-10-23T06:46:06.1182734Z ╰──── 2026-10-23T06:46:06.1183055Z  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-23T06:46:06.1183394Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T06:46:06.1183396Z 2026-10-23T06:46:06.1183550Z ⚠ react(immutability): This value cannot be modified 2026-10-23T06:46:06.1183719Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:328:5] 2026-10-23T06:46:06.1183774Z 325 │ }) { 2026-10-23T06:46:06.1183937Z 326 │ const recordingVisibility = useSharedValue(props.phase === "recording" ? 1 : 0); 2026-10-23T06:46:06.1184025Z ·  ─────────┬───────── 2026-10-23T06:46:06.1184182Z · ╰── `recordingVisibility` originates here 2026-10-23T06:46:06.1184255Z 327 │ useLayoutEffect(() => { 2026-10-23T06:46:06.1184443Z 328 │ recordingVisibility.value = withTiming(props.phase === "recording" ? 1 : 0, DICTATION_TIMING); 2026-10-23T06:46:06.1184528Z ·  ─────────┬───────── 2026-10-23T06:46:06.1184682Z · ╰── `recordingVisibility` cannot be modified 2026-10-23T06:46:06.1184772Z 329 │ }, [props.phase, recordingVisibility]); 2026-10-23T06:46:06.1184824Z ╰──── 2026-10-23T06:46:06.1185083Z  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-23T06:46:06.1185388Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T06:46:06.1185396Z 2026-10-23T06:46:06.1185594Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T06:46:06.1185739Z ╭─[apps/mobile/modules/t3-source-text/src/SourceText.tsx:36:9] 2026-10-23T06:46:06.1185827Z 35 │ { 2026-10-23T06:46:06.1187243Z 68 │ progress.value = withTiming(expanded ? 1 : 0, MORPH_TIMING); 2026-10-23T06:46:06.1187314Z ·  ────┬─── 2026-10-23T06:46:06.1187446Z · ╰── `progress` cannot be modified 2026-10-23T06:46:06.1187516Z 69 │ }, [expanded, progress]); 2026-10-23T06:46:06.1187565Z ╰──── 2026-10-23T06:46:06.1187835Z  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-23T06:46:06.1188142Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T06:46:06.1188145Z 2026-10-23T06:46:06.1188290Z ⚠ react(refs): Cannot access refs during render 2026-10-23T06:46:06.1188488Z ╭─[apps/mobile/src/features/voice-input/useVoiceInputController.ts:27:14] 2026-10-23T06:46:06.1188571Z 26 │ const latestInput = useRef(input); 2026-10-23T06:46:06.1188647Z 27 │ latestInput.current = input; 2026-10-23T06:46:06.1188760Z ·  ─────┬─────────┬─── 2026-10-23T06:46:06.1188943Z · │ ╰── Cannot update ref value during render 2026-10-23T06:46:06.1189065Z · ╰── This value is a ref 2026-10-23T06:46:06.1189183Z 28 │ const mounted = useRef(true); 2026-10-23T06:46:06.1189235Z ╰──── 2026-10-23T06:46:06.1189707Z  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-23T06:46:06.1189998Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T06:46:06.1190001Z 2026-10-23T06:46:06.1190187Z ⚠ react(static-components): Cannot create components during render 2026-10-23T06:46:06.1190349Z ╭─[apps/mobile/src/features/terminal/NativeTerminalSurface.tsx:234:10] 2026-10-23T06:46:06.1190442Z 196 │ const { onInput, onResize } = props; 2026-10-23T06:46:06.1190592Z 197 │ const NativeTerminalSurfaceView = resolveNativeTerminalSurfaceView(); 2026-10-23T06:46:06.1190724Z ·  ────────────────┬─────────────── 2026-10-23T06:46:06.1190914Z · ╰── The component is created during render here 2026-10-23T06:46:06.1191043Z 198 │ const hasNativeSurface = Boolean(NativeTerminalSurfaceView); 2026-10-23T06:46:06.1191095Z 199 │ 2026-10-23T06:46:06.1191165Z 200 │ useEffect(() => { 2026-10-23T06:46:06.1191253Z 201 │ terminalDebugLog("native:surface", { 2026-10-23T06:46:06.1191338Z 202 │ terminalKey: props.terminalKey, 2026-10-23T06:46:06.1191414Z 203 │ native: hasNativeSurface, 2026-10-23T06:46:06.1191550Z 204 │ hardwareKeyRevision: getNativeTerminalHardwareKeyRevision(), 2026-10-23T06:46:06.1191802Z 205 │ bufferLen: props.buffer.length, 2026-10-23T06:46:06.1191923Z 206 │ isRunning: props.isRunning, 2026-10-23T06:46:06.1191979Z 207 │ }); 2026-10-23T06:46:06.1192139Z 208 │ }, [hasNativeSurface, props.buffer.length, props.isRunning, props.terminalKey]); 2026-10-23T06:46:06.1192227Z 209 │ const handleNativeInput = useCallback( 2026-10-23T06:46:06.1192343Z 210 │ (event: NativeSyntheticEvent) => { 2026-10-23T06:46:06.1192439Z 211 │ if (!props.isRunning || props.readOnly) { 2026-10-23T06:46:06.1192500Z 212 │ return; 2026-10-23T06:46:06.1192556Z 213 │ } 2026-10-23T06:46:06.1192649Z 214 │ terminalDebugLog("native:onInput", { 2026-10-23T06:46:06.1192798Z 215 │ codes: Array.from(event.nativeEvent.data, (char) => char.codePointAt(0)), 2026-10-23T06:46:06.1192856Z 216 │ }); 2026-10-23T06:46:06.1192949Z 217 │ onInput(event.nativeEvent.data); 2026-10-23T06:46:06.1193007Z 218 │ }, 2026-10-23T06:46:06.1193105Z 219 │ [onInput, props.isRunning, props.readOnly], 2026-10-23T06:46:06.1193158Z 220 │ ); 2026-10-23T06:46:06.1193249Z 221 │ const handleNativeResize = useCallback( 2026-10-23T06:46:06.1193364Z 222 │ (event: NativeSyntheticEvent) => { 2026-10-23T06:46:06.1193426Z 223 │ onResize({ 2026-10-23T06:46:06.1193511Z 224 │ cols: event.nativeEvent.cols, 2026-10-23T06:46:06.1193593Z 225 │ rows: event.nativeEvent.rows, 2026-10-23T06:46:06.1193649Z 226 │ }); 2026-10-23T06:46:06.1193704Z 227 │ }, 2026-10-23T06:46:06.1193765Z 228 │ [onResize], 2026-10-23T06:46:06.1193821Z 229 │ ); 2026-10-23T06:46:06.1193872Z 230 │ 2026-10-23T06:46:06.1193956Z 231 │ if (NativeTerminalSurfaceView) { 2026-10-23T06:46:06.1194021Z 232 │ return ( 2026-10-23T06:46:06.1194104Z 233 │ 2026-10-23T06:46:06.1194183Z 234 │ ({ key: input.targetKey, location: candidate })); 2026-10-23T06:46:06.1195828Z 113 │ useEffect(() => { 2026-10-23T06:46:06.1195900Z ·  ────┬──── 2026-10-23T06:46:06.1196030Z · ╰── This is the containing effect 2026-10-23T06:46:06.1196196Z 114 │ if (entry.key === input.targetKey && (entry.location !== null || candidate === null)) { 2026-10-23T06:46:06.1196258Z 115 │ return; 2026-10-23T06:46:06.1196313Z 116 │ } 2026-10-23T06:46:06.1196430Z 117 │ setEntry({ key: input.targetKey, location: candidate }); 2026-10-23T06:46:06.1196562Z ·  ────┬─── 2026-10-23T06:46:06.1196764Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T06:46:06.1196888Z 118 │ }, [candidate, entry.key, entry.location, input.targetKey]); 2026-10-23T06:46:06.1196940Z ╰──── 2026-10-23T06:46:06.1197550Z  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-23T06:46:06.1197875Z  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-23T06:46:06.1197878Z 2026-10-23T06:46:06.1198089Z ⚠ eslint(no-unsafe-optional-chaining): Unsafe usage of optional chaining 2026-10-23T06:46:06.1198261Z ╭─[apps/server/src/orchestration-v2/ThreadLaunchService.test.ts:1783:8] 2026-10-23T06:46:06.1198329Z 1782 │ assert.equal( 2026-10-23T06:46:06.1198499Z 1783 │ (stored.context?.records[0] as { attachmentId: string }).attachmentId, 2026-10-23T06:46:06.1198603Z ·  ────────────────────────── 2026-10-23T06:46:06.1198684Z 1784 │ stored.attachments[0]?.id, 2026-10-23T06:46:06.1198735Z ╰──── 2026-10-23T06:46:06.1198907Z  help: If this short-circuits with 'undefined' the evaluation will throw TypeError 2026-10-23T06:46:06.1198909Z 2026-10-23T06:46:06.1199170Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-23T06:46:06.1199344Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts:10566:7] 2026-10-23T06:46:06.1199402Z 10565 │ 2026-10-23T06:46:06.1199474Z 10566 │ const layer: Layer.Layer< 2026-10-23T06:46:06.1199547Z ·  ──┬── 2026-10-23T06:46:06.1199675Z · ╰── 'layer' is declared here 2026-10-23T06:46:06.1199769Z 10567 │ ProviderAdapter.ProviderAdapterV2, 2026-10-23T06:46:06.1199822Z ╰──── 2026-10-23T06:46:06.1199927Z  help: Consider removing this declaration. 2026-10-23T06:46:06.1199929Z 2026-10-23T06:46:06.1200187Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T06:46:06.1200358Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:643:5] 2026-10-23T06:46:06.1200416Z 638 │ 2026-10-23T06:46:06.1200485Z 639 │ useEffect(() => { 2026-10-23T06:46:06.1200557Z ·  ────┬──── 2026-10-23T06:46:06.1200685Z · ╰── This is the containing effect 2026-10-23T06:46:06.1200795Z 640 │ if (pendingLaunchEntry.key === launchTargetKey) { 2026-10-23T06:46:06.1201952Z 641 │ return; 2026-10-23T06:46:06.1202016Z 642 │ } 2026-10-23T06:46:06.1202090Z 643 │ setPendingLaunchEntry({ 2026-10-23T06:46:06.1202179Z ·  ──────────┬────────── 2026-10-23T06:46:06.1202357Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T06:46:06.1202427Z 644 │ key: launchTargetKey, 2026-10-23T06:46:06.1202478Z ╰──── 2026-10-23T06:46:06.1203158Z  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-23T06:46:06.1203521Z  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-23T06:46:06.1203524Z 2026-10-23T06:46:06.1203784Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T06:46:06.1203956Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:653:5] 2026-10-23T06:46:06.1204008Z 648 │ 2026-10-23T06:46:06.1204074Z 649 │ useEffect(() => { 2026-10-23T06:46:06.1204144Z ·  ────┬──── 2026-10-23T06:46:06.1204279Z · ╰── This is the containing effect 2026-10-23T06:46:06.1204396Z 650 │ if (initialAttachGridEntry.key === launchTargetKey) { 2026-10-23T06:46:06.1204457Z 651 │ return; 2026-10-23T06:46:06.1204511Z 652 │ } 2026-10-23T06:46:06.1204591Z 653 │ setInitialAttachGridEntry({ 2026-10-23T06:46:06.1204684Z ·  ────────────┬──────────── 2026-10-23T06:46:06.1204858Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T06:46:06.1204929Z 654 │ key: launchTargetKey, 2026-10-23T06:46:06.1204980Z ╰──── 2026-10-23T06:46:06.1205589Z  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-23T06:46:06.1205917Z  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-23T06:46:06.1205920Z 2026-10-23T06:46:06.1206177Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T06:46:06.1206346Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:746:7] 2026-10-23T06:46:06.1206399Z 743 │ 2026-10-23T06:46:06.1206463Z 744 │ useEffect(() => { 2026-10-23T06:46:06.1206533Z ·  ────┬──── 2026-10-23T06:46:06.1206662Z · ╰── This is the containing effect 2026-10-23T06:46:06.1206767Z 745 │ if (!routeEnvironmentId || !routeThreadId) { 2026-10-23T06:46:06.1206841Z 746 │ setLastGridSize({ 2026-10-23T06:46:06.1206923Z ·  ───────┬─────── 2026-10-23T06:46:06.1207093Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T06:46:06.1207175Z 747 │ cols: DEFAULT_TERMINAL_COLS, 2026-10-23T06:46:06.1207225Z ╰──── 2026-10-23T06:46:06.1207824Z  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-23T06:46:06.1208218Z  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-23T06:46:06.1208255Z 2026-10-23T06:46:06.1208488Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T06:46:06.1208658Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:538:24] 2026-10-23T06:46:06.1208714Z 537 │ }); 2026-10-23T06:46:06.1208838Z 538 │ }, [terminal.buffer, terminal.buffer.length, terminalKey]); 2026-10-23T06:46:06.1208949Z ·  ───────────┬────────── 2026-10-23T06:46:06.1209194Z · ╰── Overly precise dependency `terminal.buffer.length`, use `terminal.buffer` instead 2026-10-23T06:46:06.1209355Z 539 │ const cwd = terminal.summary?.cwd ?? selectedThreadProject?.workspaceRoot ?? null; 2026-10-23T06:46:06.1209407Z ╰──── 2026-10-23T06:46:06.1209711Z  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-23T06:46:06.1210032Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.1210034Z 2026-10-23T06:46:06.1210236Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T06:46:06.1210403Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:709:7] 2026-10-23T06:46:06.1210500Z 708 │ sentInitialInputKeyRef.current = null; 2026-10-23T06:46:06.1210566Z 709 │ }, [terminalKey]); 2026-10-23T06:46:06.1210643Z ·  ─────┬───── 2026-10-23T06:46:06.1210790Z · ╰── Unnecessary dependency `terminalKey` 2026-10-23T06:46:06.1210846Z 710 │ 2026-10-23T06:46:06.1210897Z ╰──── 2026-10-23T06:46:06.1211188Z  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-23T06:46:06.1211499Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.1211501Z 2026-10-23T06:46:06.1211702Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T06:46:06.1211872Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:800:52] 2026-10-23T06:46:06.1211928Z 799 │ }; 2026-10-23T06:46:06.1212166Z 800 │ }, [canOperateTerminal, isRunning, pasteSession, terminal.lifecycleVersion, terminalKey]); 2026-10-23T06:46:06.1212382Z ·  ────────────┬──────────── ─────┬───── 2026-10-23T06:46:06.1212614Z · │ ╰── Unnecessary dependency `terminalKey` 2026-10-23T06:46:06.1212825Z · ╰── Unnecessary dependency `terminal.lifecycleVersion` 2026-10-23T06:46:06.1212878Z 801 │ 2026-10-23T06:46:06.1212928Z ╰──── 2026-10-23T06:46:06.1213218Z  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-23T06:46:06.1213537Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.1213543Z 2026-10-23T06:46:06.1213687Z ⚠ react(refs): Cannot access refs during render 2026-10-23T06:46:06.1213855Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:793:24] 2026-10-23T06:46:06.1213908Z 792 │ } 2026-10-23T06:46:06.1214014Z 793 │ const pasteSession = pasteSessionRef.current; 2026-10-23T06:46:06.1214126Z ·  ───────────┬─────────── 2026-10-23T06:46:06.1214289Z · ╰── Cannot access ref value during render 2026-10-23T06:46:06.1214341Z 794 │ 2026-10-23T06:46:06.1214392Z ╰──── 2026-10-23T06:46:06.1214871Z  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-23T06:46:06.1215166Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T06:46:06.1215168Z 2026-10-23T06:46:06.1215394Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-23T06:46:06.1215566Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:1998:15] 2026-10-23T06:46:06.1215634Z 1997 │ assert.equal( 2026-10-23T06:46:06.1215782Z 1998 │ items.filter((item) => item.type === "assistant_message").at(-1)?.text, 2026-10-23T06:46:06.1215861Z ·  ────── 2026-10-23T06:46:06.1215944Z 1999 │ "authoritative answer", 2026-10-23T06:46:06.1215998Z ╰──── 2026-10-23T06:46:06.1216168Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-23T06:46:06.1216170Z 2026-10-23T06:46:06.1216646Z ⚠ 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-23T06:46:06.1216815Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:3951:7] 2026-10-23T06:46:06.1216998Z 3950 │ const closeFiber = yield* Scope.close(sessionScope, Exit.void).pipe(Effect.forkScoped); 2026-10-23T06:46:06.1217206Z 3951 │ ╭─▶ while (!responseLifecycle.includes("failed")) { 2026-10-23T06:46:06.1217371Z 3952 │ │ yield* Effect.yieldNow; 2026-10-23T06:46:06.1217538Z 3953 │ ╰─▶ } 2026-10-23T06:46:06.1217661Z 3954 │ const responseExit = yield* Fiber.join(responseFiber); 2026-10-23T06:46:06.1217713Z ╰──── 2026-10-23T06:46:06.1217716Z 2026-10-23T06:46:06.1218187Z ⚠ 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-23T06:46:06.1218354Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6062:9] 2026-10-23T06:46:06.1218471Z 6061 │ .pipe(Effect.forkScoped); 2026-10-23T06:46:06.1218663Z 6062 │ ╭─▶ while (promptGates.length < 1) { 2026-10-23T06:46:06.1218777Z 6063 │ │ yield* Effect.yieldNow; 2026-10-23T06:46:06.1218911Z 6064 │ ╰─▶ } 2026-10-23T06:46:06.1219081Z 6065 │ assert.isDefined(sessionUpdateHandler, "session update handler must be wired"); 2026-10-23T06:46:06.1219133Z ╰──── 2026-10-23T06:46:06.1219135Z 2026-10-23T06:46:06.1219597Z ⚠ 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-23T06:46:06.1219762Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6197:9] 2026-10-23T06:46:06.1219855Z 6196 │ .pipe(Effect.forkScoped); 2026-10-23T06:46:06.1220040Z 6197 │ ╭─▶ while (promptGates.length < 2) { 2026-10-23T06:46:06.1220150Z 6198 │ │ yield* Effect.yieldNow; 2026-10-23T06:46:06.1220284Z 6199 │ ╰─▶ } 2026-10-23T06:46:06.1220449Z 6200 │ if (sessionUpdateHandler === undefined || capturedMutation.current === null) { 2026-10-23T06:46:06.1220500Z ╰──── 2026-10-23T06:46:06.1220503Z 2026-10-23T06:46:06.1220699Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T06:46:06.1220857Z ╭─[apps/mobile/src/features/terminal/TerminalContextSheet.tsx:72:15] 2026-10-23T06:46:06.1220924Z 71 │ { 2026-10-23T06:46:06.1221985Z ·  ────┬──── 2026-10-23T06:46:06.1222115Z · ╰── This is the containing effect 2026-10-23T06:46:06.1222304Z 78 │ const { host, code } = parsePairingUrl(connectionPairingUrl); 2026-10-23T06:46:06.1222407Z 79 │ setHostInput(host); 2026-10-23T06:46:06.1222483Z ·  ──────┬───── 2026-10-23T06:46:06.1222653Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T06:46:06.1222720Z 80 │ setCodeInput(code); 2026-10-23T06:46:06.1222771Z ╰──── 2026-10-23T06:46:06.1223377Z  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-23T06:46:06.1223709Z  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-23T06:46:06.1223714Z 2026-10-23T06:46:06.1223973Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T06:46:06.1224143Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:89:5] 2026-10-23T06:46:06.1224195Z 82 │ 2026-10-23T06:46:06.1224259Z 83 │ useEffect(() => { 2026-10-23T06:46:06.1224328Z ·  ────┬──── 2026-10-23T06:46:06.1224456Z · ╰── This is the containing effect 2026-10-23T06:46:06.1224544Z 84 │ if (routePairingUrl.length === 0) { 2026-10-23T06:46:06.1224604Z 85 │ return; 2026-10-23T06:46:06.1224659Z 86 │ } 2026-10-23T06:46:06.1224710Z 87 │ 2026-10-23T06:46:06.1224825Z 88 │ const { host, code } = parsePairingUrl(routePairingUrl); 2026-10-23T06:46:06.1224897Z 89 │ setHostInput(host); 2026-10-23T06:46:06.1224975Z ·  ──────┬───── 2026-10-23T06:46:06.1225144Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T06:46:06.1225209Z 90 │ setCodeInput(code); 2026-10-23T06:46:06.1225261Z ╰──── 2026-10-23T06:46:06.1225864Z  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-23T06:46:06.1226186Z  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-23T06:46:06.1226189Z 2026-10-23T06:46:06.1226449Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T06:46:06.1226622Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:95:7] 2026-10-23T06:46:06.1226674Z 92 │ 2026-10-23T06:46:06.1226738Z 93 │ useEffect(() => { 2026-10-23T06:46:06.1226807Z ·  ────┬──── 2026-10-23T06:46:06.1226934Z · ╰── This is the containing effect 2026-10-23T06:46:06.1227018Z 94 │ if (pairingConnectionError) { 2026-10-23T06:46:06.1227091Z 95 │ setIsSubmitting(false); 2026-10-23T06:46:06.1227173Z ·  ───────┬─────── 2026-10-23T06:46:06.1227344Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T06:46:06.1227457Z 96 │ } 2026-10-23T06:46:06.1227537Z ╰──── 2026-10-23T06:46:06.1228136Z  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-23T06:46:06.1228485Z  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-23T06:46:06.1228488Z 2026-10-23T06:46:06.1228645Z ⚠ react(immutability): This value cannot be modified 2026-10-23T06:46:06.1228803Z ╭─[apps/mobile/src/features/connection/ConnectionStatusDot.tsx:58:7] 2026-10-23T06:46:06.1228904Z 53 │ function usePulseAnimation(pulse: boolean) { 2026-10-23T06:46:06.1228998Z 54 │ const pulseProgress = useSharedValue(0); 2026-10-23T06:46:06.1229078Z ·  ──────┬────── 2026-10-23T06:46:06.1229330Z · ╰── `pulseProgress` originates here 2026-10-23T06:46:06.1229383Z 55 │ 2026-10-23T06:46:06.1229445Z 56 │ useEffect(() => { 2026-10-23T06:46:06.1229508Z 57 │ if (pulse) { 2026-10-23T06:46:06.1229594Z 58 │ pulseProgress.value = withRepeat( 2026-10-23T06:46:06.1229674Z ·  ──────┬────── 2026-10-23T06:46:06.1229816Z · ╰── `pulseProgress` cannot be modified 2026-10-23T06:46:06.1229883Z 59 │ withTiming(1, { 2026-10-23T06:46:06.1229935Z ╰──── 2026-10-23T06:46:06.1230207Z  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-23T06:46:06.1230517Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T06:46:06.1230520Z 2026-10-23T06:46:06.1230777Z ⚠ eslint(no-unused-vars): Function 'layerClaudeAgentSdkReplayQueryRunner' is declared but never used. 2026-10-23T06:46:06.1230959Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.testkit.ts:960:10] 2026-10-23T06:46:06.1231012Z 959 │ 2026-10-23T06:46:06.1231121Z 960 │ function layerClaudeAgentSdkReplayQueryRunner( 2026-10-23T06:46:06.1231236Z ·  ──────────────────┬───────────────── 2026-10-23T06:46:06.1231435Z · ╰── 'layerClaudeAgentSdkReplayQueryRunner' is declared here 2026-10-23T06:46:06.1231545Z 961 │ transcript: ClaudeAgentSdkReplayTranscript, 2026-10-23T06:46:06.1231599Z ╰──── 2026-10-23T06:46:06.1231703Z  help: Consider removing this declaration. 2026-10-23T06:46:06.1231705Z 2026-10-23T06:46:06.1231907Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T06:46:06.1232038Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:542:25] 2026-10-23T06:46:06.1232170Z 541 │ // range) the boundary string is identical and the chain would die. 2026-10-23T06:46:06.1232260Z 542 │ }, [nextSnoozeWakeAt, snoozeWakeTick]); 2026-10-23T06:46:06.1232363Z ·  ───────┬────── 2026-10-23T06:46:06.1232529Z · ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-23T06:46:06.1232749Z 543 │ const v2SearchQuery = props.searchQuery.trim().toLocaleLowerCase(); 2026-10-23T06:46:06.1232843Z ╰──── 2026-10-23T06:46:06.1233141Z  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-23T06:46:06.1233456Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.1233459Z 2026-10-23T06:46:06.1233628Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T06:46:06.1233757Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:533:53] 2026-10-23T06:46:06.1233843Z 532 │ if (Number.isNaN(wakeAtMs)) return; 2026-10-23T06:46:06.1234001Z 533 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647); 2026-10-23T06:46:06.1234126Z ·  ─────┬──── 2026-10-23T06:46:06.1234296Z · ╰── Cannot call impure function 2026-10-23T06:46:06.1234374Z 534 │ const id = setTimeout(() => { 2026-10-23T06:46:06.1234425Z ╰──── 2026-10-23T06:46:06.1234709Z  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-23T06:46:06.1235003Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T06:46:06.1235006Z 2026-10-23T06:46:06.1235206Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T06:46:06.1235373Z ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:215:7] 2026-10-23T06:46:06.1235431Z 214 │ } 2026-10-23T06:46:06.1235499Z 215 │ }, [wrappedRender]); 2026-10-23T06:46:06.1235577Z ·  ──────┬────── 2026-10-23T06:46:06.1235727Z · ╰── Unnecessary dependency `wrappedRender` 2026-10-23T06:46:06.1235781Z 216 │ 2026-10-23T06:46:06.1235832Z ╰──── 2026-10-23T06:46:06.1236123Z  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-23T06:46:06.1236434Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T06:46:06.1236437Z 2026-10-23T06:46:06.1236742Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-23T06:46:06.1236940Z ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:817:35] 2026-10-23T06:46:06.1236997Z 816 │ > 2026-10-23T06:46:06.1237109Z 817 │ 2026-10-23T06:46:06.1237225Z ·  ──────────────────── 2026-10-23T06:46:06.1237321Z 818 │ 2026-10-23T06:46:06.1238328Z 832 │ 2026-10-23T06:46:06.1238487Z ·  ──────────────────── 2026-10-23T06:46:06.1238588Z 833 │ 2026-10-23T06:46:06.1238638Z ╰──── 2026-10-23T06:46:06.1238860Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-23T06:46:06.1238994Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-23T06:46:06.1238996Z 2026-10-23T06:46:06.1239340Z ⚠ eslint(no-unused-vars): Variable 'layerCodexAppServerClientFactoryCommand' is declared but never used. Unused variables should start with a '_'. 2026-10-23T06:46:06.1239505Z ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1444:7] 2026-10-23T06:46:06.1239559Z 1443 │ 2026-10-23T06:46:06.1239675Z 1444 │ const layerCodexAppServerClientFactoryCommand = ( 2026-10-23T06:46:06.1239793Z ·  ───────────────────┬─────────────────── 2026-10-23T06:46:06.1240000Z · ╰── 'layerCodexAppServerClientFactoryCommand' is declared here 2026-10-23T06:46:06.1240119Z 1445 │ options: CodexClient.CodexAppServerClientOptions & { 2026-10-23T06:46:06.1240172Z ╰──── 2026-10-23T06:46:06.1240276Z  help: Consider removing this declaration. 2026-10-23T06:46:06.1240278Z 2026-10-23T06:46:06.1240542Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-23T06:46:06.1240707Z ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1680:7] 2026-10-23T06:46:06.1240761Z 1679 │ 2026-10-23T06:46:06.1240832Z 1680 │ const layer: Layer.Layer< 2026-10-23T06:46:06.1240903Z ·  ──┬── 2026-10-23T06:46:06.1241027Z · ╰── 'layer' is declared here 2026-10-23T06:46:06.1241121Z 1681 │ ProviderAdapter.ProviderAdapterV2, 2026-10-23T06:46:06.1241173Z ╰──── 2026-10-23T06:46:06.1241275Z  help: Consider removing this declaration. 2026-10-23T06:46:06.1241278Z 2026-10-23T06:46:06.1241603Z ⚠ eslint(no-unused-vars): Variable 'layerDaemon' is declared but never used. Unused variables should start with a '_'. 2026-10-23T06:46:06.1241880Z ╭─[apps/server/src/orchestration-v2/EffectWorker.ts:914:7] 2026-10-23T06:46:06.1241933Z 913 │ 2026-10-23T06:46:06.1242121Z 914 │ const layerDaemon: Layer.Layer = Layer.effectDiscard( 2026-10-23T06:46:06.1242197Z ·  ─────┬───── 2026-10-23T06:46:06.1242335Z · ╰── 'layerDaemon' is declared here 2026-10-23T06:46:06.1242421Z 915 │ runDaemon.pipe(Effect.forkScoped), 2026-10-23T06:46:06.1242472Z ╰──── 2026-10-23T06:46:06.1242574Z  help: Consider removing this declaration. 2026-10-23T06:46:06.1242576Z 2026-10-23T06:46:06.1243049Z ⚠ 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-23T06:46:06.1243181Z ╭─[packages/contracts/src/baseSchemas.test.ts:39:9] 2026-10-23T06:46:06.1243248Z 38 │ JSON.stringify( 2026-10-23T06:46:06.1243367Z 39 │ Schema.encodeUnknownSync(Schema.toCodecJson(Named))([ 2026-10-23T06:46:06.1243462Z ·  ──────────────────────── 2026-10-23T06:46:06.1243529Z 40 │ { name: "a" }, 2026-10-23T06:46:06.1243580Z ╰──── 2026-10-23T06:46:06.1243583Z 2026-10-23T06:46:06.1243769Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T06:46:06.1243940Z ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:555:70] 2026-10-23T06:46:06.1244020Z 554 │ assert.deepStrictEqual( 2026-10-23T06:46:06.1244193Z 555 │ (yield* Ref.get(fixture.syncCommands)).map(({ commandId: _, ...rest }) => rest), 2026-10-23T06:46:06.1244319Z ·  ┬ 2026-10-23T06:46:06.1244482Z · ╰── '_' is declared here 2026-10-23T06:46:06.1244544Z 556 │ [ 2026-10-23T06:46:06.1244596Z ╰──── 2026-10-23T06:46:06.1244697Z  help: Consider removing this parameter. 2026-10-23T06:46:06.1244700Z 2026-10-23T06:46:06.1244883Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T06:46:06.1245058Z ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:1155:70] 2026-10-23T06:46:06.1245141Z 1154 │ assert.deepStrictEqual( 2026-10-23T06:46:06.1245313Z 1155 │ (yield* Ref.get(fixture.linkCommands)).map(({ commandId: _, ...rest }) => rest), 2026-10-23T06:46:06.1245436Z ·  ┬ 2026-10-23T06:46:06.1245604Z · ╰── '_' is declared here 2026-10-23T06:46:06.1245667Z 1156 │ [ 2026-10-23T06:46:06.1245719Z ╰──── 2026-10-23T06:46:06.1245818Z  help: Consider removing this parameter. 2026-10-23T06:46:06.1245823Z 2026-10-23T06:46:06.1246282Z ⚠ 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-23T06:46:06.1246420Z ╭─[packages/contracts/src/composerContext.test.ts:181:18] 2026-10-23T06:46:06.1246619Z 180 │ it("sends a message without the records the wire cannot carry", () => { 2026-10-23T06:46:06.1246840Z 181 │ const wire = Schema.encodeUnknownSync(Schema.toCodecJson(OrchestrationMessageContext))({ 2026-10-23T06:46:06.1246946Z ·  ──────────────────────── 2026-10-23T06:46:06.1247012Z 182 │ version: 1, 2026-10-23T06:46:06.1247063Z ╰──── 2026-10-23T06:46:06.1247065Z 2026-10-23T06:46:06.1247323Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-23T06:46:06.1247486Z ╭─[apps/server/src/orchestration-v2/ThreadPullRequestService.ts:408:7] 2026-10-23T06:46:06.1247538Z 407 │ 2026-10-23T06:46:06.1247664Z 408 │ const layer = Layer.effect(ThreadPullRequestServiceV2, make); 2026-10-23T06:46:06.1247742Z ·  ──┬── 2026-10-23T06:46:06.1247869Z · ╰── 'layer' is declared here 2026-10-23T06:46:06.1247920Z ╰──── 2026-10-23T06:46:06.1248025Z  help: Consider removing this declaration. 2026-10-23T06:46:06.1248027Z 2026-10-23T06:46:06.1248234Z ⚠ eslint(no-unused-vars): Identifier 'HostProcess' is imported but never used. 2026-10-23T06:46:06.1248397Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:25:13] 2026-10-23T06:46:06.1248508Z 24 │ import * as Schema from "effect/Schema"; 2026-10-23T06:46:06.1248627Z 25 │ import * as HostProcess from "@t3tools/shared/HostProcess"; 2026-10-23T06:46:06.1248710Z ·  ─────┬───── 2026-10-23T06:46:06.1248854Z · ╰── 'HostProcess' is imported here 2026-10-23T06:46:06.1248907Z 26 │ 2026-10-23T06:46:06.1248963Z ╰──── 2026-10-23T06:46:06.1249064Z  help: Consider removing this import. 2026-10-23T06:46:06.1249067Z 2026-10-23T06:46:06.1249338Z ⚠ eslint(no-unused-vars): Variable 'serverConfig' is declared but never used. Unused variables should start with a '_'. 2026-10-23T06:46:06.1249502Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:124:11] 2026-10-23T06:46:06.1249585Z 123 │ const path = yield* Path.Path; 2026-10-23T06:46:06.1249702Z 124 │ const serverConfig = yield* ServerConfig.ServerConfig; 2026-10-23T06:46:06.1249783Z ·  ──────┬───── 2026-10-23T06:46:06.1249920Z · ╰── 'serverConfig' is declared here 2026-10-23T06:46:06.1250062Z 125 │ const serverSettings = yield* ServerSettings.ServerSettingsService; 2026-10-23T06:46:06.1250119Z ╰──── 2026-10-23T06:46:06.1250225Z  help: Consider removing this declaration. 2026-10-23T06:46:06.1250227Z 2026-10-23T06:46:06.1250501Z ⚠ eslint(no-unused-vars): Variable 'serverSettings' is declared but never used. Unused variables should start with a '_'. 2026-10-23T06:46:06.1250665Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:125:11] 2026-10-23T06:46:06.1250780Z 124 │ const serverConfig = yield* ServerConfig.ServerConfig; 2026-10-23T06:46:06.1250919Z 125 │ const serverSettings = yield* ServerSettings.ServerSettingsService; 2026-10-23T06:46:06.1251004Z ·  ───────┬────── 2026-10-23T06:46:06.1251148Z · ╰── 'serverSettings' is declared here 2026-10-23T06:46:06.1251284Z 126 │ const gitWorkflow = yield* GitWorkflowService.GitWorkflowService; 2026-10-23T06:46:06.1251395Z ╰──── 2026-10-23T06:46:06.1251533Z  help: Consider removing this declaration. 2026-10-23T06:46:06.1251535Z 2026-10-23T06:46:06.1251836Z ⚠ eslint(no-unused-vars): Variable 'layerFromProviderAdapter' is declared but never used. Unused variables should start with a '_'. 2026-10-23T06:46:06.1251998Z ╭─[apps/server/src/orchestration-v2/ProviderAdapterRegistry.ts:346:7] 2026-10-23T06:46:06.1252051Z 345 │ 2026-10-23T06:46:06.1252152Z 346 │ const layerFromProviderAdapter: Layer.Layer< 2026-10-23T06:46:06.1252248Z ·  ────────────┬─────────── 2026-10-23T06:46:06.1252413Z · ╰── 'layerFromProviderAdapter' is declared here 2026-10-23T06:46:06.1252492Z 347 │ ProviderAdapterRegistryV2, 2026-10-23T06:46:06.1252541Z ╰──── 2026-10-23T06:46:06.1252650Z  help: Consider removing this declaration. 2026-10-23T06:46:06.1252660Z 2026-10-23T06:46:06.1252825Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-23T06:46:06.1252945Z ╭─[apps/server/src/processRunner.test.ts:266:14] 2026-10-23T06:46:06.1252997Z 265 │ 2026-10-23T06:46:06.1253103Z 266 │ for (const {} of ["timeout", "success"] as const) { 2026-10-23T06:46:06.1253176Z ·  ── 2026-10-23T06:46:06.1253231Z 267 │ } 2026-10-23T06:46:06.1253281Z ╰──── 2026-10-23T06:46:06.1253513Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-23T06:46:06.1253515Z 2026-10-23T06:46:06.1253724Z ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed 2026-10-23T06:46:06.1253833Z ╭─[packages/contracts/src/rpc.ts:295:8] 2026-10-23T06:46:06.1253903Z 294 │ } from "./device.ts"; 2026-10-23T06:46:06.1253995Z 295 │ import {} from "./previewAutomation.ts"; 2026-10-23T06:46:06.1254063Z ·  ── 2026-10-23T06:46:06.1254122Z 296 │ import { 2026-10-23T06:46:06.1254172Z ╰──── 2026-10-23T06:46:06.1254254Z  help: Remove empty braces 2026-10-23T06:46:06.1254256Z 2026-10-23T06:46:06.1254401Z ⚠ react(refs): Cannot access refs during render 2026-10-23T06:46:06.1254519Z ╭─[apps/mobile/src/components/ui/Menu.tsx:54:36] 2026-10-23T06:46:06.1254699Z 53 │ const child = children as ReactElement>; 2026-10-23T06:46:06.1254875Z 54 │ ╭─▶ children = cloneElement(child, { 2026-10-23T06:46:06.1254986Z 55 │ │ onTouchStart: (event) => { 2026-10-23T06:46:06.1255148Z 56 │ │ // Reset for a new touch, not onPressIn, which also fires when a 2026-10-23T06:46:06.1255307Z 57 │ │ // finger moves out of the row and back during the same gesture. 2026-10-23T06:46:06.1255432Z 58 │ │ menuPress.current.isPreparing = false; 2026-10-23T06:46:06.1255600Z 59 │ │ menuPress.current.suppressPress = menuPress.current.isOpen; 2026-10-23T06:46:06.1255711Z 60 │ │ pendingPress.current = null; 2026-10-23T06:46:06.1255832Z 61 │ │ child.props.onTouchStart?.(event); 2026-10-23T06:46:06.1255907Z 62 │ │ }, 2026-10-23T06:46:06.1256067Z 63 │ │ onPress: (event) => { 2026-10-23T06:46:06.1256268Z 64 │ │ // Accessibility clicks have no touch identifier and must not inherit 2026-10-23T06:46:06.1256406Z 65 │ │ // cancellation from a previous physical gesture. 2026-10-23T06:46:06.1256573Z 66 │ │ const isTouch = typeof event.nativeEvent.identifier === "number"; 2026-10-23T06:46:06.1256764Z 67 │ │ if (isTouch ? menuPress.current.suppressPress : menuPress.current.isOpen) { 2026-10-23T06:46:06.1256851Z 68 │ │ return; 2026-10-23T06:46:06.1256929Z 69 │ │ } 2026-10-23T06:46:06.1257067Z 70 │ │ if (isTouch && menuPress.current.isPreparing) { 2026-10-23T06:46:06.1257240Z 71 │ │ // A release can arrive between native menu preparation and display. 2026-10-23T06:46:06.1257414Z 72 │ │ // Let UIKit's display/cancel callback decide this press's outcome. 2026-10-23T06:46:06.1257517Z 73 │ │ event.persist(); 2026-10-23T06:46:06.1257677Z 74 │ │ pendingPress.current = () => child.props.onPress?.(event); 2026-10-23T06:46:06.1257763Z 75 │ │ return; 2026-10-23T06:46:06.1257839Z 76 │ │ } 2026-10-23T06:46:06.1257952Z 77 │ │ child.props.onPress?.(event); 2026-10-23T06:46:06.1258027Z 78 │ │ }, 2026-10-23T06:46:06.1258157Z 79 │ ├─▶ }); 2026-10-23T06:46:06.1258426Z · ╰──── Passing a ref to a function may read its value during render 2026-10-23T06:46:06.1258534Z 80 │ menuProps.onMenuInteractionStart = () => { 2026-10-23T06:46:06.1258585Z ╰──── 2026-10-23T06:46:06.1259059Z  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-23T06:46:06.1259356Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T06:46:06.1259359Z 2026-10-23T06:46:06.1259587Z ⚠ eslint(no-unused-vars): Function 'assertUserMessagesExclude' is declared but never used. 2026-10-23T06:46:06.1259750Z ╭─[apps/server/src/orchestration-v2/testkit/fixtures/shared.ts:1398:10] 2026-10-23T06:46:06.1259864Z 1397 │ 2026-10-23T06:46:06.1259985Z 1398 │ function assertUserMessagesExclude( 2026-10-23T06:46:06.1260089Z ·  ────────────┬──────────── 2026-10-23T06:46:06.1260260Z · ╰── 'assertUserMessagesExclude' is declared here 2026-10-23T06:46:06.1260369Z 1399 │ projection: OrchestrationV2ThreadProjection, 2026-10-23T06:46:06.1260423Z ╰──── 2026-10-23T06:46:06.1260527Z  help: Consider removing this declaration. 2026-10-23T06:46:06.1260530Z 2026-10-23T06:46:06.1260612Z Found 0 errors and 358 warnings in 5403 files (5.3s, 8 threads) 2026-10-23T06:46:06.1774076Z Post job cleanup. 2026-10-23T06:46:06.2415854Z Cache hit occurred on the primary key electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309, not saving cache. 2026-10-23T06:46:06.2493142Z Post job cleanup. 2026-10-23T06:46:06.3435206Z ##[start-action display=Cache full pnpm store;id=__4bff6844-d1d2-4deb-ab0c-1e9185498bca.__actions_cache] 2026-10-23T06:46:06.3775144Z Post job cleanup. 2026-10-23T06:46:06.4409573Z Cache hit occurred on the primary key pnpm-full-v1-Linux-X64-00e587c1edf31fe669c96bc4768c0e07a969fff8e8228235fb75ec6c0abf4161, not saving cache. 2026-10-23T06:46:06.4444106Z ##[end-action id=__4bff6844-d1d2-4deb-ab0c-1e9185498bca.__actions_cache;outcome=success;conclusion=success;duration_ms=100] 2026-10-23T06:46:06.4446663Z ##[start-action display=Cache Vite+;id=__4bff6844-d1d2-4deb-ab0c-1e9185498bca.vp_cache] 2026-10-23T06:46:06.4474927Z Post job cleanup. 2026-10-23T06:46:06.5131684Z 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-23T06:46:06.5167643Z ##[end-action id=__4bff6844-d1d2-4deb-ab0c-1e9185498bca.vp_cache;outcome=success;conclusion=success;duration_ms=72] 2026-10-23T06:46:06.5207831Z Post job cleanup. 2026-10-23T06:46:06.5669752Z [command]/usr/local/bin/git version 2026-10-23T06:46:06.5701852Z git version 2.55.0 2026-10-23T06:46:06.5720004Z Temporarily overriding HOME='/home/runner/_work/_temp/f886f750-b917-4c6b-b978-dcb887ad53c5' before making global git config changes 2026-10-23T06:46:06.5720632Z Adding repository directory to the temporary git global config as a safe directory 2026-10-23T06:46:06.5722724Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code 2026-10-23T06:46:06.5750174Z Removing SSH command configuration 2026-10-23T06:46:06.5753145Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand 2026-10-23T06:46:06.5777934Z [command]/usr/local/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :" 2026-10-23T06:46:06.5954325Z fatal: No url found for submodule path '.repos/alchemy-effect/submodules/distilled' in .gitmodules 2026-10-23T06:46:06.5980585Z ##[warning]The process '/usr/local/bin/git' failed with exit code 128 2026-10-23T06:46:06.6022472Z A job completed hook has been configured by the self-hosted runner administrator 2026-10-23T06:46:06.6040563Z ##[group]Run '/job_completed.sh' 2026-10-23T06:46:06.6050119Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-23T06:46:06.6050301Z env: 2026-10-23T06:46:06.6050421Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 155 2026-10-23T06:46:06.6050576Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 367 2026-10-23T06:46:06.6050722Z BLACKSMITH_CHECK_RUN_ID: 120281317441 2026-10-23T06:46:06.6050871Z BLACKSMITH_JOB_DISPLAY_NAME: Lint 2026-10-23T06:46:06.6051017Z GITHUB_ACTIONS_CACHE_MODE: write 2026-10-23T06:46:06.6051158Z ##[endgroup] 2026-10-23T06:46:06.6135127Z Docker container cache not activated, skipping hash computation. 2026-10-23T06:46:06.6390669Z No active SSH sessions detected. Proceeding with shutdown immediately. 2026-10-23T06:46:06.6440213Z Cleaning up orphan processes