2026-10-24T05:19:12.6419517Z Current runner version: '2.338.1' 2026-10-24T05:19:12.6423054Z Runner name: 'blacksmith-8vcpu-ubuntu-2404-hhsvuwzougs2wlbs' 2026-10-24T05:19:12.6423686Z Runner group name: 'blacksmith scale sets - blacksmith-8vcpu-ubuntu-2404' 2026-10-24T05:19:12.6424414Z Machine name: 'ip-172-31-73-130' 2026-10-24T05:19:12.6426020Z ##[group]GITHUB_TOKEN Permissions 2026-10-24T05:19:12.6427319Z Contents: read 2026-10-24T05:19:12.6427713Z Metadata: read 2026-10-24T05:19:12.6428104Z ##[endgroup] 2026-10-24T05:19:12.6429325Z Secret source: Actions 2026-10-24T05:19:12.6429938Z Cache mode: write 2026-10-24T05:19:12.6430443Z Prepare workflow directory 2026-10-24T05:19:12.6600572Z Prepare all required actions 2026-10-24T05:19:12.6625383Z Getting action download info 2026-10-24T05:19:12.7872227Z Download action repository 'actions/checkout@v6' (SHA:d23441a48e516b6c34aea4fa41551a30e30af803) 2026-10-24T05:19:12.8160091Z Download action repository 'actions/cache@v6' (SHA:55cc8345863c7cc4c66a329aec7e433d2d1c52a9) 2026-10-24T05:19:12.9264382Z Setting BLACKSMITH_ACTIONS_RESULTS_URL to https://results-receiver.actions.githubusercontent.com/ 2026-10-24T05:19:12.9300549Z Complete job name: Lint 2026-10-24T05:19:12.9651291Z A job started hook has been configured by the self-hosted runner administrator 2026-10-24T05:19:12.9708614Z ##[group]Run '/setup.sh' 2026-10-24T05:19:12.9716390Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T05:19:12.9716848Z env: 2026-10-24T05:19:12.9717069Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 236 2026-10-24T05:19:12.9717355Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 360 2026-10-24T05:19:12.9717629Z BLACKSMITH_CHECK_RUN_ID: 120788606571 2026-10-24T05:19:12.9717903Z BLACKSMITH_JOB_DISPLAY_NAME: Lint 2026-10-24T05:19:12.9718169Z GITHUB_ACTIONS_CACHE_MODE: write 2026-10-24T05:19:12.9718426Z ##[endgroup] 2026-10-24T05:19:12.9930264Z Logging daemon started (blacksmithd for logs) 2026-10-24T05:19:13.0033826Z Results daemon started (blacksmithd for results) 2026-10-24T05:19:13.0168672Z Background adoption and SSH setup started (PID: 3073) 2026-10-24T05:19:13.0169429Z 2026-10-24T05:19:13.0170645Z ---------------------------------------- 2026-10-24T05:19:13.0171387Z View this job: https://app.blacksmith.sh/pingdotgg/runs/40065776686/jobs/120788606571 2026-10-24T05:19:13.0172052Z SSH Access (using your GitHub SSH key): 2026-10-24T05:19:13.0172710Z ssh -p 64000 runner@blacksmith-8vcpu-ubuntu-2404-hhsvuwzougs2wlbs.vm.blacksmith.sh 2026-10-24T05:19:13.0173013Z 2026-10-24T05:19:13.0173191Z No GitHub SSH key? Add one at: 2026-10-24T05:19:13.0173970Z https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account 2026-10-24T05:19:13.0174630Z 2026-10-24T05:19:13.0174793Z ---------------------------------------- 2026-10-24T05:19:13.0175070Z 2026-10-24T05:19:13.0175461Z VM ID: blacksmith-8vcpu-ubuntu-2404-hhsvuwzougs2wlbs 2026-10-24T05:19:13.0175897Z Host: production-152.236.40.159-x8664 2026-10-24T05:19:13.0176167Z Host Agent PID: 422585 2026-10-24T05:19:13.0176441Z Host Agent Git SHA: 1637818df 2026-10-24T05:19:13.0176706Z Host CPU Manufacturer: AuthenticAMD 2026-10-24T05:19:13.0176984Z Blacksmith Host Generation: gen 2 2026-10-24T05:19:13.0177252Z Petname: production-able-coral-50562ac4 2026-10-24T05:19:13.0177517Z Region: us-east 2026-10-24T05:19:13.0177739Z Rootfs Version: ubuntu24-full-x64-081926 2026-10-24T05:19:13.0180827Z OS Version: Ubuntu 24.04.4 LTS 2026-10-24T05:19:13.0181160Z 2026-10-24T05:19:13.0181304Z Enabling Blacksmith transparent cache 2026-10-24T05:19:13.0371450Z ##[group]Run actions/checkout@v6 2026-10-24T05:19:13.0371744Z with: 2026-10-24T05:19:13.0372058Z sparse-checkout: /* !/.repos/ !/apps/mobile/modules/t3-terminal/Vendor/**/*.a 2026-10-24T05:19:13.0372440Z sparse-checkout-cone-mode: false 2026-10-24T05:19:13.0372708Z repository: pingdotgg/t3code 2026-10-24T05:19:13.0374535Z token: *** 2026-10-24T05:19:13.0374743Z ssh-strict: true 2026-10-24T05:19:13.0374961Z ssh-user: git 2026-10-24T05:19:13.0375176Z persist-credentials: true 2026-10-24T05:19:13.0375563Z clean: true 2026-10-24T05:19:13.0375767Z fetch-depth: 1 2026-10-24T05:19:13.0375977Z fetch-tags: false 2026-10-24T05:19:13.0376195Z show-progress: true 2026-10-24T05:19:13.0376450Z lfs: false 2026-10-24T05:19:13.0376658Z submodules: false 2026-10-24T05:19:13.0376877Z set-safe-directory: true 2026-10-24T05:19:13.0377123Z allow-unsafe-pr-checkout: false 2026-10-24T05:19:13.0377373Z env: 2026-10-24T05:19:13.0377607Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 236 2026-10-24T05:19:13.0377885Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 360 2026-10-24T05:19:13.0378157Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T05:19:13.0378413Z ##[endgroup] 2026-10-24T05:19:13.1285904Z Syncing repository: pingdotgg/t3code 2026-10-24T05:19:13.1287121Z ##[group]Getting Git version info 2026-10-24T05:19:13.1287608Z Working directory is '/home/runner/_work/t3code/t3code' 2026-10-24T05:19:13.1288329Z [command]/usr/local/bin/git version 2026-10-24T05:19:13.1361259Z git version 2.55.0 2026-10-24T05:19:13.1372360Z ##[endgroup] 2026-10-24T05:19:13.1379380Z Temporarily overriding HOME='/home/runner/_work/_temp/c2fbc074-c591-4b99-98cf-f53b179d34f3' before making global git config changes 2026-10-24T05:19:13.1380007Z Adding repository directory to the temporary git global config as a safe directory 2026-10-24T05:19:13.1382549Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code 2026-10-24T05:19:13.1412170Z Deleting the contents of '/home/runner/_work/t3code/t3code' 2026-10-24T05:19:13.1413799Z ##[group]Determining repository object format 2026-10-24T05:19:13.1414879Z ##[endgroup] 2026-10-24T05:19:13.1415225Z ##[group]Initializing the repository 2026-10-24T05:19:13.1417121Z [command]/usr/local/bin/git init /home/runner/_work/t3code/t3code 2026-10-24T05:19:13.1448900Z hint: Using 'master' as the name for the initial branch. This default branch name 2026-10-24T05:19:13.1449670Z hint: will change to "main" in Git 3.0. To configure the initial branch name 2026-10-24T05:19:13.1450404Z hint: to use in all of your new repositories, which will suppress this warning, 2026-10-24T05:19:13.1450958Z hint: call: 2026-10-24T05:19:13.1451265Z hint: 2026-10-24T05:19:13.1451651Z hint: git config --global init.defaultBranch 2026-10-24T05:19:13.1451946Z hint: 2026-10-24T05:19:13.1452220Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and 2026-10-24T05:19:13.1452660Z hint: 'development'. The just-created branch can be renamed via this command: 2026-10-24T05:19:13.1453007Z hint: 2026-10-24T05:19:13.1453205Z hint: git branch -m 2026-10-24T05:19:13.1453432Z hint: 2026-10-24T05:19:13.1453730Z hint: Disable this message with "git config set advice.defaultBranchName false" 2026-10-24T05:19:13.1454190Z Initialized empty Git repository in /home/runner/_work/t3code/t3code/.git/ 2026-10-24T05:19:13.1454971Z [command]/usr/local/bin/git remote add origin https://github.com/pingdotgg/t3code 2026-10-24T05:19:13.1479123Z ##[endgroup] 2026-10-24T05:19:13.1479510Z ##[group]Disabling automatic garbage collection 2026-10-24T05:19:13.1481180Z [command]/usr/local/bin/git config --local gc.auto 0 2026-10-24T05:19:13.1498708Z ##[endgroup] 2026-10-24T05:19:13.1499061Z ##[group]Setting up auth 2026-10-24T05:19:13.1499321Z Removing SSH command configuration 2026-10-24T05:19:13.1502186Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand 2026-10-24T05:19:13.1521131Z [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-24T05:19:13.1648432Z Removing HTTP extra header 2026-10-24T05:19:13.1650838Z [command]/usr/local/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader 2026-10-24T05:19:13.1670064Z [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-24T05:19:13.1756229Z Removing includeIf entries pointing to credentials config files 2026-10-24T05:19:13.1759234Z [command]/usr/local/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir: 2026-10-24T05:19:13.1777743Z [command]/usr/local/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url 2026-10-24T05:19:13.1867447Z [command]/usr/local/bin/git config --file /home/runner/_work/_temp/git-credentials-364c70fe-1067-4cc7-afaf-16bebd5b0ad5.config http.https://github.com/.extraheader AUTHORIZATION: basic *** 2026-10-24T05:19:13.1893808Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git.path /home/runner/_work/_temp/git-credentials-364c70fe-1067-4cc7-afaf-16bebd5b0ad5.config 2026-10-24T05:19:13.1914721Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git/worktrees/*.path /home/runner/_work/_temp/git-credentials-364c70fe-1067-4cc7-afaf-16bebd5b0ad5.config 2026-10-24T05:19:13.1934391Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git.path /github/runner_temp/git-credentials-364c70fe-1067-4cc7-afaf-16bebd5b0ad5.config 2026-10-24T05:19:13.1951787Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git/worktrees/*.path /github/runner_temp/git-credentials-364c70fe-1067-4cc7-afaf-16bebd5b0ad5.config 2026-10-24T05:19:13.1969331Z ##[endgroup] 2026-10-24T05:19:13.1969693Z ##[group]Fetching the repository 2026-10-24T05:19:13.1973415Z [command]/usr/local/bin/git -c protocol.version=2 fetch --no-tags --prune --no-recurse-submodules --filter=blob:none --depth=1 origin +940e3fafd28ab98545b069ccfbeaf9e9da3b8f28:refs/remotes/origin/main 2026-10-24T05:19:13.5010958Z From https://github.com/pingdotgg/t3code 2026-10-24T05:19:13.5011822Z * [new ref] 940e3fafd28ab98545b069ccfbeaf9e9da3b8f28 -> origin/main 2026-10-24T05:19:13.5032676Z [command]/usr/local/bin/git branch --list --remote origin/main 2026-10-24T05:19:13.5051636Z origin/main 2026-10-24T05:19:13.5055588Z [command]/usr/local/bin/git rev-parse refs/remotes/origin/main 2026-10-24T05:19:13.5070189Z 940e3fafd28ab98545b069ccfbeaf9e9da3b8f28 2026-10-24T05:19:13.5072240Z ##[endgroup] 2026-10-24T05:19:13.5073105Z ##[group]Determining the checkout info 2026-10-24T05:19:13.5073922Z ##[endgroup] 2026-10-24T05:19:13.5074750Z ##[group]Setting up sparse checkout 2026-10-24T05:19:13.5075566Z [command]/usr/local/bin/git config core.sparseCheckout true 2026-10-24T05:19:13.5092746Z [command]/usr/local/bin/git rev-parse --git-path info/sparse-checkout 2026-10-24T05:19:13.5106095Z .git/info/sparse-checkout 2026-10-24T05:19:13.5109954Z ##[endgroup] 2026-10-24T05:19:13.5111912Z ##[group]Checking out the ref 2026-10-24T05:19:13.5112855Z [command]/usr/local/bin/git checkout --progress --force -B main refs/remotes/origin/main 2026-10-24T05:19:20.1319437Z Updating files: 0% (1/6336) 2026-10-24T05:19:20.1346188Z Updating files: 1% (64/6336) 2026-10-24T05:19:20.1364235Z Updating files: 2% (127/6336) 2026-10-24T05:19:20.1384322Z Updating files: 3% (191/6336) 2026-10-24T05:19:20.1403331Z Updating files: 4% (254/6336) 2026-10-24T05:19:20.1433009Z Updating files: 5% (317/6336) 2026-10-24T05:19:20.1452589Z Updating files: 6% (381/6336) 2026-10-24T05:19:20.1506444Z Updating files: 7% (444/6336) 2026-10-24T05:19:20.1534677Z Updating files: 8% (507/6336) 2026-10-24T05:19:20.1556715Z Updating files: 9% (571/6336) 2026-10-24T05:19:20.1836079Z Updating files: 10% (634/6336) 2026-10-24T05:19:20.1851219Z Updating files: 11% (697/6336) 2026-10-24T05:19:20.1861712Z Updating files: 12% (761/6336) 2026-10-24T05:19:20.1875449Z Updating files: 13% (824/6336) 2026-10-24T05:19:20.1890855Z Updating files: 14% (888/6336) 2026-10-24T05:19:20.1907472Z Updating files: 15% (951/6336) 2026-10-24T05:19:20.1926626Z Updating files: 16% (1014/6336) 2026-10-24T05:19:20.1942652Z Updating files: 17% (1078/6336) 2026-10-24T05:19:20.1960399Z Updating files: 18% (1141/6336) 2026-10-24T05:19:20.1974817Z Updating files: 19% (1204/6336) 2026-10-24T05:19:20.1995986Z Updating files: 20% (1268/6336) 2026-10-24T05:19:20.2013279Z Updating files: 21% (1331/6336) 2026-10-24T05:19:20.2031027Z Updating files: 22% (1394/6336) 2026-10-24T05:19:20.2044211Z Updating files: 23% (1458/6336) 2026-10-24T05:19:20.2056893Z Updating files: 24% (1521/6336) 2026-10-24T05:19:20.2071331Z Updating files: 25% (1584/6336) 2026-10-24T05:19:20.2084816Z Updating files: 26% (1648/6336) 2026-10-24T05:19:20.2097146Z Updating files: 27% (1711/6336) 2026-10-24T05:19:20.2115792Z Updating files: 28% (1775/6336) 2026-10-24T05:19:20.2148297Z Updating files: 29% (1838/6336) 2026-10-24T05:19:20.2168999Z Updating files: 30% (1901/6336) 2026-10-24T05:19:20.2191244Z Updating files: 31% (1965/6336) 2026-10-24T05:19:20.2219795Z Updating files: 32% (2028/6336) 2026-10-24T05:19:20.2249525Z Updating files: 33% (2091/6336) 2026-10-24T05:19:20.2316698Z Updating files: 34% (2155/6336) 2026-10-24T05:19:20.2374337Z Updating files: 35% (2218/6336) 2026-10-24T05:19:20.2413094Z Updating files: 36% (2281/6336) 2026-10-24T05:19:20.2446401Z Updating files: 37% (2345/6336) 2026-10-24T05:19:20.2492910Z Updating files: 38% (2408/6336) 2026-10-24T05:19:20.2518261Z Updating files: 39% (2472/6336) 2026-10-24T05:19:20.2547483Z Updating files: 40% (2535/6336) 2026-10-24T05:19:20.2574407Z Updating files: 41% (2598/6336) 2026-10-24T05:19:20.2594647Z Updating files: 42% (2662/6336) 2026-10-24T05:19:20.2604545Z Updating files: 43% (2725/6336) 2026-10-24T05:19:20.2624969Z Updating files: 44% (2788/6336) 2026-10-24T05:19:20.2657257Z Updating files: 45% (2852/6336) 2026-10-24T05:19:20.2679421Z Updating files: 46% (2915/6336) 2026-10-24T05:19:20.2706648Z Updating files: 47% (2978/6336) 2026-10-24T05:19:20.2733061Z Updating files: 48% (3042/6336) 2026-10-24T05:19:20.2762330Z Updating files: 49% (3105/6336) 2026-10-24T05:19:20.2801254Z Updating files: 50% (3168/6336) 2026-10-24T05:19:20.2815683Z Updating files: 51% (3232/6336) 2026-10-24T05:19:20.2847412Z Updating files: 52% (3295/6336) 2026-10-24T05:19:20.2872752Z Updating files: 53% (3359/6336) 2026-10-24T05:19:20.2892416Z Updating files: 54% (3422/6336) 2026-10-24T05:19:20.2915035Z Updating files: 55% (3485/6336) 2026-10-24T05:19:20.2931801Z Updating files: 56% (3549/6336) 2026-10-24T05:19:20.2948021Z Updating files: 57% (3612/6336) 2026-10-24T05:19:20.2967552Z Updating files: 58% (3675/6336) 2026-10-24T05:19:20.3321321Z Updating files: 59% (3739/6336) 2026-10-24T05:19:20.3334815Z Updating files: 60% (3802/6336) 2026-10-24T05:19:20.3350260Z Updating files: 61% (3865/6336) 2026-10-24T05:19:20.3367442Z Updating files: 62% (3929/6336) 2026-10-24T05:19:20.3388198Z Updating files: 63% (3992/6336) 2026-10-24T05:19:20.3413283Z Updating files: 64% (4056/6336) 2026-10-24T05:19:20.3433430Z Updating files: 65% (4119/6336) 2026-10-24T05:19:20.3448563Z Updating files: 66% (4182/6336) 2026-10-24T05:19:20.3472902Z Updating files: 67% (4246/6336) 2026-10-24T05:19:20.3485252Z Updating files: 68% (4309/6336) 2026-10-24T05:19:20.3503169Z Updating files: 69% (4372/6336) 2026-10-24T05:19:20.3514941Z Updating files: 70% (4436/6336) 2026-10-24T05:19:20.3532621Z Updating files: 71% (4499/6336) 2026-10-24T05:19:20.3548290Z Updating files: 72% (4562/6336) 2026-10-24T05:19:20.3572032Z Updating files: 73% (4626/6336) 2026-10-24T05:19:20.3819713Z Updating files: 74% (4689/6336) 2026-10-24T05:19:20.4000560Z Updating files: 75% (4752/6336) 2026-10-24T05:19:20.4021993Z Updating files: 76% (4816/6336) 2026-10-24T05:19:20.4042294Z Updating files: 77% (4879/6336) 2026-10-24T05:19:20.4068334Z Updating files: 78% (4943/6336) 2026-10-24T05:19:20.4086170Z Updating files: 79% (5006/6336) 2026-10-24T05:19:20.4104594Z Updating files: 80% (5069/6336) 2026-10-24T05:19:20.4120665Z Updating files: 81% (5133/6336) 2026-10-24T05:19:20.4138857Z Updating files: 82% (5196/6336) 2026-10-24T05:19:20.4157029Z Updating files: 83% (5259/6336) 2026-10-24T05:19:20.4177153Z Updating files: 84% (5323/6336) 2026-10-24T05:19:20.4198801Z Updating files: 85% (5386/6336) 2026-10-24T05:19:20.4221320Z Updating files: 86% (5449/6336) 2026-10-24T05:19:20.4289120Z Updating files: 87% (5513/6336) 2026-10-24T05:19:20.4319375Z Updating files: 88% (5576/6336) 2026-10-24T05:19:20.4339852Z Updating files: 89% (5640/6336) 2026-10-24T05:19:20.4361626Z Updating files: 90% (5703/6336) 2026-10-24T05:19:20.4394393Z Updating files: 91% (5766/6336) 2026-10-24T05:19:20.4411696Z Updating files: 92% (5830/6336) 2026-10-24T05:19:20.4427105Z Updating files: 93% (5893/6336) 2026-10-24T05:19:20.4447163Z Updating files: 94% (5956/6336) 2026-10-24T05:19:20.4469647Z Updating files: 95% (6020/6336) 2026-10-24T05:19:20.4521129Z Updating files: 96% (6083/6336) 2026-10-24T05:19:20.4546923Z Updating files: 97% (6146/6336) 2026-10-24T05:19:20.4592972Z Updating files: 98% (6210/6336) 2026-10-24T05:19:20.4611284Z Updating files: 99% (6273/6336) 2026-10-24T05:19:20.4611556Z Updating files: 100% (6336/6336) 2026-10-24T05:19:20.4611724Z Updating files: 100% (6336/6336), done. 2026-10-24T05:19:20.4759437Z Switched to a new branch 'main' 2026-10-24T05:19:20.4760379Z branch 'main' set up to track 'origin/main'. 2026-10-24T05:19:20.4772450Z ##[endgroup] 2026-10-24T05:19:20.4805384Z [command]/usr/local/bin/git log -1 --format=%H 2026-10-24T05:19:20.4823146Z 940e3fafd28ab98545b069ccfbeaf9e9da3b8f28 2026-10-24T05:19:20.4892118Z ##[group]Run files="$(git ls-files .github/pr-assets)" 2026-10-24T05:19:20.4892346Z files="$(git ls-files .github/pr-assets)" 2026-10-24T05:19:20.4892557Z if test -n "$files"; then 2026-10-24T05:19:20.4892778Z  printf 'PR evidence must be uploaded to GitHub, not committed:\n%s\n' "$files" >&2 2026-10-24T05:19:20.4892978Z  exit 1 2026-10-24T05:19:20.4893081Z fi 2026-10-24T05:19:20.4902070Z shell: /usr/bin/bash -e {0} 2026-10-24T05:19:20.4902202Z env: 2026-10-24T05:19:20.4902315Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 236 2026-10-24T05:19:20.4902468Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 360 2026-10-24T05:19:20.4902650Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T05:19:20.4902779Z ##[endgroup] 2026-10-24T05:19:20.5035904Z Prepare all required actions 2026-10-24T05:19:20.5036206Z Getting action download info 2026-10-24T05:19:20.6050569Z Download action repository 'voidzero-dev/setup-vp@v1' (SHA:250f29ce396baf5e8f24498e17c0dfdebabc26eb) 2026-10-24T05:19:20.6955248Z ##[group]Run ./.github/actions/setup-ci-deps 2026-10-24T05:19:20.6955407Z env: 2026-10-24T05:19:20.6955528Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 236 2026-10-24T05:19:20.6955724Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 360 2026-10-24T05:19:20.6955901Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T05:19:20.6956037Z ##[endgroup] 2026-10-24T05:19:20.7050148Z ##[start-action display=Resolve Vite+ version;id=__self.vp] 2026-10-24T05:19:20.7066742Z ##[group]Run echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-24T05:19:20.7067123Z echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-24T05:19:20.7067447Z echo "node=$(jq -r '.engines.node' package.json)" >> "$GITHUB_OUTPUT" 2026-10-24T05:19:20.7067692Z echo "pnpm=$(jq -r '.packageManager' package.json)" >> "$GITHUB_OUTPUT" 2026-10-24T05:19:20.7077086Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T05:19:20.7077259Z env: 2026-10-24T05:19:20.7077388Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 236 2026-10-24T05:19:20.7077537Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 360 2026-10-24T05:19:20.7077685Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T05:19:20.7077820Z ##[endgroup] 2026-10-24T05:19:20.7144064Z ##[end-action id=__self.vp;outcome=success;conclusion=success;duration_ms=9] 2026-10-24T05:19:20.7145482Z ##[start-action display=Cache Vite+;id=__self.vp_cache] 2026-10-24T05:19:20.7184665Z ##[group]Run actions/cache@v6 2026-10-24T05:19:20.7184802Z with: 2026-10-24T05:19:20.7185054Z path: ~/.vite-plus 2026-10-24T05:19:20.7185212Z key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T05:19:20.7185402Z enableCrossOsArchive: false 2026-10-24T05:19:20.7185529Z fail-on-cache-miss: false 2026-10-24T05:19:20.7185650Z lookup-only: false 2026-10-24T05:19:20.7185756Z save-always: false 2026-10-24T05:19:20.7185863Z env: 2026-10-24T05:19:20.7185968Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 236 2026-10-24T05:19:20.7186109Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 360 2026-10-24T05:19:20.7186246Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T05:19:20.7186372Z ##[endgroup] 2026-10-24T05:19:20.9256859Z Cache hit for: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T05:19:21.2848121Z Received 170349591 of 170349591 (100.0%), 484.9 MBs/sec 2026-10-24T05:19:21.2848736Z Cache Size: ~162 MB (170349591 B) 2026-10-24T05:19:21.2879376Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/87fd010b-7716-4a48-a9a4-a6d2db43476c/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T05:19:21.9404540Z Cache restored successfully 2026-10-24T05:19:21.9628352Z Cache restored from key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T05:19:21.9720747Z ##[end-action id=__self.vp_cache;outcome=success;conclusion=success;duration_ms=1257] 2026-10-24T05:19:21.9723931Z ##[start-action display=Use cached Vite+;id=__self.__run] 2026-10-24T05:19:21.9750002Z ##[group]Run echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-24T05:19:21.9750316Z echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-24T05:19:21.9750620Z "$HOME/.vite-plus/bin/vp" env use "26.12.1" 2026-10-24T05:19:21.9766174Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T05:19:21.9766461Z env: 2026-10-24T05:19:21.9766666Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 236 2026-10-24T05:19:21.9766924Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 360 2026-10-24T05:19:21.9767179Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T05:19:21.9767405Z ##[endgroup] 2026-10-24T05:19:21.9817624Z Using Node.js v26.12.1 (resolved from 26.12.1) 2026-10-24T05:19:21.9827335Z ##[end-action id=__self.__run;outcome=success;conclusion=success;duration_ms=10] 2026-10-24T05:19:21.9829214Z ##[start-action display=Setup Vite+;id=__self.__voidzero-dev_setup-vp] 2026-10-24T05:19:21.9834903Z ##[end-action id=__self.__voidzero-dev_setup-vp;outcome=skipped;conclusion=skipped;duration_ms=0] 2026-10-24T05:19:21.9836226Z ##[start-action display=Resolve pnpm store path;id=__self.pnpm_store] 2026-10-24T05:19:21.9847980Z ##[group]Run store_path="$(vp pm cache dir)" 2026-10-24T05:19:21.9848181Z store_path="$(vp pm cache dir)" 2026-10-24T05:19:21.9848346Z echo "path=$store_path" >> "$GITHUB_OUTPUT" 2026-10-24T05:19:21.9861332Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T05:19:21.9861508Z env: 2026-10-24T05:19:21.9861628Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 236 2026-10-24T05:19:21.9861793Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 360 2026-10-24T05:19:21.9861945Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T05:19:21.9862078Z ##[endgroup] 2026-10-24T05:19:22.0030874Z ##[end-action id=__self.pnpm_store;outcome=success;conclusion=success;duration_ms=19] 2026-10-24T05:19:22.0033098Z ##[start-action display=Cache full pnpm store;id=__self.__actions_cache] 2026-10-24T05:19:22.0432788Z ##[group]Run actions/cache@v6 2026-10-24T05:19:22.0432935Z with: 2026-10-24T05:19:22.0433067Z path: /home/runner/.local/share/pnpm/store/v11 2026-10-24T05:19:22.0433327Z key: pnpm-full-v1-Linux-X64-8600a8d4a7fcc9519d421cef0c77201c793c5d8afbbef2897636b5b9305a9b7d 2026-10-24T05:19:22.0433598Z restore-keys: pnpm-full-v1-Linux-X64- 2026-10-24T05:19:22.0433745Z enableCrossOsArchive: false 2026-10-24T05:19:22.0433881Z fail-on-cache-miss: false 2026-10-24T05:19:22.0434081Z lookup-only: false 2026-10-24T05:19:22.0434242Z save-always: false 2026-10-24T05:19:22.0434409Z env: 2026-10-24T05:19:22.0434695Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 236 2026-10-24T05:19:22.0435171Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 360 2026-10-24T05:19:22.0435402Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T05:19:22.0435599Z ##[endgroup] 2026-10-24T05:19:22.2499849Z Cache hit for restore-key: pnpm-full-v1-Linux-X64-3cb0b4d7cff93dc8fe33f2ea73cac71ca25a36270fcb648b9b4a9320151012ef 2026-10-24T05:19:23.2780257Z Received 570425344 of 995020926 (57.3%), 541.3 MBs/sec 2026-10-24T05:19:23.9398219Z Received 995020926 of 995020926 (100.0%), 569.2 MBs/sec 2026-10-24T05:19:23.9398833Z Cache Size: ~949 MB (995020926 B) 2026-10-24T05:19:23.9426420Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/8323c114-9774-4a24-8a0c-b1f77afd9ab7/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T05:19:28.9291977Z Cache restored successfully 2026-10-24T05:19:28.9736720Z Cache restored from key: pnpm-full-v1-Linux-X64-3cb0b4d7cff93dc8fe33f2ea73cac71ca25a36270fcb648b9b4a9320151012ef 2026-10-24T05:19:28.9798361Z ##[end-action id=__self.__actions_cache;outcome=success;conclusion=success;duration_ms=6976] 2026-10-24T05:19:28.9800572Z ##[start-action display=Install dependencies;id=__self.__run_2] 2026-10-24T05:19:28.9810062Z ##[group]Run vp install 2026-10-24T05:19:28.9810210Z vp install 2026-10-24T05:19:28.9819088Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T05:19:28.9819250Z env: 2026-10-24T05:19:28.9819366Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 236 2026-10-24T05:19:28.9819509Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 360 2026-10-24T05:19:28.9819651Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T05:19:28.9819783Z ##[endgroup] 2026-10-24T05:19:29.0125465Z Scope: all 33 workspace projects 2026-10-24T05:19:29.1101776Z ? Verifying lockfile against supply-chain policies (2088 entries)... 2026-10-24T05:19:29.3732517Z Packages are hard linked from the content-addressable store to the virtual store. 2026-10-24T05:19:29.3732849Z Content-addressable store is at: /home/runner/.local/share/pnpm/store/v11 2026-10-24T05:19:29.3736995Z Virtual store is at: node_modules/.pnpm 2026-10-24T05:19:31.1854995Z ✓ Lockfile passes supply-chain policies (2088 entries in 2.1s) 2026-10-24T05:19:31.1855256Z Lockfile is up to date, resolution step is skipped 2026-10-24T05:19:31.2013170Z Packages: +1721 2026-10-24T05:19:31.2013348Z ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2026-10-24T05:19:31.2309464Z Progress: resolved 1721, reused 1717, downloaded 1, added 1721, done 2026-10-24T05:19:32.0359137Z . prepare$ vp config --no-agent 2026-10-24T05:19:32.1515710Z . prepare: Done 2026-10-24T05:19:32.1530365Z 2026-10-24T05:19:32.1530449Z devDependencies: 2026-10-24T05:19:32.1530629Z + @coderabbitai/config 1.1.0 2026-10-24T05:19:32.1530789Z + @shadcn/lint 0.1.5 2026-10-24T05:19:32.1530929Z + @types/node 24.12.4 2026-10-24T05:19:32.1531092Z + knip 6.34.0 2026-10-24T05:19:32.1531225Z + typescript <- @tsc-rs/typescript 0.8.0 2026-10-24T05:19:32.1531365Z + vite-plus 1.3.0 2026-10-24T05:19:32.1531432Z 2026-10-24T05:19:32.1565134Z Done in 3.2s using pnpm v12.14.0 2026-10-24T05:19:32.1703467Z ##[end-action id=__self.__run_2;outcome=success;conclusion=success;duration_ms=3190] 2026-10-24T05:19:32.2126322Z ##[group]Run actions/cache@v6 2026-10-24T05:19:32.2126463Z with: 2026-10-24T05:19:32.2126567Z path: ~/.cache/electron 2026-10-24T05:19:32.2126783Z key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T05:19:32.2127014Z enableCrossOsArchive: false 2026-10-24T05:19:32.2127143Z fail-on-cache-miss: false 2026-10-24T05:19:32.2127262Z lookup-only: false 2026-10-24T05:19:32.2127372Z save-always: false 2026-10-24T05:19:32.2127478Z env: 2026-10-24T05:19:32.2127588Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 236 2026-10-24T05:19:32.2127729Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 360 2026-10-24T05:19:32.2127879Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T05:19:32.2128014Z ##[endgroup] 2026-10-24T05:19:32.4019733Z Cache hit for: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T05:19:32.5673439Z Received 122906203 of 122906203 (100.0%), 786.7 MBs/sec 2026-10-24T05:19:32.5673790Z Cache Size: ~117 MB (122906203 B) 2026-10-24T05:19:32.5698975Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/5f5e3a89-45dd-4044-9db1-8b62e477ad71/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T05:19:32.6239950Z Cache restored successfully 2026-10-24T05:19:32.6837584Z Cache restored from key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T05:19:32.6940585Z ##[group]Run vp run --filter @t3tools/desktop ensure:electron 2026-10-24T05:19:32.6941032Z vp run --filter @t3tools/desktop ensure:electron 2026-10-24T05:19:32.6952687Z shell: /usr/bin/bash -e {0} 2026-10-24T05:19:32.6952834Z env: 2026-10-24T05:19:32.6953243Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 236 2026-10-24T05:19:32.6953405Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 360 2026-10-24T05:19:32.6953549Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T05:19:32.6953692Z ##[endgroup] 2026-10-24T05:19:32.8645856Z ~/apps/desktop$ node scripts/ensure-electron-runtime.mjs ⊘ cache disabled 2026-10-24T05:19:33.4115285Z /home/runner/_work/t3code/t3code/node_modules/.pnpm/electron@44.9.3_supports-color@8.1.1/node_modules/electron/dist/electron 2026-10-24T05:19:33.4132480Z 2026-10-24T05:19:33.4215423Z ##[group]Run vp run knip:check 2026-10-24T05:19:33.4215599Z vp run knip:check 2026-10-24T05:19:33.4224630Z shell: /usr/bin/bash -e {0} 2026-10-24T05:19:33.4224751Z env: 2026-10-24T05:19:33.4224861Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 236 2026-10-24T05:19:33.4225007Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 360 2026-10-24T05:19:33.4225156Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T05:19:33.4225289Z ##[endgroup] 2026-10-24T05:19:33.5626688Z $ knip --include files,dependencies --no-config-hints ⊘ cache disabled 2026-10-24T05:19:37.1057785Z 2026-10-24T05:19:37.1061876Z $ 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-24T05:19:44.9706299Z 2026-10-24T05:19:44.9707355Z --- 2026-10-24T05:19:44.9707628Z vp run: 2/2 successful. (Run `vp run --last-details` for full details) 2026-10-24T05:19:44.9812373Z ##[group]Run vp run --filter @t3tools/source-control-github generate --check 2026-10-24T05:19:44.9812733Z vp run --filter @t3tools/source-control-github generate --check 2026-10-24T05:19:44.9822130Z shell: /usr/bin/bash -e {0} 2026-10-24T05:19:44.9822261Z env: 2026-10-24T05:19:44.9822372Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 236 2026-10-24T05:19:44.9822517Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 360 2026-10-24T05:19:44.9822655Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T05:19:44.9822784Z ##[endgroup] 2026-10-24T05:19:45.1206801Z ~/packages/source-control-github$ graphqlgen --check ⊘ cache disabled 2026-10-24T05:19:45.2986136Z 2026-10-24T05:19:45.3062575Z ##[group]Run vp run --filter t3 generate --check 2026-10-24T05:19:45.3062836Z vp run --filter t3 generate --check 2026-10-24T05:19:45.3072748Z shell: /usr/bin/bash -e {0} 2026-10-24T05:19:45.3072891Z env: 2026-10-24T05:19:45.3073015Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 236 2026-10-24T05:19:45.3073165Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 360 2026-10-24T05:19:45.3073308Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T05:19:45.3073443Z ##[endgroup] 2026-10-24T05:19:45.4464445Z ~/apps/server$ graphqlgen --check ⊘ cache disabled 2026-10-24T05:19:45.5906472Z 2026-10-24T05:19:45.5971581Z ##[group]Run vp check 2026-10-24T05:19:45.5971749Z vp check 2026-10-24T05:19:45.5981096Z shell: /usr/bin/bash -e {0} 2026-10-24T05:19:45.5981222Z env: 2026-10-24T05:19:45.5981328Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 236 2026-10-24T05:19:45.5981472Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 360 2026-10-24T05:19:45.5981609Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T05:19:45.5981744Z ##[endgroup] 2026-10-24T05:19:46.1568588Z pass: All 5690 files are correctly formatted (424ms, 8 threads) 2026-10-24T05:19:51.2154812Z warn: Lint warnings found 2026-10-24T05:19:51.2156217Z ⚠ eslint(no-unused-vars): Identifier 'Image' is imported but never used. 2026-10-24T05:19:51.2156792Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:17:10] 2026-10-24T05:19:51.2157265Z 16 │ import type { NativeSyntheticEvent, ViewProps } from "react-native"; 2026-10-24T05:19:51.2157693Z 17 │ import { Image, Platform, StyleSheet } from "react-native"; 2026-10-24T05:19:51.2158179Z ·  ──┬── 2026-10-24T05:19:51.2158585Z · ╰── 'Image' is imported here 2026-10-24T05:19:51.2158908Z 18 │ 2026-10-24T05:19:51.2159090Z ╰──── 2026-10-24T05:19:51.2159330Z  help: Consider removing this import. 2026-10-24T05:19:51.2159520Z 2026-10-24T05:19:51.2159870Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T05:19:51.2160400Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:229:6] 2026-10-24T05:19:51.2160894Z 225 │ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents( 2026-10-24T05:19:51.2161313Z 226 │ nativeEventSnapshotsRef.current, 2026-10-24T05:19:51.2161638Z ·  ───────────┬─────────── 2026-10-24T05:19:51.2162602Z · ╰── 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-24T05:19:51.2163406Z 227 │ mostRecentEventCount, 2026-10-24T05:19:51.2163643Z 228 │ ); 2026-10-24T05:19:51.2163947Z 229 │ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]); 2026-10-24T05:19:51.2164391Z ·  ──────────────────────────┬────────────────────────── 2026-10-24T05:19:51.2164936Z · ╰── This dependency list is missing values used by the callback 2026-10-24T05:19:51.2165377Z 230 │ const assumedValue = props.value; 2026-10-24T05:19:51.2165625Z ╰──── 2026-10-24T05:19:51.2165981Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T05:19:51.2166559Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2166848Z 2026-10-24T05:19:51.2167060Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T05:19:51.2167405Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:237:7] 2026-10-24T05:19:51.2167700Z 236 │ nativeEventSnapshotsRef.current = assumeComposerControlledState( 2026-10-24T05:19:51.2167947Z 237 │ nativeEventSnapshotsRef.current, 2026-10-24T05:19:51.2168141Z ·  ───────────┬─────────── 2026-10-24T05:19:51.2168722Z · ╰── 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-24T05:19:51.2169192Z 238 │ controlledEventCount, 2026-10-24T05:19:51.2169347Z 239 │ assumedValue, 2026-10-24T05:19:51.2169553Z 240 │ ); 2026-10-24T05:19:51.2169840Z 241 │ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]); 2026-10-24T05:19:51.2170415Z ·  ───────────┬────────── 2026-10-24T05:19:51.2170874Z · ╰── Unnecessary dependency `controlledDocumentJson` 2026-10-24T05:19:51.2171231Z 242 │ const acceptNativeEvent = useCallback( 2026-10-24T05:19:51.2171387Z ╰──── 2026-10-24T05:19:51.2171851Z  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-24T05:19:51.2172538Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2172827Z 2026-10-24T05:19:51.2172973Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:19:51.2173263Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29] 2026-10-24T05:19:51.2173536Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T05:19:51.2173779Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T05:19:51.2174023Z ·  ─────────────┬──────────── 2026-10-24T05:19:51.2174306Z · ╰── Cannot access ref value during render 2026-10-24T05:19:51.2174518Z 163 │ }); 2026-10-24T05:19:51.2174633Z ╰──── 2026-10-24T05:19:51.2175157Z  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-24T05:19:51.2175853Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:19:51.2176122Z 2026-10-24T05:19:51.2176279Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:19:51.2176565Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29] 2026-10-24T05:19:51.2176834Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T05:19:51.2177073Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T05:19:51.2177316Z ·  ─────────────┬──────────── 2026-10-24T05:19:51.2177636Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T05:19:51.2177882Z 163 │ }); 2026-10-24T05:19:51.2178002Z ╰──── 2026-10-24T05:19:51.2178513Z  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-24T05:19:51.2179256Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:19:51.2179532Z 2026-10-24T05:19:51.2179672Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:19:51.2179955Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:164:23] 2026-10-24T05:19:51.2180160Z 163 │ }); 2026-10-24T05:19:51.2180312Z 164 │ confirmedTokensRef.current = tokens; 2026-10-24T05:19:51.2180620Z ·  ─────────┬────────────┬─── 2026-10-24T05:19:51.2181004Z · │ ╰── Cannot update ref value during render 2026-10-24T05:19:51.2181286Z · ╰── This value is a ref 2026-10-24T05:19:51.2181478Z 165 │ return JSON.stringify( 2026-10-24T05:19:51.2181622Z ╰──── 2026-10-24T05:19:51.2182240Z  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-24T05:19:51.2183136Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:19:51.2183403Z 2026-10-24T05:19:51.2183554Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:19:51.2183840Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:206:5] 2026-10-24T05:19:51.2184054Z 205 │ mostRecentEventCount, 2026-10-24T05:19:51.2184232Z 206 │ nativeEventSnapshotsRef.current, 2026-10-24T05:19:51.2184442Z ·  ───────────────┬─────────────── 2026-10-24T05:19:51.2184734Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T05:19:51.2184959Z 207 │ ); 2026-10-24T05:19:51.2185090Z ╰──── 2026-10-24T05:19:51.2185595Z  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-24T05:19:51.2186278Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:19:51.2186553Z 2026-10-24T05:19:51.2186691Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:19:51.2186975Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:212:5] 2026-10-24T05:19:51.2187187Z 211 │ mostRecentEventCount, 2026-10-24T05:19:51.2187362Z 212 │ nativeEventSnapshotsRef.current, 2026-10-24T05:19:51.2187566Z ·  ───────────────┬─────────────── 2026-10-24T05:19:51.2187858Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T05:19:51.2188088Z 213 │ ); 2026-10-24T05:19:51.2188201Z ╰──── 2026-10-24T05:19:51.2188766Z  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-24T05:19:51.2189468Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:19:51.2189740Z 2026-10-24T05:19:51.2189922Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T05:19:51.2190240Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:197:6] 2026-10-24T05:19:51.2190504Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T05:19:51.2190752Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T05:19:51.2191061Z ·  ─────────┬──────── 2026-10-24T05:19:51.2191725Z · ╰── 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-24T05:19:51.2192173Z 163 │ }); 2026-10-24T05:19:51.2192332Z 164 │ confirmedTokensRef.current = tokens; 2026-10-24T05:19:51.2192508Z 165 │ return JSON.stringify( 2026-10-24T05:19:51.2192761Z 166 │ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => { 2026-10-24T05:19:51.2192995Z 167 │ const record = 2026-10-24T05:19:51.2193159Z 168 │ token.type === "context" 2026-10-24T05:19:51.2193418Z 169 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-24T05:19:51.2193654Z 170 │ : undefined; 2026-10-24T05:19:51.2193843Z 171 │ const presentation = contextChipPresentation( 2026-10-24T05:19:51.2194074Z 172 │ token.type === "context" ? token.kind : token.type, 2026-10-24T05:19:51.2194261Z 173 │ record, 2026-10-24T05:19:51.2194395Z 174 │ ); 2026-10-24T05:19:51.2194551Z 175 │ const icon = contextChipIcon( 2026-10-24T05:19:51.2194721Z 176 │ presentation, 2026-10-24T05:19:51.2194945Z 177 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-24T05:19:51.2195151Z 178 │ ); 2026-10-24T05:19:51.2195284Z 179 │ return { 2026-10-24T05:19:51.2195430Z 180 │ type: token.type, 2026-10-24T05:19:51.2195592Z 181 │ source: token.source, 2026-10-24T05:19:51.2195758Z 182 │ start: token.start, 2026-10-24T05:19:51.2195920Z 183 │ end: token.end, 2026-10-24T05:19:51.2196158Z 184 │ accent: contextChipAccent(presentation.accent, theme, chipTextColor), 2026-10-24T05:19:51.2196375Z 185 │ label: 2026-10-24T05:19:51.2196532Z 186 │ token.type === "skill" 2026-10-24T05:19:51.2196735Z 187 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-24T05:19:51.2196942Z 188 │ : token.type === "context" 2026-10-24T05:19:51.2197271Z 189 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-24T05:19:51.2197581Z 190 │ : basename(token.value), 2026-10-24T05:19:51.2197825Z 191 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-24T05:19:51.2198072Z 192 │ iconUri: contextChipIconUri(icon), 2026-10-24T05:19:51.2198274Z 193 │ tintsIcon: icon.kind === "chip", 2026-10-24T05:19:51.2198688Z 194 │ }; 2026-10-24T05:19:51.2198848Z 195 │ }), 2026-10-24T05:19:51.2198975Z 196 │ ); 2026-10-24T05:19:51.2199170Z 197 │ }, [props.value, props.context, skillLabels, theme, chipTextColor]); 2026-10-24T05:19:51.2199465Z ·  ───────────────────────────────┬─────────────────────────────── 2026-10-24T05:19:51.2199812Z · ╰── This dependency list is missing values used by the callback 2026-10-24T05:19:51.2200139Z 198 │ // Every render resolves against the snapshot history, so a render whose 2026-10-24T05:19:51.2200335Z ╰──── 2026-10-24T05:19:51.2200595Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T05:19:51.2201213Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2201588Z 2026-10-24T05:19:51.2201774Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T05:19:51.2202093Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:259:5] 2026-10-24T05:19:51.2202368Z 251 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-24T05:19:51.2202609Z 252 │ nativeEventSnapshotsRef.current.push({ 2026-10-24T05:19:51.2202818Z ·  ───────────┬─────────── 2026-10-24T05:19:51.2203379Z · ╰── 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-24T05:19:51.2203869Z 253 │ eventCount: acknowledgedEventCount, 2026-10-24T05:19:51.2204042Z 254 │ value, 2026-10-24T05:19:51.2204196Z 255 │ selection: nextSelection, 2026-10-24T05:19:51.2204352Z 256 │ }); 2026-10-24T05:19:51.2204506Z 257 │ return acknowledgedEventCount; 2026-10-24T05:19:51.2204660Z 258 │ }, 2026-10-24T05:19:51.2204776Z 259 │ [], 2026-10-24T05:19:51.2204912Z ·  ─┬ 2026-10-24T05:19:51.2205171Z · ╰── This dependency list is missing values used by the callback 2026-10-24T05:19:51.2205398Z 260 │ ); 2026-10-24T05:19:51.2205509Z ╰──── 2026-10-24T05:19:51.2205768Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T05:19:51.2206279Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2206572Z 2026-10-24T05:19:51.2206826Z ⚠ eslint(no-unused-vars): Function 'promptResponseHasMissingXAiStopReason' is declared but never used. 2026-10-24T05:19:51.2207217Z ╭─[packages/provider-grok/src/server/xaiAcpExtension.ts:1620:10] 2026-10-24T05:19:51.2207428Z 1619 │ 2026-10-24T05:19:51.2207701Z 1620 │ function promptResponseHasMissingXAiStopReason(response: EffectAcpSchema.PromptResponse): boolean { 2026-10-24T05:19:51.2208031Z ·  ──────────────────┬────────────────── 2026-10-24T05:19:51.2208347Z · ╰── 'promptResponseHasMissingXAiStopReason' is declared here 2026-10-24T05:19:51.2208661Z 1621 │ const meta = response._meta; 2026-10-24T05:19:51.2208877Z ╰──── 2026-10-24T05:19:51.2209119Z  help: Consider removing this declaration. 2026-10-24T05:19:51.2209238Z 2026-10-24T05:19:51.2209494Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T05:19:51.2209862Z ╭─[packages/provider-grok/src/server/adapter.ts:408:7] 2026-10-24T05:19:51.2210052Z 407 │ 2026-10-24T05:19:51.2210187Z 408 │ const layer: Layer.Layer< 2026-10-24T05:19:51.2210352Z ·  ──┬── 2026-10-24T05:19:51.2210556Z · ╰── 'layer' is declared here 2026-10-24T05:19:51.2210779Z 409 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T05:19:51.2210939Z ╰──── 2026-10-24T05:19:51.2211098Z  help: Consider removing this declaration. 2026-10-24T05:19:51.2211216Z 2026-10-24T05:19:51.2211367Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:19:51.2211671Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:152:27] 2026-10-24T05:19:51.2212009Z 151 │ 2026-10-24T05:19:51.2212269Z 152 │ {props.children(open)} 2026-10-24T05:19:51.2212462Z ·  ──┬─ 2026-10-24T05:19:51.2212726Z · ╰── Cannot access ref value during render 2026-10-24T05:19:51.2212939Z 153 │ 2026-10-24T05:19:51.2213067Z ╰──── 2026-10-24T05:19:51.2213591Z  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-24T05:19:51.2214298Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:19:51.2214574Z 2026-10-24T05:19:51.2214769Z ⚠ react(memo-dependencies): Found missing/extra memoization dependencies 2026-10-24T05:19:51.2215108Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:140:9] 2026-10-24T05:19:51.2215340Z 139 │ if (action.id !== undefined) { 2026-10-24T05:19:51.2215516Z 140 │ props.onPressAction?.({ 2026-10-24T05:19:51.2215687Z ·  ──┬── 2026-10-24T05:19:51.2215901Z · ╰── Missing dependency `props` 2026-10-24T05:19:51.2216138Z 141 │ nativeEvent: { event: action.id }, 2026-10-24T05:19:51.2216401Z 142 │ } as Parameters>[0]); 2026-10-24T05:19:51.2216612Z 143 │ } 2026-10-24T05:19:51.2216730Z 144 │ }, 2026-10-24T05:19:51.2216880Z 145 │ [close, props.onPressAction], 2026-10-24T05:19:51.2217075Z ·  ─────────┬───────── 2026-10-24T05:19:51.2217391Z · ╰── Overly precise dependency `props.onPressAction`, use `props` instead 2026-10-24T05:19:51.2217642Z 146 │ ); 2026-10-24T05:19:51.2217752Z ╰──── 2026-10-24T05:19:51.2218273Z  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-24T05:19:51.2219104Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2219474Z 2026-10-24T05:19:51.2219752Z ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'. 2026-10-24T05:19:51.2220133Z ╭─[apps/server/src/provider/AntigravityAuth.ts:285:20] 2026-10-24T05:19:51.2220326Z 284 │ }, 2026-10-24T05:19:51.2220473Z 285 │ (effect, flow, stopSessions) => 2026-10-24T05:19:51.2220664Z ·  ──────┬───── 2026-10-24T05:19:51.2220909Z · ╰── 'stopSessions' is declared here 2026-10-24T05:19:51.2221122Z 286 │ effect.pipe( 2026-10-24T05:19:51.2221279Z ╰──── 2026-10-24T05:19:51.2221528Z  help: Consider removing this parameter. 2026-10-24T05:19:51.2221718Z 2026-10-24T05:19:51.2222069Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:19:51.2222643Z ╭─[apps/mobile/src/components/ProjectFavicon.tsx:172:5] 2026-10-24T05:19:51.2222969Z 167 │ const [activeFaviconRequest, setActiveFaviconRequest] = useState(null); 2026-10-24T05:19:51.2223228Z 168 │ useLayoutEffect(() => { 2026-10-24T05:19:51.2223420Z ·  ───────┬─────── 2026-10-24T05:19:51.2223776Z · ╰── This is the containing effect 2026-10-24T05:19:51.2224011Z 169 │ if (faviconRequest === null) return; 2026-10-24T05:19:51.2224174Z 170 │ 2026-10-24T05:19:51.2224372Z 171 │ const endRequest = beginProjectFaviconRequest(faviconRequest); 2026-10-24T05:19:51.2224616Z 172 │ setActiveFaviconRequest(faviconRequest); 2026-10-24T05:19:51.2224817Z ·  ───────────┬─────────── 2026-10-24T05:19:51.2225081Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:19:51.2225338Z 173 │ return endRequest; 2026-10-24T05:19:51.2225611Z ╰──── 2026-10-24T05:19:51.2226666Z  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-24T05:19:51.2227865Z  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-24T05:19:51.2228166Z 2026-10-24T05:19:51.2228417Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:19:51.2228843Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:68:5] 2026-10-24T05:19:51.2229093Z 66 │ const { id: attachmentId, fileUri } = attachment; 2026-10-24T05:19:51.2229276Z 67 │ useEffect(() => { 2026-10-24T05:19:51.2229428Z ·  ────┬──── 2026-10-24T05:19:51.2229640Z · ╰── This is the containing effect 2026-10-24T05:19:51.2229837Z 68 │ setUri(null); 2026-10-24T05:19:51.2229988Z ·  ───┬── 2026-10-24T05:19:51.2230232Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:19:51.2230528Z 69 │ setError(null); 2026-10-24T05:19:51.2230770Z ╰──── 2026-10-24T05:19:51.2231401Z  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-24T05:19:51.2232234Z  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-24T05:19:51.2232532Z 2026-10-24T05:19:51.2232732Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:19:51.2233061Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:91:7] 2026-10-24T05:19:51.2233262Z 90 │ }; 2026-10-24T05:19:51.2233404Z 91 │ }, [attachmentId, fileUri]); 2026-10-24T05:19:51.2233615Z ·  ──────┬───── ───┬─── 2026-10-24T05:19:51.2233907Z · │ ╰── Unnecessary dependency `fileUri` 2026-10-24T05:19:51.2234220Z · ╰── Unnecessary dependency `attachmentId` 2026-10-24T05:19:51.2234500Z 92 │ const mimeType = videoMimeType(attachment) ?? attachment.mimeType; 2026-10-24T05:19:51.2234690Z ╰──── 2026-10-24T05:19:51.2235029Z  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-24T05:19:51.2235610Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2235903Z 2026-10-24T05:19:51.2236112Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T05:19:51.2236456Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:213:34] 2026-10-24T05:19:51.2236664Z 212 │ useEffect(() => { 2026-10-24T05:19:51.2236858Z 213 │ if (!isFocused && hasSource) props.onRequestClose(); 2026-10-24T05:19:51.2237081Z ·  ──┬── 2026-10-24T05:19:51.2237335Z · ╰── Missing dependency `props` 2026-10-24T05:19:51.2237594Z 214 │ }, [isFocused, hasSource, props.onRequestClose]); 2026-10-24T05:19:51.2237824Z ·  ──────────┬───────── 2026-10-24T05:19:51.2238170Z · ╰── Overly precise dependency `props.onRequestClose`, use `props` instead 2026-10-24T05:19:51.2238527Z 215 │ const { source } = props; 2026-10-24T05:19:51.2238785Z ╰──── 2026-10-24T05:19:51.2239374Z  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-24T05:19:51.2240053Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2240346Z 2026-10-24T05:19:51.2240883Z ⚠ 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-24T05:19:51.2241465Z ╭─[apps/server/src/usage/UsageService.test.ts:2615:7] 2026-10-24T05:19:51.2241698Z 2614 │ let orphanedAt: number | undefined; 2026-10-24T05:19:51.2242039Z 2615 │ ╭─▶ for (let interruptAt = 1; interruptAt <= 31; interruptAt += 1) { 2026-10-24T05:19:51.2242362Z 2616 │ │ const tasks: Array<() => void> = []; 2026-10-24T05:19:51.2242644Z 2617 │ │ const dispatcher: Scheduler.SchedulerDispatcher = { 2026-10-24T05:19:51.2242936Z 2618 │ │ scheduleTask: (task) => tasks.push(task), 2026-10-24T05:19:51.2243180Z 2619 │ │ flush: () => { 2026-10-24T05:19:51.2243416Z 2620 │ │ let task: (() => void) | undefined; 2026-10-24T05:19:51.2243707Z 2621 │ │ while ((task = tasks.shift()) !== undefined) task(); 2026-10-24T05:19:51.2243942Z 2622 │ │ }, 2026-10-24T05:19:51.2244126Z 2623 │ │ }; 2026-10-24T05:19:51.2244292Z 2624 │ │ 2026-10-24T05:19:51.2244542Z 2625 │ │ let requestFiber: Fiber.Fiber | undefined; 2026-10-24T05:19:51.2244808Z 2626 │ │ let requestChecks = 0; 2026-10-24T05:19:51.2245059Z 2627 │ │ const scheduler: Scheduler.Scheduler = { 2026-10-24T05:19:51.2245307Z 2628 │ │ executionMode: "async", 2026-10-24T05:19:51.2245555Z 2629 │ │ makeDispatcher: () => dispatcher, 2026-10-24T05:19:51.2245807Z 2630 │ │ shouldYield: (fiber) => { 2026-10-24T05:19:51.2246067Z 2631 │ │ if (fiber !== requestFiber) return false; 2026-10-24T05:19:51.2246317Z 2632 │ │ requestChecks += 1; 2026-10-24T05:19:51.2246579Z 2633 │ │ if (requestChecks !== interruptAt) return false; 2026-10-24T05:19:51.2246843Z 2634 │ │ fiber.interruptUnsafe(); 2026-10-24T05:19:51.2247067Z 2635 │ │ return true; 2026-10-24T05:19:51.2247260Z 2636 │ │ }, 2026-10-24T05:19:51.2247436Z 2637 │ │ }; 2026-10-24T05:19:51.2247603Z 2638 │ │ 2026-10-24T05:19:51.2247808Z 2639 │ │ const input: UsageSummaryInput = { 2026-10-24T05:19:51.2248041Z 2640 │ │ ...WINDOW, 2026-10-24T05:19:51.2248282Z 2641 │ │ sinceDay: UsageDay.make("2026-09-01"), 2026-10-24T05:19:51.2248630Z 2642 │ │ untilDay: UsageDay.make(`2026-08-${String(interruptAt).padStart(2, "0")}`), 2026-10-24T05:19:51.2248936Z 2643 │ │ }; 2026-10-24T05:19:51.2249150Z 2644 │ │ const first = yield* service 2026-10-24T05:19:51.2249381Z 2645 │ │ .readSummary(input) 2026-10-24T05:19:51.2249590Z 2646 │ │ .pipe( 2026-10-24T05:19:51.2249788Z 2647 │ │ Effect.exit, 2026-10-24T05:19:51.2250061Z 2648 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-24T05:19:51.2250332Z 2649 │ │ Effect.forkChild, 2026-10-24T05:19:51.2250589Z 2650 │ │ ); 2026-10-24T05:19:51.2250825Z 2651 │ │ requestFiber = first; 2026-10-24T05:19:51.2251049Z 2652 │ │ yield* Effect.yieldNow; 2026-10-24T05:19:51.2251276Z 2653 │ │ dispatcher.flush(); 2026-10-24T05:19:51.2251464Z 2654 │ │ 2026-10-24T05:19:51.2251704Z 2655 │ │ const second = yield* service.readSummary(input).pipe( 2026-10-24T05:19:51.2251956Z 2656 │ │ Effect.match({ 2026-10-24T05:19:51.2252198Z 2657 │ │ onFailure: (error) => error.reason, 2026-10-24T05:19:51.2252455Z 2658 │ │ onSuccess: () => "success" as const, 2026-10-24T05:19:51.2252678Z 2659 │ │ }), 2026-10-24T05:19:51.2252935Z 2660 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-24T05:19:51.2253200Z 2661 │ │ Effect.forkChild, 2026-10-24T05:19:51.2253391Z 2662 │ │ ); 2026-10-24T05:19:51.2253589Z 2663 │ │ yield* Effect.yieldNow; 2026-10-24T05:19:51.2253811Z 2664 │ │ dispatcher.flush(); 2026-10-24T05:19:51.2254049Z 2665 │ │ const secondExit = second.pollUnsafe(); 2026-10-24T05:19:51.2254306Z 2666 │ │ if (secondExit === undefined) { 2026-10-24T05:19:51.2254545Z 2667 │ │ second.interruptUnsafe(); 2026-10-24T05:19:51.2254785Z 2668 │ │ orphanedAt = interruptAt; 2026-10-24T05:19:51.2254996Z 2669 │ │ break; 2026-10-24T05:19:51.2255187Z 2670 │ │ } 2026-10-24T05:19:51.2255403Z 2671 │ │ if (Exit.isFailure(secondExit)) { 2026-10-24T05:19:51.2255693Z 2672 │ │ assert.fail("the matching request fiber was interrupted"); 2026-10-24T05:19:51.2255933Z 2673 │ │ } 2026-10-24T05:19:51.2256182Z 2674 │ │ assert.strictEqual(secondExit.value, "invalidWindow"); 2026-10-24T05:19:51.2256471Z 2675 │ ╰─▶ } 2026-10-24T05:19:51.2256669Z 2676 │ 2026-10-24T05:19:51.2256788Z ╰──── 2026-10-24T05:19:51.2256846Z 2026-10-24T05:19:51.2257047Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T05:19:51.2257436Z ╭─[packages/client-runtime/src/state/filesystem.ts:3:8] 2026-10-24T05:19:51.2257692Z 2 │ AuthFilesystemReadScope, 2026-10-24T05:19:51.2257858Z 3 │ type AuthSessionState, 2026-10-24T05:19:51.2258032Z ·  ────────┬─────── 2026-10-24T05:19:51.2258279Z · ╰── 'AuthSessionState' is imported here 2026-10-24T05:19:51.2258500Z 4 │ type FilesystemBrowseEntry, 2026-10-24T05:19:51.2258677Z ╰──── 2026-10-24T05:19:51.2258830Z  help: Consider removing this import. 2026-10-24T05:19:51.2258945Z 2026-10-24T05:19:51.2259213Z ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'. 2026-10-24T05:19:51.2259579Z ╭─[apps/server/src/usage/UsageService.ts:169:7] 2026-10-24T05:19:51.2259767Z 168 │ 2026-10-24T05:19:51.2259915Z 169 │ const layerTest = Layer.succeed( 2026-10-24T05:19:51.2260096Z ·  ────┬──── 2026-10-24T05:19:51.2260322Z · ╰── 'layerTest' is declared here 2026-10-24T05:19:51.2260523Z 170 │ UsageService, 2026-10-24T05:19:51.2260658Z ╰──── 2026-10-24T05:19:51.2260813Z  help: Consider removing this declaration. 2026-10-24T05:19:51.2260932Z 2026-10-24T05:19:51.2261188Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:19:51.2261564Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:60:5] 2026-10-24T05:19:51.2261764Z 57 │ 2026-10-24T05:19:51.2261884Z 58 │ useEffect(() => { 2026-10-24T05:19:51.2262040Z ·  ────┬──── 2026-10-24T05:19:51.2262261Z · ╰── This is the containing effect 2026-10-24T05:19:51.2262496Z 59 │ const controller = new AbortController(); 2026-10-24T05:19:51.2262677Z 60 │ setLoadState("pending"); 2026-10-24T05:19:51.2262841Z ·  ──────┬───── 2026-10-24T05:19:51.2263101Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:19:51.2263422Z 61 │ // A renewed signature is used on Retry, not as a reason to reset the native player. 2026-10-24T05:19:51.2263639Z ╰──── 2026-10-24T05:19:51.2264281Z  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-24T05:19:51.2265132Z  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-24T05:19:51.2265437Z 2026-10-24T05:19:51.2265636Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:19:51.2265967Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:71:7] 2026-10-24T05:19:51.2266192Z 70 │ return () => controller.abort(); 2026-10-24T05:19:51.2266392Z 71 │ }, [player, props.playRequested, attempt]); 2026-10-24T05:19:51.2266679Z ·  ───┬── ─────────┬───────── ───┬─── 2026-10-24T05:19:51.2267071Z · │ │ ╰── Unnecessary dependency `attempt` 2026-10-24T05:19:51.2267533Z · │ ╰── Unnecessary dependency `props.playRequested` 2026-10-24T05:19:51.2267890Z · ╰── Unnecessary dependency `player_0` 2026-10-24T05:19:51.2268084Z 72 │ 2026-10-24T05:19:51.2268203Z ╰──── 2026-10-24T05:19:51.2268545Z  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-24T05:19:51.2269171Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2269467Z 2026-10-24T05:19:51.2269796Z ⚠ 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-24T05:19:51.2270224Z ╭─[packages/effect-acp/src/schema.test.ts:18:12] 2026-10-24T05:19:51.2270520Z 17 │ const command = { name: "plan", description: "Make a plan", input: { hint: "Task" } }; 2026-10-24T05:19:51.2270803Z 18 │ expect(Schema.is(V1.AvailableCommand)(command)).toBe(true); 2026-10-24T05:19:51.2271020Z ·  ───────── 2026-10-24T05:19:51.2271182Z 19 │ expect( 2026-10-24T05:19:51.2271306Z ╰──── 2026-10-24T05:19:51.2271365Z 2026-10-24T05:19:51.2271694Z ⚠ 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-24T05:19:51.2272109Z ╭─[packages/effect-acp/src/schema.test.ts:20:7] 2026-10-24T05:19:51.2272304Z 19 │ expect( 2026-10-24T05:19:51.2272594Z 20 │ Schema.is(V2.AvailableCommand)({ ...command, input: { type: "text", hint: "Task" } }), 2026-10-24T05:19:51.2272843Z ·  ───────── 2026-10-24T05:19:51.2272996Z 21 │ ).toBe(true); 2026-10-24T05:19:51.2273131Z ╰──── 2026-10-24T05:19:51.2273185Z 2026-10-24T05:19:51.2273441Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:19:51.2303104Z ╭─[apps/mobile/src/components/VideoPreviewModal.ios.tsx:63:55] 2026-10-24T05:19:51.2303333Z 61 │ }, []); 2026-10-24T05:19:51.2303464Z 62 │ useEffect(() => { 2026-10-24T05:19:51.2303622Z ·  ────┬──── 2026-10-24T05:19:51.2303849Z · ╰── This is the containing effect 2026-10-24T05:19:51.2304133Z 63 │ if (playbackUrl === null && resolvedUrl !== null) setPlaybackUrl(resolvedUrl); 2026-10-24T05:19:51.2304420Z ·  ───────┬────── 2026-10-24T05:19:51.2304753Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:19:51.2305016Z 64 │ }, [playbackUrl, resolvedUrl]); 2026-10-24T05:19:51.2305162Z ╰──── 2026-10-24T05:19:51.2305798Z  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-24T05:19:51.2306641Z  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-24T05:19:51.2307078Z 2026-10-24T05:19:51.2307407Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T05:19:51.2307732Z ╭─[apps/server/src/provider/Drivers/CodexDriver.test.ts:466:14] 2026-10-24T05:19:51.2307936Z 465 │ 2026-10-24T05:19:51.2308102Z 466 │ for (const {} of ["direct", "wrapper"] as const) { 2026-10-24T05:19:51.2308297Z ·  ── 2026-10-24T05:19:51.2308440Z 467 │ } 2026-10-24T05:19:51.2308551Z ╰──── 2026-10-24T05:19:51.2308874Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T05:19:51.2309098Z 2026-10-24T05:19:51.2309560Z ⚠ 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-24T05:19:51.2310097Z ╭─[packages/effect-acp/src/protocol.test.ts:500:31] 2026-10-24T05:19:51.2310281Z 499 │ 2026-10-24T05:19:51.2310456Z 500 │ const response = yield* Schema.decodeUnknownEffect( 2026-10-24T05:19:51.2310707Z ·  ────────────────────────── 2026-10-24T05:19:51.2310937Z 501 │ Schema.fromJsonString(JsonRpcErrorResponse), 2026-10-24T05:19:51.2311113Z ╰──── 2026-10-24T05:19:51.2311170Z 2026-10-24T05:19:51.2311312Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:19:51.2311578Z ╭─[apps/mobile/src/components/ui/Menu.tsx:54:36] 2026-10-24T05:19:51.2311880Z 53 │ const child = children as ReactElement>; 2026-10-24T05:19:51.2312237Z 54 │ ╭─▶ children = cloneElement(child, { 2026-10-24T05:19:51.2312506Z 55 │ │ onTouchStart: (event) => { 2026-10-24T05:19:51.2312781Z 56 │ │ // Reset for a new touch, not onPressIn, which also fires when a 2026-10-24T05:19:51.2313090Z 57 │ │ // finger moves out of the row and back during the same gesture. 2026-10-24T05:19:51.2313375Z 58 │ │ menuPress.current.isPreparing = false; 2026-10-24T05:19:51.2313678Z 59 │ │ menuPress.current.suppressPress = menuPress.current.isOpen; 2026-10-24T05:19:51.2313958Z 60 │ │ pendingPress.current = null; 2026-10-24T05:19:51.2314199Z 61 │ │ child.props.onTouchStart?.(event); 2026-10-24T05:19:51.2314412Z 62 │ │ }, 2026-10-24T05:19:51.2314606Z 63 │ │ onPress: (event) => { 2026-10-24T05:19:51.2314891Z 64 │ │ // Accessibility clicks have no touch identifier and must not inherit 2026-10-24T05:19:51.2315195Z 65 │ │ // cancellation from a previous physical gesture. 2026-10-24T05:19:51.2315499Z 66 │ │ const isTouch = typeof event.nativeEvent.identifier === "number"; 2026-10-24T05:19:51.2315849Z 67 │ │ if (isTouch ? menuPress.current.suppressPress : menuPress.current.isOpen) { 2026-10-24T05:19:51.2316124Z 68 │ │ return; 2026-10-24T05:19:51.2316303Z 69 │ │ } 2026-10-24T05:19:51.2316534Z 70 │ │ if (isTouch && menuPress.current.isPreparing) { 2026-10-24T05:19:51.2316911Z 71 │ │ // A release can arrive between native menu preparation and display. 2026-10-24T05:19:51.2317312Z 72 │ │ // Let UIKit's display/cancel callback decide this press's outcome. 2026-10-24T05:19:51.2317579Z 73 │ │ event.persist(); 2026-10-24T05:19:51.2317847Z 74 │ │ pendingPress.current = () => child.props.onPress?.(event); 2026-10-24T05:19:51.2318094Z 75 │ │ return; 2026-10-24T05:19:51.2318269Z 76 │ │ } 2026-10-24T05:19:51.2318656Z 77 │ │ child.props.onPress?.(event); 2026-10-24T05:19:51.2318952Z 78 │ │ }, 2026-10-24T05:19:51.2319181Z 79 │ ├─▶ }); 2026-10-24T05:19:51.2319556Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T05:19:51.2319884Z 80 │ menuProps.onMenuInteractionStart = () => { 2026-10-24T05:19:51.2320052Z ╰──── 2026-10-24T05:19:51.2320571Z  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-24T05:19:51.2321271Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:19:51.2321548Z 2026-10-24T05:19:51.2321915Z ⚠ 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-24T05:19:51.2322362Z ╭─[packages/effect-acp/src/client.ts:1269:11] 2026-10-24T05:19:51.2322639Z 1268 │ extNotificationHandlers.set(CLIENT_METHODS.mcp_message, (params) => 2026-10-24T05:19:51.2322963Z 1269 │ Schema.decodeUnknownEffect(AcpSchemaV2.MessageMcpNotification)(params).pipe( 2026-10-24T05:19:51.2323243Z ·  ────────────────────────── 2026-10-24T05:19:51.2323495Z 1270 │ Effect.mapError(() => AcpError.AcpRequestError.invalidParams()), 2026-10-24T05:19:51.2323703Z ╰──── 2026-10-24T05:19:51.2323763Z 2026-10-24T05:19:51.2324211Z ⚠ 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-24T05:19:51.2324748Z ╭─[packages/effect-acp/src/errors.test.ts:129:28] 2026-10-24T05:19:51.2324974Z 128 │ const secret = "acp-summary-secret"; 2026-10-24T05:19:51.2325197Z 129 │ const cause = yield* Schema.decodeUnknownEffect( 2026-10-24T05:19:51.2325440Z ·  ────────────────────────── 2026-10-24T05:19:51.2325632Z 130 │ Schema.Struct({ 2026-10-24T05:19:51.2325767Z ╰──── 2026-10-24T05:19:51.2325823Z 2026-10-24T05:19:51.2326018Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T05:19:51.2326351Z ╭─[apps/mobile/src/components/ComposerContextSheet.tsx:267:25] 2026-10-24T05:19:51.2326610Z 266 │ {record.elements?.map((element, index) => ( 2026-10-24T05:19:51.2326972Z 267 │ 2026-10-24T05:19:51.2327386Z ·  ─────────────────────────────────────────────────────── 2026-10-24T05:19:51.2327615Z 268 │ 2026-10-24T05:19:51.2343229Z ·  ┬ 2026-10-24T05:19:51.2343457Z · ╰── '_' is declared here 2026-10-24T05:19:51.2343687Z 122 │ (options.dispatchGate ?? Effect.void).pipe( 2026-10-24T05:19:51.2343858Z ╰──── 2026-10-24T05:19:51.2344013Z  help: Consider removing this parameter. 2026-10-24T05:19:51.2344130Z 2026-10-24T05:19:51.2344310Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T05:19:51.2344688Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:134:39] 2026-10-24T05:19:51.2344962Z 133 │ ); 2026-10-24T05:19:51.2345137Z 134 │ const listLocalBranchNames = vi.fn((_: string) => 2026-10-24T05:19:51.2345360Z ·  ┬ 2026-10-24T05:19:51.2345611Z · ╰── '_' is declared here 2026-10-24T05:19:51.2345819Z 135 │ Effect.succeed( 2026-10-24T05:19:51.2345954Z ╰──── 2026-10-24T05:19:51.2346109Z  help: Consider removing this parameter. 2026-10-24T05:19:51.2346228Z 2026-10-24T05:19:51.2346408Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T05:19:51.2346717Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:178:31] 2026-10-24T05:19:51.2346918Z 177 │ }); 2026-10-24T05:19:51.2347085Z 178 │ const sendToThread = vi.fn((_: unknown) => { 2026-10-24T05:19:51.2347290Z ·  ┬ 2026-10-24T05:19:51.2347528Z · ╰── '_' is declared here 2026-10-24T05:19:51.2347761Z 179 │ switch (options.continuation ?? "queued") { 2026-10-24T05:19:51.2347927Z ╰──── 2026-10-24T05:19:51.2348080Z  help: Consider removing this parameter. 2026-10-24T05:19:51.2348196Z 2026-10-24T05:19:51.2348376Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T05:19:51.2348716Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:203:33] 2026-10-24T05:19:51.2348913Z 202 │ ); 2026-10-24T05:19:51.2349072Z 203 │ const removeWorktree = vi.fn((_: unknown) => 2026-10-24T05:19:51.2349285Z ·  ┬ 2026-10-24T05:19:51.2349524Z · ╰── '_' is declared here 2026-10-24T05:19:51.2349740Z 204 │ options.removeWorktreeFails 2026-10-24T05:19:51.2349890Z ╰──── 2026-10-24T05:19:51.2350044Z  help: Consider removing this parameter. 2026-10-24T05:19:51.2350156Z 2026-10-24T05:19:51.2350336Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T05:19:51.2350647Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:208:36] 2026-10-24T05:19:51.2350844Z 207 │ ); 2026-10-24T05:19:51.2351006Z 208 │ const deleteLocalBranch = vi.fn((_: unknown) => 2026-10-24T05:19:51.2351216Z ·  ┬ 2026-10-24T05:19:51.2351461Z · ╰── '_' is declared here 2026-10-24T05:19:51.2351685Z 209 │ options.deleteLocalBranchFails 2026-10-24T05:19:51.2351838Z ╰──── 2026-10-24T05:19:51.2351990Z  help: Consider removing this parameter. 2026-10-24T05:19:51.2352106Z 2026-10-24T05:19:51.2352282Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T05:19:51.2352591Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:213:42] 2026-10-24T05:19:51.2352786Z 212 │ ); 2026-10-24T05:19:51.2352962Z 213 │ const fetchWorktreeBaseCommit = vi.fn((_: unknown) => 2026-10-24T05:19:51.2353189Z ·  ┬ 2026-10-24T05:19:51.2353437Z · ╰── '_' is declared here 2026-10-24T05:19:51.2353657Z 214 │ options.fetchWorktreeBaseFails 2026-10-24T05:19:51.2353874Z ╰──── 2026-10-24T05:19:51.2354105Z  help: Consider removing this parameter. 2026-10-24T05:19:51.2354223Z 2026-10-24T05:19:51.2354400Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T05:19:51.2354710Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:254:30] 2026-10-24T05:19:51.2354905Z 253 │ ); 2026-10-24T05:19:51.2355065Z 254 │ const localStatus = vi.fn((_: unknown) => 2026-10-24T05:19:51.2355262Z ·  ┬ 2026-10-24T05:19:51.2355498Z · ╰── '_' is declared here 2026-10-24T05:19:51.2355696Z 255 │ Effect.succeed({ 2026-10-24T05:19:51.2355834Z ╰──── 2026-10-24T05:19:51.2355989Z  help: Consider removing this parameter. 2026-10-24T05:19:51.2356103Z 2026-10-24T05:19:51.2356287Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T05:19:51.2356595Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:264:32] 2026-10-24T05:19:51.2356790Z 263 │ ); 2026-10-24T05:19:51.2357004Z 264 │ const refreshStatus = vi.fn((_: string) => Effect.die("refreshStatus stub")); 2026-10-24T05:19:51.2357253Z ·  ┬ 2026-10-24T05:19:51.2357490Z · ╰── '_' is declared here 2026-10-24T05:19:51.2357767Z 265 │ const runForThread = vi.fn((input: { readonly worktreePath: string }) => { 2026-10-24T05:19:51.2357977Z ╰──── 2026-10-24T05:19:51.2358129Z  help: Consider removing this parameter. 2026-10-24T05:19:51.2358243Z 2026-10-24T05:19:51.2358451Z ⚠ eslint(no-unused-vars): Identifier 'Arr' is imported but never used. 2026-10-24T05:19:51.2358965Z ╭─[packages/client-runtime/src/state/threadSort.ts:4:13] 2026-10-24T05:19:51.2359227Z 3 │ import type { EnvironmentThreadShell } from "./models.ts"; 2026-10-24T05:19:51.2359434Z 4 │ import * as Arr from "effect/Array"; 2026-10-24T05:19:51.2359608Z ·  ─┬─ 2026-10-24T05:19:51.2359818Z · ╰── 'Arr' is imported here 2026-10-24T05:19:51.2360030Z 5 │ import * as Order from "effect/Order"; 2026-10-24T05:19:51.2360182Z ╰──── 2026-10-24T05:19:51.2360335Z  help: Consider removing this import. 2026-10-24T05:19:51.2360449Z 2026-10-24T05:19:51.2360643Z ⚠ eslint(no-unused-vars): Identifier 'Order' is imported but never used. 2026-10-24T05:19:51.2360965Z ╭─[packages/client-runtime/src/state/threadSort.ts:5:13] 2026-10-24T05:19:51.2361185Z 4 │ import * as Arr from "effect/Array"; 2026-10-24T05:19:51.2361363Z 5 │ import * as Order from "effect/Order"; 2026-10-24T05:19:51.2361538Z ·  ──┬── 2026-10-24T05:19:51.2361753Z · ╰── 'Order' is imported here 2026-10-24T05:19:51.2361940Z 6 │ 2026-10-24T05:19:51.2362045Z ╰──── 2026-10-24T05:19:51.2362196Z  help: Consider removing this import. 2026-10-24T05:19:51.2362308Z 2026-10-24T05:19:51.2362490Z ⚠ eslint(no-unused-vars): Type 'Scope' is imported but never used. 2026-10-24T05:19:51.2362804Z ╭─[apps/server/src/provider/ProviderAuthService.ts:15:18] 2026-10-24T05:19:51.2363033Z 14 │ import * as Layer from "effect/Layer"; 2026-10-24T05:19:51.2363228Z 15 │ import type * as Scope from "effect/Scope"; 2026-10-24T05:19:51.2363498Z ·  ──┬── 2026-10-24T05:19:51.2363801Z · ╰── 'Scope' is imported here 2026-10-24T05:19:51.2364021Z 16 │ import * as Stream from "effect/Stream"; 2026-10-24T05:19:51.2364172Z ╰──── 2026-10-24T05:19:51.2364325Z  help: Consider removing this import. 2026-10-24T05:19:51.2364438Z 2026-10-24T05:19:51.2364904Z ⚠ 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-24T05:19:51.2365476Z ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1680:7] 2026-10-24T05:19:51.2365727Z 1679 │ yield* harness.replaceSession; 2026-10-24T05:19:51.2366055Z 1680 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T05:19:51.2366406Z 1681 │ │ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) { 2026-10-24T05:19:51.2366655Z 1682 │ │ break; 2026-10-24T05:19:51.2366837Z 1683 │ │ } 2026-10-24T05:19:51.2367045Z 1684 │ │ yield* Effect.yieldNow; 2026-10-24T05:19:51.2367300Z 1685 │ ╰─▶ } 2026-10-24T05:19:51.2367510Z 1686 │ yield* Queue.offer( 2026-10-24T05:19:51.2367655Z ╰──── 2026-10-24T05:19:51.2367714Z 2026-10-24T05:19:51.2368180Z ⚠ 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-24T05:19:51.2368794Z ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1789:7] 2026-10-24T05:19:51.2369043Z 1788 │ yield* harness.replaceSession; 2026-10-24T05:19:51.2369354Z 1789 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T05:19:51.2369705Z 1790 │ │ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) break; 2026-10-24T05:19:51.2369969Z 1791 │ │ yield* Effect.yieldNow; 2026-10-24T05:19:51.2370223Z 1792 │ ╰─▶ } 2026-10-24T05:19:51.2370484Z 1793 │ expect(yield* Ref.get(harness.subscriptionCount)).toBe(2); 2026-10-24T05:19:51.2370674Z ╰──── 2026-10-24T05:19:51.2370736Z 2026-10-24T05:19:51.2371192Z ⚠ 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-24T05:19:51.2371773Z ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:566:7] 2026-10-24T05:19:51.2372043Z 565 │ let afterSequence = created[0]!.sequence; 2026-10-24T05:19:51.2372352Z 566 │ ╭─▶ for (let index = 1; index <= 32; index += 1) { 2026-10-24T05:19:51.2372631Z 567 │ │ const nextEvent = { 2026-10-24T05:19:51.2372907Z 568 │ │ id: EventId.make(`event:foundation-stream-race:${index}`), 2026-10-24T05:19:51.2373259Z 569 │ │ type: "thread.metadata-updated" as const, 2026-10-24T05:19:51.2373568Z 570 │ │ threadId, 2026-10-24T05:19:51.2373777Z 571 │ │ providerInstanceId, 2026-10-24T05:19:51.2373998Z 572 │ │ occurredAt: now, 2026-10-24T05:19:51.2374255Z 573 │ │ payload: { ...thread, title: `Race update ${index}` }, 2026-10-24T05:19:51.2374535Z 574 │ │ } satisfies OrchestrationV2DomainEvent; 2026-10-24T05:19:51.2374785Z 575 │ │ const reader = yield* eventSink 2026-10-24T05:19:51.2375030Z 576 │ │ .stream({ threadId, afterSequence }) 2026-10-24T05:19:51.2375297Z 577 │ │ .pipe(Stream.runHead, Effect.forkChild); 2026-10-24T05:19:51.2375548Z 578 │ │ yield* Effect.yieldNow; 2026-10-24T05:19:51.2375830Z 579 │ │ const written = yield* eventSink.write({ events: [nextEvent] }); 2026-10-24T05:19:51.2376122Z 580 │ │ const received = yield* Fiber.join(reader); 2026-10-24T05:19:51.2376377Z 581 │ │ if (Option.isNone(received)) { 2026-10-24T05:19:51.2376699Z 582 │ │ return yield* Effect.die("The event stream ended before delivering the live event."); 2026-10-24T05:19:51.2376975Z 583 │ │ } 2026-10-24T05:19:51.2377232Z 584 │ │ assert.equal(received.value.sequence, written[0]?.sequence); 2026-10-24T05:19:51.2377539Z 585 │ │ assert.equal(received.value.event.id, nextEvent.id); 2026-10-24T05:19:51.2377817Z 586 │ │ afterSequence = received.value.sequence; 2026-10-24T05:19:51.2378092Z 587 │ ╰─▶ } 2026-10-24T05:19:51.2378291Z 588 │ }), 2026-10-24T05:19:51.2378415Z ╰──── 2026-10-24T05:19:51.2378470Z 2026-10-24T05:19:51.2378970Z ⚠ 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-24T05:19:51.2379551Z ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:2327:9] 2026-10-24T05:19:51.2379796Z 2326 │ let settled = false; 2026-10-24T05:19:51.2380056Z 2327 │ ╭─▶ while (!settled) { 2026-10-24T05:19:51.2380375Z 2328 │ │ settled = (yield* outbox.listByCommandId(commandId)).every( 2026-10-24T05:19:51.2380671Z 2329 │ │ (effect) => effect.status === "succeeded", 2026-10-24T05:19:51.2380891Z 2330 │ │ ); 2026-10-24T05:19:51.2381113Z 2331 │ │ if (!settled) yield* Effect.yieldNow; 2026-10-24T05:19:51.2381381Z 2332 │ ╰─▶ } 2026-10-24T05:19:51.2381639Z 2333 │ }).pipe(Effect.provide(layerWorker), Effect.scoped); 2026-10-24T05:19:51.2381819Z ╰──── 2026-10-24T05:19:51.2381877Z 2026-10-24T05:19:51.2382147Z ⚠ eslint(no-unused-vars): Variable 'layerDaemon' is declared but never used. Unused variables should start with a '_'. 2026-10-24T05:19:51.2382533Z ╭─[apps/server/src/orchestration-v2/EffectWorker.ts:914:7] 2026-10-24T05:19:51.2382729Z 913 │ 2026-10-24T05:19:51.2383036Z 914 │ const layerDaemon: Layer.Layer = Layer.effectDiscard( 2026-10-24T05:19:51.2383368Z ·  ─────┬───── 2026-10-24T05:19:51.2383600Z · ╰── 'layerDaemon' is declared here 2026-10-24T05:19:51.2383825Z 915 │ runDaemon.pipe(Effect.forkScoped), 2026-10-24T05:19:51.2383981Z ╰──── 2026-10-24T05:19:51.2384141Z  help: Consider removing this declaration. 2026-10-24T05:19:51.2384259Z 2026-10-24T05:19:51.2384459Z ⚠ eslint(no-unsafe-optional-chaining): Unsafe usage of optional chaining 2026-10-24T05:19:51.2384818Z ╭─[apps/server/src/orchestration-v2/ThreadLaunchService.test.ts:1783:8] 2026-10-24T05:19:51.2385055Z 1782 │ assert.equal( 2026-10-24T05:19:51.2385286Z 1783 │ (stored.context?.records[0] as { attachmentId: string }).attachmentId, 2026-10-24T05:19:51.2385548Z ·  ────────────────────────── 2026-10-24T05:19:51.2385737Z 1784 │ stored.attachments[0]?.id, 2026-10-24T05:19:51.2385891Z ╰──── 2026-10-24T05:19:51.2386116Z  help: If this short-circuits with 'undefined' the evaluation will throw TypeError 2026-10-24T05:19:51.2386289Z 2026-10-24T05:19:51.2386513Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-24T05:19:51.2386890Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:1998:15] 2026-10-24T05:19:51.2387122Z 1997 │ assert.equal( 2026-10-24T05:19:51.2387363Z 1998 │ items.filter((item) => item.type === "assistant_message").at(-1)?.text, 2026-10-24T05:19:51.2387595Z ·  ────── 2026-10-24T05:19:51.2387776Z 1999 │ "authoritative answer", 2026-10-24T05:19:51.2387927Z ╰──── 2026-10-24T05:19:51.2388152Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T05:19:51.2388325Z 2026-10-24T05:19:51.2388822Z ⚠ 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-24T05:19:51.2389397Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:3951:7] 2026-10-24T05:19:51.2389739Z 3950 │ const closeFiber = yield* Scope.close(sessionScope, Exit.void).pipe(Effect.forkScoped); 2026-10-24T05:19:51.2390126Z 3951 │ ╭─▶ while (!responseLifecycle.includes("failed")) { 2026-10-24T05:19:51.2390476Z 3952 │ │ yield* Effect.yieldNow; 2026-10-24T05:19:51.2390804Z 3953 │ ╰─▶ } 2026-10-24T05:19:51.2391057Z 3954 │ const responseExit = yield* Fiber.join(responseFiber); 2026-10-24T05:19:51.2391244Z ╰──── 2026-10-24T05:19:51.2391302Z 2026-10-24T05:19:51.2391752Z ⚠ 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-24T05:19:51.2392326Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6062:9] 2026-10-24T05:19:51.2392579Z 6061 │ .pipe(Effect.forkScoped); 2026-10-24T05:19:51.2392870Z 6062 │ ╭─▶ while (promptGates.length < 1) { 2026-10-24T05:19:51.2393158Z 6063 │ │ yield* Effect.yieldNow; 2026-10-24T05:19:51.2393415Z 6064 │ ╰─▶ } 2026-10-24T05:19:51.2393720Z 6065 │ assert.isDefined(sessionUpdateHandler, "session update handler must be wired"); 2026-10-24T05:19:51.2393949Z ╰──── 2026-10-24T05:19:51.2394004Z 2026-10-24T05:19:51.2394453Z ⚠ 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-24T05:19:51.2395027Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6197:9] 2026-10-24T05:19:51.2395284Z 6196 │ .pipe(Effect.forkScoped); 2026-10-24T05:19:51.2395575Z 6197 │ ╭─▶ while (promptGates.length < 2) { 2026-10-24T05:19:51.2395856Z 6198 │ │ yield* Effect.yieldNow; 2026-10-24T05:19:51.2396115Z 6199 │ ╰─▶ } 2026-10-24T05:19:51.2396415Z 6200 │ if (sessionUpdateHandler === undefined || capturedMutation.current === null) { 2026-10-24T05:19:51.2396636Z ╰──── 2026-10-24T05:19:51.2396691Z 2026-10-24T05:19:51.2396951Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T05:19:51.2397362Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts:10578:7] 2026-10-24T05:19:51.2397583Z 10577 │ 2026-10-24T05:19:51.2397721Z 10578 │ const layer: Layer.Layer< 2026-10-24T05:19:51.2397887Z ·  ──┬── 2026-10-24T05:19:51.2398102Z · ╰── 'layer' is declared here 2026-10-24T05:19:51.2398326Z 10579 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T05:19:51.2398503Z ╰──── 2026-10-24T05:19:51.2398769Z  help: Consider removing this declaration. 2026-10-24T05:19:51.2398890Z 2026-10-24T05:19:51.2399177Z ⚠ eslint(no-unused-vars): Variable 'revokeActiveMcpThread' is declared but never used. Unused variables should start with a '_'. 2026-10-24T05:19:51.2399571Z ╭─[apps/server/src/mcp/McpSessionRegistry.ts:218:7] 2026-10-24T05:19:51.2399756Z 217 │ 2026-10-24T05:19:51.2399963Z 218 │ const revokeActiveMcpThread = (threadId: ThreadId): Effect.Effect => 2026-10-24T05:19:51.2400270Z ·  ──────────┬────────── 2026-10-24T05:19:51.2400633Z · ╰── 'revokeActiveMcpThread' is declared here 2026-10-24T05:19:51.2400970Z 219 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeThread(threadId) : Effect.void; 2026-10-24T05:19:51.2401211Z ╰──── 2026-10-24T05:19:51.2401368Z  help: Consider removing this declaration. 2026-10-24T05:19:51.2401489Z 2026-10-24T05:19:51.2401793Z ⚠ eslint(no-unused-vars): Variable 'revokeAllActiveMcpCredentials' is declared but never used. Unused variables should start with a '_'. 2026-10-24T05:19:51.2402198Z ╭─[apps/server/src/mcp/McpSessionRegistry.ts:221:7] 2026-10-24T05:19:51.2402385Z 220 │ 2026-10-24T05:19:51.2402577Z 221 │ const revokeAllActiveMcpCredentials = (): Effect.Effect => 2026-10-24T05:19:51.2402829Z ·  ──────────────┬────────────── 2026-10-24T05:19:51.2403121Z · ╰── 'revokeAllActiveMcpCredentials' is declared here 2026-10-24T05:19:51.2403455Z 222 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeAll : Effect.void; 2026-10-24T05:19:51.2403674Z ╰──── 2026-10-24T05:19:51.2403831Z  help: Consider removing this declaration. 2026-10-24T05:19:51.2403948Z 2026-10-24T05:19:51.2404198Z ⚠ eslint(no-unused-vars): Function 'layerClaudeAgentSdkReplayQueryRunner' is declared but never used. 2026-10-24T05:19:51.2404618Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.testkit.ts:960:10] 2026-10-24T05:19:51.2404851Z 959 │ 2026-10-24T05:19:51.2405020Z 960 │ function layerClaudeAgentSdkReplayQueryRunner( 2026-10-24T05:19:51.2405261Z ·  ──────────────────┬───────────────── 2026-10-24T05:19:51.2405582Z · ╰── 'layerClaudeAgentSdkReplayQueryRunner' is declared here 2026-10-24T05:19:51.2405876Z 961 │ transcript: ClaudeAgentSdkReplayTranscript, 2026-10-24T05:19:51.2406050Z ╰──── 2026-10-24T05:19:51.2406209Z  help: Consider removing this declaration. 2026-10-24T05:19:51.2406324Z 2026-10-24T05:19:51.2406520Z ⚠ eslint(no-unused-vars): Type 'EnvironmentId' is imported but never used. 2026-10-24T05:19:51.2406850Z ╭─[packages/client-runtime/src/state/sharedSettings.ts:2:3] 2026-10-24T05:19:51.2407062Z 1 │ import type { 2026-10-24T05:19:51.2407203Z 2 │ EnvironmentId, 2026-10-24T05:19:51.2407355Z ·  ──────┬────── 2026-10-24T05:19:51.2407574Z · ╰── 'EnvironmentId' is imported here 2026-10-24T05:19:51.2407804Z 3 │ ExecutionEnvironmentCapabilities, 2026-10-24T05:19:51.2407960Z ╰──── 2026-10-24T05:19:51.2408113Z  help: Consider removing this import. 2026-10-24T05:19:51.2408228Z 2026-10-24T05:19:51.2408423Z ⚠ eslint(no-unused-vars): Identifier 'identity' is imported but never used. 2026-10-24T05:19:51.2408763Z ╭─[apps/server/src/auth/http.ts:28:10] 2026-10-24T05:19:51.2408963Z 27 │ import * as Schema from "effect/Schema"; 2026-10-24T05:19:51.2409161Z 28 │ import { identity } from "effect/Function"; 2026-10-24T05:19:51.2409345Z ·  ────┬─── 2026-10-24T05:19:51.2409570Z · ╰── 'identity' is imported here 2026-10-24T05:19:51.2409790Z 29 │ import * as Layer from "effect/Layer"; 2026-10-24T05:19:51.2409945Z ╰──── 2026-10-24T05:19:51.2410153Z  help: Consider removing this import. 2026-10-24T05:19:51.2410341Z 2026-10-24T05:19:51.2410541Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T05:19:51.2410865Z ╭─[packages/client-runtime/src/state/usageAccess.ts:3:8] 2026-10-24T05:19:51.2411078Z 2 │ AuthDiagnosticsReadScope, 2026-10-24T05:19:51.2411243Z 3 │ type AuthSessionState, 2026-10-24T05:19:51.2411412Z ·  ────────┬─────── 2026-10-24T05:19:51.2411654Z · ╰── 'AuthSessionState' is imported here 2026-10-24T05:19:51.2411864Z 4 │ sessionGrantsScope, 2026-10-24T05:19:51.2412006Z ╰──── 2026-10-24T05:19:51.2412154Z  help: Consider removing this import. 2026-10-24T05:19:51.2412266Z 2026-10-24T05:19:51.2412457Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T05:19:51.2412809Z ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:555:70] 2026-10-24T05:19:51.2413063Z 554 │ assert.deepStrictEqual( 2026-10-24T05:19:51.2413327Z 555 │ (yield* Ref.get(fixture.syncCommands)).map(({ commandId: _, ...rest }) => rest), 2026-10-24T05:19:51.2413616Z ·  ┬ 2026-10-24T05:19:51.2413903Z · ╰── '_' is declared here 2026-10-24T05:19:51.2414119Z 556 │ [ 2026-10-24T05:19:51.2414244Z ╰──── 2026-10-24T05:19:51.2414401Z  help: Consider removing this parameter. 2026-10-24T05:19:51.2414519Z 2026-10-24T05:19:51.2414708Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T05:19:51.2415061Z ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:1155:70] 2026-10-24T05:19:51.2415315Z 1154 │ assert.deepStrictEqual( 2026-10-24T05:19:51.2415576Z 1155 │ (yield* Ref.get(fixture.linkCommands)).map(({ commandId: _, ...rest }) => rest), 2026-10-24T05:19:51.2415863Z ·  ┬ 2026-10-24T05:19:51.2416150Z · ╰── '_' is declared here 2026-10-24T05:19:51.2416365Z 1156 │ [ 2026-10-24T05:19:51.2416490Z ╰──── 2026-10-24T05:19:51.2416646Z  help: Consider removing this parameter. 2026-10-24T05:19:51.2416760Z 2026-10-24T05:19:51.2417098Z ⚠ eslint(no-unused-vars): Variable 'layerCodexAppServerClientFactoryCommand' is declared but never used. Unused variables should start with a '_'. 2026-10-24T05:19:51.2417566Z ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1444:7] 2026-10-24T05:19:51.2417784Z 1443 │ 2026-10-24T05:19:51.2417962Z 1444 │ const layerCodexAppServerClientFactoryCommand = ( 2026-10-24T05:19:51.2418208Z ·  ───────────────────┬─────────────────── 2026-10-24T05:19:51.2418537Z · ╰── 'layerCodexAppServerClientFactoryCommand' is declared here 2026-10-24T05:19:51.2418893Z 1445 │ options: CodexClient.CodexAppServerClientOptions & { 2026-10-24T05:19:51.2419082Z ╰──── 2026-10-24T05:19:51.2419236Z  help: Consider removing this declaration. 2026-10-24T05:19:51.2419354Z 2026-10-24T05:19:51.2419660Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T05:19:51.2420130Z ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1680:7] 2026-10-24T05:19:51.2420348Z 1679 │ 2026-10-24T05:19:51.2420477Z 1680 │ const layer: Layer.Layer< 2026-10-24T05:19:51.2420637Z ·  ──┬── 2026-10-24T05:19:51.2420851Z · ╰── 'layer' is declared here 2026-10-24T05:19:51.2421070Z 1681 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T05:19:51.2421233Z ╰──── 2026-10-24T05:19:51.2421387Z  help: Consider removing this declaration. 2026-10-24T05:19:51.2421502Z 2026-10-24T05:19:51.2421708Z ⚠ eslint(no-unused-vars): Function 'summarizePayload' is declared but never used. 2026-10-24T05:19:51.2422047Z ╭─[packages/provider-acp/src/server/nativeLogging.ts:22:10] 2026-10-24T05:19:51.2422252Z 21 │ 2026-10-24T05:19:51.2422465Z 22 │ function summarizePayload(payload: unknown): Readonly> { 2026-10-24T05:19:51.2422720Z ·  ────────┬─────── 2026-10-24T05:19:51.2422962Z · ╰── 'summarizePayload' is declared here 2026-10-24T05:19:51.2423212Z 23 │ if (payload === null) return { valueType: "null" }; 2026-10-24T05:19:51.2423380Z ╰──── 2026-10-24T05:19:51.2423535Z  help: Consider removing this declaration. 2026-10-24T05:19:51.2423654Z 2026-10-24T05:19:51.2424018Z ⚠ 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-24T05:19:51.2424471Z ╭─[apps/server/src/auth/RpcAuthorization.ts:237:17] 2026-10-24T05:19:51.2424753Z 236 │ const requiredScopesForSettingsUpdate = (payload: unknown) => { 2026-10-24T05:19:51.2425035Z 237 │ const input = Schema.decodeUnknownSync(SettingsUpdate)(payload); 2026-10-24T05:19:51.2425288Z ·  ──────────────────────── 2026-10-24T05:19:51.2425537Z 238 │ const scopes = requiredScopesForServerSettingsPatch(input.patch); 2026-10-24T05:19:51.2425741Z ╰──── 2026-10-24T05:19:51.2425797Z 2026-10-24T05:19:51.2426151Z ⚠ 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-24T05:19:51.2426591Z ╭─[apps/server/src/auth/RpcAuthorization.ts:256:26] 2026-10-24T05:19:51.2426815Z 255 │ if (method === WS_METHODS.assetsCreateUrl) { 2026-10-24T05:19:51.2427148Z 256 │ const { resource } = Schema.decodeUnknownSync(AssetCreateUrlInput)(payload); 2026-10-24T05:19:51.2427494Z ·  ──────────────────────── 2026-10-24T05:19:51.2427671Z 257 │ return [ 2026-10-24T05:19:51.2427788Z ╰──── 2026-10-24T05:19:51.2427842Z 2026-10-24T05:19:51.2428027Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-24T05:19:51.2428328Z ╭─[packages/client-runtime/src/state/shell.ts:189:5] 2026-10-24T05:19:51.2428596Z 186 │ let waiting = yield* Ref.get(awaitingCompletion); 2026-10-24T05:19:51.2428781Z 187 │ let next = initial; 2026-10-24T05:19:51.2428934Z ·  ──┬─ 2026-10-24T05:19:51.2429134Z · ╰── From this accumulator 2026-10-24T05:19:51.2429335Z 188 │ let receivedSnapshot = false; 2026-10-24T05:19:51.2429510Z 189 │ for (const item of items) { 2026-10-24T05:19:51.2429669Z ·  ─┬─ 2026-10-24T05:19:51.2429851Z · ╰── For this loop 2026-10-24T05:19:51.2430051Z 190 │ if (item.kind === "synchronized") { 2026-10-24T05:19:51.2430219Z 191 │ waiting = false; 2026-10-24T05:19:51.2430394Z 192 │ if (Option.isSome(next.snapshot)) { 2026-10-24T05:19:51.2430622Z 193 │ next = { ...next, status: "live", error: Option.none() }; 2026-10-24T05:19:51.2430832Z ·  ───┬─── 2026-10-24T05:19:51.2431054Z · ╰── From this spread 2026-10-24T05:19:51.2431239Z 194 │ } 2026-10-24T05:19:51.2431353Z ╰──── 2026-10-24T05:19:51.2431561Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-24T05:19:51.2431878Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T05:19:51.2432042Z 2026-10-24T05:19:51.2432504Z ⚠ 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-24T05:19:51.2433057Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:169:7] 2026-10-24T05:19:51.2433267Z 168 │ }); 2026-10-24T05:19:51.2433533Z 169 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T05:19:51.2433907Z 170 │ │ if ((yield* SubscriptionRef.get(shellState)).status === "synchronizing") break; 2026-10-24T05:19:51.2434199Z 171 │ │ yield* Effect.yieldNow; 2026-10-24T05:19:51.2434448Z 172 │ ╰─▶ } 2026-10-24T05:19:51.2434632Z 173 │ 2026-10-24T05:19:51.2434740Z ╰──── 2026-10-24T05:19:51.2434793Z 2026-10-24T05:19:51.2435242Z ⚠ 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-24T05:19:51.2435797Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:178:7] 2026-10-24T05:19:51.2436055Z 177 │ yield* Deferred.succeed(releaseSave, undefined); 2026-10-24T05:19:51.2436366Z 178 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T05:19:51.2436730Z 179 │ │ if ((yield* Ref.get(saved)).length > 0) break; 2026-10-24T05:19:51.2437040Z 180 │ │ yield* Effect.yieldNow; 2026-10-24T05:19:51.2437283Z 181 │ ╰─▶ } 2026-10-24T05:19:51.2437469Z 182 │ 2026-10-24T05:19:51.2437579Z ╰──── 2026-10-24T05:19:51.2437633Z 2026-10-24T05:19:51.2438079Z ⚠ 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-24T05:19:51.2438739Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:307:7] 2026-10-24T05:19:51.2439014Z 306 │ yield* Deferred.succeed(releaseUnenrichedSave, undefined); 2026-10-24T05:19:51.2439343Z 307 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T05:19:51.2439641Z 308 │ │ const values = yield* Ref.get(saved); 2026-10-24T05:19:51.2439959Z 309 │ │ if (values.length > 0 && values.at(-1)?.projects[0]?.repositoryIdentity != null) { 2026-10-24T05:19:51.2440228Z 310 │ │ break; 2026-10-24T05:19:51.2440403Z 311 │ │ } 2026-10-24T05:19:51.2440672Z 312 │ │ yield* Effect.yieldNow; 2026-10-24T05:19:51.2440916Z 313 │ ╰─▶ } 2026-10-24T05:19:51.2441098Z 314 │ 2026-10-24T05:19:51.2441206Z ╰──── 2026-10-24T05:19:51.2441260Z 2026-10-24T05:19:51.2441451Z ⚠ eslint(require-yield): This generator function does not have `yield` 2026-10-24T05:19:51.2441782Z ╭─[packages/provider-acp/src/server/mcpOverAcpBridge.ts:81:78] 2026-10-24T05:19:51.2441984Z  80 │ 2026-10-24T05:19:51.2442312Z  81 │ ╭─▶ export const makeAcpMcpOverAcpBridge = Effect.fn("AcpMcpOverAcpBridge.make")(function* ( 2026-10-24T05:19:51.2442675Z  82 │ │ options: AcpMcpOverAcpBridgeOptions, 2026-10-24T05:19:51.2442920Z  83 │ │ ): Effect.fn.Return { 2026-10-24T05:19:51.2443210Z  84 │ │ const fetchImplementation = options.fetchImplementation ?? fetch; 2026-10-24T05:19:51.2443508Z  85 │ │ const connections = new Map(); 2026-10-24T05:19:51.2443716Z  86 │ │ 2026-10-24T05:19:51.2444014Z  87 │ │ const connectionFor = (connectionId: string): Effect.Effect => 2026-10-24T05:19:51.2444317Z  88 │ │ Effect.suspend(() => { 2026-10-24T05:19:51.2444562Z  89 │ │ const connection = connections.get(connectionId); 2026-10-24T05:19:51.2444808Z  90 │ │ return connection === undefined 2026-10-24T05:19:51.2445139Z  91 │ │ ? Effect.fail(new AcpMcpOverAcpError(`Unknown MCP-over-ACP connection "${connectionId}".`)) 2026-10-24T05:19:51.2445446Z  92 │ │ : Effect.succeed(connection); 2026-10-24T05:19:51.2445638Z  93 │ │ }); 2026-10-24T05:19:51.2445798Z  94 │ │ 2026-10-24T05:19:51.2445967Z  95 │ │ const send = ( 2026-10-24T05:19:51.2446238Z  96 │ │ connection: Connection, 2026-10-24T05:19:51.2446518Z  97 │ │ message: unknown, 2026-10-24T05:19:51.2446783Z  98 │ │ ): Effect.Effect, AcpMcpOverAcpError> => 2026-10-24T05:19:51.2447056Z  99 │ │ connection.mutex.withPermits(1)( 2026-10-24T05:19:51.2447292Z 100 │ │ Effect.gen(function* () { 2026-10-24T05:19:51.2447529Z 101 │ │ const body = JSON.stringify(message); 2026-10-24T05:19:51.2447803Z 102 │ │ if (Buffer.byteLength(body) > MAX_MESSAGE_BYTES) { 2026-10-24T05:19:51.2448160Z 103 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("MCP-over-ACP message exceeds 8 MiB.")); 2026-10-24T05:19:51.2448445Z 104 │ │ } 2026-10-24T05:19:51.2448718Z 105 │ │ const response = yield* Effect.tryPromise({ 2026-10-24T05:19:51.2448960Z 106 │ │ try: (signal) => 2026-10-24T05:19:51.2449199Z 107 │ │ fetchImplementation(options.endpoint, { 2026-10-24T05:19:51.2449445Z 108 │ │ method: "POST", 2026-10-24T05:19:51.2449653Z 109 │ │ signal, 2026-10-24T05:19:51.2449857Z 110 │ │ headers: { 2026-10-24T05:19:51.2450092Z 111 │ │ "content-type": "application/json", 2026-10-24T05:19:51.2450371Z 112 │ │ accept: "application/json, text/event-stream", 2026-10-24T05:19:51.2450647Z 113 │ │ authorization: options.authorization, 2026-10-24T05:19:51.2450919Z 114 │ │ ...(connection.sessionId === null 2026-10-24T05:19:51.2451151Z 115 │ │ ? {} 2026-10-24T05:19:51.2451402Z 116 │ │ : { "mcp-session-id": connection.sessionId }), 2026-10-24T05:19:51.2451684Z 117 │ │ ...(connection.protocolVersion === null 2026-10-24T05:19:51.2451916Z 118 │ │ ? {} 2026-10-24T05:19:51.2452192Z 119 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-24T05:19:51.2452446Z 120 │ │ }, 2026-10-24T05:19:51.2452641Z 121 │ │ body, 2026-10-24T05:19:51.2452829Z 122 │ │ }), 2026-10-24T05:19:51.2453037Z 123 │ │ catch: bridgeError, 2026-10-24T05:19:51.2453240Z 124 │ │ }); 2026-10-24T05:19:51.2453552Z 125 │ │ connection.sessionId = response.headers.get("mcp-session-id") ?? connection.sessionId; 2026-10-24T05:19:51.2453857Z 126 │ │ if (!response.ok) { 2026-10-24T05:19:51.2454084Z 127 │ │ yield* Effect.promise( 2026-10-24T05:19:51.2454388Z 128 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-24T05:19:51.2454651Z 129 │ │ ); 2026-10-24T05:19:51.2454861Z 130 │ │ return yield* Effect.fail( 2026-10-24T05:19:51.2455192Z 131 │ │ new AcpMcpOverAcpError(`T3 Code MCP endpoint responded with HTTP ${response.status}.`), 2026-10-24T05:19:51.2455474Z 132 │ │ ); 2026-10-24T05:19:51.2455704Z 133 │ │ } 2026-10-24T05:19:51.2456069Z 134 │ │ const payloads = [...(yield* Stream.runCollect(responsePayloads(response, bridgeError)))]; 2026-10-24T05:19:51.2456389Z 135 │ │ for (const payload of payloads) { 2026-10-24T05:19:51.2456737Z 136 │ │ connection.protocolVersion = protocolVersionOf(payload) ?? connection.protocolVersion; 2026-10-24T05:19:51.2457020Z 137 │ │ } 2026-10-24T05:19:51.2457217Z 138 │ │ return payloads; 2026-10-24T05:19:51.2457448Z 139 │ │ }).pipe(Effect.mapError(bridgeError)), 2026-10-24T05:19:51.2457660Z 140 │ │ ); 2026-10-24T05:19:51.2457820Z 141 │ │ 2026-10-24T05:19:51.2458087Z 142 │ │ const disconnect = Effect.fn("mcpOverAcpBridge.disconnect")(function* ( 2026-10-24T05:19:51.2458391Z 143 │ │ request: AcpSchema.DisconnectMcpRequest, 2026-10-24T05:19:51.2458751Z 144 │ │ ): Effect.fn.Return { 2026-10-24T05:19:51.2459088Z 145 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T05:19:51.2459375Z 146 │ │ connections.delete(request.connectionId); 2026-10-24T05:19:51.2459631Z 147 │ │ const sessionId = connection.sessionId; 2026-10-24T05:19:51.2459865Z 148 │ │ if (sessionId !== null) { 2026-10-24T05:19:51.2460112Z 149 │ │ const response = yield* Effect.tryPromise({ 2026-10-24T05:19:51.2460348Z 150 │ │ try: (signal) => 2026-10-24T05:19:51.2460592Z 151 │ │ fetchImplementation(options.endpoint, { 2026-10-24T05:19:51.2460833Z 152 │ │ method: "DELETE", 2026-10-24T05:19:51.2466504Z 153 │ │ signal, 2026-10-24T05:19:51.2466711Z 154 │ │ headers: { 2026-10-24T05:19:51.2466955Z 155 │ │ authorization: options.authorization, 2026-10-24T05:19:51.2467211Z 156 │ │ "mcp-session-id": sessionId, 2026-10-24T05:19:51.2467469Z 157 │ │ ...(connection.protocolVersion === null 2026-10-24T05:19:51.2467693Z 158 │ │ ? {} 2026-10-24T05:19:51.2467957Z 159 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-24T05:19:51.2468206Z 160 │ │ }, 2026-10-24T05:19:51.2468386Z 161 │ │ }), 2026-10-24T05:19:51.2468592Z 162 │ │ catch: bridgeError, 2026-10-24T05:19:51.2468818Z 163 │ │ }); 2026-10-24T05:19:51.2469043Z 164 │ │ if (!response.ok && response.status !== 404) { 2026-10-24T05:19:51.2469295Z 165 │ │ return yield* Effect.fail( 2026-10-24T05:19:51.2469521Z 166 │ │ new AcpMcpOverAcpError( 2026-10-24T05:19:51.2469826Z 167 │ │ `T3 Code MCP endpoint rejected disconnect with HTTP ${response.status}.`, 2026-10-24T05:19:51.2470084Z 168 │ │ ), 2026-10-24T05:19:51.2470256Z 169 │ │ ); 2026-10-24T05:19:51.2470505Z 170 │ │ } 2026-10-24T05:19:51.2470794Z 171 │ │ yield* Effect.promise( 2026-10-24T05:19:51.2471090Z 172 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-24T05:19:51.2471339Z 173 │ │ ); 2026-10-24T05:19:51.2471508Z 174 │ │ } 2026-10-24T05:19:51.2471681Z 175 │ │ return {}; 2026-10-24T05:19:51.2471852Z 176 │ │ }); 2026-10-24T05:19:51.2472008Z 177 │ │ 2026-10-24T05:19:51.2472175Z 178 │ │ return { 2026-10-24T05:19:51.2472439Z 179 │ │ connect: Effect.fn("mcpOverAcpBridge.connect")(function* (request) { 2026-10-24T05:19:51.2472738Z 180 │ │ if (request.serverId !== "t3-code") { 2026-10-24T05:19:51.2472984Z 181 │ │ return yield* Effect.fail( 2026-10-24T05:19:51.2473292Z 182 │ │ new AcpMcpOverAcpError(`Unknown ACP MCP server "${request.serverId}".`), 2026-10-24T05:19:51.2473554Z 183 │ │ ); 2026-10-24T05:19:51.2473719Z 184 │ │ } 2026-10-24T05:19:51.2473944Z 185 │ │ if (connections.size >= MAX_CONNECTIONS) { 2026-10-24T05:19:51.2474287Z 186 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("Too many MCP-over-ACP connections.")); 2026-10-24T05:19:51.2474570Z 187 │ │ } 2026-10-24T05:19:51.2474816Z 188 │ │ const connectionId = yield* options.allocateConnectionId; 2026-10-24T05:19:51.2475093Z 189 │ │ connections.set(connectionId, { 2026-10-24T05:19:51.2475347Z 190 │ │ mutex: yield* Semaphore.make(1), 2026-10-24T05:19:51.2475573Z 191 │ │ sessionId: null, 2026-10-24T05:19:51.2475790Z 192 │ │ protocolVersion: null, 2026-10-24T05:19:51.2476006Z 193 │ │ nextRequestId: 0, 2026-10-24T05:19:51.2476192Z 194 │ │ }); 2026-10-24T05:19:51.2476391Z 195 │ │ return { connectionId }; 2026-10-24T05:19:51.2476579Z 196 │ │ }), 2026-10-24T05:19:51.2476838Z 197 │ │ message: Effect.fn("mcpOverAcpBridge.message")(function* (request) { 2026-10-24T05:19:51.2477175Z 198 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T05:19:51.2477459Z 199 │ │ const id = ++connection.nextRequestId; 2026-10-24T05:19:51.2477725Z 200 │ │ const payloads = yield* send(connection, { 2026-10-24T05:19:51.2477959Z 201 │ │ jsonrpc: "2.0", 2026-10-24T05:19:51.2478040Z 202 │ │ id, 2026-10-24T05:19:51.2478146Z 203 │ │ method: request.method, 2026-10-24T05:19:51.2478304Z 204 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-24T05:19:51.2478379Z 205 │ │ }); 2026-10-24T05:19:51.2478702Z 206 │ │ const response = payloads.find((payload) => asEnvelope(payload)?.id === id); 2026-10-24T05:19:51.2478825Z 207 │ │ const envelope = asEnvelope(response); 2026-10-24T05:19:51.2478927Z 208 │ │ if (envelope === null) { 2026-10-24T05:19:51.2479106Z 209 │ │ return yield* Effect.fail( 2026-10-24T05:19:51.2479400Z 210 │ │ new AcpMcpOverAcpError("MCP server did not return a matching response."), 2026-10-24T05:19:51.2479481Z 211 │ │ ); 2026-10-24T05:19:51.2479557Z 212 │ │ } 2026-10-24T05:19:51.2479673Z 213 │ │ if (envelope.error !== undefined) { 2026-10-24T05:19:51.2479868Z 214 │ │ return yield* Effect.fail(new AcpMcpOverAcpError(errorMessage(envelope.error))); 2026-10-24T05:19:51.2479944Z 215 │ │ } 2026-10-24T05:19:51.2480112Z 216 │ │ return (envelope.result ?? null) as AcpSchema.MessageMcpResponse; 2026-10-24T05:19:51.2480184Z 217 │ │ }), 2026-10-24T05:19:51.2480378Z 218 │ │ notification: Effect.fn("mcpOverAcpBridge.notification")(function* (request) { 2026-10-24T05:19:51.2480539Z 219 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T05:19:51.2480643Z 220 │ │ yield* send(connection, { 2026-10-24T05:19:51.2480741Z 221 │ │ jsonrpc: "2.0", 2026-10-24T05:19:51.2480840Z 222 │ │ method: request.method, 2026-10-24T05:19:51.2480998Z 223 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-24T05:19:51.2481075Z 224 │ │ }); 2026-10-24T05:19:51.2481151Z 225 │ │ }), 2026-10-24T05:19:51.2481235Z 226 │ │ disconnect, 2026-10-24T05:19:51.2481345Z 227 │ │ dispose: Effect.suspend(() => 2026-10-24T05:19:51.2481445Z 228 │ │ Effect.forEach( 2026-10-24T05:19:51.2481553Z 229 │ │ [...connections.keys()], 2026-10-24T05:19:51.2481719Z 230 │ │ (connectionId) => disconnect({ connectionId }).pipe(Effect.ignore), 2026-10-24T05:19:51.2481818Z 231 │ │ { discard: true }, 2026-10-24T05:19:51.2481896Z 232 │ │ ), 2026-10-24T05:19:51.2481970Z 233 │ │ ), 2026-10-24T05:19:51.2482040Z 234 │ │ }; 2026-10-24T05:19:51.2482169Z 235 │ ╰─▶ }); 2026-10-24T05:19:51.2482227Z ╰──── 2026-10-24T05:19:51.2482478Z  help: Add a `yield` expression inside the generator body, or convert it to a regular function if iteration behavior is not needed. 2026-10-24T05:19:51.2482482Z 2026-10-24T05:19:51.2482719Z ⚠ eslint(no-unused-vars): Identifier 'Fiber' is imported but never used. 2026-10-24T05:19:51.2482879Z ╭─[apps/server/src/ws.ts:10:13] 2026-10-24T05:19:51.2482971Z  9 │ import * as Effect from "effect/Effect"; 2026-10-24T05:19:51.2483057Z 10 │ import * as Fiber from "effect/Fiber"; 2026-10-24T05:19:51.2483133Z ·  ──┬── 2026-10-24T05:19:51.2483266Z · ╰── 'Fiber' is imported here 2026-10-24T05:19:51.2483367Z 11 │ import * as FileSystem from "effect/FileSystem"; 2026-10-24T05:19:51.2483421Z ╰──── 2026-10-24T05:19:51.2483515Z  help: Consider removing this import. 2026-10-24T05:19:51.2483518Z 2026-10-24T05:19:51.2483713Z ⚠ eslint(no-unused-vars): Identifier 'Schedule' is imported but never used. 2026-10-24T05:19:51.2483813Z ╭─[apps/server/src/ws.ts:17:13] 2026-10-24T05:19:51.2483893Z 16 │ import * as Ref from "effect/Ref"; 2026-10-24T05:19:51.2483980Z 17 │ import * as Schedule from "effect/Schedule"; 2026-10-24T05:19:51.2484057Z ·  ────┬─── 2026-10-24T05:19:51.2484191Z · ╰── 'Schedule' is imported here 2026-10-24T05:19:51.2484277Z 18 │ import * as Schema from "effect/Schema"; 2026-10-24T05:19:51.2484327Z ╰──── 2026-10-24T05:19:51.2484422Z  help: Consider removing this import. 2026-10-24T05:19:51.2484425Z 2026-10-24T05:19:51.2484722Z ⚠ eslint(no-unused-vars): Variable 'projectSetupScriptRunner' is declared but never used. Unused variables should start with a '_'. 2026-10-24T05:19:51.2484822Z ╭─[apps/server/src/ws.ts:1285:13] 2026-10-24T05:19:51.2484980Z 1284 │ const usageLimitSources = yield* UsageLimitSources.UsageLimitSources; 2026-10-24T05:19:51.2485179Z 1285 │ const projectSetupScriptRunner = yield* ProjectSetupScriptRunner.ProjectSetupScriptRunner; 2026-10-24T05:19:51.2485284Z ·  ────────────┬─────────── 2026-10-24T05:19:51.2485456Z · ╰── 'projectSetupScriptRunner' is declared here 2026-10-24T05:19:51.2485622Z 1286 │ const worktreeSetupTracker = yield* WorktreeSetupTracker.WorktreeSetupTracker; 2026-10-24T05:19:51.2485676Z ╰──── 2026-10-24T05:19:51.2485781Z  help: Consider removing this declaration. 2026-10-24T05:19:51.2485784Z 2026-10-24T05:19:51.2485948Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T05:19:51.2486071Z ╭─[apps/server/src/processRunner.test.ts:266:14] 2026-10-24T05:19:51.2486129Z 265 │ 2026-10-24T05:19:51.2486238Z 266 │ for (const {} of ["timeout", "success"] as const) { 2026-10-24T05:19:51.2486310Z ·  ── 2026-10-24T05:19:51.2486365Z 267 │ } 2026-10-24T05:19:51.2486418Z ╰──── 2026-10-24T05:19:51.2486650Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T05:19:51.2486653Z 2026-10-24T05:19:51.2486854Z ⚠ eslint(no-unused-vars): Identifier 'HookForwarder' is imported but never used. 2026-10-24T05:19:51.2486957Z ╭─[infra/relay/src/http/Api.ts:69:13] 2026-10-24T05:19:51.2487094Z 68 │ import * as EnvironmentLinks from "../environments/EnvironmentLinks.ts"; 2026-10-24T05:19:51.2487208Z 69 │ import * as HookForwarder from "../hooks/HookForwarder.ts"; 2026-10-24T05:19:51.2487341Z ·  ──────┬────── 2026-10-24T05:19:51.2487543Z · ╰── 'HookForwarder' is imported here 2026-10-24T05:19:51.2487644Z 70 │ import * as HeldHooks from "../hooks/HeldHooks.ts"; 2026-10-24T05:19:51.2487696Z ╰──── 2026-10-24T05:19:51.2487793Z  help: Consider removing this import. 2026-10-24T05:19:51.2487796Z 2026-10-24T05:19:51.2487998Z ⚠ typescript(no-extraneous-class): Unexpected class with only a constructor. 2026-10-24T05:19:51.2488122Z ╭─[apps/desktop/src/preview/Manager.test.ts:158:18] 2026-10-24T05:19:51.2488225Z 157 │ BrowserWindow: browserWindowConstructor, 2026-10-24T05:19:51.2488386Z 158 │ ╭─▶ ClipboardItem: class { 2026-10-24T05:19:51.2488524Z 159 │ │ constructor(data: Record) { 2026-10-24T05:19:51.2488676Z 160 │ │ clipboardItemConstructor(data); 2026-10-24T05:19:51.2488753Z 161 │ │ } 2026-10-24T05:19:51.2488880Z 162 │ ╰─▶ }, 2026-10-24T05:19:51.2488949Z 163 │ clipboard: { 2026-10-24T05:19:51.2488999Z ╰──── 2026-10-24T05:19:51.2489169Z  help: Try replacing this class with a standalone function or deleting it entirely 2026-10-24T05:19:51.2489172Z 2026-10-24T05:19:51.2489394Z ⚠ eslint(no-unused-vars): Function 'assertUserMessagesExclude' is declared but never used. 2026-10-24T05:19:51.2489560Z ╭─[apps/server/src/orchestration-v2/testkit/fixtures/shared.ts:1398:10] 2026-10-24T05:19:51.2489611Z 1397 │ 2026-10-24T05:19:51.2489706Z 1398 │ function assertUserMessagesExclude( 2026-10-24T05:19:51.2489812Z ·  ────────────┬──────────── 2026-10-24T05:19:51.2489979Z · ╰── 'assertUserMessagesExclude' is declared here 2026-10-24T05:19:51.2490083Z 1399 │ projection: OrchestrationV2ThreadProjection, 2026-10-24T05:19:51.2490138Z ╰──── 2026-10-24T05:19:51.2490243Z  help: Consider removing this declaration. 2026-10-24T05:19:51.2490245Z 2026-10-24T05:19:51.2490524Z ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'. 2026-10-24T05:19:51.2490656Z ╭─[packages/provider-cursor/src/server/auth.ts:249:20] 2026-10-24T05:19:51.2490713Z 248 │ }, 2026-10-24T05:19:51.2490795Z 249 │ (effect, flow, stopSessions) => 2026-10-24T05:19:51.2490894Z ·  ──────┬───── 2026-10-24T05:19:51.2491043Z · ╰── 'stopSessions' is declared here 2026-10-24T05:19:51.2491107Z 250 │ effect.pipe( 2026-10-24T05:19:51.2491162Z ╰──── 2026-10-24T05:19:51.2491265Z  help: Consider removing this parameter. 2026-10-24T05:19:51.2491267Z 2026-10-24T05:19:51.2491476Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T05:19:51.2491606Z ╭─[apps/web/src/lib/composerContextReferences.ts:90:40] 2026-10-24T05:19:51.2491683Z 89 │ let cursor = prompt.length; 2026-10-24T05:19:51.2491786Z 90 │ for (const occurrence of occurrences.reverse()) { 2026-10-24T05:19:51.2491891Z ·  ─────── 2026-10-24T05:19:51.2491969Z 91 │ let { start, end } = occurrence; 2026-10-24T05:19:51.2492071Z ╰──── 2026-10-24T05:19:51.2492400Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T05:19:51.2492403Z 2026-10-24T05:19:51.2492581Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T05:19:51.2492736Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:100:85] 2026-10-24T05:19:51.2492837Z  99 │ const startEditor = startScheduledTaskEditor; 2026-10-24T05:19:51.2493017Z 100 │ const resetEditor = useCallback(() => startEditor(defaultEditor), [defaultEditor, startEditor]); 2026-10-24T05:19:51.2493161Z ·  ─────┬───── 2026-10-24T05:19:51.2493366Z · ╰── Unnecessary dependency `startEditor` 2026-10-24T05:19:51.2493451Z 101 │ const readEditor = useCallback( 2026-10-24T05:19:51.2493503Z ╰──── 2026-10-24T05:19:51.2493816Z  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-24T05:19:51.2494129Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2494131Z 2026-10-24T05:19:51.2494307Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T05:19:51.2494466Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:121:7] 2026-10-24T05:19:51.2494537Z 120 │ setEditor, 2026-10-24T05:19:51.2494606Z 121 │ startEditor, 2026-10-24T05:19:51.2494681Z ·  ─────┬───── 2026-10-24T05:19:51.2494826Z · ╰── Unnecessary dependency `startEditor` 2026-10-24T05:19:51.2494891Z 122 │ hasChanges, 2026-10-24T05:19:51.2494945Z ╰──── 2026-10-24T05:19:51.2495248Z  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-24T05:19:51.2495551Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2495554Z 2026-10-24T05:19:51.2495833Z ⚠ eslint(no-unused-vars): Variable 'legacyCredentials' is declared but never used. Unused variables should start with a '_'. 2026-10-24T05:19:51.2495990Z ╭─[packages/provider-cursor/src/server/credentialStore.test.ts:15:7] 2026-10-24T05:19:51.2496043Z 14 │ 2026-10-24T05:19:51.2496111Z 15 │ const legacyCredentials = { 2026-10-24T05:19:51.2496195Z ·  ────────┬──────── 2026-10-24T05:19:51.2496339Z · ╰── 'legacyCredentials' is declared here 2026-10-24T05:19:51.2496405Z 16 │ version: 1 as const, 2026-10-24T05:19:51.2496458Z ╰──── 2026-10-24T05:19:51.2496562Z  help: Consider removing this declaration. 2026-10-24T05:19:51.2496565Z 2026-10-24T05:19:51.2496807Z ⚠ eslint(no-unused-vars): Function 'normalizeTerminalContextSelection' is declared but never used. 2026-10-24T05:19:51.2496920Z ╭─[apps/web/src/lib/terminalContext.ts:56:10] 2026-10-24T05:19:51.2497022Z 55 │ 2026-10-24T05:19:51.2497181Z 56 │ function normalizeTerminalContextSelection( 2026-10-24T05:19:51.2497293Z ·  ────────────────┬──────────────── 2026-10-24T05:19:51.2497478Z · ╰── 'normalizeTerminalContextSelection' is declared here 2026-10-24T05:19:51.2497564Z 57 │ selection: TerminalContextSelection, 2026-10-24T05:19:51.2497618Z ╰──── 2026-10-24T05:19:51.2497721Z  help: Consider removing this declaration. 2026-10-24T05:19:51.2497723Z 2026-10-24T05:19:51.2498186Z ⚠ 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-24T05:19:51.2498345Z ╭─[packages/client-runtime/src/connection/supervisor.test.ts:135:3] 2026-10-24T05:19:51.2498462Z 134 │ let lastState = yield* SubscriptionRef.get(state); 2026-10-24T05:19:51.2498707Z 135 │ ╭─▶ for (let iteration = 0; iteration < 100; iteration += 1) { 2026-10-24T05:19:51.2498843Z 136 │ │ lastState = yield* SubscriptionRef.get(state); 2026-10-24T05:19:51.2498946Z 137 │ │ if (predicate(lastState)) { 2026-10-24T05:19:51.2499045Z 138 │ │ return lastState; 2026-10-24T05:19:51.2499120Z 139 │ │ } 2026-10-24T05:19:51.2499222Z 140 │ │ yield* Effect.yieldNow; 2026-10-24T05:19:51.2499344Z 141 │ ╰─▶ } 2026-10-24T05:19:51.2499420Z 142 │ return yield* Effect.die( 2026-10-24T05:19:51.2499478Z ╰──── 2026-10-24T05:19:51.2499483Z 2026-10-24T05:19:51.2499653Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T05:19:51.2499788Z ╭─[apps/server/src/process/externalLauncher.test.ts:186:12] 2026-10-24T05:19:51.2499845Z 185 │ 2026-10-24T05:19:51.2499946Z 186 │ for (const {} of ["darwin", "linux"] as const) { 2026-10-24T05:19:51.2500018Z ·  ── 2026-10-24T05:19:51.2500069Z 187 │ } 2026-10-24T05:19:51.2500123Z ╰──── 2026-10-24T05:19:51.2500351Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T05:19:51.2500353Z 2026-10-24T05:19:51.2500520Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T05:19:51.2500665Z ╭─[apps/server/src/process/externalLauncher.test.ts:189:12] 2026-10-24T05:19:51.2500721Z 188 │ 2026-10-24T05:19:51.2500788Z 189 │ for (const {} of [ 2026-10-24T05:19:51.2500859Z ·  ── 2026-10-24T05:19:51.2500946Z 190 │ { kind: "browser", folderVerb: "none" }, 2026-10-24T05:19:51.2501000Z ╰──── 2026-10-24T05:19:51.2501221Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T05:19:51.2501224Z 2026-10-24T05:19:51.2501389Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T05:19:51.2501526Z ╭─[apps/server/src/process/externalLauncher.test.ts:311:12] 2026-10-24T05:19:51.2501576Z 310 │ 2026-10-24T05:19:51.2501707Z 311 │ for (const {} of ["rejected", "spawn-error", "stalled"] as const) { 2026-10-24T05:19:51.2501777Z ·  ── 2026-10-24T05:19:51.2501878Z 312 │ } 2026-10-24T05:19:51.2501999Z ╰──── 2026-10-24T05:19:51.2502256Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T05:19:51.2502260Z 2026-10-24T05:19:51.2502506Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T05:19:51.2502710Z ╭─[apps/server/src/process/externalLauncher.test.ts:314:12] 2026-10-24T05:19:51.2502787Z 313 │ 2026-10-24T05:19:51.2502885Z 314 │ for (const {} of [ 2026-10-24T05:19:51.2502989Z ·  ── 2026-10-24T05:19:51.2503071Z 315 │ { 2026-10-24T05:19:51.2503145Z ╰──── 2026-10-24T05:19:51.2503523Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T05:19:51.2503527Z 2026-10-24T05:19:51.2503997Z ⚠ 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-24T05:19:51.2504155Z ╭─[apps/server/src/project/ProjectEnrichmentService.test.ts:28:3] 2026-10-24T05:19:51.2504212Z 27 │ ) { 2026-10-24T05:19:51.2504409Z 28 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T05:19:51.2504553Z 29 │ │ const available = yield* service.peek(workspaceRoot); 2026-10-24T05:19:51.2504681Z 30 │ │ if (predicate(available)) return available; 2026-10-24T05:19:51.2504786Z 31 │ │ yield* Effect.yieldNow; 2026-10-24T05:19:51.2504912Z 32 │ ╰─▶ } 2026-10-24T05:19:51.2505094Z 33 │ return yield* Effect.die(`Project metadata for ${workspaceRoot} was not resolved in time.`); 2026-10-24T05:19:51.2505146Z ╰──── 2026-10-24T05:19:51.2505149Z 2026-10-24T05:19:51.2505350Z ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed 2026-10-24T05:19:51.2505515Z ╭─[apps/server/src/sourceControl/SourceControlProviderRegistry.ts:15:13] 2026-10-24T05:19:51.2505588Z 14 │ } from "@t3tools/contracts"; 2026-10-24T05:19:51.2505678Z 15 │ import type {} from "@t3tools/contracts"; 2026-10-24T05:19:51.2505750Z ·  ── 2026-10-24T05:19:51.2506216Z 16 │ import { detectSourceControlProviderFromRemoteUrl } from "@t3tools/shared/sourceControl"; 2026-10-24T05:19:51.2506266Z ╰──── 2026-10-24T05:19:51.2506351Z  help: Remove empty braces 2026-10-24T05:19:51.2506357Z 2026-10-24T05:19:51.2506805Z ⚠ 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-24T05:19:51.2506934Z ╭─[apps/server/src/project/ProjectService.test.ts:94:3] 2026-10-24T05:19:51.2506986Z 93 │ ) { 2026-10-24T05:19:51.2507179Z 94 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T05:19:51.2507350Z 95 │ │ const project = Option.getOrThrow(yield* service.getById(projectId)); 2026-10-24T05:19:51.2507468Z 96 │ │ if (predicate(project)) return project; 2026-10-24T05:19:51.2507621Z 97 │ │ yield* Effect.yieldNow; 2026-10-24T05:19:51.2507806Z 98 │ ╰─▶ } 2026-10-24T05:19:51.2507951Z 99 │ return yield* Effect.die(`Project ${projectId} was not enriched in time.`); 2026-10-24T05:19:51.2508000Z ╰──── 2026-10-24T05:19:51.2508002Z 2026-10-24T05:19:51.2508161Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T05:19:51.2508346Z ╭─[packages/provider-opencode/src/server/OpenCodeRuntime.environment.test.ts:53:14] 2026-10-24T05:19:51.2508400Z 52 │ 2026-10-24T05:19:51.2508465Z 53 │ for (const {} of [ 2026-10-24T05:19:51.2508532Z ·  ── 2026-10-24T05:19:51.2508615Z 54 │ { healthy: true }, 2026-10-24T05:19:51.2508683Z ╰──── 2026-10-24T05:19:51.2508914Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T05:19:51.2508920Z 2026-10-24T05:19:51.2509177Z ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'. 2026-10-24T05:19:51.2509309Z ╭─[apps/server/src/telemetry/AnalyticsService.ts:340:7] 2026-10-24T05:19:51.2509359Z 339 │ 2026-10-24T05:19:51.2509459Z 340 │ const layerTest = AnalyticsService.layerTest; 2026-10-24T05:19:51.2509533Z ·  ────┬──── 2026-10-24T05:19:51.2509663Z · ╰── 'layerTest' is declared here 2026-10-24T05:19:51.2509713Z ╰──── 2026-10-24T05:19:51.2509814Z  help: Consider removing this declaration. 2026-10-24T05:19:51.2509816Z 2026-10-24T05:19:51.2510070Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:19:51.2510253Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:119:10] 2026-10-24T05:19:51.2510306Z 117 │ 2026-10-24T05:19:51.2510369Z 118 │ useEffect(() => { 2026-10-24T05:19:51.2510436Z ·  ────┬──── 2026-10-24T05:19:51.2510567Z · ╰── This is the containing effect 2026-10-24T05:19:51.2510645Z 119 │ void refreshNotifications(); 2026-10-24T05:19:51.2510734Z ·  ──────────┬───────── 2026-10-24T05:19:51.2510905Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:19:51.2511044Z 120 │ const subscription = AppState.addEventListener("change", (state) => { 2026-10-24T05:19:51.2511094Z ╰──── 2026-10-24T05:19:51.2511730Z  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-24T05:19:51.2512118Z  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-24T05:19:51.2512120Z 2026-10-24T05:19:51.2512369Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:19:51.2512549Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:128:7] 2026-10-24T05:19:51.2512601Z 125 │ 2026-10-24T05:19:51.2512670Z 126 │ useEffect(() => { 2026-10-24T05:19:51.2512740Z ·  ────┬──── 2026-10-24T05:19:51.2512868Z · ╰── This is the containing effect 2026-10-24T05:19:51.2512934Z 127 │ if (!isLoaded) { 2026-10-24T05:19:51.2513022Z 128 │ setLiveActivityStatus("checking"); 2026-10-24T05:19:51.2513110Z ·  ──────────┬────────── 2026-10-24T05:19:51.2513282Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:19:51.2513343Z 129 │ return; 2026-10-24T05:19:51.2513392Z ╰──── 2026-10-24T05:19:51.2513979Z  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-24T05:19:51.2514295Z  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-24T05:19:51.2514297Z 2026-10-24T05:19:51.2514748Z ⚠ 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-24T05:19:51.2514881Z ╭─[packages/client-runtime/src/rpc/session.test.ts:226:3] 2026-10-24T05:19:51.2514940Z 225 │ ) { 2026-10-24T05:19:51.2515138Z 226 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T05:19:51.2515251Z 227 │ │ const socket = sockets[index]; 2026-10-24T05:19:51.2515342Z 228 │ │ if (socket) { 2026-10-24T05:19:51.2515432Z 229 │ │ return socket; 2026-10-24T05:19:51.2515503Z 230 │ │ } 2026-10-24T05:19:51.2515601Z 231 │ │ yield* Effect.yieldNow; 2026-10-24T05:19:51.2515724Z 232 │ ╰─▶ } 2026-10-24T05:19:51.2515893Z 233 │ return yield* Effect.die(new Error("Expected the RPC protocol to create a websocket.")); 2026-10-24T05:19:51.2515942Z ╰──── 2026-10-24T05:19:51.2515944Z 2026-10-24T05:19:51.2516387Z ⚠ 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-24T05:19:51.2516572Z ╭─[packages/client-runtime/src/rpc/session.test.ts:240:3] 2026-10-24T05:19:51.2516680Z 239 │ ) { 2026-10-24T05:19:51.2516875Z 240 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T05:19:51.2517081Z 241 │ │ const request = socket.sent.map((message) => decodeJson(message)).filter(isRpcRequest)[index]; 2026-10-24T05:19:51.2517169Z 242 │ │ if (request) { 2026-10-24T05:19:51.2517259Z 243 │ │ return request; 2026-10-24T05:19:51.2517332Z 244 │ │ } 2026-10-24T05:19:51.2517427Z 245 │ │ yield* Effect.yieldNow; 2026-10-24T05:19:51.2517546Z 246 │ ╰─▶ } 2026-10-24T05:19:51.2517714Z 247 │ return yield* Effect.die(new Error("Expected the RPC protocol to send a request.")); 2026-10-24T05:19:51.2517767Z ╰──── 2026-10-24T05:19:51.2517770Z 2026-10-24T05:19:51.2517931Z ⚠ eslint(no-control-regex): Unexpected control character 2026-10-24T05:19:51.2518117Z ╭─[apps/mobile/src/features/settings/SettingsProviderAccountsRouteScreen.tsx:220:46] 2026-10-24T05:19:51.2518253Z 219 │ 2026-10-24T05:19:51.2518394Z 220 │ {interaction.output.replace(/\x1b\[[0-?]*[ -/]*[@-~]/g, "")} 2026-10-24T05:19:51.2518595Z ·  ──┬─ 2026-10-24T05:19:51.2518856Z · ╰── 'U+001B' is a control character. 2026-10-24T05:19:51.2518952Z 221 │ 2026-10-24T05:19:51.2519037Z ╰──── 2026-10-24T05:19:51.2519397Z  help: Avoid matching control characters in regular expressions. If intentional, disable this rule for the expression. 2026-10-24T05:19:51.2519400Z 2026-10-24T05:19:51.2520110Z ⚠ 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-24T05:19:51.2520240Z ╭─[packages/client-runtime/src/rpc/client.test.ts:131:9] 2026-10-24T05:19:51.2520298Z 130 │ ) { 2026-10-24T05:19:51.2520501Z 131 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T05:19:51.2520622Z 132 │ │ if (subscriptions.length >= count) { 2026-10-24T05:19:51.2520713Z 133 │ │ return; 2026-10-24T05:19:51.2520795Z 134 │ │ } 2026-10-24T05:19:51.2520898Z 135 │ │ yield* Effect.yieldNow; 2026-10-24T05:19:51.2521027Z 136 │ ╰─▶ } 2026-10-24T05:19:51.2521185Z 137 │ return yield* Effect.die(new Error(`Expected ${count} durable subscriptions.`)); 2026-10-24T05:19:51.2521234Z ╰──── 2026-10-24T05:19:51.2521236Z 2026-10-24T05:19:51.2521679Z ⚠ 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-24T05:19:51.2521874Z ╭─[packages/client-runtime/src/rpc/client.test.ts:252:7] 2026-10-24T05:19:51.2522179Z 251 │ yield* SubscriptionRef.set(activeSession, Option.some(session(firstClient))); 2026-10-24T05:19:51.2522428Z 252 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 1; attempt += 1) { 2026-10-24T05:19:51.2522532Z 253 │ │ yield* Effect.yieldNow; 2026-10-24T05:19:51.2522658Z 254 │ ╰─▶ } 2026-10-24T05:19:51.2522777Z 255 │ yield* SubscriptionRef.set(activeSession, Option.none()); 2026-10-24T05:19:51.2522825Z ╰──── 2026-10-24T05:19:51.2522828Z 2026-10-24T05:19:51.2523274Z ⚠ 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-24T05:19:51.2523404Z ╭─[packages/client-runtime/src/rpc/client.test.ts:258:7] 2026-10-24T05:19:51.2523456Z 257 │ 2026-10-24T05:19:51.2523696Z 258 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-24T05:19:51.2523799Z 259 │ │ yield* Effect.yieldNow; 2026-10-24T05:19:51.2523925Z 260 │ ╰─▶ } 2026-10-24T05:19:51.2524028Z 261 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-24T05:19:51.2524077Z ╰──── 2026-10-24T05:19:51.2524079Z 2026-10-24T05:19:51.2524526Z ⚠ 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-24T05:19:51.2524656Z ╭─[packages/client-runtime/src/rpc/client.test.ts:322:7] 2026-10-24T05:19:51.2524715Z 321 │ ); 2026-10-24T05:19:51.2524964Z 322 │ ╭─▶ for (let attempt = 0; attempt < 100 && observedFailures.length < 1; attempt += 1) { 2026-10-24T05:19:51.2525063Z 323 │ │ yield* Effect.yieldNow; 2026-10-24T05:19:51.2525189Z 324 │ ╰─▶ } 2026-10-24T05:19:51.2525241Z 325 │ 2026-10-24T05:19:51.2525291Z ╰──── 2026-10-24T05:19:51.2525294Z 2026-10-24T05:19:51.2525739Z ⚠ 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-24T05:19:51.2525868Z ╭─[packages/client-runtime/src/rpc/client.test.ts:330:7] 2026-10-24T05:19:51.2526024Z 329 │ yield* SubscriptionRef.set(activeSession, Option.some(session(secondClient))); 2026-10-24T05:19:51.2526265Z 330 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-24T05:19:51.2526365Z 331 │ │ yield* Effect.yieldNow; 2026-10-24T05:19:51.2526488Z 332 │ ╰─▶ } 2026-10-24T05:19:51.2526590Z 333 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-24T05:19:51.2526641Z ╰──── 2026-10-24T05:19:51.2526643Z 2026-10-24T05:19:51.2526885Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:19:51.2527068Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:533:25] 2026-10-24T05:19:51.2527195Z 532 │ // range) the boundary string is identical and the chain would die. 2026-10-24T05:19:51.2527285Z 533 │ }, [nextSnoozeWakeAt, snoozeWakeTick]); 2026-10-24T05:19:51.2527387Z ·  ───────┬────── 2026-10-24T05:19:51.2527549Z · ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T05:19:51.2527683Z 534 │ const v2SearchQuery = props.searchQuery.trim().toLocaleLowerCase(); 2026-10-24T05:19:51.2527735Z ╰──── 2026-10-24T05:19:51.2528023Z  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-24T05:19:51.2528332Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2528338Z 2026-10-24T05:19:51.2528501Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T05:19:51.2528647Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:524:53] 2026-10-24T05:19:51.2528766Z 523 │ if (Number.isNaN(wakeAtMs)) return; 2026-10-24T05:19:51.2528920Z 524 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647); 2026-10-24T05:19:51.2529035Z ·  ─────┬──── 2026-10-24T05:19:51.2529198Z · ╰── Cannot call impure function 2026-10-24T05:19:51.2529284Z 525 │ const id = setTimeout(() => { 2026-10-24T05:19:51.2529337Z ╰──── 2026-10-24T05:19:51.2529616Z  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-24T05:19:51.2529907Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T05:19:51.2529909Z 2026-10-24T05:19:51.2530073Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T05:19:51.2530209Z ╭─[apps/web/src/components/CustomSnoozeDialog.tsx:140:58] 2026-10-24T05:19:51.2530337Z 139 │ {...(weekStartsOn === undefined ? {} : { weekStartsOn })} 2026-10-24T05:19:51.2530487Z 140 │ disabled={{ before: new Date(new Date().setHours(0, 0, 0, 0)) }} 2026-10-24T05:19:51.2530610Z ·  ─────┬──── 2026-10-24T05:19:51.2530777Z · ╰── Cannot call impure function 2026-10-24T05:19:51.2530874Z 141 │ onSelect={(selected) => { 2026-10-24T05:19:51.2530922Z ╰──── 2026-10-24T05:19:51.2531192Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T05:19:51.2531480Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T05:19:51.2531482Z 2026-10-24T05:19:51.2531784Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T05:19:51.2531989Z ╭─[packages/provider-opencode/src/server/adapter.ts:3755:7] 2026-10-24T05:19:51.2532045Z 3754 │ 2026-10-24T05:19:51.2532243Z 3755 │ const layer: Layer.Layer = 2026-10-24T05:19:51.2532317Z ·  ──┬── 2026-10-24T05:19:51.2532440Z · ╰── 'layer' is declared here 2026-10-24T05:19:51.2532506Z 3756 │ Layer.effect( 2026-10-24T05:19:51.2532562Z ╰──── 2026-10-24T05:19:51.2532665Z  help: Consider removing this declaration. 2026-10-24T05:19:51.2532667Z 2026-10-24T05:19:51.2532913Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T05:19:51.2533043Z ╭─[apps/server/src/serverRuntimeStartup.ts:728:7] 2026-10-24T05:19:51.2533099Z 727 │ 2026-10-24T05:19:51.2533179Z 728 │ const layer = layerWithOptions(); 2026-10-24T05:19:51.2533246Z ·  ──┬── 2026-10-24T05:19:51.2533370Z · ╰── 'layer' is declared here 2026-10-24T05:19:51.2533422Z ╰──── 2026-10-24T05:19:51.2533522Z  help: Consider removing this declaration. 2026-10-24T05:19:51.2533525Z 2026-10-24T05:19:51.2533686Z ⚠ eslint(no-empty-pattern): Empty array binding pattern 2026-10-24T05:19:51.2533839Z ╭─[apps/server/src/pullRequest/PullRequestService.test.ts:1526:12] 2026-10-24T05:19:51.2533894Z 1525 │ 2026-10-24T05:19:51.2533962Z 1526 │ for (const [] of [ 2026-10-24T05:19:51.2534033Z ·  ── 2026-10-24T05:19:51.2534111Z 1527 │ ["github", "github.com"], 2026-10-24T05:19:51.2534166Z ╰──── 2026-10-24T05:19:51.2534440Z  help: Passing non-iterable values (null, undefined, numbers, booleans, etc.) will result in a runtime error because these values are not iterable. 2026-10-24T05:19:51.2534443Z 2026-10-24T05:19:51.2534894Z ⚠ 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-24T05:19:51.2535069Z ╭─[apps/mobile/src/features/agent-awareness/remoteRegistration.test.ts:223:5] 2026-10-24T05:19:51.2535142Z 222 │ let idlePasses = 0; 2026-10-24T05:19:51.2535285Z 223 │ ╭─▶ for (;;) { 2026-10-24T05:19:51.2535429Z 224 │ │ yield* Effect.promise(() => Promise.resolve()); 2026-10-24T05:19:51.2535573Z 225 │ │ const pending = backgroundRuntime.pending.shift(); 2026-10-24T05:19:51.2535670Z 226 │ │ if (!pending) { 2026-10-24T05:19:51.2535766Z 227 │ │ idlePasses++; 2026-10-24T05:19:51.2535872Z 228 │ │ if (idlePasses >= 3) { 2026-10-24T05:19:51.2535957Z 229 │ │ return; 2026-10-24T05:19:51.2536036Z 230 │ │ } 2026-10-24T05:19:51.2536121Z 231 │ │ continue; 2026-10-24T05:19:51.2536196Z 232 │ │ } 2026-10-24T05:19:51.2536287Z 233 │ │ idlePasses = 0; 2026-10-24T05:19:51.2536404Z 234 │ │ const exit = yield* Effect.exit( 2026-10-24T05:19:51.2536662Z 235 │ │ pending.operation as Effect.Effect, 2026-10-24T05:19:51.2536796Z 236 │ │ ); 2026-10-24T05:19:51.2536900Z 237 │ │ yield* Effect.sync(() => { 2026-10-24T05:19:51.2537006Z 238 │ │ pending.resolve(exit); 2026-10-24T05:19:51.2537083Z 239 │ │ }); 2026-10-24T05:19:51.2537213Z 240 │ ╰─▶ } 2026-10-24T05:19:51.2537269Z 241 │ }, 2026-10-24T05:19:51.2537322Z ╰──── 2026-10-24T05:19:51.2537325Z 2026-10-24T05:19:51.2537596Z ⚠ eslint(no-unused-vars): Variable 'useDragRegion' is declared but never used. Unused variables should start with a '_'. 2026-10-24T05:19:51.2537747Z ╭─[apps/web/src/components/preview/PreviewPanelShell.tsx:61:9] 2026-10-24T05:19:51.2537801Z 60 │ ) { 2026-10-24T05:19:51.2537965Z 61 │ const useDragRegion = isElectron && props.mode !== "sheet" && props.mode !== "embedded"; 2026-10-24T05:19:51.2538046Z ·  ──────┬────── 2026-10-24T05:19:51.2538186Z · ╰── 'useDragRegion' is declared here 2026-10-24T05:19:51.2538274Z 62 │ const isInline = props.mode === "inline"; 2026-10-24T05:19:51.2538325Z ╰──── 2026-10-24T05:19:51.2538430Z  help: Consider removing this declaration. 2026-10-24T05:19:51.2538432Z 2026-10-24T05:19:51.2538657Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T05:19:51.2538805Z ╭─[apps/mobile/src/features/review/ReviewCommentCard.tsx:223:31] 2026-10-24T05:19:51.2538916Z 222 │ ? snippetTokens.map((line, lineIndex) => ( 2026-10-24T05:19:51.2539010Z 223 │ 2026-10-24T05:19:51.2539118Z ·  ─────────────── 2026-10-24T05:19:51.2539209Z 224 │ {lineIndex > 0 ? "\n" : ""} 2026-10-24T05:19:51.2539257Z ╰──── 2026-10-24T05:19:51.2539402Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T05:19:51.2539405Z 2026-10-24T05:19:51.2539594Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T05:19:51.2539741Z ╭─[apps/mobile/src/features/review/ReviewCommentCard.tsx:227:25] 2026-10-24T05:19:51.2539813Z 226 │ { 2026-10-24T05:19:51.2540988Z ·  ────┬──── 2026-10-24T05:19:51.2541118Z · ╰── This is the containing effect 2026-10-24T05:19:51.2541182Z 57 │ scheduler.reset(); 2026-10-24T05:19:51.2541286Z 58 │ highlightedRowIdsRef.current = new Set(); 2026-10-24T05:19:51.2541374Z 59 │ visibleChunkIndexRef.current = 0; 2026-10-24T05:19:51.2541491Z 60 │ setVisibleRange({ firstRowIndex: 0, lastRowIndex: 80 }); 2026-10-24T05:19:51.2541571Z ·  ───────┬─────── 2026-10-24T05:19:51.2541741Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:19:51.2541854Z 61 │ setTokensPatchJson(createEmptyTokenPatch(resetKey)); 2026-10-24T05:19:51.2541908Z ╰──── 2026-10-24T05:19:51.2542492Z  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-24T05:19:51.2542813Z  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-24T05:19:51.2542818Z 2026-10-24T05:19:51.2543017Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:19:51.2543188Z ╭─[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:63:7] 2026-10-24T05:19:51.2543269Z 62 │ return () => scheduler.cancel(); 2026-10-24T05:19:51.2543369Z 63 │ }, [enabled, resetKey, rows.length, scheduler]); 2026-10-24T05:19:51.2543496Z ·  ───┬─── ─────┬───── 2026-10-24T05:19:51.2543685Z · │ ╰── Unnecessary dependency `rows.length` 2026-10-24T05:19:51.2543829Z · ╰── Unnecessary dependency `enabled` 2026-10-24T05:19:51.2543883Z 64 │ 2026-10-24T05:19:51.2543935Z ╰──── 2026-10-24T05:19:51.2544228Z  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-24T05:19:51.2544535Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2544538Z 2026-10-24T05:19:51.2544743Z ⚠ eslint(no-unused-vars): Function 'describeSchedule' is declared but never used. 2026-10-24T05:19:51.2544867Z ╭─[apps/server/src/scheduledTasks/Schedule.ts:79:10] 2026-10-24T05:19:51.2544920Z 78 │ 2026-10-24T05:19:51.2545101Z 79 │ function describeSchedule(schedule: ScheduledTaskSchedule): string { 2026-10-24T05:19:51.2545245Z ·  ────────┬─────── 2026-10-24T05:19:51.2545390Z · ╰── 'describeSchedule' is declared here 2026-10-24T05:19:51.2545499Z 80 │ if (schedule.type === "webhook") return "On webhook"; 2026-10-24T05:19:51.2545551Z ╰──── 2026-10-24T05:19:51.2545653Z  help: Consider removing this declaration. 2026-10-24T05:19:51.2545656Z 2026-10-24T05:19:51.2545797Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:19:51.2545948Z ╭─[apps/mobile/src/features/home/thread-swipe-actions.tsx:494:27] 2026-10-24T05:19:51.2546009Z 493 │ > 2026-10-24T05:19:51.2546088Z 494 │ {props.children(close)} 2026-10-24T05:19:51.2546176Z ·  ──┬── 2026-10-24T05:19:51.2546339Z · ╰── Cannot access ref value during render 2026-10-24T05:19:51.2546421Z 495 │ 2026-10-24T05:19:51.2546472Z ╰──── 2026-10-24T05:19:51.2546928Z  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-24T05:19:51.2547216Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:19:51.2547218Z 2026-10-24T05:19:51.2547677Z ⚠ 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-24T05:19:51.2547861Z ╭─[apps/server/src/scheduledTasks/ScheduledTaskService.webhook.test.ts:521:13] 2026-10-24T05:19:51.2547932Z 520 │ })).delivery; 2026-10-24T05:19:51.2548123Z 521 │ ╭─▶ while (delivery.outcome === "accepted") { 2026-10-24T05:19:51.2548239Z 522 │ │ yield* Effect.yieldNow; 2026-10-24T05:19:51.2548382Z 523 │ │ delivery = (yield* service.getWebhookDelivery({ 2026-10-24T05:19:51.2548481Z 524 │ │ id: task.id, 2026-10-24T05:19:51.2548605Z 525 │ │ deliveryId: deliveryId!, 2026-10-24T05:19:51.2548734Z 526 │ │ })).delivery; 2026-10-24T05:19:51.2548878Z 527 │ ╰─▶ } 2026-10-24T05:19:51.2548997Z 528 │ assert.equal(delivery.outcome, "dispatch_failed"); 2026-10-24T05:19:51.2549047Z ╰──── 2026-10-24T05:19:51.2549049Z 2026-10-24T05:19:51.2549306Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:19:51.2549471Z ╭─[apps/mobile/src/features/review/ReviewCommentComposerSheet.tsx:103:7] 2026-10-24T05:19:51.2549524Z 100 │ 2026-10-24T05:19:51.2549588Z 101 │ useEffect(() => { 2026-10-24T05:19:51.2549661Z ·  ────┬──── 2026-10-24T05:19:51.2549794Z · ╰── This is the containing effect 2026-10-24T05:19:51.2549895Z 102 │ if (!target || selectedLines.length === 0) { 2026-10-24T05:19:51.2550033Z 103 │ setHighlightedLinesById({}); 2026-10-24T05:19:51.2550192Z ·  ───────────┬─────────── 2026-10-24T05:19:51.2550368Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:19:51.2550433Z 104 │ return; 2026-10-24T05:19:51.2550482Z ╰──── 2026-10-24T05:19:51.2551071Z  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-24T05:19:51.2551384Z  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-24T05:19:51.2551387Z 2026-10-24T05:19:51.2551595Z ⚠ eslint(no-unused-vars): Function 'nonEmptyString' is declared but never used. 2026-10-24T05:19:51.2551747Z ╭─[packages/client-runtime/src/work-log/presentation.ts:234:10] 2026-10-24T05:19:51.2551798Z 233 │ 2026-10-24T05:19:51.2551915Z 234 │ function nonEmptyString(value: unknown): string | null { 2026-10-24T05:19:51.2552001Z ·  ───────┬────── 2026-10-24T05:19:51.2552146Z · ╰── 'nonEmptyString' is declared here 2026-10-24T05:19:51.2552285Z 235 │ return typeof value === "string" && value.trim().length > 0 ? value : null; 2026-10-24T05:19:51.2552339Z ╰──── 2026-10-24T05:19:51.2552443Z  help: Consider removing this declaration. 2026-10-24T05:19:51.2552446Z 2026-10-24T05:19:51.2552704Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:19:51.2552888Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:107:5] 2026-10-24T05:19:51.2552939Z 104 │ 2026-10-24T05:19:51.2553005Z 105 │ useEffect(() => { 2026-10-24T05:19:51.2553076Z ·  ────┬──── 2026-10-24T05:19:51.2553203Z · ╰── This is the containing effect 2026-10-24T05:19:51.2553283Z 106 │ clearReviewCommentTarget(); 2026-10-24T05:19:51.2553381Z 107 │ setPendingNativeCommentSelection(null); 2026-10-24T05:19:51.2553486Z ·  ────────────────┬─────────────── 2026-10-24T05:19:51.2553658Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:19:51.2553732Z 108 │ }, [selectedSection?.id]); 2026-10-24T05:19:51.2553790Z ╰──── 2026-10-24T05:19:51.2554375Z  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-24T05:19:51.2554689Z  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-24T05:19:51.2554692Z 2026-10-24T05:19:51.2554939Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:19:51.2555120Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:112:7] 2026-10-24T05:19:51.2555174Z 109 │ 2026-10-24T05:19:51.2555285Z 110 │ useEffect(() => { 2026-10-24T05:19:51.2555407Z ·  ────┬──── 2026-10-24T05:19:51.2555537Z · ╰── This is the containing effect 2026-10-24T05:19:51.2555624Z 111 │ if (activeCommentTarget === null) { 2026-10-24T05:19:51.2555724Z 112 │ setPendingNativeCommentSelection(null); 2026-10-24T05:19:51.2555830Z ·  ────────────────┬─────────────── 2026-10-24T05:19:51.2556007Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:19:51.2556064Z 113 │ } 2026-10-24T05:19:51.2556116Z ╰──── 2026-10-24T05:19:51.2556697Z  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-24T05:19:51.2557014Z  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-24T05:19:51.2557016Z 2026-10-24T05:19:51.2557213Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:19:51.2557392Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:108:7] 2026-10-24T05:19:51.2557490Z 107 │ setPendingNativeCommentSelection(null); 2026-10-24T05:19:51.2557560Z 108 │ }, [selectedSection?.id]); 2026-10-24T05:19:51.2557649Z ·  ─────────┬───────── 2026-10-24T05:19:51.2557815Z · ╰── Unnecessary dependency `selectedSection?.id` 2026-10-24T05:19:51.2557870Z 109 │ 2026-10-24T05:19:51.2557920Z ╰──── 2026-10-24T05:19:51.2558206Z  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-24T05:19:51.2558622Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2558625Z 2026-10-24T05:19:51.2558835Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:19:51.2558969Z ╭─[apps/mobile/src/features/review/ReviewSheet.tsx:454:7] 2026-10-24T05:19:51.2559052Z 453 │ showAuxiliaryPane("inspector"); 2026-10-24T05:19:51.2559161Z 454 │ }, [environmentId, showAuxiliaryPane, threadId]); 2026-10-24T05:19:51.2559307Z ·  ──────┬────── ────┬─── 2026-10-24T05:19:51.2559500Z · │ ╰── Unnecessary dependency `threadId` 2026-10-24T05:19:51.2559644Z · ╰── Unnecessary dependency `environmentId` 2026-10-24T05:19:51.2559704Z 455 │ const { 2026-10-24T05:19:51.2559755Z ╰──── 2026-10-24T05:19:51.2560040Z  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-24T05:19:51.2560339Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2560345Z 2026-10-24T05:19:51.2560584Z ⚠ react(static-components): Cannot create components during render 2026-10-24T05:19:51.2560789Z ╭─[apps/mobile/src/features/review/ReviewSheet.tsx:725:20] 2026-10-24T05:19:51.2560854Z 492 │ // same check. 2026-10-24T05:19:51.2560981Z 493 │ const NativeReviewDiffView = resolveNativeReviewDiffView(); 2026-10-24T05:19:51.2561097Z ·  ─────────────┬───────────── 2026-10-24T05:19:51.2561276Z · ╰── The component is created during render here 2026-10-24T05:19:51.2561423Z 494 │ const nativeReviewDiffViewRef = useRef(null); 2026-10-24T05:19:51.2561542Z 495 │ const showcasedReviewDrawRef = useRef(null); 2026-10-24T05:19:51.2561675Z 496 │ const [isPullRefreshing, setIsPullRefreshing] = useState(false); 2026-10-24T05:19:51.2561770Z 497 │ const handlePullToRefresh = async () => { 2026-10-24T05:19:51.2561846Z 498 │ setIsPullRefreshing(true); 2026-10-24T05:19:51.2561927Z 499 │ await refreshSelectedSection(); 2026-10-24T05:19:51.2562000Z 500 │ setIsPullRefreshing(false); 2026-10-24T05:19:51.2562054Z 501 │ }; 2026-10-24T05:19:51.2562194Z 502 │ const reviewFileNavigatorRef = useRef(null); 2026-10-24T05:19:51.2562336Z 503 │ const reviewFiles = parsedDiff.kind === "files" ? parsedDiff.files : []; 2026-10-24T05:19:51.2562439Z 504 │ const fileVisibility = useReviewFileVisibility({ 2026-10-24T05:19:51.2562527Z 505 │ threadKey: reviewCache.threadKey, 2026-10-24T05:19:51.2562615Z 506 │ sectionId: selectedSection?.id ?? null, 2026-10-24T05:19:51.2562684Z 507 │ files: reviewFiles, 2026-10-24T05:19:51.2562786Z 508 │ cachedExpandedFileIds: selectedSection?.id 2026-10-24T05:19:51.2562921Z 509 │ ? reviewCache.expandedFileIdsBySection[selectedSection.id] 2026-10-24T05:19:51.2562985Z 510 │ : undefined, 2026-10-24T05:19:51.2563077Z 511 │ cachedViewedFileIds: selectedSection?.id 2026-10-24T05:19:51.2563198Z 512 │ ? reviewCache.viewedFileIdsBySection[selectedSection.id] 2026-10-24T05:19:51.2563262Z 513 │ : undefined, 2026-10-24T05:19:51.2563316Z 514 │ }); 2026-10-24T05:19:51.2563501Z 515 │ const { collapsedFileIds, toggleExpandedFile, toggleViewedFile, viewedFileIds } = fileVisibility; 2026-10-24T05:19:51.2563632Z 516 │ const commentSelection = useReviewCommentSelectionController({ 2026-10-24T05:19:51.2563694Z 517 │ environmentId, 2026-10-24T05:19:51.2563757Z 518 │ threadId, 2026-10-24T05:19:51.2563821Z 519 │ selectedSection, 2026-10-24T05:19:51.2563891Z 520 │ nativeReviewDiffData, 2026-10-24T05:19:51.2563995Z 521 │ }); 2026-10-24T05:19:51.2564158Z 522 │ const nativeBridge = useNativeReviewDiffBridge({ 2026-10-24T05:19:51.2564241Z 523 │ threadKey: reviewCache.threadKey, 2026-10-24T05:19:51.2564333Z 524 │ sectionId: selectedSection?.id ?? null, 2026-10-24T05:19:51.2564412Z 525 │ diff: selectedSection?.diff, 2026-10-24T05:19:51.2564489Z 526 │ data: nativeReviewDiffData, 2026-10-24T05:19:51.2564554Z 527 │ collapsedFileIds, 2026-10-24T05:19:51.2564617Z 528 │ viewedFileIds, 2026-10-24T05:19:51.2564728Z 529 │ selectedRowIds: commentSelection.selectedRowIds, 2026-10-24T05:19:51.2564825Z 530 │ canHighlight: parsedDiff.kind === "files", 2026-10-24T05:19:51.2564877Z 531 │ }); 2026-10-24T05:19:51.2564952Z 532 │ const showcaseReviewKey = 2026-10-24T05:19:51.2565082Z 533 │ SHOWCASE_ENABLED && parsedDiff.kind === "files" && selectedSection 2026-10-24T05:19:51.2565293Z 534 │ ? `${reviewCache.threadKey}:${selectedSection.id}:${nativeBridge.tokensResetKey}:${nativeBridge.themeId}` 2026-10-24T05:19:51.2565354Z 535 │ : null; 2026-10-24T05:19:51.2565520Z 536 │ const handleNativeDebug = (event: NativeSyntheticEvent>) => { 2026-10-24T05:19:51.2565600Z 537 │ nativeBridge.onDebug(event); 2026-10-24T05:19:51.2565660Z 538 │ if ( 2026-10-24T05:19:51.2565736Z 539 │ showcaseReviewKey === null || 2026-10-24T05:19:51.2565859Z 540 │ showcasedReviewDrawRef.current === showcaseReviewKey || 2026-10-24T05:19:51.2565966Z 541 │ !isNativeReviewDiffDrawEvent(event.nativeEvent) 2026-10-24T05:19:51.2566022Z 542 │ ) { 2026-10-24T05:19:51.2566081Z 543 │ return; 2026-10-24T05:19:51.2566135Z 544 │ } 2026-10-24T05:19:51.2566247Z 545 │ showcasedReviewDrawRef.current = showcaseReviewKey; 2026-10-24T05:19:51.2566413Z 546 │ reportShowcaseSceneRendered({ scene: "review", themeId: nativeBridge.themeId }); 2026-10-24T05:19:51.2566468Z 547 │ }; 2026-10-24T05:19:51.2566522Z 548 │ 2026-10-24T05:19:51.2566640Z 549 │ const handleSelectFile = async (fileId: string | null) => { 2026-10-24T05:19:51.2566718Z 550 │ loadVisibleFile(fileId, true); 2026-10-24T05:19:51.2566806Z 551 │ commentSelection.clearSelection(); 2026-10-24T05:19:51.2566925Z 552 │ if (fileId !== null && collapsedFileIds.includes(fileId)) { 2026-10-24T05:19:51.2567005Z 553 │ toggleExpandedFile(fileId); 2026-10-24T05:19:51.2567057Z 554 │ } 2026-10-24T05:19:51.2567168Z 555 │ const nativeView = nativeReviewDiffViewRef.current; 2026-10-24T05:19:51.2567239Z 556 │ if (!nativeView) return; 2026-10-24T05:19:51.2567332Z 557 │ const result = await settlePromise(() => 2026-10-24T05:19:51.2567506Z 558 │ fileId === null ? nativeView.scrollToTop(true) : nativeView.scrollToFile(fileId, true), 2026-10-24T05:19:51.2567566Z 559 │ ); 2026-10-24T05:19:51.2567653Z 560 │ if (AsyncResult.isFailure(result)) { 2026-10-24T05:19:51.2567834Z 561 │ console.error("[review] Failed to navigate to diff file", squashAtomCommandFailure(result)); 2026-10-24T05:19:51.2567886Z 562 │ } 2026-10-24T05:19:51.2567941Z 563 │ }; 2026-10-24T05:19:51.2568025Z 564 │ const handleVisibleFileChange = ( 2026-10-24T05:19:51.2568155Z 565 │ event: NativeSyntheticEvent<{ readonly fileId?: string | null }>, 2026-10-24T05:19:51.2568209Z 566 │ ) => { 2026-10-24T05:19:51.2568318Z 567 │ loadVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-24T05:19:51.2568484Z 568 │ reviewFileNavigatorRef.current?.setVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-24T05:19:51.2568538Z 569 │ }; 2026-10-24T05:19:51.2568711Z 570 │ const renderInspector = () => ( 2026-10-24T05:19:51.2568847Z 571 │ void handleSelectFile(fileId)} 2026-10-24T05:19:51.2569352Z 577 │ /> 2026-10-24T05:19:51.2569404Z 578 │ ); 2026-10-24T05:19:51.2569457Z 579 │ 2026-10-24T05:19:51.2569640Z 580 │ const handleNativeToggleFile = (event: NativeSyntheticEvent<{ readonly fileId?: string }>) => { 2026-10-24T05:19:51.2569724Z 581 │ const { fileId } = event.nativeEvent; 2026-10-24T05:19:51.2569788Z 582 │ if (fileId) { 2026-10-24T05:19:51.2569876Z 583 │ loadVisibleFile(fileId, true); 2026-10-24T05:19:51.2569957Z 584 │ toggleExpandedFile(fileId); 2026-10-24T05:19:51.2570008Z 585 │ } 2026-10-24T05:19:51.2570064Z 586 │ }; 2026-10-24T05:19:51.2570119Z 587 │ 2026-10-24T05:19:51.2570206Z 588 │ const handleNativeToggleViewedFile = ( 2026-10-24T05:19:51.2570322Z 589 │ event: NativeSyntheticEvent<{ readonly fileId?: string }>, 2026-10-24T05:19:51.2570380Z 590 │ ) => { 2026-10-24T05:19:51.2570467Z 591 │ const { fileId } = event.nativeEvent; 2026-10-24T05:19:51.2570530Z 592 │ if (fileId) { 2026-10-24T05:19:51.2570603Z 593 │ toggleViewedFile(fileId); 2026-10-24T05:19:51.2570658Z 594 │ } 2026-10-24T05:19:51.2570712Z 595 │ }; 2026-10-24T05:19:51.2570762Z 596 │ 2026-10-24T05:19:51.2570835Z 597 │ const parsedDiffNotice = 2026-10-24T05:19:51.2571000Z 598 │ parsedDiff.kind === "files" || parsedDiff.kind === "raw" ? parsedDiff.notice : null; 2026-10-24T05:19:51.2571123Z 599 │ const hasCachedSelectedDiff = selectedSection?.diff != null; 2026-10-24T05:19:51.2571274Z 600 │ const hasAnyCachedDiff = reviewSections.some((section) => section.diff != null); 2026-10-24T05:19:51.2571394Z 601 │ const sectionMenu = buildReviewSectionMenu(reviewSections); 2026-10-24T05:19:51.2571550Z 602 │ const { showConnectionNotice, showSectionToolbar } = resolveReviewAvailability({ 2026-10-24T05:19:51.2571660Z 603 │ hasEnvironmentPresentation: environment.isReady, 2026-10-24T05:19:51.2571760Z 604 │ isEnvironmentConnected: isEnvironmentReady, 2026-10-24T05:19:51.2571828Z 605 │ hasCachedSelectedDiff, 2026-10-24T05:19:51.2571896Z 606 │ hasAnyCachedDiff, 2026-10-24T05:19:51.2571951Z 607 │ }); 2026-10-24T05:19:51.2572035Z 608 │ const handleRetryEnvironment = () => { 2026-10-24T05:19:51.2572128Z 609 │ void retryEnvironment(environmentId); 2026-10-24T05:19:51.2572187Z 610 │ }; 2026-10-24T05:19:51.2572272Z 611 │ const handleReturnToThread = () => { 2026-10-24T05:19:51.2572347Z 612 │ if (navigation.canGoBack()) { 2026-10-24T05:19:51.2572418Z 613 │ navigation.goBack(); 2026-10-24T05:19:51.2572480Z 614 │ return; 2026-10-24T05:19:51.2572533Z 615 │ } 2026-10-24T05:19:51.2572611Z 616 │ navigation.navigate("Thread", { 2026-10-24T05:19:51.2572700Z 617 │ environmentId: String(environmentId), 2026-10-24T05:19:51.2572777Z 618 │ threadId: String(threadId), 2026-10-24T05:19:51.2572834Z 619 │ }); 2026-10-24T05:19:51.2572885Z 620 │ }; 2026-10-24T05:19:51.2572964Z 621 │ const androidHeaderSubtitle = [ 2026-10-24T05:19:51.2573036Z 622 │ selectedSection?.title, 2026-10-24T05:19:51.2573115Z 623 │ headerDiffSummary.additions, 2026-10-24T05:19:51.2573244Z 624 │ headerDiffSummary.deletions, 2026-10-24T05:19:51.2573357Z 625 │ ] 2026-10-24T05:19:51.2573461Z 626 │ .filter((part): part is string => Boolean(part)) 2026-10-24T05:19:51.2573523Z 627 │ .join(" · "); 2026-10-24T05:19:51.2573575Z 628 │ 2026-10-24T05:19:51.2573653Z 629 │ const showChangedFilesPane = 2026-10-24T05:19:51.2573725Z 630 │ !showConnectionNotice && 2026-10-24T05:19:51.2573796Z 631 │ selectedSection !== null && 2026-10-24T05:19:51.2573875Z 632 │ parsedDiff.kind === "files" && 2026-10-24T05:19:51.2573954Z 633 │ NativeReviewDiffView !== null; 2026-10-24T05:19:51.2574123Z 634 │ useRegisterWorkspaceInspector(showChangedFilesPane ? renderInspector : undefined); 2026-10-24T05:19:51.2574289Z 635 │ const showChangedFilesToggle = panes.supportsAuxiliaryPane && showChangedFilesPane; 2026-10-24T05:19:51.2574341Z 636 │ 2026-10-24T05:19:51.2574418Z 637 │ const listHeader = (() => { 2026-10-24T05:19:51.2574505Z 638 │ const children: ReactElement[] = []; 2026-10-24T05:19:51.2574554Z 639 │ 2026-10-24T05:19:51.2574619Z 640 │ if (error) { 2026-10-24T05:19:51.2574685Z 641 │ children.push( 2026-10-24T05:19:51.2574746Z 642 │ 2026-10-24T05:19:51.2575388Z 649 │ Review unavailable 2026-10-24T05:19:51.2575545Z 650 │ {error} 2026-10-24T05:19:51.2575608Z 651 │ , 2026-10-24T05:19:51.2575665Z 652 │ ); 2026-10-24T05:19:51.2575722Z 653 │ } 2026-10-24T05:19:51.2575771Z 654 │ 2026-10-24T05:19:51.2575843Z 655 │ if (parsedDiffNotice) { 2026-10-24T05:19:51.2576001Z 656 │ children.push(); 2026-10-24T05:19:51.2576055Z 657 │ } 2026-10-24T05:19:51.2576105Z 658 │ 2026-10-24T05:19:51.2576182Z 659 │ if (children.length === 0) { 2026-10-24T05:19:51.2576245Z 660 │ return null; 2026-10-24T05:19:51.2576298Z 661 │ } 2026-10-24T05:19:51.2576347Z 662 │ 2026-10-24T05:19:51.2576417Z 663 │ return <>{children}; 2026-10-24T05:19:51.2576473Z 664 │ })(); 2026-10-24T05:19:51.2576539Z 665 │ const headerSubtitle = [ 2026-10-24T05:19:51.2576624Z 666 │ headerDiffSummary.additions, 2026-10-24T05:19:51.2576706Z 667 │ headerDiffSummary.deletions, 2026-10-24T05:19:51.2576786Z 668 │ pendingReviewCommentCount > 0 2026-10-24T05:19:51.2576953Z 669 │ ? `${pendingReviewCommentCount} comment${pendingReviewCommentCount === 1 ? "" : "s"}` 2026-10-24T05:19:51.2577014Z 670 │ : null, 2026-10-24T05:19:51.2577068Z 671 │ ] 2026-10-24T05:19:51.2577131Z 672 │ .filter(Boolean) 2026-10-24T05:19:51.2577191Z 673 │ .join(" · "); 2026-10-24T05:19:51.2577323Z 674 │ const headerTitleText = selectedSection?.title ?? "Review changes"; 2026-10-24T05:19:51.2577377Z 675 │ 2026-10-24T05:19:51.2577437Z 676 │ return ( 2026-10-24T05:19:51.2577489Z 677 │ <> 2026-10-24T05:19:51.2577555Z 678 │ 2026-10-24T05:19:51.2579025Z 694 │ 2026-10-24T05:19:51.2579092Z 695 │ 2026-10-24T05:19:51.2579209Z 696 │ 2026-10-24T05:19:51.2579291Z 697 │ {showConnectionNotice ? ( 2026-10-24T05:19:51.2579429Z 698 │ 2026-10-24T05:19:51.2579518Z 699 │ 2026-10-24T05:19:51.2580517Z 711 │ 2026-10-24T05:19:51.2580669Z 712 │ ) : selectedSection && parsedDiff.kind === "files" && NativeReviewDiffView ? ( 2026-10-24T05:19:51.2580732Z 713 │ 2026-10-24T05:19:51.2581170Z 719 │ 2026-10-24T05:19:51.2581524Z 723 │ {listHeader} 2026-10-24T05:19:51.2581644Z 724 │ 2026-10-24T05:19:51.2581727Z 725 │ file.path === path)!; 2026-10-24T05:19:51.2587097Z 1786 │ const request = yield* Schema.decodeEffect(ReviewDiffPreviewInput)({ 2026-10-24T05:19:51.2587261Z ·  ─────────────────── 2026-10-24T05:19:51.2587377Z 1787 │ cwd, 2026-10-24T05:19:51.2587437Z ╰──── 2026-10-24T05:19:51.2587440Z 2026-10-24T05:19:51.2587606Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T05:19:51.2587753Z ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:372:47] 2026-10-24T05:19:51.2587882Z 371 │ const { open, onOpenChange, onSnooze, timestampFormat } = props; 2026-10-24T05:19:51.2588032Z 372 │ const presets = open ? resolveSnoozePresets(new Date(), timestampFormat) : []; 2026-10-24T05:19:51.2588143Z ·  ─────┬──── 2026-10-24T05:19:51.2588302Z · ╰── Cannot call impure function 2026-10-24T05:19:51.2588368Z 373 │ return ( 2026-10-24T05:19:51.2588423Z ╰──── 2026-10-24T05:19:51.2588737Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T05:19:51.2589027Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T05:19:51.2589029Z 2026-10-24T05:19:51.2589193Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T05:19:51.2589336Z ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:853:39] 2026-10-24T05:19:51.2589428Z 852 │ if (snoozeGateClock.thread !== thread) { 2026-10-24T05:19:51.2589554Z 853 │ setSnoozeGateClock({ thread, now: new Date().toISOString() }); 2026-10-24T05:19:51.2589666Z ·  ─────┬──── 2026-10-24T05:19:51.2589822Z · ╰── Cannot call impure function 2026-10-24T05:19:51.2589874Z 854 │ } 2026-10-24T05:19:51.2589926Z ╰──── 2026-10-24T05:19:51.2590195Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T05:19:51.2590483Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T05:19:51.2590485Z 2026-10-24T05:19:51.2590628Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:19:51.2590783Z ╭─[apps/mobile/src/features/diffs/nativeReviewDiffSurface.ts:277:39] 2026-10-24T05:19:51.2590844Z 276 │ 2026-10-24T05:19:51.2591026Z 277 │ ╭─▶ return createElement(RawNativeView, { 2026-10-24T05:19:51.2591121Z 278 │ │ ...nativeProps, 2026-10-24T05:19:51.2591264Z 279 │ │ refreshEnabled: props.onPullToRefresh !== undefined, 2026-10-24T05:19:51.2591356Z 280 │ │ ref: nativeRef, 2026-10-24T05:19:51.2591484Z 281 │ ├─▶ }); 2026-10-24T05:19:51.2591718Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T05:19:51.2591773Z 282 │ } 2026-10-24T05:19:51.2591827Z ╰──── 2026-10-24T05:19:51.2592336Z  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-24T05:19:51.2592684Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:19:51.2592687Z 2026-10-24T05:19:51.2592922Z ⚠ unicorn(prefer-string-starts-ends-with): Prefer String#startsWith over a regex with a caret. 2026-10-24T05:19:51.2593042Z ╭─[apps/server/src/vcs/GitVcsDriverCore.ts:509:11] 2026-10-24T05:19:51.2593143Z 508 │ GIT_DIAGNOSTIC_LINE_PATTERN.test(line) || 2026-10-24T05:19:51.2593279Z 509 │ (!/^remote:/.test(line) && SSH_TRANSPORT_REFUSAL_PATTERN.test(line)), 2026-10-24T05:19:51.2593365Z ·  ─────────────── 2026-10-24T05:19:51.2593417Z 510 │ ) 2026-10-24T05:19:51.2593475Z ╰──── 2026-10-24T05:19:51.2593627Z  help: Replace `/^remote:/.test(line)` with `line.startsWith('remote:')`. 2026-10-24T05:19:51.2593630Z 2026-10-24T05:19:51.2593883Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:19:51.2594054Z ╭─[apps/mobile/src/features/threads/thread-inspector-content-stack.tsx:60:5] 2026-10-24T05:19:51.2594109Z 58 │ 2026-10-24T05:19:51.2594177Z 59 │ useEffect(() => { 2026-10-24T05:19:51.2594250Z ·  ────┬──── 2026-10-24T05:19:51.2594377Z · ╰── This is the containing effect 2026-10-24T05:19:51.2594462Z 60 │ setMountedModes((current) => { 2026-10-24T05:19:51.2594543Z ·  ───────┬─────── 2026-10-24T05:19:51.2594719Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:19:51.2594803Z 61 │ if (current.has(props.mode)) { 2026-10-24T05:19:51.2594855Z ╰──── 2026-10-24T05:19:51.2595440Z  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-24T05:19:51.2595754Z  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-24T05:19:51.2595757Z 2026-10-24T05:19:51.2595899Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:19:51.2596060Z ╭─[apps/mobile/src/native/StackHeader.tsx:185:9] 2026-10-24T05:19:51.2596189Z 184 │ "options", 2026-10-24T05:19:51.2596284Z 185 │ latestOptionFunctionsRef.current, 2026-10-24T05:19:51.2596395Z ·  ────────────────┬─────────────── 2026-10-24T05:19:51.2596586Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T05:19:51.2596682Z 186 │ optionFunctionWrappersRef.current, 2026-10-24T05:19:51.2596736Z ╰──── 2026-10-24T05:19:51.2597195Z  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-24T05:19:51.2597483Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:19:51.2597491Z 2026-10-24T05:19:51.2597630Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:19:51.2597748Z ╭─[apps/mobile/src/native/StackHeader.tsx:186:9] 2026-10-24T05:19:51.2597839Z 185 │ latestOptionFunctionsRef.current, 2026-10-24T05:19:51.2597931Z 186 │ optionFunctionWrappersRef.current, 2026-10-24T05:19:51.2598038Z ·  ────────────────┬──────────────── 2026-10-24T05:19:51.2598228Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T05:19:51.2598319Z 187 │ ) as NativeStackNavigationOptions) 2026-10-24T05:19:51.2598371Z ╰──── 2026-10-24T05:19:51.2598946Z  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-24T05:19:51.2599235Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:19:51.2599237Z 2026-10-24T05:19:51.2599490Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:19:51.2599650Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:215:7] 2026-10-24T05:19:51.2599706Z 211 │ }; 2026-10-24T05:19:51.2599771Z 212 │ useEffect(() => { 2026-10-24T05:19:51.2599843Z ·  ────┬──── 2026-10-24T05:19:51.2599978Z · ╰── This is the containing effect 2026-10-24T05:19:51.2600153Z 213 │ const inserted = ownerKey ? readComposerDraftSelection(ownerKey, draftMessage) : null; 2026-10-24T05:19:51.2600216Z 214 │ if (inserted) { 2026-10-24T05:19:51.2600293Z 215 │ setSelection((current) => 2026-10-24T05:19:51.2600372Z ·  ──────┬───── 2026-10-24T05:19:51.2600536Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:19:51.2600706Z 216 │ current.start === inserted.start && current.end === inserted.end ? current : inserted, 2026-10-24T05:19:51.2600757Z ╰──── 2026-10-24T05:19:51.2601402Z  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-24T05:19:51.2601799Z  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-24T05:19:51.2601802Z 2026-10-24T05:19:51.2602055Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:19:51.2602213Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:296:7] 2026-10-24T05:19:51.2602290Z 284 │ }, [hasWorkspaceSnapshot]); 2026-10-24T05:19:51.2602355Z 285 │ useEffect(() => { 2026-10-24T05:19:51.2602428Z ·  ────┬──── 2026-10-24T05:19:51.2602555Z · ╰── This is the containing effect 2026-10-24T05:19:51.2602707Z 286 │ if (!environmentId || !projectCwd || !selectedProviderInstanceId) return; 2026-10-24T05:19:51.2602860Z 287 │ const key = `${environmentId}:${selectedProviderInstanceId}:${projectCwd}`; 2026-10-24T05:19:51.2602932Z 288 │ const now = Date.now(); 2026-10-24T05:19:51.2603043Z 289 │ const lastRequest = workspaceRefreshKeyRef.current; 2026-10-24T05:19:51.2603102Z 290 │ if ( 2026-10-24T05:19:51.2603180Z 291 │ lastRequest?.key === key && 2026-10-24T05:19:51.2603317Z 292 │ now - lastRequest.requestedAt < PROVIDER_WORKSPACE_SNAPSHOT_TTL_MS 2026-10-24T05:19:51.2603373Z 293 │ ) 2026-10-24T05:19:51.2603436Z 294 │ return; 2026-10-24T05:19:51.2603610Z 295 │ if (hasCurrentProviderWorkspaceSnapshot(selectedProviderStatus, projectCwd, now)) { 2026-10-24T05:19:51.2603695Z 296 │ setWorkspaceRefreshRetry(null); 2026-10-24T05:19:51.2603795Z ·  ────────────┬─────────── 2026-10-24T05:19:51.2603971Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:19:51.2604033Z 297 │ return; 2026-10-24T05:19:51.2604082Z ╰──── 2026-10-24T05:19:51.2604662Z  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-24T05:19:51.2604977Z  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-24T05:19:51.2604980Z 2026-10-24T05:19:51.2605180Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:19:51.2605345Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:326:5] 2026-10-24T05:19:51.2605398Z 325 │ }, [ 2026-10-24T05:19:51.2605464Z 326 │ draftMessage, 2026-10-24T05:19:51.2605542Z ·  ──────┬───── 2026-10-24T05:19:51.2605686Z · ╰── Unnecessary dependency `draftMessage` 2026-10-24T05:19:51.2605749Z 327 │ environmentId, 2026-10-24T05:19:51.2605801Z ╰──── 2026-10-24T05:19:51.2606084Z  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-24T05:19:51.2606388Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2606435Z 2026-10-24T05:19:51.2606681Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T05:19:51.2606831Z ╭─[apps/mobile/src/features/threads/ThreadQueueControl.tsx:602:27] 2026-10-24T05:19:51.2606997Z 601 │ const onEnd = useEffectEvent((y: number, success: boolean) => props.onEnd(y, success)); 2026-10-24T05:19:51.2607077Z 602 │ const gesture = Gesture.Pan() 2026-10-24T05:19:51.2607166Z ·  ─┬─ 2026-10-24T05:19:51.2607302Z · ╰── `Pan` may be a component 2026-10-24T05:19:51.2607378Z 603 │ .enabled(!props.disabled) 2026-10-24T05:19:51.2607433Z ╰──── 2026-10-24T05:19:51.2607710Z  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-24T05:19:51.2608149Z  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-24T05:19:51.2608155Z 2026-10-24T05:19:51.2608404Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:19:51.2608554Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:400:5] 2026-10-24T05:19:51.2608650Z 398 │ 2026-10-24T05:19:51.2608718Z 399 │ useEffect(() => { 2026-10-24T05:19:51.2608787Z ·  ────┬──── 2026-10-24T05:19:51.2608918Z · ╰── This is the containing effect 2026-10-24T05:19:51.2609015Z 400 │ setInspectorSelection((current) => { 2026-10-24T05:19:51.2609106Z ·  ──────────┬────────── 2026-10-24T05:19:51.2609273Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:19:51.2609378Z 401 │ if (props.renderInspector === undefined) { 2026-10-24T05:19:51.2609431Z ╰──── 2026-10-24T05:19:51.2610014Z  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-24T05:19:51.2610324Z  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-24T05:19:51.2610329Z 2026-10-24T05:19:51.2610541Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T05:19:51.2610694Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:528:24] 2026-10-24T05:19:51.2610851Z 527 │ const inspectorHeaderInset = Platform.OS === "ios" ? 0 : safeAreaInsets.top; 2026-10-24T05:19:51.2611020Z 528 │ ╭─▶ const GitInspector = () => ( 2026-10-24T05:19:51.2611116Z 529 │ │ 2026-10-24T05:19:51.2611829Z 534 │ ╰─▶ ); 2026-10-24T05:19:51.2611911Z 535 │ const FilesInspector = () => 2026-10-24T05:19:51.2611965Z ╰──── 2026-10-24T05:19:51.2612178Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-24T05:19:51.2612181Z 2026-10-24T05:19:51.2612388Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T05:19:51.2612539Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:535:26] 2026-10-24T05:19:51.2612598Z 534 │ ); 2026-10-24T05:19:51.2612759Z 535 │ ╭─▶ const FilesInspector = () => 2026-10-24T05:19:51.2612913Z 536 │ │ selectedThread !== null && selectedThreadCwd !== null ? ( 2026-10-24T05:19:51.2613022Z 537 │ │ 2026-10-24T05:19:51.2613981Z 545 │ ╰─▶ ) : null; 2026-10-24T05:19:51.2614135Z 546 │ const RouteInspector = () => props.renderInspector?.(inspectorHeaderInset); 2026-10-24T05:19:51.2614188Z ╰──── 2026-10-24T05:19:51.2614399Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-24T05:19:51.2614402Z 2026-10-24T05:19:51.2614605Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T05:19:51.2614741Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:231:6] 2026-10-24T05:19:51.2614900Z 227 │ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents( 2026-10-24T05:19:51.2614988Z 228 │ nativeEventSnapshotsRef.current, 2026-10-24T05:19:51.2615082Z ·  ───────────┬─────────── 2026-10-24T05:19:51.2615541Z · ╰── 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-24T05:19:51.2615621Z 229 │ mostRecentEventCount, 2026-10-24T05:19:51.2615676Z 230 │ ); 2026-10-24T05:19:51.2615800Z 231 │ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]); 2026-10-24T05:19:51.2615938Z ·  ──────────────────────────┬────────────────────────── 2026-10-24T05:19:51.2616135Z · ╰── This dependency list is missing values used by the callback 2026-10-24T05:19:51.2616216Z 232 │ const assumedValue = props.value; 2026-10-24T05:19:51.2616270Z ╰──── 2026-10-24T05:19:51.2616484Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T05:19:51.2616855Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2616858Z 2026-10-24T05:19:51.2617071Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T05:19:51.2617204Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:239:7] 2026-10-24T05:19:51.2617349Z 238 │ nativeEventSnapshotsRef.current = assumeComposerControlledState( 2026-10-24T05:19:51.2617441Z 239 │ nativeEventSnapshotsRef.current, 2026-10-24T05:19:51.2617530Z ·  ───────────┬─────────── 2026-10-24T05:19:51.2617980Z · ╰── 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-24T05:19:51.2618059Z 240 │ controlledEventCount, 2026-10-24T05:19:51.2618125Z 241 │ assumedValue, 2026-10-24T05:19:51.2618180Z 242 │ ); 2026-10-24T05:19:51.2618335Z 243 │ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]); 2026-10-24T05:19:51.2618474Z ·  ───────────┬────────── 2026-10-24T05:19:51.2618712Z · ╰── Unnecessary dependency `controlledDocumentJson` 2026-10-24T05:19:51.2621508Z 244 │ const acceptNativeEvent = useCallback( 2026-10-24T05:19:51.2621571Z ╰──── 2026-10-24T05:19:51.2621998Z  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-24T05:19:51.2622309Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2622313Z 2026-10-24T05:19:51.2622459Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:19:51.2622596Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:29] 2026-10-24T05:19:51.2622723Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T05:19:51.2622835Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T05:19:51.2622953Z ·  ─────────────┬──────────── 2026-10-24T05:19:51.2623196Z · ╰── Cannot access ref value during render 2026-10-24T05:19:51.2623325Z 165 │ }); 2026-10-24T05:19:51.2623386Z ╰──── 2026-10-24T05:19:51.2623846Z  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-24T05:19:51.2624130Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:19:51.2624133Z 2026-10-24T05:19:51.2624275Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:19:51.2624409Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:29] 2026-10-24T05:19:51.2624533Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T05:19:51.2624644Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T05:19:51.2624756Z ·  ─────────────┬──────────── 2026-10-24T05:19:51.2624959Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T05:19:51.2625015Z 165 │ }); 2026-10-24T05:19:51.2625068Z ╰──── 2026-10-24T05:19:51.2625521Z  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-24T05:19:51.2625812Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:19:51.2625817Z 2026-10-24T05:19:51.2625957Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:19:51.2626090Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:166:23] 2026-10-24T05:19:51.2626146Z 165 │ }); 2026-10-24T05:19:51.2626235Z 166 │ confirmedTokensRef.current = tokens; 2026-10-24T05:19:51.2626359Z ·  ─────────┬────────────┬─── 2026-10-24T05:19:51.2626547Z · │ ╰── Cannot update ref value during render 2026-10-24T05:19:51.2626664Z · ╰── This value is a ref 2026-10-24T05:19:51.2626734Z 167 │ return JSON.stringify( 2026-10-24T05:19:51.2626786Z ╰──── 2026-10-24T05:19:51.2627241Z  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-24T05:19:51.2627528Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:19:51.2627530Z 2026-10-24T05:19:51.2627673Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:19:51.2627806Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:208:5] 2026-10-24T05:19:51.2627877Z 207 │ mostRecentEventCount, 2026-10-24T05:19:51.2627968Z 208 │ nativeEventSnapshotsRef.current, 2026-10-24T05:19:51.2628073Z ·  ───────────────┬─────────────── 2026-10-24T05:19:51.2628302Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T05:19:51.2628421Z 209 │ ); 2026-10-24T05:19:51.2628476Z ╰──── 2026-10-24T05:19:51.2628979Z  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-24T05:19:51.2629262Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:19:51.2629269Z 2026-10-24T05:19:51.2629408Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:19:51.2629547Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:214:5] 2026-10-24T05:19:51.2629619Z 213 │ mostRecentEventCount, 2026-10-24T05:19:51.2629707Z 214 │ nativeEventSnapshotsRef.current, 2026-10-24T05:19:51.2629807Z ·  ───────────────┬─────────────── 2026-10-24T05:19:51.2629992Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T05:19:51.2630048Z 215 │ ); 2026-10-24T05:19:51.2630100Z ╰──── 2026-10-24T05:19:51.2630546Z  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-24T05:19:51.2630827Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:19:51.2630834Z 2026-10-24T05:19:51.2631019Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T05:19:51.2631153Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:199:6] 2026-10-24T05:19:51.2631272Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T05:19:51.2631383Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T05:19:51.2631493Z ·  ─────────┬──────── 2026-10-24T05:19:51.2631953Z · ╰── 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-24T05:19:51.2632010Z 165 │ }); 2026-10-24T05:19:51.2632103Z 166 │ confirmedTokensRef.current = tokens; 2026-10-24T05:19:51.2632177Z 167 │ return JSON.stringify( 2026-10-24T05:19:51.2632339Z 168 │ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => { 2026-10-24T05:19:51.2632408Z 169 │ const record = 2026-10-24T05:19:51.2632484Z 170 │ token.type === "context" 2026-10-24T05:19:51.2632649Z 171 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-24T05:19:51.2632716Z 172 │ : undefined; 2026-10-24T05:19:51.2632822Z 173 │ const presentation = contextChipPresentation( 2026-10-24T05:19:51.2632931Z 174 │ token.type === "context" ? token.kind : token.type, 2026-10-24T05:19:51.2632996Z 175 │ record, 2026-10-24T05:19:51.2633056Z 176 │ ); 2026-10-24T05:19:51.2633139Z 177 │ const icon = contextChipIcon( 2026-10-24T05:19:51.2633252Z 178 │ presentation, 2026-10-24T05:19:51.2633454Z 179 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-24T05:19:51.2633514Z 180 │ ); 2026-10-24T05:19:51.2633576Z 181 │ return { 2026-10-24T05:19:51.2633648Z 182 │ type: token.type, 2026-10-24T05:19:51.2633724Z 183 │ source: token.source, 2026-10-24T05:19:51.2633796Z 184 │ start: token.start, 2026-10-24T05:19:51.2633860Z 185 │ end: token.end, 2026-10-24T05:19:51.2634006Z 186 │ accent: contextChipAccent(presentation.accent, theme, chipTextColor), 2026-10-24T05:19:51.2634068Z 187 │ label: 2026-10-24T05:19:51.2634146Z 188 │ token.type === "skill" 2026-10-24T05:19:51.2634251Z 189 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-24T05:19:51.2634339Z 190 │ : token.type === "context" 2026-10-24T05:19:51.2634574Z 191 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-24T05:19:51.2634655Z 192 │ : basename(token.value), 2026-10-24T05:19:51.2634796Z 193 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-24T05:19:51.2634889Z 194 │ iconUri: contextChipIconUri(icon), 2026-10-24T05:19:51.2634977Z 195 │ tintsIcon: icon.kind === "chip", 2026-10-24T05:19:51.2635035Z 196 │ }; 2026-10-24T05:19:51.2635090Z 197 │ }), 2026-10-24T05:19:51.2635148Z 198 │ ); 2026-10-24T05:19:51.2635282Z 199 │ }, [props.value, props.context, skillLabels, theme, chipTextColor]); 2026-10-24T05:19:51.2635435Z ·  ───────────────────────────────┬─────────────────────────────── 2026-10-24T05:19:51.2635640Z · ╰── This dependency list is missing values used by the callback 2026-10-24T05:19:51.2635779Z 200 │ // Every render resolves against the snapshot history, so a render whose 2026-10-24T05:19:51.2635831Z ╰──── 2026-10-24T05:19:51.2636033Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T05:19:51.2636339Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2636344Z 2026-10-24T05:19:51.2636524Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T05:19:51.2636660Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:261:5] 2026-10-24T05:19:51.2636794Z 253 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-24T05:19:51.2636898Z 254 │ nativeEventSnapshotsRef.current.push({ 2026-10-24T05:19:51.2636989Z ·  ───────────┬─────────── 2026-10-24T05:19:51.2637436Z · ╰── 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-24T05:19:51.2637530Z 255 │ eventCount: acknowledgedEventCount, 2026-10-24T05:19:51.2637592Z 256 │ value, 2026-10-24T05:19:51.2637668Z 257 │ selection: nextSelection, 2026-10-24T05:19:51.2637728Z 258 │ }); 2026-10-24T05:19:51.2637811Z 259 │ return acknowledgedEventCount; 2026-10-24T05:19:51.2637869Z 260 │ }, 2026-10-24T05:19:51.2637923Z 261 │ [], 2026-10-24T05:19:51.2638045Z ·  ─┬ 2026-10-24T05:19:51.2638289Z · ╰── This dependency list is missing values used by the callback 2026-10-24T05:19:51.2638346Z 262 │ ); 2026-10-24T05:19:51.2638397Z ╰──── 2026-10-24T05:19:51.2638724Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T05:19:51.2639028Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2639031Z 2026-10-24T05:19:51.2639188Z ⚠ react(immutability): This value cannot be modified 2026-10-24T05:19:51.2639349Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:111:5] 2026-10-24T05:19:51.2639407Z 107 │ ); 2026-10-24T05:19:51.2639564Z 108 │ const separationProgress = useSharedValue(props.showScrollToEnd ? 1 : 0); 2026-10-24T05:19:51.2639655Z ·  ─────────┬──────── 2026-10-24T05:19:51.2639801Z · ╰── `separationProgress` originates here 2026-10-24T05:19:51.2639856Z 109 │ 2026-10-24T05:19:51.2639924Z 110 │ useEffect(() => { 2026-10-24T05:19:51.2640098Z 111 │ separationProgress.value = withTiming(props.showScrollToEnd ? 1 : 0, CONTROL_TIMING); 2026-10-24T05:19:51.2640180Z ·  ─────────┬──────── 2026-10-24T05:19:51.2640331Z · ╰── `separationProgress` cannot be modified 2026-10-24T05:19:51.2640440Z 112 │ }, [props.showScrollToEnd, separationProgress]); 2026-10-24T05:19:51.2640493Z ╰──── 2026-10-24T05:19:51.2640758Z  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-24T05:19:51.2641062Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:19:51.2641064Z 2026-10-24T05:19:51.2641217Z ⚠ react(immutability): This value cannot be modified 2026-10-24T05:19:51.2641377Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5] 2026-10-24T05:19:51.2641489Z 128 │ // and repeatedly retargets the animation as it grows. 2026-10-24T05:19:51.2641603Z 129 │ const capsuleWidth = useSharedValue(null); 2026-10-24T05:19:51.2641684Z ·  ──────┬───── 2026-10-24T05:19:51.2641818Z · ╰── `capsuleWidth` originates here 2026-10-24T05:19:51.2642024Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T05:19:51.2642206Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T05:19:51.2642311Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T05:19:51.2642408Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T05:19:51.2642471Z 134 │ return; 2026-10-24T05:19:51.2642524Z 135 │ } 2026-10-24T05:19:51.2642631Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T05:19:51.2642718Z 137 │ measuredWidthRef.current = width; 2026-10-24T05:19:51.2642860Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T05:19:51.2642934Z ·  ──────┬───── 2026-10-24T05:19:51.2643071Z · ╰── `capsuleWidth` cannot be modified 2026-10-24T05:19:51.2643133Z 139 │ }; 2026-10-24T05:19:51.2643190Z ╰──── 2026-10-24T05:19:51.2643445Z  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-24T05:19:51.2643745Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:19:51.2643747Z 2026-10-24T05:19:51.2643902Z ⚠ react(immutability): This value cannot be modified 2026-10-24T05:19:51.2644063Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7] 2026-10-24T05:19:51.2644169Z 128 │ // and repeatedly retargets the animation as it grows. 2026-10-24T05:19:51.2644283Z 129 │ const capsuleWidth = useSharedValue(null); 2026-10-24T05:19:51.2644368Z ·  ──────┬───── 2026-10-24T05:19:51.2644505Z · ╰── `capsuleWidth` originates here 2026-10-24T05:19:51.2644610Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T05:19:51.2644726Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T05:19:51.2644828Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T05:19:51.2644921Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T05:19:51.2644980Z 134 │ return; 2026-10-24T05:19:51.2645036Z 135 │ } 2026-10-24T05:19:51.2645140Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T05:19:51.2645226Z 137 │ measuredWidthRef.current = width; 2026-10-24T05:19:51.2645363Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T05:19:51.2645417Z 139 │ }; 2026-10-24T05:19:51.2645514Z 140 │ const hasStatus = props.status !== null; 2026-10-24T05:19:51.2645647Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-24T05:19:51.2645711Z 142 │ useEffect(() => { 2026-10-24T05:19:51.2645778Z 143 │ if (!hasStatus) { 2026-10-24T05:19:51.2645865Z 144 │ measuredWidthRef.current = null; 2026-10-24T05:19:51.2645943Z 145 │ capsuleWidth.value = null; 2026-10-24T05:19:51.2646018Z ·  ──────┬───── 2026-10-24T05:19:51.2646159Z · ╰── `capsuleWidth` cannot be modified 2026-10-24T05:19:51.2646215Z 146 │ } 2026-10-24T05:19:51.2646267Z ╰──── 2026-10-24T05:19:51.2646521Z  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-24T05:19:51.2646873Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:19:51.2646914Z 2026-10-24T05:19:51.2647143Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T05:19:51.2647304Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7] 2026-10-24T05:19:51.2647436Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-24T05:19:51.2647501Z 142 │ useEffect(() => { 2026-10-24T05:19:51.2647583Z ·  ───┬─── 2026-10-24T05:19:51.2647798Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-24T05:19:51.2647862Z 143 │ if (!hasStatus) { 2026-10-24T05:19:51.2647948Z 144 │ measuredWidthRef.current = null; 2026-10-24T05:19:51.2648032Z 145 │ capsuleWidth.value = null; 2026-10-24T05:19:51.2648111Z ·  ──────┬───── 2026-10-24T05:19:51.2648242Z · ╰── This modifies `capsuleWidth` 2026-10-24T05:19:51.2648298Z 146 │ } 2026-10-24T05:19:51.2648350Z ╰──── 2026-10-24T05:19:51.2648733Z  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-24T05:19:51.2649029Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:19:51.2649033Z 2026-10-24T05:19:51.2649228Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T05:19:51.2649393Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5] 2026-10-24T05:19:51.2649506Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T05:19:51.2649621Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T05:19:51.2649740Z ·  ───────────────┬─────────────── 2026-10-24T05:19:51.2649977Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-24T05:19:51.2650081Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T05:19:51.2650177Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T05:19:51.2650235Z 134 │ return; 2026-10-24T05:19:51.2650290Z 135 │ } 2026-10-24T05:19:51.2650395Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T05:19:51.2650487Z 137 │ measuredWidthRef.current = width; 2026-10-24T05:19:51.2650625Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T05:19:51.2650702Z ·  ──────┬───── 2026-10-24T05:19:51.2650831Z · ╰── This modifies `capsuleWidth` 2026-10-24T05:19:51.2650886Z 139 │ }; 2026-10-24T05:19:51.2650937Z ╰──── 2026-10-24T05:19:51.2651269Z  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-24T05:19:51.2651567Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:19:51.2651569Z 2026-10-24T05:19:51.2651874Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:19:51.2652087Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:361:7] 2026-10-24T05:19:51.2652221Z 355 │ }, [cancelledIncomingShareId, navigation, props.incomingShareId]); 2026-10-24T05:19:51.2652287Z 356 │ useEffect(() => { 2026-10-24T05:19:51.2652361Z ·  ────┬──── 2026-10-24T05:19:51.2652490Z · ╰── This is the containing effect 2026-10-24T05:19:51.2652578Z 357 │ if (!isReturningToProjectPicker) { 2026-10-24T05:19:51.2652642Z 358 │ return; 2026-10-24T05:19:51.2652696Z 359 │ } 2026-10-24T05:19:51.2652791Z 360 │ if (requestedInitialProjectAvailable) { 2026-10-24T05:19:51.2652885Z 361 │ setIsReturningToProjectPicker(false); 2026-10-24T05:19:51.2652995Z ·  ──────────────┬────────────── 2026-10-24T05:19:51.2653172Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:19:51.2653228Z 362 │ return; 2026-10-24T05:19:51.2653282Z ╰──── 2026-10-24T05:19:51.2653864Z  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-24T05:19:51.2654177Z  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-24T05:19:51.2654180Z 2026-10-24T05:19:51.2654436Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:19:51.2654587Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:504:9] 2026-10-24T05:19:51.2654640Z 447 │ 2026-10-24T05:19:51.2654707Z 448 │ useEffect(() => { 2026-10-24T05:19:51.2654778Z ·  ────┬──── 2026-10-24T05:19:51.2654904Z · ╰── This is the containing effect 2026-10-24T05:19:51.2655006Z 449 │ if (props.pendingTaskId || props.draftId) { 2026-10-24T05:19:51.2655066Z 450 │ return; 2026-10-24T05:19:51.2655120Z 451 │ } 2026-10-24T05:19:51.2655260Z 452 │ if (lastInitialProjectRefRef.current !== props.initialProjectRef) { 2026-10-24T05:19:51.2655394Z 453 │ lastInitialProjectRefRef.current = props.initialProjectRef; 2026-10-24T05:19:51.2655507Z 454 │ appliedInitialProjectKeyRef.current = null; 2026-10-24T05:19:51.2655567Z 455 │ } 2026-10-24T05:19:51.2655703Z 456 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-24T05:19:51.2655831Z 457 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-24T05:19:51.2655935Z 458 │ if (initialEnvironmentId && initialProjectId) { 2026-10-24T05:19:51.2656007Z 459 │ const directProject = 2026-10-24T05:19:51.2656073Z 460 │ projects.find( 2026-10-24T05:19:51.2656142Z 461 │ (project) => 2026-10-24T05:19:51.2656315Z 462 │ project.environmentId === initialEnvironmentId && project.id === initialProjectId, 2026-10-24T05:19:51.2656379Z 463 │ ) ?? null; 2026-10-24T05:19:51.2656429Z 464 │ 2026-10-24T05:19:51.2656500Z 465 │ if (directProject) { 2026-10-24T05:19:51.2656685Z 466 │ // Apply the route's project once. Re-applying on every change would 2026-10-24T05:19:51.2656889Z 467 │ // instantly revert environment/project switches made in the picker. 2026-10-24T05:19:51.2657049Z 468 │ const directProjectKey = `${directProject.environmentId}:${directProject.id}`; 2026-10-24T05:19:51.2657184Z 469 │ if (appliedInitialProjectKeyRef.current === directProjectKey) { 2026-10-24T05:19:51.2657246Z 470 │ return; 2026-10-24T05:19:51.2657303Z 471 │ } 2026-10-24T05:19:51.2657397Z 472 │ if (props.initialProjectRef?.branch) { 2026-10-24T05:19:51.2657459Z 473 │ if ( 2026-10-24T05:19:51.2657602Z 474 │ selectedProject?.environmentId !== directProject.environmentId || 2026-10-24T05:19:51.2657701Z 475 │ selectedProject.id !== directProject.id 2026-10-24T05:19:51.2657758Z 476 │ ) { 2026-10-24T05:19:51.2657844Z 477 │ setProject(directProject); 2026-10-24T05:19:51.2657914Z 478 │ return; 2026-10-24T05:19:51.2657977Z 479 │ } 2026-10-24T05:19:51.2658056Z 480 │ if (!flow.draftKey) return; 2026-10-24T05:19:51.2658195Z 481 │ // The route completes checkout before mounting this composer. Local 2026-10-24T05:19:51.2658340Z 482 │ // mode reuses an existing worktree; worktree mode would create another. 2026-10-24T05:19:51.2658446Z 483 │ updateComposerDraftSettings(flow.draftKey, { 2026-10-24T05:19:51.2658524Z 484 │ workspaceSelection: { 2026-10-24T05:19:51.2658618Z 485 │ mode: "local", 2026-10-24T05:19:51.2658732Z 486 │ branch: props.initialProjectRef.branch, 2026-10-24T05:19:51.2658866Z 487 │ worktreePath: props.initialProjectRef.worktreePath ?? null, 2026-10-24T05:19:51.2658946Z 488 │ startFromOrigin: false, 2026-10-24T05:19:51.2659013Z 489 │ }, 2026-10-24T05:19:51.2659074Z 490 │ }); 2026-10-24T05:19:51.2659130Z 491 │ } 2026-10-24T05:19:51.2659260Z 492 │ appliedInitialProjectKeyRef.current = directProjectKey; 2026-10-24T05:19:51.2659316Z 493 │ if ( 2026-10-24T05:19:51.2659455Z 494 │ selectedProject?.environmentId === directProject.environmentId && 2026-10-24T05:19:51.2659551Z 495 │ selectedProject.id === directProject.id 2026-10-24T05:19:51.2659607Z 496 │ ) { 2026-10-24T05:19:51.2659667Z 497 │ return; 2026-10-24T05:19:51.2659725Z 498 │ } 2026-10-24T05:19:51.2659803Z 499 │ setProject(directProject); 2026-10-24T05:19:51.2659863Z 500 │ return; 2026-10-24T05:19:51.2659917Z 501 │ } 2026-10-24T05:19:51.2659971Z 502 │ 2026-10-24T05:19:51.2660049Z 503 │ if (projects.length > 0) { 2026-10-24T05:19:51.2660150Z 504 │ setIsReturningToProjectPicker(true); 2026-10-24T05:19:51.2660258Z ·  ──────────────┬────────────── 2026-10-24T05:19:51.2660434Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:19:51.2660489Z 505 │ } 2026-10-24T05:19:51.2660539Z ╰──── 2026-10-24T05:19:51.2661125Z  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-24T05:19:51.2661439Z  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-24T05:19:51.2661494Z 2026-10-24T05:19:51.2661808Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:19:51.2661957Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:604:5] 2026-10-24T05:19:51.2662009Z 545 │ 2026-10-24T05:19:51.2662072Z 546 │ useEffect(() => { 2026-10-24T05:19:51.2662143Z ·  ────┬──── 2026-10-24T05:19:51.2662269Z · ╰── This is the containing effect 2026-10-24T05:19:51.2662361Z 547 │ const shareId = props.incomingShareId; 2026-10-24T05:19:51.2662439Z 548 │ const draftKey = flow.draftKey; 2026-10-24T05:19:51.2662538Z 549 │ const destinationProject = selectedProject; 2026-10-24T05:19:51.2662674Z 550 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-24T05:19:51.2662803Z 551 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-24T05:19:51.2662891Z 552 │ const selectedProjectMatchesRoute = 2026-10-24T05:19:51.2662964Z 553 │ !initialEnvironmentId || 2026-10-24T05:19:51.2663032Z 554 │ !initialProjectId || 2026-10-24T05:19:51.2663160Z 555 │ (destinationProject?.environmentId === initialEnvironmentId && 2026-10-24T05:19:51.2663263Z 556 │ destinationProject.id === initialProjectId); 2026-10-24T05:19:51.2663319Z 557 │ if ( 2026-10-24T05:19:51.2663380Z 558 │ !shareId || 2026-10-24T05:19:51.2663441Z 559 │ !draftKey || 2026-10-24T05:19:51.2663511Z 560 │ !destinationProject || 2026-10-24T05:19:51.2663596Z 561 │ !selectedProjectMatchesRoute || 2026-10-24T05:19:51.2663683Z 562 │ cancelledIncomingShareId === shareId 2026-10-24T05:19:51.2663736Z 563 │ ) { 2026-10-24T05:19:51.2663801Z 564 │ return; 2026-10-24T05:19:51.2663858Z 565 │ } 2026-10-24T05:19:51.2663951Z 566 │ const importKey = `${shareId}:${draftKey}`; 2026-10-24T05:19:51.2664005Z 567 │ if ( 2026-10-24T05:19:51.2664116Z 568 │ startedShareImportKeyRef.current === importKey || 2026-10-24T05:19:51.2664225Z 569 │ cancellingShareImportKeyRef.current === importKey 2026-10-24T05:19:51.2664278Z 570 │ ) { 2026-10-24T05:19:51.2664334Z 571 │ return; 2026-10-24T05:19:51.2664387Z 572 │ } 2026-10-24T05:19:51.2664437Z 573 │ 2026-10-24T05:19:51.2664504Z 574 │ if (!incomingShare) { 2026-10-24T05:19:51.2664694Z 575 │ if (isIncomingShareUnavailable && alertedUnavailableIncomingShareIdRef.current !== shareId) { 2026-10-24T05:19:51.2664821Z 576 │ alertedUnavailableIncomingShareIdRef.current = shareId; 2026-10-24T05:19:51.2664890Z 577 │ Dialog.alert( 2026-10-24T05:19:51.2664977Z 578 │ "Shared content unavailable", 2026-10-24T05:19:51.2665144Z 579 │ "The shared content is no longer in the inbox. You can continue editing this task draft.", 2026-10-24T05:19:51.2665202Z 580 │ ); 2026-10-24T05:19:51.2665256Z 581 │ } 2026-10-24T05:19:51.2665312Z 582 │ return; 2026-10-24T05:19:51.2665365Z 583 │ } 2026-10-24T05:19:51.2665416Z 584 │ 2026-10-24T05:19:51.2665472Z 585 │ if ( 2026-10-24T05:19:51.2665629Z 586 │ incomingShare.attachments.some((attachment) => attachment.type === "file") && 2026-10-24T05:19:51.2665726Z 587 │ selectedEnvironmentServerConfig === null 2026-10-24T05:19:51.2665779Z 588 │ ) { 2026-10-24T05:19:51.2665836Z 589 │ return; 2026-10-24T05:19:51.2665887Z 590 │ } 2026-10-24T05:19:51.2665938Z 591 │ 2026-10-24T05:19:51.2666121Z 592 │ if (alertedUnavailableIncomingShareIdRef.current === shareId) { 2026-10-24T05:19:51.2666305Z 593 │ alertedUnavailableIncomingShareIdRef.current = null; 2026-10-24T05:19:51.2666356Z 594 │ } 2026-10-24T05:19:51.2666459Z 595 │ startedShareImportKeyRef.current = importKey; 2026-10-24T05:19:51.2666527Z 596 │ const draftBackup = 2026-10-24T05:19:51.2666710Z 597 │ shareImportDraftBackupRef.current.get(importKey) ?? getComposerDraftSnapshot(draftKey); 2026-10-24T05:19:51.2666844Z 598 │ shareImportDraftBackupRef.current.set(importKey, draftBackup); 2026-10-24T05:19:51.2666933Z 599 │ const importToken = Symbol(importKey); 2026-10-24T05:19:51.2667009Z 600 │ let didReserveShare = false; 2026-10-24T05:19:51.2667085Z 601 │ let didConsumeShare = false; 2026-10-24T05:19:51.2667162Z 602 │ let needsDraftRestore = false; 2026-10-24T05:19:51.2667276Z 603 │ activeShareImportTokenRef.current = importToken; 2026-10-24T05:19:51.2667360Z 604 │ setImportingShareKey(importKey); 2026-10-24T05:19:51.2667444Z ·  ──────────┬───────── 2026-10-24T05:19:51.2667615Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:19:51.2667680Z 605 │ void (async () => { 2026-10-24T05:19:51.2667731Z ╰──── 2026-10-24T05:19:51.2668308Z  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-24T05:19:51.2668640Z  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-24T05:19:51.2668646Z 2026-10-24T05:19:51.2668878Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:19:51.2669026Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:524:5] 2026-10-24T05:19:51.2669101Z 523 │ props.initialProjectRef, 2026-10-24T05:19:51.2669170Z 524 │ props.incomingShareId, 2026-10-24T05:19:51.2669256Z ·  ──────────┬────────── 2026-10-24T05:19:51.2669419Z · ╰── Unnecessary dependency `props.incomingShareId` 2026-10-24T05:19:51.2669487Z 525 │ props.pendingTaskId, 2026-10-24T05:19:51.2669536Z ╰──── 2026-10-24T05:19:51.2669895Z  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-24T05:19:51.2670253Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2670256Z 2026-10-24T05:19:51.2670464Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T05:19:51.2670611Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:543:5] 2026-10-24T05:19:51.2670721Z 542 │ loadedBranchesProjectKeyRef.current = projectKey; 2026-10-24T05:19:51.2670789Z 543 │ flow.loadBranches(); 2026-10-24T05:19:51.2670857Z ·  ──┬─ 2026-10-24T05:19:51.2670978Z · ╰── Missing dependency `flow` 2026-10-24T05:19:51.2671067Z 544 │ }, [flow.loadBranches, selectedProject]); 2026-10-24T05:19:51.2671155Z ·  ────────┬──────── 2026-10-24T05:19:51.2671356Z · ╰── Overly precise dependency `flow.loadBranches`, use `flow` instead 2026-10-24T05:19:51.2671408Z 545 │ 2026-10-24T05:19:51.2671457Z ╰──── 2026-10-24T05:19:51.2671868Z  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-24T05:19:51.2672170Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2672173Z 2026-10-24T05:19:51.2672370Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:19:51.2672523Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:766:5] 2026-10-24T05:19:51.2672587Z 765 │ flow.draftKey, 2026-10-24T05:19:51.2672663Z 766 │ hasImportedIncomingShare, 2026-10-24T05:19:51.2672754Z ·  ────────────┬─────────── 2026-10-24T05:19:51.2672924Z · ╰── Unnecessary dependency `hasImportedIncomingShare` 2026-10-24T05:19:51.2672985Z 767 │ incomingShare, 2026-10-24T05:19:51.2673065Z 768 │ isIncomingShareInboxLoading, 2026-10-24T05:19:51.2673158Z ·  ─────────────┬───────────── 2026-10-24T05:19:51.2673335Z · ╰── Unnecessary dependency `isIncomingShareInboxLoading` 2026-10-24T05:19:51.2673411Z 769 │ isIncomingShareUnavailable, 2026-10-24T05:19:51.2673482Z 770 │ props.incomingShareId, 2026-10-24T05:19:51.2673581Z 771 │ props.initialProjectRef?.environmentId, 2026-10-24T05:19:51.2673670Z 772 │ props.initialProjectRef?.projectId, 2026-10-24T05:19:51.2673741Z 773 │ releaseShareReservation, 2026-10-24T05:19:51.2673803Z 774 │ reserveShare, 2026-10-24T05:19:51.2673887Z 775 │ selectedEnvironmentServerConfig, 2026-10-24T05:19:51.2673953Z 776 │ selectedProject, 2026-10-24T05:19:51.2674020Z 777 │ shareImportAttempt, 2026-10-24T05:19:51.2674103Z ·  ─────────┬──────── 2026-10-24T05:19:51.2674264Z · ╰── Unnecessary dependency `shareImportAttempt` 2026-10-24T05:19:51.2674316Z 778 │ ]); 2026-10-24T05:19:51.2674367Z ╰──── 2026-10-24T05:19:51.2674651Z  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-24T05:19:51.2675005Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2675046Z 2026-10-24T05:19:51.2675327Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:19:51.2675493Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:79:5] 2026-10-24T05:19:51.2675544Z 76 │ 2026-10-24T05:19:51.2675607Z 77 │ useEffect(() => { 2026-10-24T05:19:51.2675677Z ·  ────┬──── 2026-10-24T05:19:51.2675802Z · ╰── This is the containing effect 2026-10-24T05:19:51.2675927Z 78 │ const { host, code } = parsePairingUrl(connectionPairingUrl); 2026-10-24T05:19:51.2675993Z 79 │ setHostInput(host); 2026-10-24T05:19:51.2676071Z ·  ──────┬───── 2026-10-24T05:19:51.2676233Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:19:51.2676297Z 80 │ setCodeInput(code); 2026-10-24T05:19:51.2676347Z ╰──── 2026-10-24T05:19:51.2676925Z  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-24T05:19:51.2677233Z  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-24T05:19:51.2677237Z 2026-10-24T05:19:51.2677490Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:19:51.2677656Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:89:5] 2026-10-24T05:19:51.2677708Z 82 │ 2026-10-24T05:19:51.2677769Z 83 │ useEffect(() => { 2026-10-24T05:19:51.2677836Z ·  ────┬──── 2026-10-24T05:19:51.2677964Z · ╰── This is the containing effect 2026-10-24T05:19:51.2678050Z 84 │ if (routePairingUrl.length === 0) { 2026-10-24T05:19:51.2678110Z 85 │ return; 2026-10-24T05:19:51.2678161Z 86 │ } 2026-10-24T05:19:51.2678212Z 87 │ 2026-10-24T05:19:51.2678324Z 88 │ const { host, code } = parsePairingUrl(routePairingUrl); 2026-10-24T05:19:51.2678387Z 89 │ setHostInput(host); 2026-10-24T05:19:51.2678511Z ·  ──────┬───── 2026-10-24T05:19:51.2678737Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:19:51.2678804Z 90 │ setCodeInput(code); 2026-10-24T05:19:51.2678853Z ╰──── 2026-10-24T05:19:51.2679433Z  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-24T05:19:51.2679744Z  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-24T05:19:51.2679746Z 2026-10-24T05:19:51.2680056Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:19:51.2680327Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:95:7] 2026-10-24T05:19:51.2680377Z 92 │ 2026-10-24T05:19:51.2680439Z 93 │ useEffect(() => { 2026-10-24T05:19:51.2680507Z ·  ────┬──── 2026-10-24T05:19:51.2680633Z · ╰── This is the containing effect 2026-10-24T05:19:51.2680711Z 94 │ if (pairingConnectionError) { 2026-10-24T05:19:51.2680783Z 95 │ setIsSubmitting(false); 2026-10-24T05:19:51.2680862Z ·  ───────┬─────── 2026-10-24T05:19:51.2681027Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:19:51.2681079Z 96 │ } 2026-10-24T05:19:51.2681130Z ╰──── 2026-10-24T05:19:51.2681712Z  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-24T05:19:51.2682026Z  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-24T05:19:51.2682029Z 2026-10-24T05:19:51.2682276Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:19:51.2682422Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:523:5] 2026-10-24T05:19:51.2682480Z 521 │ }, []); 2026-10-24T05:19:51.2682544Z 522 │ useEffect(() => { 2026-10-24T05:19:51.2682620Z ·  ────┬──── 2026-10-24T05:19:51.2682747Z · ╰── This is the containing effect 2026-10-24T05:19:51.2682832Z 523 │ setKeyboardStateSuspect(false); 2026-10-24T05:19:51.2682921Z ·  ───────────┬─────────── 2026-10-24T05:19:51.2683087Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:19:51.2683186Z 524 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-24T05:19:51.2683236Z ╰──── 2026-10-24T05:19:51.2683810Z  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-24T05:19:51.2684125Z  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-24T05:19:51.2684130Z 2026-10-24T05:19:51.2684378Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:19:51.2684523Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:888:7] 2026-10-24T05:19:51.2684678Z 885 │ const [lastKnownKeyboardHeight, setLastKnownKeyboardHeight] = useState(0); 2026-10-24T05:19:51.2684742Z 886 │ useEffect(() => { 2026-10-24T05:19:51.2684812Z ·  ────┬──── 2026-10-24T05:19:51.2684936Z · ╰── This is the containing effect 2026-10-24T05:19:51.2685091Z 887 │ if (liveKeyboardHeight > 0 && liveKeyboardHeight !== lastKnownKeyboardHeight) { 2026-10-24T05:19:51.2685250Z 888 │ setLastKnownKeyboardHeight(liveKeyboardHeight); 2026-10-24T05:19:51.2685418Z ·  ─────────────┬──────────── 2026-10-24T05:19:51.2685588Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:19:51.2685642Z 889 │ } 2026-10-24T05:19:51.2685692Z ╰──── 2026-10-24T05:19:51.2686265Z  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-24T05:19:51.2686578Z  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-24T05:19:51.2686583Z 2026-10-24T05:19:51.2686828Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:19:51.2686980Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1135:5] 2026-10-24T05:19:51.2687034Z 1133 │ 2026-10-24T05:19:51.2687099Z 1134 │ useEffect(() => { 2026-10-24T05:19:51.2687169Z ·  ────┬──── 2026-10-24T05:19:51.2687296Z · ╰── This is the containing effect 2026-10-24T05:19:51.2687371Z 1135 │ setAnchorMessageId(null); 2026-10-24T05:19:51.2687454Z ·  ─────────┬──────── 2026-10-24T05:19:51.2687620Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:19:51.2687707Z 1136 │ setSubmittedMessageId(null); 2026-10-24T05:19:51.2687761Z ╰──── 2026-10-24T05:19:51.2688340Z  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-24T05:19:51.2688690Z  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-24T05:19:51.2688692Z 2026-10-24T05:19:51.2688887Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:19:51.2689038Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:524:7] 2026-10-24T05:19:51.2689126Z 523 │ setKeyboardStateSuspect(false); 2026-10-24T05:19:51.2689225Z 524 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-24T05:19:51.2689362Z ·  ────────┬──────── ─────────┬──────── 2026-10-24T05:19:51.2689564Z · │ ╰── Unnecessary dependency `liveKeyboardHeight` 2026-10-24T05:19:51.2689718Z · ╰── Unnecessary dependency `isKeyboardVisible` 2026-10-24T05:19:51.2689843Z 525 │ const handleOwnedInputFocusChange = (focused: boolean) => { 2026-10-24T05:19:51.2689891Z ╰──── 2026-10-24T05:19:51.2690179Z  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-24T05:19:51.2690531Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2690567Z 2026-10-24T05:19:51.2690790Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:19:51.2690941Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1083:7] 2026-10-24T05:19:51.2691023Z 1082 │ userInputInsetProgress.set(1); 2026-10-24T05:19:51.2691183Z 1083 │ }, [activeUserInputRequestId, userInputCardProgress, userInputInsetProgress]); 2026-10-24T05:19:51.2691276Z ·  ────────────┬─────────── 2026-10-24T05:19:51.2691449Z · ╰── Unnecessary dependency `activeUserInputRequestId` 2026-10-24T05:19:51.2691552Z 1084 │ const showContent = props.showContent ?? true; 2026-10-24T05:19:51.2691603Z ╰──── 2026-10-24T05:19:51.2691890Z  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-24T05:19:51.2692193Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2692196Z 2026-10-24T05:19:51.2692391Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:19:51.2692541Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1141:15] 2026-10-24T05:19:51.2692607Z 1140 │ freeze.set(false); 2026-10-24T05:19:51.2692689Z 1141 │ }, [freeze, selectedThreadKey]); 2026-10-24T05:19:51.2692779Z ·  ────────┬──────── 2026-10-24T05:19:51.2692941Z · ╰── Unnecessary dependency `selectedThreadKey` 2026-10-24T05:19:51.2692996Z 1142 │ 2026-10-24T05:19:51.2693048Z ╰──── 2026-10-24T05:19:51.2693331Z  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-24T05:19:51.2693630Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2693632Z 2026-10-24T05:19:51.2693785Z ⚠ react(immutability): This value cannot be modified 2026-10-24T05:19:51.2693932Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:971:5] 2026-10-24T05:19:51.2694039Z 966 │ const composerPopoverHeight = useSharedValue(0); 2026-10-24T05:19:51.2694190Z 967 │ const floatingControlCoverage = useSharedValue( 2026-10-24T05:19:51.2694348Z ·  ───────────┬─────────── 2026-10-24T05:19:51.2694507Z · ╰── `floatingControlCoverage` originates here 2026-10-24T05:19:51.2694634Z 968 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-24T05:19:51.2694686Z 969 │ ); 2026-10-24T05:19:51.2694750Z 970 │ useEffect(() => { 2026-10-24T05:19:51.2694850Z 971 │ floatingControlCoverage.value = withTiming( 2026-10-24T05:19:51.2694938Z ·  ───────────┬─────────── 2026-10-24T05:19:51.2695093Z · ╰── `floatingControlCoverage` cannot be modified 2026-10-24T05:19:51.2695217Z 972 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-24T05:19:51.2695267Z ╰──── 2026-10-24T05:19:51.2695531Z  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-24T05:19:51.2695832Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:19:51.2695835Z 2026-10-24T05:19:51.2695984Z ⚠ react(immutability): This value cannot be modified 2026-10-24T05:19:51.2696131Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:989:7] 2026-10-24T05:19:51.2696314Z 979 │ const userInputCoverageApplies = Platform.OS === "ios" && activeUserInputRequestId !== null; 2026-10-24T05:19:51.2696433Z 980 │ const combinedContentInsetEndAdjustment = useSharedValue( 2026-10-24T05:19:51.2696541Z ·  ────────────────┬──────────────── 2026-10-24T05:19:51.2696726Z · ╰── `combinedContentInsetEndAdjustment` originates here 2026-10-24T05:19:51.2696852Z 981 │ Math.max(0, estimatedOverlayHeight - nativeInsetOvercount), 2026-10-24T05:19:51.2696906Z 982 │ ); 2026-10-24T05:19:51.2696972Z 983 │ useAnimatedReaction( 2026-10-24T05:19:51.2697028Z 984 │ () => 2026-10-24T05:19:51.2697117Z 985 │ contentInsetEndAdjustment.value + 2026-10-24T05:19:51.2697204Z 986 │ floatingControlCoverage.value + 2026-10-24T05:19:51.2697393Z 987 │ (userInputCoverageApplies ? userInputInsetProgress.value * userInputCardCoverage.value : 0), 2026-10-24T05:19:51.2697456Z 988 │ (value) => { 2026-10-24T05:19:51.2697567Z 989 │ combinedContentInsetEndAdjustment.value = value; 2026-10-24T05:19:51.2697673Z ·  ────────────────┬──────────────── 2026-10-24T05:19:51.2697861Z · ╰── `combinedContentInsetEndAdjustment` cannot be modified 2026-10-24T05:19:51.2697920Z 990 │ }, 2026-10-24T05:19:51.2697974Z ╰──── 2026-10-24T05:19:51.2698231Z  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-24T05:19:51.2698528Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:19:51.2698530Z 2026-10-24T05:19:51.2698819Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:19:51.2698981Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:285:5] 2026-10-24T05:19:51.2699151Z 283 │ const [snoozeWakeTick, bumpSnoozeWakeTick] = useState(0); 2026-10-24T05:19:51.2699272Z 284 │ useEffect(() => { 2026-10-24T05:19:51.2699342Z ·  ────┬──── 2026-10-24T05:19:51.2699472Z · ╰── This is the containing effect 2026-10-24T05:19:51.2699554Z 285 │ setNow(new Date().toISOString()); 2026-10-24T05:19:51.2699625Z ·  ───┬── 2026-10-24T05:19:51.2699785Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:19:51.2699921Z 286 │ const id = setInterval(() => setNow(new Date().toISOString()), 60_000); 2026-10-24T05:19:51.2699973Z ╰──── 2026-10-24T05:19:51.2700562Z  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-24T05:19:51.2700875Z  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-24T05:19:51.2700879Z 2026-10-24T05:19:51.2701076Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:19:51.2701239Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:365:25] 2026-10-24T05:19:51.2701368Z 364 │ // range) the boundary string is identical and the chain would die. 2026-10-24T05:19:51.2701457Z 365 │ }, [nextSnoozeWakeAt, snoozeWakeTick]); 2026-10-24T05:19:51.2701557Z ·  ───────┬────── 2026-10-24T05:19:51.2701725Z · ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T05:19:51.2701837Z 366 │ const listItems = ((): readonly SidebarListItem[] => { 2026-10-24T05:19:51.2701889Z ╰──── 2026-10-24T05:19:51.2702171Z  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-24T05:19:51.2702475Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2702477Z 2026-10-24T05:19:51.2702642Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T05:19:51.2702802Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:356:53] 2026-10-24T05:19:51.2702890Z 355 │ if (Number.isNaN(wakeAtMs)) return; 2026-10-24T05:19:51.2703046Z 356 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647); 2026-10-24T05:19:51.2703167Z ·  ─────┬──── 2026-10-24T05:19:51.2703328Z · ╰── Cannot call impure function 2026-10-24T05:19:51.2703406Z 357 │ const id = setTimeout(() => { 2026-10-24T05:19:51.2703455Z ╰──── 2026-10-24T05:19:51.2703735Z  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-24T05:19:51.2704024Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T05:19:51.2704027Z 2026-10-24T05:19:51.2704323Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:19:51.2704556Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:329:7] 2026-10-24T05:19:51.2704612Z 324 │ }; 2026-10-24T05:19:51.2704678Z 325 │ useEffect(() => { 2026-10-24T05:19:51.2704749Z ·  ────┬──── 2026-10-24T05:19:51.2704874Z · ╰── This is the containing effect 2026-10-24T05:19:51.2704971Z 326 │ if (!guidesEnabled && section === "guide") { 2026-10-24T05:19:51.2705065Z 327 │ requestedSection.current = "overview"; 2026-10-24T05:19:51.2705233Z 328 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-24T05:19:51.2705303Z 329 │ setSection("overview"); 2026-10-24T05:19:51.2705384Z ·  ─────┬──── 2026-10-24T05:19:51.2705554Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:19:51.2705610Z 330 │ } 2026-10-24T05:19:51.2705658Z ╰──── 2026-10-24T05:19:51.2706236Z  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-24T05:19:51.2706545Z  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-24T05:19:51.2706548Z 2026-10-24T05:19:51.2706753Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T05:19:51.2706922Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:331:6] 2026-10-24T05:19:51.2707016Z 326 │ if (!guidesEnabled && section === "guide") { 2026-10-24T05:19:51.2707109Z 327 │ requestedSection.current = "overview"; 2026-10-24T05:19:51.2707190Z ·  ────────┬─────── 2026-10-24T05:19:51.2707624Z · ╰── 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-24T05:19:51.2707784Z 328 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-24T05:19:51.2707932Z ·  ─────────┬───────── ──────┬────── 2026-10-24T05:19:51.2708419Z · │ ╰── 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-24T05:19:51.2708887Z · ╰── 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-24T05:19:51.2708961Z 329 │ setSection("overview"); 2026-10-24T05:19:51.2709014Z 330 │ } 2026-10-24T05:19:51.2709104Z 331 │ }, [guidesEnabled, section, insets.top]); 2026-10-24T05:19:51.2709216Z ·  ──────────────────┬───────────────── 2026-10-24T05:19:51.2709451Z · ╰── This dependency list is missing values used by the callback 2026-10-24T05:19:51.2709595Z 332 │ const tabContent = activityContent; 2026-10-24T05:19:51.2709648Z ╰──── 2026-10-24T05:19:51.2709817Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T05:19:51.2710124Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2710126Z 2026-10-24T05:19:51.2710324Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T05:19:51.2710489Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:868:6] 2026-10-24T05:19:51.2710547Z 851 │ if ( 2026-10-24T05:19:51.2710667Z 852 │ lastSelection.current.path === route.params.path && 2026-10-24T05:19:51.2710749Z ·  ──────┬────── 2026-10-24T05:19:51.2711171Z · ╰── 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-24T05:19:51.2711298Z 853 │ lastSelection.current.id === route.params.fileSelectionId 2026-10-24T05:19:51.2711352Z 854 │ ) 2026-10-24T05:19:51.2711413Z 855 │ return; 2026-10-24T05:19:51.2711584Z 856 │ lastSelection.current = { path: route.params.path, id: route.params.fileSelectionId }; 2026-10-24T05:19:51.2711719Z 857 │ if (route.params.focus) navigation.setParams({ focus: undefined }); 2026-10-24T05:19:51.2711804Z 858 │ setJumpPath(route.params.path); 2026-10-24T05:19:51.2711875Z 859 │ setSelectedRowId(null); 2026-10-24T05:19:51.2711958Z 860 │ jumpStarted.current = false; 2026-10-24T05:19:51.2712104Z 861 │ const file = data.files.find((entry) => entry.path === route.params.path); 2026-10-24T05:19:51.2712195Z 862 │ if (!file || !nativeView.current) return; 2026-10-24T05:19:51.2712285Z ·  ─────┬──── 2026-10-24T05:19:51.2712708Z · ╰── 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-24T05:19:51.2712832Z 863 │ setCollapsedIds((ids) => ids.filter((id) => id !== file.id)); 2026-10-24T05:19:51.2712909Z 864 │ jumpStarted.current = true; 2026-10-24T05:19:51.2713044Z 865 │ void nativeView.current.scrollToFile(file.id, false).catch(() => { 2026-10-24T05:19:51.2713179Z 866 │ jumpStarted.current = false; 2026-10-24T05:19:51.2713294Z 867 │ }); 2026-10-24T05:19:51.2713488Z 868 │ }, [route.params.path, route.params.fileSelectionId, route.params.focus, data.files, navigation]); 2026-10-24T05:19:51.2713691Z ·  ──────────────────────────────────────────────┬────────────────────────────────────────────── 2026-10-24T05:19:51.2713906Z · ╰── This dependency list is missing values used by the callback 2026-10-24T05:19:51.2714012Z 869 │ const appliedFilter = useRef(filter.hideTestFiles); 2026-10-24T05:19:51.2714066Z ╰──── 2026-10-24T05:19:51.2714229Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T05:19:51.2714539Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2714545Z 2026-10-24T05:19:51.2714794Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:19:51.2714952Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5] 2026-10-24T05:19:51.2715015Z 259 │ .join("|"); 2026-10-24T05:19:51.2715080Z 260 │ useEffect(() => { 2026-10-24T05:19:51.2715148Z ·  ────┬──── 2026-10-24T05:19:51.2715275Z · ╰── This is the containing effect 2026-10-24T05:19:51.2715336Z 261 │ stop(); 2026-10-24T05:19:51.2715405Z ·  ──┬─ 2026-10-24T05:19:51.2715565Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:19:51.2715635Z 262 │ }, [orderVersion]); 2026-10-24T05:19:51.2715691Z ╰──── 2026-10-24T05:19:51.2716269Z  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-24T05:19:51.2716581Z  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-24T05:19:51.2716584Z 2026-10-24T05:19:51.2716791Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T05:19:51.2716948Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5] 2026-10-24T05:19:51.2717016Z 260 │ useEffect(() => { 2026-10-24T05:19:51.2717077Z 261 │ stop(); 2026-10-24T05:19:51.2717144Z ·  ──┬─ 2026-10-24T05:19:51.2717269Z · ╰── Missing dependency `stop` 2026-10-24T05:19:51.2717334Z 262 │ }, [orderVersion]); 2026-10-24T05:19:51.2717412Z ·  ──────┬───── 2026-10-24T05:19:51.2717555Z · ╰── Unnecessary dependency `orderVersion` 2026-10-24T05:19:51.2717617Z 263 │ useEffect( 2026-10-24T05:19:51.2717669Z ╰──── 2026-10-24T05:19:51.2718078Z  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-24T05:19:51.2718428Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2718532Z 2026-10-24T05:19:51.2718736Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:19:51.2718960Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:96:9] 2026-10-24T05:19:51.2719038Z 95 │ const latest = useRef(props); 2026-10-24T05:19:51.2719107Z 96 │ latest.current = props; 2026-10-24T05:19:51.2719211Z ·  ───┬──────┬─── 2026-10-24T05:19:51.2719386Z · │ ╰── Cannot update ref value during render 2026-10-24T05:19:51.2719500Z · ╰── This value is a ref 2026-10-24T05:19:51.2719566Z 97 │ const gesture = useMemo( 2026-10-24T05:19:51.2719617Z ╰──── 2026-10-24T05:19:51.2720080Z  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-24T05:19:51.2720367Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:19:51.2720370Z 2026-10-24T05:19:51.2720513Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:19:51.2720667Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:104:18] 2026-10-24T05:19:51.2720733Z 103 │ .runOnJS(true) 2026-10-24T05:19:51.2720832Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T05:19:51.2720952Z ·  ───────────────┬────────────── 2026-10-24T05:19:51.2721148Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T05:19:51.2721280Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T05:19:51.2721333Z ╰──── 2026-10-24T05:19:51.2721785Z  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-24T05:19:51.2722064Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:19:51.2722067Z 2026-10-24T05:19:51.2722211Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:19:51.2722369Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:105:19] 2026-10-24T05:19:51.2722467Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T05:19:51.2722594Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T05:19:51.2722732Z ·  ──────────────────────────┬───────────────────────── 2026-10-24T05:19:51.2722936Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T05:19:51.2723058Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T05:19:51.2723109Z ╰──── 2026-10-24T05:19:51.2723626Z  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-24T05:19:51.2723985Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:19:51.2723988Z 2026-10-24T05:19:51.2724128Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:19:51.2724282Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:106:16] 2026-10-24T05:19:51.2724409Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T05:19:51.2724528Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T05:19:51.2724666Z ·  ──────────────────────────┬───────────────────────── 2026-10-24T05:19:51.2724870Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T05:19:51.2724995Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T05:19:51.2725045Z ╰──── 2026-10-24T05:19:51.2725496Z  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-24T05:19:51.2725777Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:19:51.2725779Z 2026-10-24T05:19:51.2725920Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:19:51.2726081Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:107:21] 2026-10-24T05:19:51.2726202Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T05:19:51.2726320Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T05:19:51.2726456Z ·  ───────────────────────┬────────────────────── 2026-10-24T05:19:51.2726657Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T05:19:51.2726726Z 108 │ [props.disabled], 2026-10-24T05:19:51.2726775Z ╰──── 2026-10-24T05:19:51.2727225Z  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-24T05:19:51.2727518Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:19:51.2727523Z 2026-10-24T05:19:51.2727663Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:19:51.2727818Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:249:9] 2026-10-24T05:19:51.2727929Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-24T05:19:51.2728033Z 249 │ latest.current = { rows, planners, moveThread }; 2026-10-24T05:19:51.2728136Z ·  ───┬──────┬─── 2026-10-24T05:19:51.2728311Z · │ ╰── Cannot update ref value during render 2026-10-24T05:19:51.2728484Z · ╰── This value is a ref 2026-10-24T05:19:51.2728619Z 250 │ 2026-10-24T05:19:51.2728717Z ╰──── 2026-10-24T05:19:51.2729169Z  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-24T05:19:51.2729448Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:19:51.2729451Z 2026-10-24T05:19:51.2729590Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:19:51.2729745Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:247:22] 2026-10-24T05:19:51.2729862Z 246 │ const [preview, setPreview] = useState(null); 2026-10-24T05:19:51.2729977Z 247 │ const translateY = useRef(new Animated.Value(0)).current; 2026-10-24T05:19:51.2730104Z ·  ──────────────────┬────────────────── 2026-10-24T05:19:51.2730269Z · ╰── Cannot access ref value during render 2026-10-24T05:19:51.2730379Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-24T05:19:51.2730429Z ╰──── 2026-10-24T05:19:51.2730877Z  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-24T05:19:51.2731167Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:19:51.2731172Z 2026-10-24T05:19:51.2731337Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T05:19:51.2731492Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:324:16] 2026-10-24T05:19:51.2731555Z 323 │ update(0); 2026-10-24T05:19:51.2731636Z 324 │ let last = performance.now(); 2026-10-24T05:19:51.2731733Z ·  ────────┬──────── 2026-10-24T05:19:51.2731869Z · ╰── Cannot call impure function 2026-10-24T05:19:51.2731935Z 325 │ const tick = () => { 2026-10-24T05:19:51.2731988Z ╰──── 2026-10-24T05:19:51.2732281Z  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-24T05:19:51.2732621Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T05:19:51.2732659Z 2026-10-24T05:19:51.2732843Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T05:19:51.2732995Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:99:15] 2026-10-24T05:19:51.2733055Z  98 │ () => 2026-10-24T05:19:51.2733121Z  99 │ Gesture.Pan() 2026-10-24T05:19:51.2733195Z ·  ─┬─ 2026-10-24T05:19:51.2733321Z · ╰── `Pan` may be a component 2026-10-24T05:19:51.2733401Z 100 │ .enabled(!props.disabled) 2026-10-24T05:19:51.2733454Z ╰──── 2026-10-24T05:19:51.2733728Z  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-24T05:19:51.2734158Z  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-24T05:19:51.2734162Z 2026-10-24T05:19:51.2734340Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T05:19:51.2734495Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:108:5] 2026-10-24T05:19:51.2734560Z 103 │ .runOnJS(true) 2026-10-24T05:19:51.2734658Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T05:19:51.2734743Z ·  ───┬── 2026-10-24T05:19:51.2735166Z · ╰── 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-24T05:19:51.2735297Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T05:19:51.2735418Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T05:19:51.2735537Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T05:19:51.2735604Z 108 │ [props.disabled], 2026-10-24T05:19:51.2735685Z ·  ────────┬─────── 2026-10-24T05:19:51.2735867Z · ╰── This dependency list is missing values used by the callback 2026-10-24T05:19:51.2735922Z 109 │ ); 2026-10-24T05:19:51.2735975Z ╰──── 2026-10-24T05:19:51.2736183Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T05:19:51.2736491Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2736494Z 2026-10-24T05:19:51.2736701Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T05:19:51.2736871Z ╭─[apps/mobile/src/features/threads/NewTaskContextPickerScreens.tsx:249:7] 2026-10-24T05:19:51.2736950Z 248 │ mountedRef.current = false; 2026-10-24T05:19:51.2737027Z 249 │ flow.setBranchQuery(""); 2026-10-24T05:19:51.2737093Z ·  ──┬─ 2026-10-24T05:19:51.2737216Z · ╰── Missing dependency `flow` 2026-10-24T05:19:51.2737317Z 250 │ }; 2026-10-24T05:19:51.2737421Z 251 │ }, [flow.setBranchQuery]); 2026-10-24T05:19:51.2737506Z ·  ─────────┬───────── 2026-10-24T05:19:51.2737708Z · ╰── Overly precise dependency `flow.setBranchQuery`, use `flow` instead 2026-10-24T05:19:51.2737761Z 252 │ 2026-10-24T05:19:51.2737812Z ╰──── 2026-10-24T05:19:51.2738215Z  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-24T05:19:51.2738520Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2738523Z 2026-10-24T05:19:51.2738835Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T05:19:51.2738990Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:290:50] 2026-10-24T05:19:51.2739049Z 289 │ return ( 2026-10-24T05:19:51.2739181Z 290 │ 2026-10-24T05:19:51.2739299Z ·  ───────────── 2026-10-24T05:19:51.2739367Z 291 │ {props.children} 2026-10-24T05:19:51.2739416Z ╰──── 2026-10-24T05:19:51.2739634Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T05:19:51.2739775Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T05:19:51.2739777Z 2026-10-24T05:19:51.2740019Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T05:19:51.2740173Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:654:44] 2026-10-24T05:19:51.2740232Z 653 │ return ( 2026-10-24T05:19:51.2740349Z 654 │ 2026-10-24T05:19:51.2740462Z ·  ───────────── 2026-10-24T05:19:51.2740527Z 655 │ {props.children} 2026-10-24T05:19:51.2740576Z ╰──── 2026-10-24T05:19:51.2740789Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T05:19:51.2740924Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T05:19:51.2740926Z 2026-10-24T05:19:51.2741160Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T05:19:51.2741317Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:1462:55] 2026-10-24T05:19:51.2741376Z 1461 │ return ( 2026-10-24T05:19:51.2741534Z 1462 │ 2026-10-24T05:19:51.2741662Z ·  ──────────────────── 2026-10-24T05:19:51.2741759Z 1463 │ cancelAnimationFrame(frame); 2026-10-24T05:19:51.2744527Z 114 │ }, [restoreSearch, tabActive, bottomSearch]); 2026-10-24T05:19:51.2744637Z ·  ──────┬───── 2026-10-24T05:19:51.2744805Z · ╰── Unnecessary dependency `bottomSearch` 2026-10-24T05:19:51.2744907Z 115 │ const composeButton = nativeToolbarCompose ? ( 2026-10-24T05:19:51.2744958Z ╰──── 2026-10-24T05:19:51.2745249Z  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-24T05:19:51.2745555Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2745557Z 2026-10-24T05:19:51.2745766Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T05:19:51.2745905Z ╭─[packages/shared/src/composerContextLegacySend.ts:19:45] 2026-10-24T05:19:51.2746038Z 18 │ const occurrences = collectComposerContextReferences(text); 2026-10-24T05:19:51.2746147Z 19 │ for (const occurrence of [...occurrences].reverse()) { 2026-10-24T05:19:51.2746257Z ·  ─────── 2026-10-24T05:19:51.2746365Z 20 │ const record = recordsById.get(occurrence.contextId); 2026-10-24T05:19:51.2746418Z ╰──── 2026-10-24T05:19:51.2746674Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T05:19:51.2746676Z 2026-10-24T05:19:51.2746930Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:19:51.2747065Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2139:5] 2026-10-24T05:19:51.2747192Z 2137 │ ); 2026-10-24T05:19:51.2747293Z 2138 │ useEffect(() => { 2026-10-24T05:19:51.2747367Z ·  ────┬──── 2026-10-24T05:19:51.2747497Z · ╰── This is the containing effect 2026-10-24T05:19:51.2747572Z 2139 │ setExpandedVideo(null); 2026-10-24T05:19:51.2747654Z ·  ────────┬─────── 2026-10-24T05:19:51.2747822Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:19:51.2747892Z 2140 │ setExpandedFile(null); 2026-10-24T05:19:51.2747944Z ╰──── 2026-10-24T05:19:51.2748529Z  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-24T05:19:51.2748872Z  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-24T05:19:51.2748875Z 2026-10-24T05:19:51.2749098Z ⚠ eslint(no-unused-vars): Identifier 'isMarkdownFileLinkLabel' is imported but never used. 2026-10-24T05:19:51.2749226Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:66:10] 2026-10-24T05:19:51.2749359Z 65 │ import { resolveAssetUrl } from "@t3tools/client-runtime/state/assets"; 2026-10-24T05:19:51.2749493Z 66 │ import { isMarkdownFileLinkLabel } from "@t3tools/shared/markdownLinks"; 2026-10-24T05:19:51.2749587Z ·  ───────────┬─────────── 2026-10-24T05:19:51.2749752Z · ╰── 'isMarkdownFileLinkLabel' is imported here 2026-10-24T05:19:51.2749908Z 67 │ import { formatAttachmentSize } from "@t3tools/client-runtime/state/attachments"; 2026-10-24T05:19:51.2749961Z ╰──── 2026-10-24T05:19:51.2750058Z  help: Consider removing this import. 2026-10-24T05:19:51.2750061Z 2026-10-24T05:19:51.2750260Z ⚠ eslint(no-unused-vars): Identifier 'createContext' is imported but never used. 2026-10-24T05:19:51.2750384Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:92:3] 2026-10-24T05:19:51.2750440Z 91 │ import { 2026-10-24T05:19:51.2750503Z 92 │ createContext, 2026-10-24T05:19:51.2750577Z ·  ──────┬────── 2026-10-24T05:19:51.2750707Z · ╰── 'createContext' is imported here 2026-10-24T05:19:51.2750765Z 93 │ memo, 2026-10-24T05:19:51.2750817Z ╰──── 2026-10-24T05:19:51.2750916Z  help: Consider removing this import. 2026-10-24T05:19:51.2750923Z 2026-10-24T05:19:51.2751127Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-24T05:19:51.2751257Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:108:3] 2026-10-24T05:19:51.2751314Z 107 │ import { 2026-10-24T05:19:51.2751382Z 108 │ ActivityIndicator, 2026-10-24T05:19:51.2751461Z ·  ────────┬──────── 2026-10-24T05:19:51.2751604Z · ╰── 'ActivityIndicator' is imported here 2026-10-24T05:19:51.2751660Z 109 │ Image, 2026-10-24T05:19:51.2751709Z ╰──── 2026-10-24T05:19:51.2751803Z  help: Consider removing this import. 2026-10-24T05:19:51.2751806Z 2026-10-24T05:19:51.2752049Z ⚠ eslint(no-unused-vars): Identifier 'ScrollView' is imported but never used. 2026-10-24T05:19:51.2752206Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:115:3] 2026-10-24T05:19:51.2752266Z 114 │ Pressable, 2026-10-24T05:19:51.2752325Z 115 │ ScrollView, 2026-10-24T05:19:51.2752397Z ·  ─────┬──── 2026-10-24T05:19:51.2752526Z · ╰── 'ScrollView' is imported here 2026-10-24T05:19:51.2752586Z 116 │ StyleSheet, 2026-10-24T05:19:51.2752637Z ╰──── 2026-10-24T05:19:51.2752729Z  help: Consider removing this import. 2026-10-24T05:19:51.2752732Z 2026-10-24T05:19:51.2752926Z ⚠ eslint(no-unused-vars): Identifier 'NativeText' is imported but never used. 2026-10-24T05:19:51.2753057Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:117:11] 2026-10-24T05:19:51.2753120Z 116 │ StyleSheet, 2026-10-24T05:19:51.2753189Z 117 │ Text as NativeText, 2026-10-24T05:19:51.2753266Z ·  ─────┬──── 2026-10-24T05:19:51.2753399Z · ╰── 'NativeText' is imported here 2026-10-24T05:19:51.2753464Z 118 │ type ColorValue, 2026-10-24T05:19:51.2753514Z ╰──── 2026-10-24T05:19:51.2753607Z  help: Consider removing this import. 2026-10-24T05:19:51.2753609Z 2026-10-24T05:19:51.2753818Z ⚠ eslint(no-unused-vars): Identifier 'tryOpenExternalUrl' is imported but never used. 2026-10-24T05:19:51.2753946Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:140:10] 2026-10-24T05:19:51.2754078Z 139 │ import { copyTextWithHaptic } from "../../lib/copyTextWithHaptic"; 2026-10-24T05:19:51.2754207Z 140 │ import { tryOpenExternalUrl } from "../../lib/openExternalUrl"; 2026-10-24T05:19:51.2754297Z ·  ─────────┬──────── 2026-10-24T05:19:51.2754446Z · ╰── 'tryOpenExternalUrl' is imported here 2026-10-24T05:19:51.2754593Z 141 │ import { downloadAndShareAttachment } from "../../lib/attachmentDownload"; 2026-10-24T05:19:51.2754642Z ╰──── 2026-10-24T05:19:51.2754736Z  help: Consider removing this import. 2026-10-24T05:19:51.2754738Z 2026-10-24T05:19:51.2754947Z ⚠ eslint(no-unused-vars): Identifier 'faviconUrlForOrigin' is imported but never used. 2026-10-24T05:19:51.2755077Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:143:10] 2026-10-24T05:19:51.2755209Z 142 │ import { hasWideMarkdownBlock } from "../../lib/wideMarkdownBlocks"; 2026-10-24T05:19:51.2755329Z 143 │ import { faviconUrlForOrigin } from "@t3tools/shared/favicon"; 2026-10-24T05:19:51.2755463Z ·  ─────────┬───────── 2026-10-24T05:19:51.2755640Z · ╰── 'faviconUrlForOrigin' is imported here 2026-10-24T05:19:51.2755697Z 144 │ import { 2026-10-24T05:19:51.2755750Z ╰──── 2026-10-24T05:19:51.2755844Z  help: Consider removing this import. 2026-10-24T05:19:51.2755847Z 2026-10-24T05:19:51.2756051Z ⚠ eslint(no-unused-vars): Identifier 'MediaVideoPlayer' is imported but never used. 2026-10-24T05:19:51.2756179Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:157:10] 2026-10-24T05:19:51.2756323Z 156 │ import { VideoAttachmentTile } from "../../components/VideoAttachmentTile"; 2026-10-24T05:19:51.2756453Z 157 │ import { MediaVideoPlayer } from "../../components/MediaVideoPlayer"; 2026-10-24T05:19:51.2756544Z ·  ────────┬─────── 2026-10-24T05:19:51.2756691Z · ╰── 'MediaVideoPlayer' is imported here 2026-10-24T05:19:51.2756825Z 158 │ import { resolveMarkdownMediaPreview } from "../../lib/markdownMedia"; 2026-10-24T05:19:51.2756876Z ╰──── 2026-10-24T05:19:51.2756967Z  help: Consider removing this import. 2026-10-24T05:19:51.2756970Z 2026-10-24T05:19:51.2757184Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoPreviewUri' is imported but never used. 2026-10-24T05:19:51.2757312Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:161:3] 2026-10-24T05:19:51.2757391Z 160 │ attachmentVideoPreviewSource, 2026-10-24T05:19:51.2757460Z 161 │ mediaVideoPreviewUri, 2026-10-24T05:19:51.2757542Z ·  ──────────┬───────── 2026-10-24T05:19:51.2757697Z · ╰── 'mediaVideoPreviewUri' is imported here 2026-10-24T05:19:51.2757770Z 162 │ mediaVideoThumbnailKey, 2026-10-24T05:19:51.2757819Z ╰──── 2026-10-24T05:19:51.2757911Z  help: Consider removing this import. 2026-10-24T05:19:51.2757914Z 2026-10-24T05:19:51.2758128Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoThumbnailKey' is imported but never used. 2026-10-24T05:19:51.2758255Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:162:3] 2026-10-24T05:19:51.2758322Z 161 │ mediaVideoPreviewUri, 2026-10-24T05:19:51.2758394Z 162 │ mediaVideoThumbnailKey, 2026-10-24T05:19:51.2758499Z ·  ───────────┬────────── 2026-10-24T05:19:51.2758752Z · ╰── 'mediaVideoThumbnailKey' is imported here 2026-10-24T05:19:51.2758831Z 163 │ type MediaVideoPreviewSource, 2026-10-24T05:19:51.2758886Z ╰──── 2026-10-24T05:19:51.2758982Z  help: Consider removing this import. 2026-10-24T05:19:51.2758984Z 2026-10-24T05:19:51.2759189Z ⚠ eslint(no-unused-vars): Type 'MediaVideoPreviewSource' is imported but never used. 2026-10-24T05:19:51.2759314Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:163:8] 2026-10-24T05:19:51.2759383Z 162 │ mediaVideoThumbnailKey, 2026-10-24T05:19:51.2759463Z 163 │ type MediaVideoPreviewSource, 2026-10-24T05:19:51.2759556Z ·  ───────────┬─────────── 2026-10-24T05:19:51.2759712Z · ╰── 'MediaVideoPreviewSource' is imported here 2026-10-24T05:19:51.2759796Z 164 │ } from "../../lib/videoPreviewSource"; 2026-10-24T05:19:51.2759844Z ╰──── 2026-10-24T05:19:51.2759937Z  help: Consider removing this import. 2026-10-24T05:19:51.2760005Z 2026-10-24T05:19:51.2760235Z ⚠ eslint(no-unused-vars): Type 'ReviewDiffTheme' is imported but never used. 2026-10-24T05:19:51.2760364Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:171:15] 2026-10-24T05:19:51.2760538Z 170 │ import { parseReviewCommentMessageSegments } from "../review/reviewCommentSelection"; 2026-10-24T05:19:51.2760675Z 171 │ import type { ReviewDiffTheme } from "../review/shikiReviewHighlighter"; 2026-10-24T05:19:51.2760760Z ·  ───────┬─────── 2026-10-24T05:19:51.2760905Z · ╰── 'ReviewDiffTheme' is imported here 2026-10-24T05:19:51.2760961Z 172 │ import { 2026-10-24T05:19:51.2761011Z ╰──── 2026-10-24T05:19:51.2761101Z  help: Consider removing this import. 2026-10-24T05:19:51.2761104Z 2026-10-24T05:19:51.2761331Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownFontSizes' is imported but never used. 2026-10-24T05:19:51.2761459Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:186:3] 2026-10-24T05:19:51.2761516Z 185 │ import { 2026-10-24T05:19:51.2761587Z 186 │ resolveMarkdownFontSizes, 2026-10-24T05:19:51.2761676Z ·  ────────────┬─────────── 2026-10-24T05:19:51.2761830Z · ╰── 'resolveMarkdownFontSizes' is imported here 2026-10-24T05:19:51.2761915Z 187 │ resolveNativeMarkdownTypography, 2026-10-24T05:19:51.2761964Z ╰──── 2026-10-24T05:19:51.2762056Z  help: Consider removing this import. 2026-10-24T05:19:51.2762059Z 2026-10-24T05:19:51.2762275Z ⚠ eslint(no-unused-vars): Identifier 'markdownLinkIconSource' is imported but never used. 2026-10-24T05:19:51.2762409Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:191:10] 2026-10-24T05:19:51.2762539Z 190 │ import { PierreEntryIcon } from "../../components/PierreEntryIcon"; 2026-10-24T05:19:51.2762672Z 191 │ import { markdownLinkIconSource } from "../../lib/markdownLinkIcons"; 2026-10-24T05:19:51.2762764Z ·  ───────────┬────────── 2026-10-24T05:19:51.2762922Z · ╰── 'markdownLinkIconSource' is imported here 2026-10-24T05:19:51.2762979Z 192 │ import { 2026-10-24T05:19:51.2763027Z ╰──── 2026-10-24T05:19:51.2763120Z  help: Consider removing this import. 2026-10-24T05:19:51.2763123Z 2026-10-24T05:19:51.2763373Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownInlineCodePresentation' is imported but never used. 2026-10-24T05:19:51.2763507Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:194:3] 2026-10-24T05:19:51.2763583Z 193 │ normalizeNativeMarkdownUrl, 2026-10-24T05:19:51.2763677Z 194 │ resolveMarkdownInlineCodePresentation, 2026-10-24T05:19:51.2763784Z ·  ──────────────────┬────────────────── 2026-10-24T05:19:51.2763974Z · ╰── 'resolveMarkdownInlineCodePresentation' is imported here 2026-10-24T05:19:51.2764044Z 195 │ resolveMarkdownLinkIcon, 2026-10-24T05:19:51.2764094Z ╰──── 2026-10-24T05:19:51.2764185Z  help: Consider removing this import. 2026-10-24T05:19:51.2764187Z 2026-10-24T05:19:51.2764409Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownLinkIcon' is imported but never used. 2026-10-24T05:19:51.2764536Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:195:3] 2026-10-24T05:19:51.2764678Z 194 │ resolveMarkdownInlineCodePresentation, 2026-10-24T05:19:51.2764783Z 195 │ resolveMarkdownLinkIcon, 2026-10-24T05:19:51.2764870Z ·  ───────────┬─────────── 2026-10-24T05:19:51.2765022Z · ╰── 'resolveMarkdownLinkIcon' is imported here 2026-10-24T05:19:51.2765108Z 196 │ resolveMarkdownLinkPresentation, 2026-10-24T05:19:51.2765157Z ╰──── 2026-10-24T05:19:51.2765248Z  help: Consider removing this import. 2026-10-24T05:19:51.2765250Z 2026-10-24T05:19:51.2765468Z ⚠ eslint(no-unused-vars): Identifier 'useMarkdownCodeHighlight' is imported but never used. 2026-10-24T05:19:51.2765597Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:234:10] 2026-10-24T05:19:51.2765698Z 233 │ import { ThreadMcpApp } from "./McpAppWebView"; 2026-10-24T05:19:51.2765845Z 234 │ import { useMarkdownCodeHighlight } from "./markdownCodeHighlightState"; 2026-10-24T05:19:51.2765944Z ·  ────────────┬─────────── 2026-10-24T05:19:51.2766108Z · ╰── 'useMarkdownCodeHighlight' is imported here 2026-10-24T05:19:51.2766170Z 235 │ import { 2026-10-24T05:19:51.2766223Z ╰──── 2026-10-24T05:19:51.2766316Z  help: Consider removing this import. 2026-10-24T05:19:51.2766318Z 2026-10-24T05:19:51.2766523Z ⚠ eslint(no-unused-vars): Identifier 'useAssetUrlState' is imported but never used. 2026-10-24T05:19:51.2766652Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:238:3] 2026-10-24T05:19:51.2766716Z 237 │ useAssetUrl, 2026-10-24T05:19:51.2766782Z 238 │ useAssetUrlState, 2026-10-24T05:19:51.2766862Z ·  ────────┬─────── 2026-10-24T05:19:51.2767008Z · ╰── 'useAssetUrlState' is imported here 2026-10-24T05:19:51.2767082Z 239 │ useRefreshAssetUrl, 2026-10-24T05:19:51.2767132Z ╰──── 2026-10-24T05:19:51.2767225Z  help: Consider removing this import. 2026-10-24T05:19:51.2767228Z 2026-10-24T05:19:51.2767424Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:19:51.2767557Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2141:7] 2026-10-24T05:19:51.2767628Z 2140 │ setExpandedFile(null); 2026-10-24T05:19:51.2767784Z 2141 │ }, [props.environmentId, props.threadId, props.contentPresentation.kind]); 2026-10-24T05:19:51.2768007Z ·  ─────────┬───────── ───────┬────── ───────────────┬────────────── 2026-10-24T05:19:51.2768343Z · │ │ ╰── Unnecessary dependency `props.contentPresentation.kind` 2026-10-24T05:19:51.2768584Z · │ ╰── Unnecessary dependency `props.threadId` 2026-10-24T05:19:51.2768787Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-24T05:19:51.2768928Z 2142 │ const horizontalPadding = props.layoutVariant === "split" ? 20 : 16; 2026-10-24T05:19:51.2768980Z ╰──── 2026-10-24T05:19:51.2769271Z  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-24T05:19:51.2769578Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2769584Z 2026-10-24T05:19:51.2769779Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:19:51.2769912Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2609:7] 2026-10-24T05:19:51.2770009Z 2608 │ reportHeaderMaterialVisibility(false); 2026-10-24T05:19:51.2770122Z 2609 │ }, [feedThreadKey, reportHeaderMaterialVisibility]); 2026-10-24T05:19:51.2770202Z ·  ──────┬────── 2026-10-24T05:19:51.2770352Z · ╰── Unnecessary dependency `feedThreadKey` 2026-10-24T05:19:51.2770408Z 2610 │ 2026-10-24T05:19:51.2770462Z ╰──── 2026-10-24T05:19:51.2770749Z  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-24T05:19:51.2771055Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2771058Z 2026-10-24T05:19:51.2771252Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:19:51.2771383Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2625:7] 2026-10-24T05:19:51.2771438Z 2624 │ } 2026-10-24T05:19:51.2771572Z 2625 │ }, [listMountKey, props.contentInsetEndAdjustment, listRef]); 2026-10-24T05:19:51.2771651Z ·  ──────┬───── 2026-10-24T05:19:51.2771796Z · ╰── Unnecessary dependency `listMountKey` 2026-10-24T05:19:51.2771848Z 2626 │ 2026-10-24T05:19:51.2771907Z ╰──── 2026-10-24T05:19:51.2772192Z  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-24T05:19:51.2772494Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2772497Z 2026-10-24T05:19:51.2772690Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:19:51.2772820Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2782:7] 2026-10-24T05:19:51.2772877Z 2781 │ } 2026-10-24T05:19:51.2773056Z 2782 │ }, [expandedTurnIds, expandedWorkGroups, expandedWorkRows, settleDisclosureAfterLayout]); 2026-10-24T05:19:51.2773307Z ·  ───────┬─────── ─────────┬──────── ────────┬─────── 2026-10-24T05:19:51.2773585Z · │ │ ╰── Unnecessary dependency `expandedWorkRows` 2026-10-24T05:19:51.2773786Z · │ ╰── Unnecessary dependency `expandedWorkGroups` 2026-10-24T05:19:51.2773937Z · ╰── Unnecessary dependency `expandedTurnIds` 2026-10-24T05:19:51.2773991Z 2783 │ 2026-10-24T05:19:51.2774040Z ╰──── 2026-10-24T05:19:51.2774325Z  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-24T05:19:51.2774634Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2774639Z 2026-10-24T05:19:51.2774818Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T05:19:51.2774951Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:613:9] 2026-10-24T05:19:51.2775007Z 612 │ }; 2026-10-24T05:19:51.2775122Z 613 │ }, [props.environmentId, attachment.id, httpBaseUrl]), 2026-10-24T05:19:51.2775309Z ·  ─────────┬───────── ──────┬────── ─────┬───── 2026-10-24T05:19:51.2775545Z · │ │ ╰── Unnecessary dependency `httpBaseUrl` 2026-10-24T05:19:51.2775741Z · │ ╰── Unnecessary dependency `attachment.id` 2026-10-24T05:19:51.2775908Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-24T05:19:51.2775963Z 614 │ ); 2026-10-24T05:19:51.2776013Z ╰──── 2026-10-24T05:19:51.2776318Z  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-24T05:19:51.2776621Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2776623Z 2026-10-24T05:19:51.2776819Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:19:51.2776969Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:257:7] 2026-10-24T05:19:51.2777068Z 256 │ return () => cancelAnimationFrame(frame); 2026-10-24T05:19:51.2777146Z 257 │ }, [props.path, targetIndex]); 2026-10-24T05:19:51.2777223Z ·  ─────┬──── 2026-10-24T05:19:51.2777365Z · ╰── Unnecessary dependency `props.path` 2026-10-24T05:19:51.2777418Z 258 │ 2026-10-24T05:19:51.2777468Z ╰──── 2026-10-24T05:19:51.2777752Z  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-24T05:19:51.2778056Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2778058Z 2026-10-24T05:19:51.2778297Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T05:19:51.2778476Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:293:23] 2026-10-24T05:19:51.2778550Z 292 │ 2026-10-24T05:19:51.2779657Z ·  ─────────── 2026-10-24T05:19:51.2779722Z 310 │ {body} 2026-10-24T05:19:51.2779772Z ╰──── 2026-10-24T05:19:51.2779914Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T05:19:51.2779916Z 2026-10-24T05:19:51.2780126Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T05:19:51.2780266Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:773:7] 2026-10-24T05:19:51.2780367Z 772 │ if (settingsSheetPresentation.isActive) { 2026-10-24T05:19:51.2780496Z 773 │ settingsRoutePresentation.present(settingsRouteSession); 2026-10-24T05:19:51.2780596Z ·  ────────────┬──────────── 2026-10-24T05:19:51.2780768Z · ╰── Missing dependency `settingsRoutePresentation` 2026-10-24T05:19:51.2780821Z 774 │ } 2026-10-24T05:19:51.2781024Z 775 │ }, [settingsRoutePresentation.present, settingsRouteSession, settingsSheetPresentation.isActive]); 2026-10-24T05:19:51.2781133Z ·  ────────────────┬──────────────── 2026-10-24T05:19:51.2781410Z · ╰── Overly precise dependency `settingsRoutePresentation.present`, use `settingsRoutePresentation` instead 2026-10-24T05:19:51.2781461Z 776 │ 2026-10-24T05:19:51.2781512Z ╰──── 2026-10-24T05:19:51.2781930Z  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-24T05:19:51.2782236Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2782239Z 2026-10-24T05:19:51.2782392Z ⚠ react(immutability): This value cannot be modified 2026-10-24T05:19:51.2782529Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:391:5] 2026-10-24T05:19:51.2782686Z 387 │ typeof props.style.borderRadius === "number" ? props.style.borderRadius : 0; 2026-10-24T05:19:51.2782821Z 388 │ const animatedBorderRadius = useSharedValue(targetBorderRadius); 2026-10-24T05:19:51.2782911Z ·  ──────────┬───────── 2026-10-24T05:19:51.2783061Z · ╰── `animatedBorderRadius` originates here 2026-10-24T05:19:51.2783276Z 389 │ const shouldAnimate = props.animateLayout !== false && Platform.OS !== "android"; 2026-10-24T05:19:51.2783377Z 390 │ useLayoutEffect(() => { 2026-10-24T05:19:51.2783480Z 391 │ animatedBorderRadius.value = shouldAnimate 2026-10-24T05:19:51.2785870Z ·  ──────────┬───────── 2026-10-24T05:19:51.2786043Z · ╰── `animatedBorderRadius` cannot be modified 2026-10-24T05:19:51.2786132Z 392 │ ? withTiming(targetBorderRadius, { 2026-10-24T05:19:51.2786186Z ╰──── 2026-10-24T05:19:51.2786449Z  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-24T05:19:51.2786755Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:19:51.2786761Z 2026-10-24T05:19:51.2787013Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:19:51.2787172Z ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:40:5] 2026-10-24T05:19:51.2787283Z 37 │ const [initialized, setInitialized] = useState(false); 2026-10-24T05:19:51.2787351Z 38 │ useLayoutEffect(() => { 2026-10-24T05:19:51.2787429Z ·  ───────┬─────── 2026-10-24T05:19:51.2787557Z · ╰── This is the containing effect 2026-10-24T05:19:51.2787618Z 39 │ reset(); 2026-10-24T05:19:51.2787684Z 40 │ setInitialized(true); 2026-10-24T05:19:51.2787758Z ·  ───────┬────── 2026-10-24T05:19:51.2787931Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:19:51.2787994Z 41 │ }, [reset]); 2026-10-24T05:19:51.2788044Z ╰──── 2026-10-24T05:19:51.2788669Z  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-24T05:19:51.2788983Z  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-24T05:19:51.2788985Z 2026-10-24T05:19:51.2789238Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:19:51.2789459Z ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:93:5] 2026-10-24T05:19:51.2789541Z 88 │ 2026-10-24T05:19:51.2789604Z 89 │ useEffect(() => { 2026-10-24T05:19:51.2789673Z ·  ────┬──── 2026-10-24T05:19:51.2789799Z · ╰── This is the containing effect 2026-10-24T05:19:51.2789957Z 90 │ if (!needsPreparation || !initialProjectRef.branch || waitingForProject) return; 2026-10-24T05:19:51.2790056Z 91 │ const branchName = initialProjectRef.branch; 2026-10-24T05:19:51.2790122Z 92 │ let active = true; 2026-10-24T05:19:51.2790216Z 93 │ setPendingCheckouts((count) => count + 1); 2026-10-24T05:19:51.2790298Z ·  ─────────┬───────── 2026-10-24T05:19:51.2790464Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:19:51.2790622Z 94 │ // Serialize replacements: ignoring a stale result cannot undo its Git mutation. 2026-10-24T05:19:51.2790676Z ╰──── 2026-10-24T05:19:51.2791258Z  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-24T05:19:51.2791568Z  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-24T05:19:51.2791571Z 2026-10-24T05:19:51.2791818Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:19:51.2791962Z ╭─[apps/mobile/src/features/files/FileTreeBrowser.tsx:155:5] 2026-10-24T05:19:51.2792017Z 150 │ 2026-10-24T05:19:51.2792082Z 151 │ useEffect(() => { 2026-10-24T05:19:51.2792151Z ·  ────┬──── 2026-10-24T05:19:51.2792280Z · ╰── This is the containing effect 2026-10-24T05:19:51.2792364Z 152 │ if (!controlledSelectedPath) { 2026-10-24T05:19:51.2792424Z 153 │ return; 2026-10-24T05:19:51.2792477Z 154 │ } 2026-10-24T05:19:51.2792559Z 155 │ setExpandedPaths((current) => { 2026-10-24T05:19:51.2792641Z ·  ────────┬─────── 2026-10-24T05:19:51.2792807Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:19:51.2792928Z 156 │ const ancestors = ancestorPaths(controlledSelectedPath); 2026-10-24T05:19:51.2792979Z ╰──── 2026-10-24T05:19:51.2793568Z  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-24T05:19:51.2793879Z  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-24T05:19:51.2793882Z 2026-10-24T05:19:51.2794062Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T05:19:51.2794166Z ╭─[packages/shared/src/qrCode.ts:458:44] 2026-10-24T05:19:51.2794232Z 457 │ ): Array { 2026-10-24T05:19:51.2794338Z 458 │ let result: Array = divisor.map((_) => 0); 2026-10-24T05:19:51.2794483Z ·  ┬ 2026-10-24T05:19:51.2794652Z · ╰── '_' is declared here 2026-10-24T05:19:51.2794724Z 459 │ for (const b of data) { 2026-10-24T05:19:51.2794775Z ╰──── 2026-10-24T05:19:51.2794879Z  help: Consider removing this parameter. 2026-10-24T05:19:51.2794881Z 2026-10-24T05:19:51.2795056Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T05:19:51.2795237Z ╭─[apps/mobile/src/features/keyboard/HardwareKeyboardCommandProvider.tsx:116:34] 2026-10-24T05:19:51.2795306Z 115 │ return [...commands]; 2026-10-24T05:19:51.2795437Z 116 │ }, [activeThreadRef, pathname, registrationVersion, navigation]); 2026-10-24T05:19:51.2795554Z ·  ─────────┬───────── 2026-10-24T05:19:51.2795738Z · ╰── Unnecessary dependency `registrationVersion` 2026-10-24T05:19:51.2795791Z 117 │ 2026-10-24T05:19:51.2795845Z ╰──── 2026-10-24T05:19:51.2796150Z  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-24T05:19:51.2796459Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2796462Z 2026-10-24T05:19:51.2796627Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T05:19:51.2796781Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:697:76] 2026-10-24T05:19:51.2796960Z 696 │ const [snoozeGateClock, setSnoozeGateClock] = useState(() => ({ thread, now: Date.now() })); 2026-10-24T05:19:51.2797125Z 697 │ if (snoozeGateClock.thread !== thread) setSnoozeGateClock({ thread, now: Date.now() }); 2026-10-24T05:19:51.2797259Z ·  ─────┬──── 2026-10-24T05:19:51.2797442Z · ╰── Cannot call impure function 2026-10-24T05:19:51.2797574Z 698 │ const snoozeGateNow = new Date(snoozeGateClock.now).toISOString(); 2026-10-24T05:19:51.2797623Z ╰──── 2026-10-24T05:19:51.2797901Z  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-24T05:19:51.2798194Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T05:19:51.2798199Z 2026-10-24T05:19:51.2798359Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T05:19:51.2798539Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:718:71] 2026-10-24T05:19:51.2798764Z 717 │ const snoozePresets = useMemo( 2026-10-24T05:19:51.2798950Z 718 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-24T05:19:51.2799080Z ·  ─────┬──── 2026-10-24T05:19:51.2799255Z · ╰── Cannot call impure function 2026-10-24T05:19:51.2799440Z 719 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-24T05:19:51.2799540Z ╰──── 2026-10-24T05:19:51.2799810Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T05:19:51.2800095Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T05:19:51.2800097Z 2026-10-24T05:19:51.2800274Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T05:19:51.2800427Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:719:6] 2026-10-24T05:19:51.2800599Z 718 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-24T05:19:51.2800715Z 719 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-24T05:19:51.2800808Z ·  ────────────┬─────────── 2026-10-24T05:19:51.2800980Z · ╰── Unnecessary dependency `props.snoozePresetMinute` 2026-10-24T05:19:51.2801036Z 720 │ ); 2026-10-24T05:19:51.2801086Z ╰──── 2026-10-24T05:19:51.2801390Z  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-24T05:19:51.2801693Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2801698Z 2026-10-24T05:19:51.2801870Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T05:19:51.2802027Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:765:7] 2026-10-24T05:19:51.2802097Z 764 │ thread.pinnedAt, 2026-10-24T05:19:51.2802158Z 765 │ variant, 2026-10-24T05:19:51.2802228Z ·  ───┬─── 2026-10-24T05:19:51.2802361Z · ╰── Unnecessary dependency `variant` 2026-10-24T05:19:51.2802418Z 766 │ ], 2026-10-24T05:19:51.2802469Z ╰──── 2026-10-24T05:19:51.2802770Z  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-24T05:19:51.2803071Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2803073Z 2026-10-24T05:19:51.2803268Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T05:19:51.2803428Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:1215:21] 2026-10-24T05:19:51.2803554Z 1214 │ {providerDrivers.slice(0, -1).map((driver, index) => ( 2026-10-24T05:19:51.2803689Z 1215 │ 2026-10-24T05:19:51.2803805Z ·  ────────────────────────── 2026-10-24T05:19:51.2803915Z 1216 │ 2026-10-24T05:19:51.2803966Z ╰──── 2026-10-24T05:19:51.2804111Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T05:19:51.2804114Z 2026-10-24T05:19:51.2804604Z ⚠ 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-24T05:19:51.2804766Z ╭─[apps/server/src/serverSettings.test.ts:1741:32] 2026-10-24T05:19:51.2804974Z 1740 │ const model = createModelSelection(ProviderInstanceId.make("codex"), "gpt-5.5"); 2026-10-24T05:19:51.2805156Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-24T05:19:51.2805267Z ·  ─────────────────── 2026-10-24T05:19:51.2805375Z 1742 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-24T05:19:51.2805428Z ╰──── 2026-10-24T05:19:51.2805431Z 2026-10-24T05:19:51.2805867Z ⚠ 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-24T05:19:51.2805987Z ╭─[apps/server/src/serverSettings.test.ts:1742:34] 2026-10-24T05:19:51.2806169Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-24T05:19:51.2806275Z 1742 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-24T05:19:51.2806388Z ·  ─────────────────── 2026-10-24T05:19:51.2806503Z 1743 │ Schema.fromJsonString(Schema.Array(ProjectScript)), 2026-10-24T05:19:51.2806556Z ╰──── 2026-10-24T05:19:51.2806558Z 2026-10-24T05:19:51.2806781Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-24T05:19:51.2806900Z ╭─[apps/server/src/terminal/Manager.test.ts:731:31] 2026-10-24T05:19:51.2806962Z 730 │ ); 2026-10-24T05:19:51.2807134Z 731 │ const snapshot = events.filter((event) => event.type === "snapshot").at(-1)?.snapshot; 2026-10-24T05:19:51.2807230Z ·  ────── 2026-10-24T05:19:51.2807343Z 732 │ expect(snapshot?.history).toBe("aa😀\rEND"); 2026-10-24T05:19:51.2807392Z ╰──── 2026-10-24T05:19:51.2807561Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T05:19:51.2807563Z 2026-10-24T05:19:51.2807718Z ⚠ react(immutability): This value cannot be modified 2026-10-24T05:19:51.2807874Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-24T05:19:51.2807927Z  86 │ 2026-10-24T05:19:51.2808019Z  87 │ const cardCoverage = props.cardCoverage; 2026-10-24T05:19:51.2808099Z ·  ──────┬───── 2026-10-24T05:19:51.2808240Z · ╰── `cardCoverage` originates here 2026-10-24T05:19:51.2808320Z  88 │ const barHeightRef = useRef(0); 2026-10-24T05:19:51.2808402Z  89 │ const cardHeightRef = useRef(0); 2026-10-24T05:19:51.2808486Z  90 │ const cardHeight = useSharedValue(0); 2026-10-24T05:19:51.2808590Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-24T05:19:51.2808697Z  92 │ if (!cardCoverage) { 2026-10-24T05:19:51.2808759Z  93 │ return; 2026-10-24T05:19:51.2808814Z  94 │ } 2026-10-24T05:19:51.2808965Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T05:19:51.2809051Z  96 │ if (coverage === cardCoverage.value) { 2026-10-24T05:19:51.2809112Z  97 │ return; 2026-10-24T05:19:51.2809166Z  98 │ } 2026-10-24T05:19:51.2809297Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T05:19:51.2809448Z 100 │ cardCoverage.value = coverage; 2026-10-24T05:19:51.2809527Z ·  ──────┬───── 2026-10-24T05:19:51.2809671Z · ╰── `cardCoverage` cannot be modified 2026-10-24T05:19:51.2809729Z 101 │ return; 2026-10-24T05:19:51.2809780Z ╰──── 2026-10-24T05:19:51.2810073Z  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-24T05:19:51.2810374Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:19:51.2810377Z 2026-10-24T05:19:51.2810530Z ⚠ react(immutability): This value cannot be modified 2026-10-24T05:19:51.2810683Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7] 2026-10-24T05:19:51.2810765Z  89 │ const cardHeightRef = useRef(0); 2026-10-24T05:19:51.2810848Z  90 │ const cardHeight = useSharedValue(0); 2026-10-24T05:19:51.2810924Z ·  ─────┬──── 2026-10-24T05:19:51.2811054Z · ╰── `cardHeight` originates here 2026-10-24T05:19:51.2811146Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-24T05:19:51.2811215Z  92 │ if (!cardCoverage) { 2026-10-24T05:19:51.2811273Z  93 │ return; 2026-10-24T05:19:51.2811324Z  94 │ } 2026-10-24T05:19:51.2811470Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T05:19:51.2811556Z  96 │ if (coverage === cardCoverage.value) { 2026-10-24T05:19:51.2811612Z  97 │ return; 2026-10-24T05:19:51.2811669Z  98 │ } 2026-10-24T05:19:51.2811750Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T05:19:51.2811829Z 100 │ cardCoverage.value = coverage; 2026-10-24T05:19:51.2811885Z 101 │ return; 2026-10-24T05:19:51.2811940Z 102 │ } 2026-10-24T05:19:51.2812038Z 103 │ cardCoverage.value = withTiming(coverage, { 2026-10-24T05:19:51.2812133Z 104 │ duration: USER_INPUT_TOGGLE_DURATION_MS, 2026-10-24T05:19:51.2812215Z 105 │ easing: Easing.out(Easing.cubic), 2026-10-24T05:19:51.2812271Z 106 │ }); 2026-10-24T05:19:51.2812338Z 107 │ }, [cardCoverage]); 2026-10-24T05:19:51.2812421Z 108 │ const handleBarLayout = useCallback( 2026-10-24T05:19:51.2812499Z 109 │ (event: LayoutChangeEvent) => { 2026-10-24T05:19:51.2812625Z 110 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T05:19:51.2812692Z 111 │ notifyCoverage(); 2026-10-24T05:19:51.2812797Z 112 │ }, 2026-10-24T05:19:51.2812893Z 113 │ [notifyCoverage], 2026-10-24T05:19:51.2812974Z 114 │ ); 2026-10-24T05:19:51.2813059Z 115 │ const handleCardLayout = useCallback( 2026-10-24T05:19:51.2813138Z 116 │ (event: LayoutChangeEvent) => { 2026-10-24T05:19:51.2813260Z 117 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T05:19:51.2813372Z 118 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-24T05:19:51.2813447Z ·  ─────┬──── 2026-10-24T05:19:51.2813584Z · ╰── `cardHeight` cannot be modified 2026-10-24T05:19:51.2813649Z 119 │ notifyCoverage(); 2026-10-24T05:19:51.2813700Z ╰──── 2026-10-24T05:19:51.2813959Z  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-24T05:19:51.2814260Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:19:51.2814266Z 2026-10-24T05:19:51.2814460Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T05:19:51.2814612Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-24T05:19:51.2814697Z  90 │ const cardHeight = useSharedValue(0); 2026-10-24T05:19:51.2814790Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-24T05:19:51.2814890Z ·  ───┬─── 2026-10-24T05:19:51.2815124Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-24T05:19:51.2815197Z  92 │ if (!cardCoverage) { 2026-10-24T05:19:51.2815258Z  93 │ return; 2026-10-24T05:19:51.2815310Z  94 │ } 2026-10-24T05:19:51.2815456Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T05:19:51.2815542Z  96 │ if (coverage === cardCoverage.value) { 2026-10-24T05:19:51.2815600Z  97 │ return; 2026-10-24T05:19:51.2815651Z  98 │ } 2026-10-24T05:19:51.2815730Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T05:19:51.2815811Z 100 │ cardCoverage.value = coverage; 2026-10-24T05:19:51.2815888Z ·  ──────┬───── 2026-10-24T05:19:51.2816018Z · ╰── This modifies `cardCoverage` 2026-10-24T05:19:51.2816079Z 101 │ return; 2026-10-24T05:19:51.2816129Z ╰──── 2026-10-24T05:19:51.2816463Z  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-24T05:19:51.2816762Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:19:51.2816766Z 2026-10-24T05:19:51.2816958Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T05:19:51.2817111Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-24T05:19:51.2817191Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T05:19:51.2817270Z 100 │ cardCoverage.value = coverage; 2026-10-24T05:19:51.2817343Z ·  ──────┬───── 2026-10-24T05:19:51.2817521Z · ╰── This modifies `cardCoverage` 2026-10-24T05:19:51.2817667Z 101 │ return; 2026-10-24T05:19:51.2817719Z 102 │ } 2026-10-24T05:19:51.2817817Z 103 │ cardCoverage.value = withTiming(coverage, { 2026-10-24T05:19:51.2817910Z 104 │ duration: USER_INPUT_TOGGLE_DURATION_MS, 2026-10-24T05:19:51.2817993Z 105 │ easing: Easing.out(Easing.cubic), 2026-10-24T05:19:51.2818046Z 106 │ }); 2026-10-24T05:19:51.2818111Z 107 │ }, [cardCoverage]); 2026-10-24T05:19:51.2818194Z 108 │ const handleBarLayout = useCallback( 2026-10-24T05:19:51.2818272Z 109 │ (event: LayoutChangeEvent) => { 2026-10-24T05:19:51.2818375Z ·  ───────────────┬─────────────── 2026-10-24T05:19:51.2818622Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-24T05:19:51.2818760Z 110 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T05:19:51.2818816Z ╰──── 2026-10-24T05:19:51.2819142Z  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-24T05:19:51.2819438Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:19:51.2819441Z 2026-10-24T05:19:51.2819633Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T05:19:51.2819784Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7] 2026-10-24T05:19:51.2819869Z 115 │ const handleCardLayout = useCallback( 2026-10-24T05:19:51.2819947Z 116 │ (event: LayoutChangeEvent) => { 2026-10-24T05:19:51.2820054Z ·  ───────────────┬─────────────── 2026-10-24T05:19:51.2820275Z · ╰── This function may (indirectly) reassign or modify `cardHeight` after render 2026-10-24T05:19:51.2820401Z 117 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T05:19:51.2820511Z 118 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-24T05:19:51.2820585Z ·  ─────┬──── 2026-10-24T05:19:51.2820715Z · ╰── This modifies `cardHeight` 2026-10-24T05:19:51.2820782Z 119 │ notifyCoverage(); 2026-10-24T05:19:51.2820831Z ╰──── 2026-10-24T05:19:51.2821156Z  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-24T05:19:51.2821457Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:19:51.2821462Z 2026-10-24T05:19:51.2821918Z ⚠ 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-24T05:19:51.2822039Z ╭─[packages/shared/src/atomicWrite.test.ts:139:5] 2026-10-24T05:19:51.2822113Z 138 │ Effect.gen(function* () { 2026-10-24T05:19:51.2822305Z 139 │ ╭─▶ while (fiber.pollUnsafe() === undefined) { 2026-10-24T05:19:51.2822429Z 140 │ │ yield* TestClock.adjust("100 millis"); 2026-10-24T05:19:51.2822809Z 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-24T05:19:51.2823052Z 142 │ │ yield* Effect.promise(() => new Promise((resolve) => setImmediate(resolve))); 2026-10-24T05:19:51.2823181Z 143 │ ╰─▶ } 2026-10-24T05:19:51.2823266Z 144 │ return yield* Fiber.join(fiber); 2026-10-24T05:19:51.2823317Z ╰──── 2026-10-24T05:19:51.2823320Z 2026-10-24T05:19:51.2823572Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:19:51.2823720Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:57:5] 2026-10-24T05:19:51.2823773Z 55 │ 2026-10-24T05:19:51.2823837Z 56 │ useEffect(() => { 2026-10-24T05:19:51.2823915Z ·  ────┬──── 2026-10-24T05:19:51.2824042Z · ╰── This is the containing effect 2026-10-24T05:19:51.2824110Z 57 │ setDecodedSize(null); 2026-10-24T05:19:51.2824186Z ·  ───────┬────── 2026-10-24T05:19:51.2824351Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:19:51.2824418Z 58 │ }, [props.sourceKey]); 2026-10-24T05:19:51.2824468Z ╰──── 2026-10-24T05:19:51.2825053Z  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-24T05:19:51.2825372Z  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-24T05:19:51.2825377Z 2026-10-24T05:19:51.2825626Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:19:51.2825774Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:61:5] 2026-10-24T05:19:51.2825825Z 59 │ 2026-10-24T05:19:51.2825886Z 60 │ useEffect(() => { 2026-10-24T05:19:51.2825954Z ·  ────┬──── 2026-10-24T05:19:51.2826078Z · ╰── This is the containing effect 2026-10-24T05:19:51.2826142Z 61 │ setFailedUri(null); 2026-10-24T05:19:51.2826216Z ·  ──────┬───── 2026-10-24T05:19:51.2826393Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:19:51.2826462Z 62 │ }, [props.uri]); 2026-10-24T05:19:51.2826512Z ╰──── 2026-10-24T05:19:51.2827086Z  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-24T05:19:51.2827399Z  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-24T05:19:51.2827402Z 2026-10-24T05:19:51.2827610Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-24T05:19:51.2827806Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:7:10] 2026-10-24T05:19:51.2827996Z 6 │ import { parse, SvgAst, type JsxAST } from "react-native-svg"; 2026-10-24T05:19:51.2828170Z 7 │ import { ActivityIndicator, Pressable, StyleSheet, View, type ViewStyle } from "react-native"; 2026-10-24T05:19:51.2828257Z ·  ────────┬──────── 2026-10-24T05:19:51.2828405Z · ╰── 'ActivityIndicator' is imported here 2026-10-24T05:19:51.2828458Z 8 │ 2026-10-24T05:19:51.2828508Z ╰──── 2026-10-24T05:19:51.2828641Z  help: Consider removing this import. 2026-10-24T05:19:51.2828646Z 2026-10-24T05:19:51.2828845Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:19:51.2828992Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:58:7] 2026-10-24T05:19:51.2829064Z 57 │ setDecodedSize(null); 2026-10-24T05:19:51.2829132Z 58 │ }, [props.sourceKey]); 2026-10-24T05:19:51.2829212Z ·  ───────┬─────── 2026-10-24T05:19:51.2829360Z · ╰── Unnecessary dependency `props.sourceKey` 2026-10-24T05:19:51.2829409Z 59 │ 2026-10-24T05:19:51.2829458Z ╰──── 2026-10-24T05:19:51.2829743Z  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-24T05:19:51.2830044Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2830047Z 2026-10-24T05:19:51.2830245Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:19:51.2830391Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:62:7] 2026-10-24T05:19:51.2830456Z 61 │ setFailedUri(null); 2026-10-24T05:19:51.2830519Z 62 │ }, [props.uri]); 2026-10-24T05:19:51.2830589Z ·  ────┬──── 2026-10-24T05:19:51.2830725Z · ╰── Unnecessary dependency `props.uri` 2026-10-24T05:19:51.2830775Z 63 │ 2026-10-24T05:19:51.2830824Z ╰──── 2026-10-24T05:19:51.2831106Z  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-24T05:19:51.2831409Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2831411Z 2026-10-24T05:19:51.2831638Z ⚠ eslint(no-unused-vars): Function 'resolveThreadWorkspaceCwd' is declared but never used. 2026-10-24T05:19:51.2831754Z ╭─[apps/server/src/checkpointing/Utils.ts:12:10] 2026-10-24T05:19:51.2831804Z 11 │ 2026-10-24T05:19:51.2831897Z 12 │ function resolveThreadWorkspaceCwd(input: { 2026-10-24T05:19:51.2831995Z ·  ────────────┬──────────── 2026-10-24T05:19:51.2832159Z · ╰── 'resolveThreadWorkspaceCwd' is declared here 2026-10-24T05:19:51.2832224Z 13 │ readonly thread: { 2026-10-24T05:19:51.2832273Z ╰──── 2026-10-24T05:19:51.2832376Z  help: Consider removing this declaration. 2026-10-24T05:19:51.2832379Z 2026-10-24T05:19:51.2832681Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:19:51.2832886Z ╭─[apps/mobile/src/features/threads/use-worktree-setup.ts:30:40] 2026-10-24T05:19:51.2833043Z 28 │ const snapshot = resolveWorktreeSetupSnapshot(input.threadId, query.data, live); 2026-10-24T05:19:51.2833105Z 29 │ useEffect(() => { 2026-10-24T05:19:51.2833174Z ·  ────┬──── 2026-10-24T05:19:51.2833298Z · ╰── This is the containing effect 2026-10-24T05:19:51.2833417Z 30 │ if (snapshot && snapshot !== live) setHeld({ key, snapshot }); 2026-10-24T05:19:51.2833520Z ·  ───┬─── 2026-10-24T05:19:51.2833704Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:19:51.2833773Z 31 │ }, [key, live, snapshot]); 2026-10-24T05:19:51.2833821Z ╰──── 2026-10-24T05:19:51.2834406Z  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-24T05:19:51.2834720Z  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-24T05:19:51.2834722Z 2026-10-24T05:19:51.2835159Z ⚠ 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-24T05:19:51.2835292Z ╭─[apps/server/src/assets/AssetAccess.test.ts:1043:32] 2026-10-24T05:19:51.2835431Z 1042 │ expect(error._tag).toBe("AssetGitHubMediaUrlValidationError"); 2026-10-24T05:19:51.2835615Z 1043 │ const encoded = yield* Schema.encodeEffect(Schema.fromJsonString(AssetAccessError))(error); 2026-10-24T05:19:51.2835726Z ·  ─────────────────── 2026-10-24T05:19:51.2835817Z 1044 │ expect(encoded).not.toContain(url); 2026-10-24T05:19:51.2835867Z ╰──── 2026-10-24T05:19:51.2835870Z 2026-10-24T05:19:51.2836093Z ⚠ eslint(no-unneeded-ternary): Unnecessary use of boolean literals in conditional expression 2026-10-24T05:19:51.2836215Z ╭─[packages/shared/src/serverSettings.test.ts:35:7] 2026-10-24T05:19:51.2836394Z 34 │ const fallback = fallbackTextGenerationModelSelection(providerInstances, (instanceId) => 2026-10-24T05:19:51.2836542Z 35 │ instanceId === configured ? true : false, 2026-10-24T05:19:51.2836717Z ·  ──────────────────────────────────────── 2026-10-24T05:19:51.2836772Z 36 │ ); 2026-10-24T05:19:51.2836822Z ╰──── 2026-10-24T05:19:51.2836914Z  help: Remove this ternary operator 2026-10-24T05:19:51.2836921Z 2026-10-24T05:19:51.2837182Z ⚠ eslint(no-unused-vars): Variable 'claudeCaps' is declared but never used. Unused variables should start with a '_'. 2026-10-24T05:19:51.2837286Z ╭─[packages/shared/src/model.test.ts:36:7] 2026-10-24T05:19:51.2837338Z 35 │ 2026-10-24T05:19:51.2837466Z 36 │ const claudeCaps: ModelCapabilities = createModelCapabilities({ 2026-10-24T05:19:51.2837537Z ·  ─────┬──── 2026-10-24T05:19:51.2837669Z · ╰── 'claudeCaps' is declared here 2026-10-24T05:19:51.2837743Z 37 │ optionDescriptors: [ 2026-10-24T05:19:51.2837796Z ╰──── 2026-10-24T05:19:51.2837896Z  help: Consider removing this declaration. 2026-10-24T05:19:51.2837898Z 2026-10-24T05:19:51.2838050Z ⚠ react(immutability): This value cannot be modified 2026-10-24T05:19:51.2838192Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:174:5] 2026-10-24T05:19:51.2838335Z 170 │ const expandedAngle = props.collapsedDirection === "right" ? 90 : 180; 2026-10-24T05:19:51.2838481Z 171 │ const rotation = useSharedValue(props.expanded ? expandedAngle : 0); 2026-10-24T05:19:51.2838632Z ·  ────┬─── 2026-10-24T05:19:51.2838822Z · ╰── `rotation` originates here 2026-10-24T05:19:51.2838873Z 172 │ 2026-10-24T05:19:51.2838940Z 173 │ useLayoutEffect(() => { 2026-10-24T05:19:51.2839078Z 174 │ rotation.value = withTiming(props.expanded ? expandedAngle : 0, { 2026-10-24T05:19:51.2839150Z ·  ────┬─── 2026-10-24T05:19:51.2839280Z · ╰── `rotation` cannot be modified 2026-10-24T05:19:51.2839374Z 175 │ duration: THREAD_DISCLOSURE_TRANSITION_MS, 2026-10-24T05:19:51.2839426Z ╰──── 2026-10-24T05:19:51.2839684Z  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-24T05:19:51.2839980Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:19:51.2839983Z 2026-10-24T05:19:51.2840169Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T05:19:51.2840320Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:1246:23] 2026-10-24T05:19:51.2840386Z 1245 │ 2026-10-24T05:19:51.2842945Z 800 │ 2026-10-24T05:19:51.2843065Z ·  ──────────────────── 2026-10-24T05:19:51.2843161Z 801 │ 2026-10-24T05:19:51.2843211Z ╰──── 2026-10-24T05:19:51.2843426Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T05:19:51.2843562Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T05:19:51.2843564Z 2026-10-24T05:19:51.2843716Z ⚠ react(immutability): This value cannot be modified 2026-10-24T05:19:51.2843876Z ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:42:5] 2026-10-24T05:19:51.2843928Z 35 │ 2026-10-24T05:19:51.2844063Z 36 │ const inspectorProgress = useSharedValue(inspectorVisible ? 1 : 0); 2026-10-24T05:19:51.2844148Z ·  ────────┬──────── 2026-10-24T05:19:51.2844289Z · ╰── `inspectorProgress` originates here 2026-10-24T05:19:51.2844380Z 37 │ const { renderedInspectorWidth } = props; 2026-10-24T05:19:51.2844509Z 38 │ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0); 2026-10-24T05:19:51.2844558Z 39 │ 2026-10-24T05:19:51.2844636Z 40 │ const onClosed = props.onClosed; 2026-10-24T05:19:51.2844697Z 41 │ useEffect(() => { 2026-10-24T05:19:51.2844785Z 42 │ inspectorProgress.value = withTiming( 2026-10-24T05:19:51.2844865Z ·  ────────┬──────── 2026-10-24T05:19:51.2845016Z · ╰── `inspectorProgress` cannot be modified 2026-10-24T05:19:51.2845093Z 43 │ inspectorVisible ? 1 : 0, 2026-10-24T05:19:51.2845143Z ╰──── 2026-10-24T05:19:51.2845400Z  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-24T05:19:51.2845695Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:19:51.2845697Z 2026-10-24T05:19:51.2845847Z ⚠ react(immutability): This value cannot be modified 2026-10-24T05:19:51.2845999Z ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:67:7] 2026-10-24T05:19:51.2846088Z 37 │ const { renderedInspectorWidth } = props; 2026-10-24T05:19:51.2846266Z 38 │ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0); 2026-10-24T05:19:51.2846417Z ·  ──────────┬───────── 2026-10-24T05:19:51.2846568Z · ╰── `renderedContentWidth` originates here 2026-10-24T05:19:51.2846618Z 39 │ 2026-10-24T05:19:51.2846695Z 40 │ const onClosed = props.onClosed; 2026-10-24T05:19:51.2846758Z 41 │ useEffect(() => { 2026-10-24T05:19:51.2846843Z 42 │ inspectorProgress.value = withTiming( 2026-10-24T05:19:51.2846915Z 43 │ inspectorVisible ? 1 : 0, 2026-10-24T05:19:51.2846983Z 44 │ WORKSPACE_PANE_TIMING, 2026-10-24T05:19:51.2847045Z 45 │ (finished) => { 2026-10-24T05:19:51.2847180Z 46 │ if (finished === true && !inspectorVisible && onClosed !== undefined) { 2026-10-24T05:19:51.2847250Z 47 │ runOnJS(onClosed)(); 2026-10-24T05:19:51.2847307Z 48 │ } 2026-10-24T05:19:51.2847367Z 49 │ }, 2026-10-24T05:19:51.2847422Z 50 │ ); 2026-10-24T05:19:51.2847551Z 51 │ const targetWidth = inspectorVisible ? (inspectorWidth ?? 0) : 0; 2026-10-24T05:19:51.2847626Z 52 │ renderedInspectorWidth.set( 2026-10-24T05:19:51.2847763Z 53 │ resizing ? targetWidth : withTiming(targetWidth, WORKSPACE_PANE_TIMING), 2026-10-24T05:19:51.2847815Z 54 │ ); 2026-10-24T05:19:51.2847866Z 55 │ }, [ 2026-10-24T05:19:51.2847932Z 56 │ inspectorProgress, 2026-10-24T05:19:51.2847995Z 57 │ inspectorVisible, 2026-10-24T05:19:51.2848057Z 58 │ inspectorWidth, 2026-10-24T05:19:51.2848115Z 59 │ onClosed, 2026-10-24T05:19:51.2848186Z 60 │ renderedInspectorWidth, 2026-10-24T05:19:51.2848244Z 61 │ resizing, 2026-10-24T05:19:51.2848297Z 62 │ ]); 2026-10-24T05:19:51.2848347Z 63 │ 2026-10-24T05:19:51.2848414Z 64 │ useEffect(() => { 2026-10-24T05:19:51.2848505Z 65 │ const targetWidth = inspectorWidth ?? 0; 2026-10-24T05:19:51.2848611Z 66 │ if (!inspectorVisible || resizing) { 2026-10-24T05:19:51.2848721Z 67 │ renderedContentWidth.value = targetWidth; 2026-10-24T05:19:51.2848807Z ·  ──────────┬───────── 2026-10-24T05:19:51.2848963Z · ╰── `renderedContentWidth` cannot be modified 2026-10-24T05:19:51.2849021Z 68 │ return; 2026-10-24T05:19:51.2849071Z ╰──── 2026-10-24T05:19:51.2849325Z  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-24T05:19:51.2849620Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:19:51.2849628Z 2026-10-24T05:19:51.2849904Z ⚠ eslint(no-unused-vars): Variable 'layerUnavailable' is declared but never used. Unused variables should start with a '_'. 2026-10-24T05:19:51.2850048Z ╭─[apps/server/src/orchestration-v2/Orchestrator.ts:12366:7] 2026-10-24T05:19:51.2850101Z 12365 │ 2026-10-24T05:19:51.2850238Z 12366 │ const layerUnavailable: Layer.Layer = Layer.succeed( 2026-10-24T05:19:51.2850325Z ·  ────────┬─────── 2026-10-24T05:19:51.2850471Z · ╰── 'layerUnavailable' is declared here 2026-10-24T05:19:51.2850536Z 12367 │ OrchestratorV2, 2026-10-24T05:19:51.2850585Z ╰──── 2026-10-24T05:19:51.2850688Z  help: Consider removing this declaration. 2026-10-24T05:19:51.2850691Z 2026-10-24T05:19:51.2850881Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:19:51.2851106Z ╭─[apps/mobile/src/features/voice-input/useVoiceInputController.ts:27:14] 2026-10-24T05:19:51.2851186Z 26 │ const latestInput = useRef(input); 2026-10-24T05:19:51.2851260Z 27 │ latestInput.current = input; 2026-10-24T05:19:51.2851369Z ·  ─────┬─────────┬─── 2026-10-24T05:19:51.2851549Z · │ ╰── Cannot update ref value during render 2026-10-24T05:19:51.2851659Z · ╰── This value is a ref 2026-10-24T05:19:51.2851733Z 28 │ const mounted = useRef(true); 2026-10-24T05:19:51.2851785Z ╰──── 2026-10-24T05:19:51.2852249Z  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-24T05:19:51.2852535Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:19:51.2852539Z 2026-10-24T05:19:51.2852814Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T05:19:51.2852966Z ╭─[apps/web/src/components/settings/SettingInheritance.tsx:163:24] 2026-10-24T05:19:51.2853022Z 162 │ keys, 2026-10-24T05:19:51.2853092Z 163 │ overridingProjects = [], 2026-10-24T05:19:51.2853172Z ·  ── 2026-10-24T05:19:51.2853237Z 164 │ onClearOverrides, 2026-10-24T05:19:51.2853288Z ╰──── 2026-10-24T05:19:51.2853602Z  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-24T05:19:51.2853607Z 2026-10-24T05:19:51.2853746Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:19:51.2853901Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:122:38] 2026-10-24T05:19:51.2854057Z 121 │ const audioLevelsRef = useRef(Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-24T05:19:51.2854178Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-24T05:19:51.2854295Z ·  ───────────┬────────── 2026-10-24T05:19:51.2854467Z · ╰── Cannot access ref value during render 2026-10-24T05:19:51.2854590Z 123 │ const sessionRef = useRef(null); 2026-10-24T05:19:51.2854644Z ╰──── 2026-10-24T05:19:51.2855098Z  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-24T05:19:51.2855386Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:19:51.2855388Z 2026-10-24T05:19:51.2855528Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:19:51.2855682Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:8] 2026-10-24T05:19:51.2855734Z 125 │ 2026-10-24T05:19:51.2855893Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T05:19:51.2856045Z ·  ─────────┬──────── 2026-10-24T05:19:51.2856191Z · ╰── Cannot access ref value during render 2026-10-24T05:19:51.2856291Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T05:19:51.2856340Z ╰──── 2026-10-24T05:19:51.2856790Z  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-24T05:19:51.2857073Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:19:51.2857076Z 2026-10-24T05:19:51.2857218Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:19:51.2857373Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:7] 2026-10-24T05:19:51.2857423Z 125 │ 2026-10-24T05:19:51.2857528Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T05:19:51.2857613Z ·  ─────────┬───────── 2026-10-24T05:19:51.2857754Z · ╰── Cannot access ref value during render 2026-10-24T05:19:51.2857850Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T05:19:51.2857902Z ╰──── 2026-10-24T05:19:51.2858353Z  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-24T05:19:51.2858683Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:19:51.2858688Z 2026-10-24T05:19:51.2858826Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:19:51.2858977Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:31] 2026-10-24T05:19:51.2859029Z 125 │ 2026-10-24T05:19:51.2859131Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T05:19:51.2859243Z ·  ─────────┬───────── 2026-10-24T05:19:51.2859404Z · ╰── Cannot access ref value during render 2026-10-24T05:19:51.2859500Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T05:19:51.2859550Z ╰──── 2026-10-24T05:19:51.2860050Z  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-24T05:19:51.2860392Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:19:51.2860395Z 2026-10-24T05:19:51.2860532Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:19:51.2860684Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:30] 2026-10-24T05:19:51.2860735Z 125 │ 2026-10-24T05:19:51.2860838Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T05:19:51.2860952Z ·  ──────────┬───────── 2026-10-24T05:19:51.2861115Z · ╰── Cannot access ref value during render 2026-10-24T05:19:51.2861212Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T05:19:51.2861260Z ╰──── 2026-10-24T05:19:51.2861712Z  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-24T05:19:51.2861992Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:19:51.2861994Z 2026-10-24T05:19:51.2862131Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:19:51.2862286Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:127:46] 2026-10-24T05:19:51.2862395Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T05:19:51.2862581Z 127 │ ╭─▶ const recorder = createLazyVoiceRecorder({ 2026-10-24T05:19:51.2862752Z 128 │ │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-24T05:19:51.2862875Z 129 │ │ onStatus: (status: RecordingStatus) => { 2026-10-24T05:19:51.2863025Z 130 │ │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-24T05:19:51.2863139Z 131 │ │ isFinished: status.isFinished, 2026-10-24T05:19:51.2863312Z 132 │ │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-24T05:19:51.2863419Z 133 │ │ error: status.error, 2026-10-24T05:19:51.2863517Z 134 │ │ url: status.url, 2026-10-24T05:19:51.2863594Z 135 │ │ }); 2026-10-24T05:19:51.2863671Z 136 │ │ }, 2026-10-24T05:19:51.2863864Z 137 │ │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-24T05:19:51.2863970Z 138 │ │ selectInput: (inputs) => { 2026-10-24T05:19:51.2864120Z 139 │ │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-24T05:19:51.2864265Z 140 │ │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-24T05:19:51.2864425Z 141 │ │ const known = microphoneOrder(preferences.value.microphones); 2026-10-24T05:19:51.2864607Z 142 │ │ const order = rememberMicrophones(known, inputs); 2026-10-24T05:19:51.2864770Z 143 │ │ if (order !== known) { 2026-10-24T05:19:51.2864905Z 144 │ │ registry.set(updateMobilePreferencesAtom, { 2026-10-24T05:19:51.2865018Z 145 │ │ transform: (current) => ({ 2026-10-24T05:19:51.2865220Z 146 │ │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-24T05:19:51.2865304Z 147 │ │ }), 2026-10-24T05:19:51.2865386Z 148 │ │ }); 2026-10-24T05:19:51.2865463Z 149 │ │ } 2026-10-24T05:19:51.2865599Z 150 │ │ return preferredMicrophoneInput(inputs, order); 2026-10-24T05:19:51.2865678Z 151 │ │ }, 2026-10-24T05:19:51.2865809Z 152 │ ├─▶ }); 2026-10-24T05:19:51.2866039Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T05:19:51.2866124Z 153 │ recorderRef.current = recorder; 2026-10-24T05:19:51.2866174Z ╰──── 2026-10-24T05:19:51.2866626Z  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-24T05:19:51.2866909Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:19:51.2866916Z 2026-10-24T05:19:51.2867058Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:19:51.2867213Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:153:16] 2026-10-24T05:19:51.2867268Z 152 │ }); 2026-10-24T05:19:51.2867349Z 153 │ recorderRef.current = recorder; 2026-10-24T05:19:51.2867459Z ·  ─────┬─────────┬─── 2026-10-24T05:19:51.2867639Z · │ ╰── Cannot update ref value during render 2026-10-24T05:19:51.2867753Z · ╰── This value is a ref 2026-10-24T05:19:51.2867854Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T05:19:51.2867904Z ╰──── 2026-10-24T05:19:51.2868362Z  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-24T05:19:51.2868679Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:19:51.2868682Z 2026-10-24T05:19:51.2868821Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:19:51.2868975Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:48] 2026-10-24T05:19:51.2869060Z 153 │ recorderRef.current = recorder; 2026-10-24T05:19:51.2869246Z 154 │ ╭─▶ sessionRef.current = new VoiceInputSession({ 2026-10-24T05:19:51.2869328Z 155 │ │ recorder, 2026-10-24T05:19:51.2869501Z 156 │ │ getTranscriber: getLocalVoiceTranscriber, 2026-10-24T05:19:51.2869680Z 157 │ │ requestPermission: async () => { 2026-10-24T05:19:51.2869841Z 158 │ │ const permission = await requestRecordingPermissionsAsync(); 2026-10-24T05:19:51.2870026Z 159 │ │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-24T05:19:51.2870102Z 160 │ │ }, 2026-10-24T05:19:51.2870241Z 161 │ │ configureRecording: configureVoiceRecordingAudio, 2026-10-24T05:19:51.2870374Z 162 │ │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-24T05:19:51.2870506Z 163 │ │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-24T05:19:51.2870621Z 164 │ │ onStateChange: (nextState) => 2026-10-24T05:19:51.2870712Z 165 │ │ setState({ 2026-10-24T05:19:51.2870810Z 166 │ │ state: nextState, 2026-10-24T05:19:51.2870943Z 167 │ │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-24T05:19:51.2871067Z 168 │ │ label: sessionRef.current?.label ?? null, 2026-10-24T05:19:51.2871145Z 169 │ │ }), 2026-10-24T05:19:51.2871271Z 170 │ ├─▶ }); 2026-10-24T05:19:51.2871464Z · ╰──── Cannot access ref value during render 2026-10-24T05:19:51.2871518Z 171 │ } 2026-10-24T05:19:51.2871572Z ╰──── 2026-10-24T05:19:51.2872028Z  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-24T05:19:51.2872313Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:19:51.2872315Z 2026-10-24T05:19:51.2872453Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:19:51.2872607Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:15] 2026-10-24T05:19:51.2872686Z 153 │ recorderRef.current = recorder; 2026-10-24T05:19:51.2872787Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T05:19:51.2872898Z ·  ─────┬────────┬─── 2026-10-24T05:19:51.2873078Z · │ ╰── Cannot update ref value during render 2026-10-24T05:19:51.2873193Z · ╰── This value is a ref 2026-10-24T05:19:51.2873256Z 155 │ recorder, 2026-10-24T05:19:51.2873306Z ╰──── 2026-10-24T05:19:51.2873753Z  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-24T05:19:51.2874033Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:19:51.2874035Z 2026-10-24T05:19:51.2874220Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:19:51.2874444Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:7] 2026-10-24T05:19:51.2874528Z 184 │ return () => subscription.remove(); 2026-10-24T05:19:51.2874593Z 185 │ }, [controller]); 2026-10-24T05:19:51.2874667Z ·  ─────┬──── 2026-10-24T05:19:51.2874808Z · ╰── Cannot access ref value during render 2026-10-24T05:19:51.2874858Z 186 │ 2026-10-24T05:19:51.2874908Z ╰──── 2026-10-24T05:19:51.2875357Z  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-24T05:19:51.2875643Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:19:51.2875648Z 2026-10-24T05:19:51.2875786Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:19:51.2875937Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:6] 2026-10-24T05:19:51.2876020Z 184 │ return () => subscription.remove(); 2026-10-24T05:19:51.2876084Z 185 │ }, [controller]); 2026-10-24T05:19:51.2876160Z ·  ──────┬───── 2026-10-24T05:19:51.2876296Z · ╰── Cannot access ref value during render 2026-10-24T05:19:51.2876350Z 186 │ 2026-10-24T05:19:51.2876402Z ╰──── 2026-10-24T05:19:51.2876856Z  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-24T05:19:51.2877138Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:19:51.2877142Z 2026-10-24T05:19:51.2877278Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:19:51.2877430Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:6] 2026-10-24T05:19:51.2877484Z 191 │ }, 2026-10-24T05:19:51.2877554Z 192 │ [controller, recorder], 2026-10-24T05:19:51.2877626Z ·  ─────┬──── 2026-10-24T05:19:51.2877763Z · ╰── Cannot access ref value during render 2026-10-24T05:19:51.2877817Z 193 │ ); 2026-10-24T05:19:51.2877867Z ╰──── 2026-10-24T05:19:51.2878323Z  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-24T05:19:51.2878721Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:19:51.2878724Z 2026-10-24T05:19:51.2878865Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:19:51.2879016Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:175:20] 2026-10-24T05:19:51.2879103Z 174 │ const controller = session.controller; 2026-10-24T05:19:51.2879188Z 175 │ const recorder = recorderRef.current; 2026-10-24T05:19:51.2879354Z ·  ─────────┬───────── 2026-10-24T05:19:51.2879623Z · ╰── Cannot access ref value during render 2026-10-24T05:19:51.2879673Z 176 │ 2026-10-24T05:19:51.2879725Z ╰──── 2026-10-24T05:19:51.2880173Z  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-24T05:19:51.2880456Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:19:51.2880458Z 2026-10-24T05:19:51.2880596Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:19:51.2880753Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:5] 2026-10-24T05:19:51.2880811Z 191 │ }, 2026-10-24T05:19:51.2880881Z 192 │ [controller, recorder], 2026-10-24T05:19:51.2880967Z ·  ───────────┬────────── 2026-10-24T05:19:51.2881110Z · ╰── Cannot access ref value during render 2026-10-24T05:19:51.2881167Z 193 │ ); 2026-10-24T05:19:51.2881216Z ╰──── 2026-10-24T05:19:51.2881665Z  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-24T05:19:51.2881945Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:19:51.2881953Z 2026-10-24T05:19:51.2882091Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:19:51.2882244Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:20] 2026-10-24T05:19:51.2882333Z 245 │ return () => clearInterval(intervalId); 2026-10-24T05:19:51.2882443Z 246 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-24T05:19:51.2882528Z ·  ─────┬──── 2026-10-24T05:19:51.2882677Z · ╰── Cannot access ref value during render 2026-10-24T05:19:51.2882728Z 247 │ 2026-10-24T05:19:51.2882777Z ╰──── 2026-10-24T05:19:51.2883227Z  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-24T05:19:51.2883509Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:19:51.2883512Z 2026-10-24T05:19:51.2883648Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:19:51.2883800Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:6] 2026-10-24T05:19:51.2883886Z 245 │ return () => clearInterval(intervalId); 2026-10-24T05:19:51.2883993Z 246 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-24T05:19:51.2884118Z ·  ────────────────────────┬─────────────────────── 2026-10-24T05:19:51.2884273Z · ╰── Cannot access ref value during render 2026-10-24T05:19:51.2884372Z 247 │ 2026-10-24T05:19:51.2884485Z ╰──── 2026-10-24T05:19:51.2884934Z  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-24T05:19:51.2885214Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:19:51.2885217Z 2026-10-24T05:19:51.2885356Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:19:51.2885506Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:261:5] 2026-10-24T05:19:51.2885572Z 260 │ setOwnerFocused, 2026-10-24T05:19:51.2885632Z 261 │ session, 2026-10-24T05:19:51.2885707Z ·  ───┬─── 2026-10-24T05:19:51.2885840Z · ╰── Cannot access ref value during render 2026-10-24T05:19:51.2885897Z 262 │ stop, 2026-10-24T05:19:51.2885946Z ╰──── 2026-10-24T05:19:51.2886393Z  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-24T05:19:51.2886672Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:19:51.2886675Z 2026-10-24T05:19:51.2886812Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:19:51.2886970Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:251:10] 2026-10-24T05:19:51.2887025Z 250 │ 2026-10-24T05:19:51.2887162Z 251 │ ╭─▶ return { 2026-10-24T05:19:51.2887365Z 252 │ │ isAvailable: getLocalVoiceTranscriber() !== null || getNativeShowcaseScene() !== null, 2026-10-24T05:19:51.2887448Z 253 │ │ state, 2026-10-24T05:19:51.2887536Z 254 │ │ audioLevels, 2026-10-24T05:19:51.2887628Z 255 │ │ elapsedSeconds, 2026-10-24T05:19:51.2887752Z 256 │ │ isBusy: voiceInputBlocksSubmission(state), 2026-10-24T05:19:51.2887834Z 257 │ │ ownerKey, 2026-10-24T05:19:51.2887910Z 258 │ │ label, 2026-10-24T05:19:51.2887997Z 259 │ │ focusedOwners, 2026-10-24T05:19:51.2888135Z 260 │ │ setOwnerFocused, 2026-10-24T05:19:51.2888275Z 261 │ │ session, 2026-10-24T05:19:51.2888351Z 262 │ │ stop, 2026-10-24T05:19:51.2888428Z 263 │ │ cancel, 2026-10-24T05:19:51.2888583Z 264 │ ├─▶ }; 2026-10-24T05:19:51.2888777Z · ╰──── Cannot access ref value during render 2026-10-24T05:19:51.2888831Z 265 │ } 2026-10-24T05:19:51.2888881Z ╰──── 2026-10-24T05:19:51.2889329Z  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-24T05:19:51.2889617Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:19:51.2889622Z 2026-10-24T05:19:51.2889775Z ⚠ react(immutability): This value cannot be modified 2026-10-24T05:19:51.2889929Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7] 2026-10-24T05:19:51.2890085Z 121 │ const audioLevelsRef = useRef(Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-24T05:19:51.2890204Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-24T05:19:51.2890281Z ·  ─────┬───── 2026-10-24T05:19:51.2890412Z · ╰── `audioLevels` originates here 2026-10-24T05:19:51.2890533Z 123 │ const sessionRef = useRef(null); 2026-10-24T05:19:51.2890676Z 124 │ const recorderRef = useRef | null>(null); 2026-10-24T05:19:51.2890727Z 125 │ 2026-10-24T05:19:51.2890830Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T05:19:51.2890926Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T05:19:51.2891059Z 128 │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-24T05:19:51.2891151Z 129 │ onStatus: (status: RecordingStatus) => { 2026-10-24T05:19:51.2891269Z 130 │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-24T05:19:51.2891353Z 131 │ isFinished: status.isFinished, 2026-10-24T05:19:51.2891492Z 132 │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-24T05:19:51.2891564Z 133 │ error: status.error, 2026-10-24T05:19:51.2891640Z 134 │ url: status.url, 2026-10-24T05:19:51.2891699Z 135 │ }); 2026-10-24T05:19:51.2891753Z 136 │ }, 2026-10-24T05:19:51.2891915Z 137 │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-24T05:19:51.2891991Z 138 │ selectInput: (inputs) => { 2026-10-24T05:19:51.2892111Z 139 │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-24T05:19:51.2892222Z 140 │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-24T05:19:51.2892351Z 141 │ const known = microphoneOrder(preferences.value.microphones); 2026-10-24T05:19:51.2892456Z 142 │ const order = rememberMicrophones(known, inputs); 2026-10-24T05:19:51.2892526Z 143 │ if (order !== known) { 2026-10-24T05:19:51.2892629Z 144 │ registry.set(updateMobilePreferencesAtom, { 2026-10-24T05:19:51.2892709Z 145 │ transform: (current) => ({ 2026-10-24T05:19:51.2892944Z 146 │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-24T05:19:51.2893066Z 147 │ }), 2026-10-24T05:19:51.2893128Z 148 │ }); 2026-10-24T05:19:51.2893183Z 149 │ } 2026-10-24T05:19:51.2893289Z 150 │ return preferredMicrophoneInput(inputs, order); 2026-10-24T05:19:51.2893342Z 151 │ }, 2026-10-24T05:19:51.2893397Z 152 │ }); 2026-10-24T05:19:51.2893476Z 153 │ recorderRef.current = recorder; 2026-10-24T05:19:51.2893574Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T05:19:51.2893632Z 155 │ recorder, 2026-10-24T05:19:51.2893728Z 156 │ getTranscriber: getLocalVoiceTranscriber, 2026-10-24T05:19:51.2893812Z 157 │ requestPermission: async () => { 2026-10-24T05:19:51.2893944Z 158 │ const permission = await requestRecordingPermissionsAsync(); 2026-10-24T05:19:51.2894097Z 159 │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-24T05:19:51.2894150Z 160 │ }, 2026-10-24T05:19:51.2894257Z 161 │ configureRecording: configureVoiceRecordingAudio, 2026-10-24T05:19:51.2894361Z 162 │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-24T05:19:51.2894460Z 163 │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-24T05:19:51.2894538Z 164 │ onStateChange: (nextState) => 2026-10-24T05:19:51.2894600Z 165 │ setState({ 2026-10-24T05:19:51.2894667Z 166 │ state: nextState, 2026-10-24T05:19:51.2894767Z 167 │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-24T05:19:51.2894864Z 168 │ label: sessionRef.current?.label ?? null, 2026-10-24T05:19:51.2894921Z 169 │ }), 2026-10-24T05:19:51.2894974Z 170 │ }); 2026-10-24T05:19:51.2895031Z 171 │ } 2026-10-24T05:19:51.2895083Z 172 │ 2026-10-24T05:19:51.2895167Z 173 │ const session = sessionRef.current; 2026-10-24T05:19:51.2895251Z 174 │ const controller = session.controller; 2026-10-24T05:19:51.2895333Z 175 │ const recorder = recorderRef.current; 2026-10-24T05:19:51.2895384Z 176 │ 2026-10-24T05:19:51.2895448Z 177 │ useEffect(() => { 2026-10-24T05:19:51.2895594Z 178 │ const subscription = AppState.addEventListener("change", (nextState) => { 2026-10-24T05:19:51.2895730Z 179 │ // iOS reports `inactive` while its permission dialog is open. Only the 2026-10-24T05:19:51.2895866Z 180 │ // real background state cancels preparation; recorder status handles 2026-10-24T05:19:51.2895968Z 181 │ // calls and route interruptions during capture. 2026-10-24T05:19:51.2896097Z 182 │ if (nextState === "background") controller.appMovedToBackground(); 2026-10-24T05:19:51.2896158Z 183 │ }); 2026-10-24T05:19:51.2896242Z 184 │ return () => subscription.remove(); 2026-10-24T05:19:51.2896305Z 185 │ }, [controller]); 2026-10-24T05:19:51.2896355Z 186 │ 2026-10-24T05:19:51.2896413Z 187 │ useEffect( 2026-10-24T05:19:51.2896472Z 188 │ () => () => { 2026-10-24T05:19:51.2896544Z 189 │ controller.dispose(); 2026-10-24T05:19:51.2896608Z 190 │ recorder.release(); 2026-10-24T05:19:51.2896663Z 191 │ }, 2026-10-24T05:19:51.2896731Z 192 │ [controller, recorder], 2026-10-24T05:19:51.2896782Z 193 │ ); 2026-10-24T05:19:51.2896832Z 194 │ 2026-10-24T05:19:51.2896893Z 195 │ useEffect(() => { 2026-10-24T05:19:51.2896983Z 196 │ if (state.phase !== "recording") return; 2026-10-24T05:19:51.2897032Z 197 │ 2026-10-24T05:19:51.2897229Z 198 │ const tag = `voice-input:${keepAwakeId}:${++keepAwakeSessionRef.current}`; 2026-10-24T05:19:51.2897395Z 199 │ const activation = activateKeepAwakeAsync(tag); 2026-10-24T05:19:51.2897474Z 200 │ void activation.catch(() => {}); 2026-10-24T05:19:51.2897536Z 201 │ return () => { 2026-10-24T05:19:51.2897682Z 202 │ // Release after activation settles, even if the recording ends immediately. 2026-10-24T05:19:51.2897818Z 203 │ void activation.then(() => deactivateKeepAwake(tag)).catch(() => {}); 2026-10-24T05:19:51.2897871Z 204 │ }; 2026-10-24T05:19:51.2897947Z 205 │ }, [keepAwakeId, state.phase]); 2026-10-24T05:19:51.2898000Z 206 │ 2026-10-24T05:19:51.2898061Z 207 │ useEffect(() => { 2026-10-24T05:19:51.2898191Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-24T05:19:51.2898240Z 209 │ 2026-10-24T05:19:51.2898358Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-24T05:19:51.2898514Z 211 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-24T05:19:51.2898628Z 212 │ audioLevels.value = audioLevelsRef.current; 2026-10-24T05:19:51.2898735Z ·  ─────┬───── 2026-10-24T05:19:51.2898873Z · ╰── `audioLevels` cannot be modified 2026-10-24T05:19:51.2898926Z 213 │ } 2026-10-24T05:19:51.2898977Z ╰──── 2026-10-24T05:19:51.2899237Z  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-24T05:19:51.2899535Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:19:51.2899538Z 2026-10-24T05:19:51.2899739Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T05:19:51.2899896Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7] 2026-10-24T05:19:51.2899946Z 206 │ 2026-10-24T05:19:51.2900009Z 207 │ useEffect(() => { 2026-10-24T05:19:51.2900086Z ·  ───┬─── 2026-10-24T05:19:51.2900297Z · ╰── This function may (indirectly) reassign or modify `audioLevels` after render 2026-10-24T05:19:51.2900430Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-24T05:19:51.2900479Z 209 │ 2026-10-24T05:19:51.2900597Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-24T05:19:51.2900746Z 211 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-24T05:19:51.2900851Z 212 │ audioLevels.value = audioLevelsRef.current; 2026-10-24T05:19:51.2900927Z ·  ─────┬───── 2026-10-24T05:19:51.2901056Z · ╰── This modifies `audioLevels` 2026-10-24T05:19:51.2901109Z 213 │ } 2026-10-24T05:19:51.2901158Z ╰──── 2026-10-24T05:19:51.2901487Z  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-24T05:19:51.2901784Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:19:51.2901786Z 2026-10-24T05:19:51.2901940Z ⚠ react(immutability): This value cannot be modified 2026-10-24T05:19:51.2902152Z ╭─[apps/mobile/src/features/voice-input/GlobalVoiceInputControl.tsx:68:5] 2026-10-24T05:19:51.2902318Z 65 │ const [expanded, setExpanded] = useState(false); 2026-10-24T05:19:51.2902399Z 66 │ const progress = useSharedValue(0); 2026-10-24T05:19:51.2902471Z ·  ────┬─── 2026-10-24T05:19:51.2902599Z · ╰── `progress` originates here 2026-10-24T05:19:51.2902661Z 67 │ useEffect(() => { 2026-10-24T05:19:51.2902783Z 68 │ progress.value = withTiming(expanded ? 1 : 0, MORPH_TIMING); 2026-10-24T05:19:51.2902851Z ·  ────┬─── 2026-10-24T05:19:51.2902980Z · ╰── `progress` cannot be modified 2026-10-24T05:19:51.2903049Z 69 │ }, [expanded, progress]); 2026-10-24T05:19:51.2903099Z ╰──── 2026-10-24T05:19:51.2903362Z  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-24T05:19:51.2903660Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:19:51.2903663Z 2026-10-24T05:19:51.2903847Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T05:19:51.2903960Z ╭─[apps/mobile/src/lib/useHoverGesture.ts:8:15] 2026-10-24T05:19:51.2904015Z 7 │ () => 2026-10-24T05:19:51.2904079Z 8 │ Gesture.Hover() 2026-10-24T05:19:51.2904152Z ·  ──┬── 2026-10-24T05:19:51.2904284Z · ╰── `Hover` may be a component 2026-10-24T05:19:51.2904356Z 9 │ .manualActivation(true) 2026-10-24T05:19:51.2904407Z ╰──── 2026-10-24T05:19:51.2904685Z  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-24T05:19:51.2905124Z  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-24T05:19:51.2905127Z 2026-10-24T05:19:51.2905280Z ⚠ react(immutability): This value cannot be modified 2026-10-24T05:19:51.2905446Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:93:5] 2026-10-24T05:19:51.2905499Z 90 │ }) { 2026-10-24T05:19:51.2905610Z 91 │ const rotation = useSharedValue(props.hidden ? 1 : 0); 2026-10-24T05:19:51.2905681Z ·  ────┬─── 2026-10-24T05:19:51.2905813Z · ╰── `rotation` originates here 2026-10-24T05:19:51.2905883Z 92 │ useLayoutEffect(() => { 2026-10-24T05:19:51.2906020Z 93 │ rotation.value = withTiming(props.hidden ? 1 : 0, TOOLBAR_FLIP_TIMING); 2026-10-24T05:19:51.2906088Z ·  ────┬─── 2026-10-24T05:19:51.2906214Z · ╰── `rotation` cannot be modified 2026-10-24T05:19:51.2906289Z 94 │ }, [props.hidden, rotation]); 2026-10-24T05:19:51.2906337Z ╰──── 2026-10-24T05:19:51.2906592Z  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-24T05:19:51.2906886Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:19:51.2906889Z 2026-10-24T05:19:51.2907097Z ⚠ react(immutability): This value cannot be modified 2026-10-24T05:19:51.2907338Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:269:5] 2026-10-24T05:19:51.2907431Z 266 │ const variant = props.variant ?? "plain"; 2026-10-24T05:19:51.2907561Z 267 │ const loadingVisibility = useSharedValue(props.loading ? 1 : 0); 2026-10-24T05:19:51.2907645Z ·  ────────┬──────── 2026-10-24T05:19:51.2907865Z · ╰── `loadingVisibility` originates here 2026-10-24T05:19:51.2907932Z 268 │ useLayoutEffect(() => { 2026-10-24T05:19:51.2908085Z 269 │ loadingVisibility.value = withTiming(props.loading ? 1 : 0, DICTATION_TIMING); 2026-10-24T05:19:51.2908165Z ·  ────────┬──────── 2026-10-24T05:19:51.2908316Z · ╰── `loadingVisibility` cannot be modified 2026-10-24T05:19:51.2908405Z 270 │ }, [loadingVisibility, props.loading]); 2026-10-24T05:19:51.2908455Z ╰──── 2026-10-24T05:19:51.2908758Z  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-24T05:19:51.2909053Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:19:51.2909055Z 2026-10-24T05:19:51.2909204Z ⚠ react(immutability): This value cannot be modified 2026-10-24T05:19:51.2909368Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:328:5] 2026-10-24T05:19:51.2909422Z 325 │ }) { 2026-10-24T05:19:51.2909581Z 326 │ const recordingVisibility = useSharedValue(props.phase === "recording" ? 1 : 0); 2026-10-24T05:19:51.2909668Z ·  ─────────┬───────── 2026-10-24T05:19:51.2909816Z · ╰── `recordingVisibility` originates here 2026-10-24T05:19:51.2909883Z 327 │ useLayoutEffect(() => { 2026-10-24T05:19:51.2910065Z 328 │ recordingVisibility.value = withTiming(props.phase === "recording" ? 1 : 0, DICTATION_TIMING); 2026-10-24T05:19:51.2910147Z ·  ─────────┬───────── 2026-10-24T05:19:51.2910295Z · ╰── `recordingVisibility` cannot be modified 2026-10-24T05:19:51.2910381Z 329 │ }, [props.phase, recordingVisibility]); 2026-10-24T05:19:51.2910431Z ╰──── 2026-10-24T05:19:51.2910684Z  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-24T05:19:51.2910984Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:19:51.2910989Z 2026-10-24T05:19:51.2911241Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T05:19:51.2911402Z ╭─[apps/server/src/orchestration-v2/ThreadPullRequestService.ts:413:7] 2026-10-24T05:19:51.2911454Z 412 │ 2026-10-24T05:19:51.2911578Z 413 │ const layer = Layer.effect(ThreadPullRequestServiceV2, make); 2026-10-24T05:19:51.2911645Z ·  ──┬── 2026-10-24T05:19:51.2911765Z · ╰── 'layer' is declared here 2026-10-24T05:19:51.2911815Z ╰──── 2026-10-24T05:19:51.2911915Z  help: Consider removing this declaration. 2026-10-24T05:19:51.2911970Z 2026-10-24T05:19:51.2912290Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:19:51.2912442Z ╭─[apps/mobile/src/features/terminal/terminalLaunchContext.ts:117:5] 2026-10-24T05:19:51.2912609Z 112 │ const [entry, setEntry] = useState(() => ({ key: input.targetKey, location: candidate })); 2026-10-24T05:19:51.2912672Z 113 │ useEffect(() => { 2026-10-24T05:19:51.2912740Z ·  ────┬──── 2026-10-24T05:19:51.2912867Z · ╰── This is the containing effect 2026-10-24T05:19:51.2913026Z 114 │ if (entry.key === input.targetKey && (entry.location !== null || candidate === null)) { 2026-10-24T05:19:51.2913086Z 115 │ return; 2026-10-24T05:19:51.2913141Z 116 │ } 2026-10-24T05:19:51.2913263Z 117 │ setEntry({ key: input.targetKey, location: candidate }); 2026-10-24T05:19:51.2913337Z ·  ────┬─── 2026-10-24T05:19:51.2913499Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:19:51.2913618Z 118 │ }, [candidate, entry.key, entry.location, input.targetKey]); 2026-10-24T05:19:51.2913669Z ╰──── 2026-10-24T05:19:51.2914254Z  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-24T05:19:51.2914571Z  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-24T05:19:51.2914578Z 2026-10-24T05:19:51.2914770Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T05:19:51.2914923Z ╭─[apps/mobile/src/features/terminal/TerminalContextSheet.tsx:72:15] 2026-10-24T05:19:51.2914987Z 71 │ { 2026-10-24T05:19:51.2916113Z ·  ────┬──── 2026-10-24T05:19:51.2916237Z · ╰── This is the containing effect 2026-10-24T05:19:51.2916295Z 436 │ if ( 2026-10-24T05:19:51.2916369Z 437 │ props.active === false || 2026-10-24T05:19:51.2916442Z 438 │ activeDraftKey !== null || 2026-10-24T05:19:51.2916521Z 439 │ editingPendingTask !== null || 2026-10-24T05:19:51.2916594Z 440 │ selectedProject === null 2026-10-24T05:19:51.2916648Z 441 │ ) { 2026-10-24T05:19:51.2916705Z 442 │ return; 2026-10-24T05:19:51.2916758Z 443 │ } 2026-10-24T05:19:51.2916826Z 444 │ setActiveDraftKey( 2026-10-24T05:19:51.2916911Z ·  ────────┬──────── 2026-10-24T05:19:51.2917078Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:19:51.2917147Z 445 │ createNewTaskDraft({ 2026-10-24T05:19:51.2917196Z ╰──── 2026-10-24T05:19:51.2917771Z  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-24T05:19:51.2918082Z  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-24T05:19:51.2918086Z 2026-10-24T05:19:51.2918327Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T05:19:51.2918506Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:1244:36] 2026-10-24T05:19:51.2918727Z 1243 │ 2026-10-24T05:19:51.2918930Z 1244 │ {props.children} 2026-10-24T05:19:51.2919040Z ·  ───────────── 2026-10-24T05:19:51.2919113Z 1245 │ 2026-10-24T05:19:51.2919167Z ╰──── 2026-10-24T05:19:51.2919384Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T05:19:51.2919519Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T05:19:51.2919527Z 2026-10-24T05:19:51.2919703Z ⚠ unicorn(no-new-array): Do not use `new Array(singleArgument)`. 2026-10-24T05:19:51.2919822Z ╭─[apps/web/src/terminal/ghostty/core.ts:194:19] 2026-10-24T05:19:51.2919944Z 193 │ const count = Math.min(CHUNK_SIZE, graphemeLength - start); 2026-10-24T05:19:51.2920031Z 194 │ const codes = new Array(count); 2026-10-24T05:19:51.2920136Z ·  ──────────────────────── 2026-10-24T05:19:51.2920237Z 195 │ for (let index = 0; index < count; index += 1) { 2026-10-24T05:19:51.2920287Z ╰──── 2026-10-24T05:19:51.2920692Z  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-24T05:19:51.2920696Z 2026-10-24T05:19:51.2921015Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:19:51.2921220Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:643:5] 2026-10-24T05:19:51.2921272Z 638 │ 2026-10-24T05:19:51.2921335Z 639 │ useEffect(() => { 2026-10-24T05:19:51.2921401Z ·  ────┬──── 2026-10-24T05:19:51.2921528Z · ╰── This is the containing effect 2026-10-24T05:19:51.2921636Z 640 │ if (pendingLaunchEntry.key === launchTargetKey) { 2026-10-24T05:19:51.2921695Z 641 │ return; 2026-10-24T05:19:51.2921747Z 642 │ } 2026-10-24T05:19:51.2921818Z 643 │ setPendingLaunchEntry({ 2026-10-24T05:19:51.2921903Z ·  ──────────┬────────── 2026-10-24T05:19:51.2922075Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:19:51.2922148Z 644 │ key: launchTargetKey, 2026-10-24T05:19:51.2922198Z ╰──── 2026-10-24T05:19:51.2922772Z  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-24T05:19:51.2923085Z  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-24T05:19:51.2923087Z 2026-10-24T05:19:51.2923338Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:19:51.2923503Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:653:5] 2026-10-24T05:19:51.2923554Z 648 │ 2026-10-24T05:19:51.2923616Z 649 │ useEffect(() => { 2026-10-24T05:19:51.2923683Z ·  ────┬──── 2026-10-24T05:19:51.2923808Z · ╰── This is the containing effect 2026-10-24T05:19:51.2923921Z 650 │ if (initialAttachGridEntry.key === launchTargetKey) { 2026-10-24T05:19:51.2923980Z 651 │ return; 2026-10-24T05:19:51.2924032Z 652 │ } 2026-10-24T05:19:51.2924109Z 653 │ setInitialAttachGridEntry({ 2026-10-24T05:19:51.2924199Z ·  ────────────┬──────────── 2026-10-24T05:19:51.2924368Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:19:51.2924442Z 654 │ key: launchTargetKey, 2026-10-24T05:19:51.2924496Z ╰──── 2026-10-24T05:19:51.2925073Z  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-24T05:19:51.2925385Z  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-24T05:19:51.2925387Z 2026-10-24T05:19:51.2925634Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:19:51.2925797Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:746:7] 2026-10-24T05:19:51.2925902Z 743 │ 2026-10-24T05:19:51.2925994Z 744 │ useEffect(() => { 2026-10-24T05:19:51.2926062Z ·  ────┬──── 2026-10-24T05:19:51.2926184Z · ╰── This is the containing effect 2026-10-24T05:19:51.2926283Z 745 │ if (!routeEnvironmentId || !routeThreadId) { 2026-10-24T05:19:51.2926350Z 746 │ setLastGridSize({ 2026-10-24T05:19:51.2926430Z ·  ───────┬─────── 2026-10-24T05:19:51.2926592Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:19:51.2926671Z 747 │ cols: DEFAULT_TERMINAL_COLS, 2026-10-24T05:19:51.2926721Z ╰──── 2026-10-24T05:19:51.2927305Z  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-24T05:19:51.2927618Z  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-24T05:19:51.2927620Z 2026-10-24T05:19:51.2927815Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:19:51.2927981Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:538:24] 2026-10-24T05:19:51.2928037Z 537 │ }); 2026-10-24T05:19:51.2928157Z 538 │ }, [terminal.buffer, terminal.buffer.length, terminalKey]); 2026-10-24T05:19:51.2928261Z ·  ───────────┬────────── 2026-10-24T05:19:51.2928507Z · ╰── Overly precise dependency `terminal.buffer.length`, use `terminal.buffer` instead 2026-10-24T05:19:51.2928723Z 539 │ const cwd = terminal.summary?.cwd ?? selectedThreadProject?.workspaceRoot ?? null; 2026-10-24T05:19:51.2928773Z ╰──── 2026-10-24T05:19:51.2929058Z  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-24T05:19:51.2929361Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2929364Z 2026-10-24T05:19:51.2929557Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:19:51.2929723Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:709:7] 2026-10-24T05:19:51.2929819Z 708 │ sentInitialInputKeyRef.current = null; 2026-10-24T05:19:51.2929882Z 709 │ }, [terminalKey]); 2026-10-24T05:19:51.2929958Z ·  ─────┬───── 2026-10-24T05:19:51.2930097Z · ╰── Unnecessary dependency `terminalKey` 2026-10-24T05:19:51.2930149Z 710 │ 2026-10-24T05:19:51.2930197Z ╰──── 2026-10-24T05:19:51.2930480Z  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-24T05:19:51.2930783Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2930785Z 2026-10-24T05:19:51.2931025Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:19:51.2931215Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:800:52] 2026-10-24T05:19:51.2931269Z 799 │ }; 2026-10-24T05:19:51.2931443Z 800 │ }, [canOperateTerminal, isRunning, pasteSession, terminal.lifecycleVersion, terminalKey]); 2026-10-24T05:19:51.2931615Z ·  ────────────┬──────────── ─────┬───── 2026-10-24T05:19:51.2931839Z · │ ╰── Unnecessary dependency `terminalKey` 2026-10-24T05:19:51.2932041Z · ╰── Unnecessary dependency `terminal.lifecycleVersion` 2026-10-24T05:19:51.2932092Z 801 │ 2026-10-24T05:19:51.2932149Z ╰──── 2026-10-24T05:19:51.2932433Z  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-24T05:19:51.2932733Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2932737Z 2026-10-24T05:19:51.2932877Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:19:51.2933041Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:793:24] 2026-10-24T05:19:51.2933094Z 792 │ } 2026-10-24T05:19:51.2933197Z 793 │ const pasteSession = pasteSessionRef.current; 2026-10-24T05:19:51.2933305Z ·  ───────────┬─────────── 2026-10-24T05:19:51.2933467Z · ╰── Cannot access ref value during render 2026-10-24T05:19:51.2933520Z 794 │ 2026-10-24T05:19:51.2933568Z ╰──── 2026-10-24T05:19:51.2934021Z  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-24T05:19:51.2934303Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:19:51.2934306Z 2026-10-24T05:19:51.2934669Z ⚠ 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-24T05:19:51.2934794Z ╭─[packages/shared/src/otelEnvironment.ts:146:14] 2026-10-24T05:19:51.2934851Z 145 │ name, 2026-10-24T05:19:51.2934989Z 146 │ (raw) => Schema.decodeUnknownOption(OtlpProtocol)(raw.toLowerCase()), 2026-10-24T05:19:51.2935092Z ·  ────────────────────────── 2026-10-24T05:19:51.2935213Z 147 │ `${name} is not http/protobuf or http/json, ${NOT_EXPORTED}`, 2026-10-24T05:19:51.2935262Z ╰──── 2026-10-24T05:19:51.2935265Z 2026-10-24T05:19:51.2935444Z ⚠ react(static-components): Cannot create components during render 2026-10-24T05:19:51.2935600Z ╭─[apps/mobile/src/features/terminal/NativeTerminalSurface.tsx:234:10] 2026-10-24T05:19:51.2935684Z 196 │ const { onInput, onResize } = props; 2026-10-24T05:19:51.2935831Z 197 │ const NativeTerminalSurfaceView = resolveNativeTerminalSurfaceView(); 2026-10-24T05:19:51.2936004Z ·  ────────────────┬─────────────── 2026-10-24T05:19:51.2936215Z · ╰── The component is created during render here 2026-10-24T05:19:51.2936339Z 198 │ const hasNativeSurface = Boolean(NativeTerminalSurfaceView); 2026-10-24T05:19:51.2936392Z 199 │ 2026-10-24T05:19:51.2936454Z 200 │ useEffect(() => { 2026-10-24T05:19:51.2936540Z 201 │ terminalDebugLog("native:surface", { 2026-10-24T05:19:51.2936623Z 202 │ terminalKey: props.terminalKey, 2026-10-24T05:19:51.2936698Z 203 │ native: hasNativeSurface, 2026-10-24T05:19:51.2936827Z 204 │ hardwareKeyRevision: getNativeTerminalHardwareKeyRevision(), 2026-10-24T05:19:51.2936911Z 205 │ bufferLen: props.buffer.length, 2026-10-24T05:19:51.2936993Z 206 │ isRunning: props.isRunning, 2026-10-24T05:19:51.2937050Z 207 │ }); 2026-10-24T05:19:51.2937204Z 208 │ }, [hasNativeSurface, props.buffer.length, props.isRunning, props.terminalKey]); 2026-10-24T05:19:51.2937289Z 209 │ const handleNativeInput = useCallback( 2026-10-24T05:19:51.2937401Z 210 │ (event: NativeSyntheticEvent) => { 2026-10-24T05:19:51.2937495Z 211 │ if (!props.isRunning || props.readOnly) { 2026-10-24T05:19:51.2937554Z 212 │ return; 2026-10-24T05:19:51.2937608Z 213 │ } 2026-10-24T05:19:51.2937693Z 214 │ terminalDebugLog("native:onInput", { 2026-10-24T05:19:51.2937839Z 215 │ codes: Array.from(event.nativeEvent.data, (char) => char.codePointAt(0)), 2026-10-24T05:19:51.2937898Z 216 │ }); 2026-10-24T05:19:51.2937980Z 217 │ onInput(event.nativeEvent.data); 2026-10-24T05:19:51.2938034Z 218 │ }, 2026-10-24T05:19:51.2938132Z 219 │ [onInput, props.isRunning, props.readOnly], 2026-10-24T05:19:51.2938186Z 220 │ ); 2026-10-24T05:19:51.2938272Z 221 │ const handleNativeResize = useCallback( 2026-10-24T05:19:51.2938384Z 222 │ (event: NativeSyntheticEvent) => { 2026-10-24T05:19:51.2938447Z 223 │ onResize({ 2026-10-24T05:19:51.2938527Z 224 │ cols: event.nativeEvent.cols, 2026-10-24T05:19:51.2938638Z 225 │ rows: event.nativeEvent.rows, 2026-10-24T05:19:51.2938694Z 226 │ }); 2026-10-24T05:19:51.2938746Z 227 │ }, 2026-10-24T05:19:51.2938806Z 228 │ [onResize], 2026-10-24T05:19:51.2938859Z 229 │ ); 2026-10-24T05:19:51.2938909Z 230 │ 2026-10-24T05:19:51.2938988Z 231 │ if (NativeTerminalSurfaceView) { 2026-10-24T05:19:51.2939045Z 232 │ return ( 2026-10-24T05:19:51.2939121Z 233 │ 2026-10-24T05:19:51.2939244Z 234 │ { 2026-10-24T05:19:51.2946442Z ·  ────┬──── 2026-10-24T05:19:51.2946573Z · ╰── This is the containing effect 2026-10-24T05:19:51.2946654Z 120 │ if (orientationSettled) return; 2026-10-24T05:19:51.2946763Z 121 │ const orientation = getNativeShowcaseOrientation(); 2026-10-24T05:19:51.2946835Z 122 │ if (orientation === null) { 2026-10-24T05:19:51.2946916Z 123 │ setOrientationSettled(true); 2026-10-24T05:19:51.2947003Z ·  ──────────┬────────── 2026-10-24T05:19:51.2947175Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:19:51.2947237Z 124 │ return; 2026-10-24T05:19:51.2947287Z ╰──── 2026-10-24T05:19:51.2947879Z  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-24T05:19:51.2948196Z  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-24T05:19:51.2948199Z 2026-10-24T05:19:51.2948449Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:19:51.2948629Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:304:7] 2026-10-24T05:19:51.2948710Z 292 │ 2026-10-24T05:19:51.2948773Z 293 │ useEffect(() => { 2026-10-24T05:19:51.2948849Z ·  ────┬──── 2026-10-24T05:19:51.2948976Z · ╰── This is the containing effect 2026-10-24T05:19:51.2949033Z 294 │ if ( 2026-10-24T05:19:51.2949096Z 295 │ scene === null || 2026-10-24T05:19:51.2949171Z 296 │ requestedScene === null || 2026-10-24T05:19:51.2949246Z 297 │ scene !== requestedScene || 2026-10-24T05:19:51.2949309Z 298 │ !hasFixture || 2026-10-24T05:19:51.2949381Z 299 │ !orientationSettled || 2026-10-24T05:19:51.2949447Z 300 │ !themeApplied || 2026-10-24T05:19:51.2949562Z 301 │ (scene === "agent-activity" && !agentActivityStaged) || 2026-10-24T05:19:51.2949691Z 302 │ !isShowcaseNativeContentReady({ scene, themeId, renderSignal }) 2026-10-24T05:19:51.2949745Z 303 │ ) { 2026-10-24T05:19:51.2949813Z 304 │ setReadyScene(null); 2026-10-24T05:19:51.2949898Z ·  ──────┬────── 2026-10-24T05:19:51.2950063Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:19:51.2950125Z 305 │ return; 2026-10-24T05:19:51.2950176Z ╰──── 2026-10-24T05:19:51.2950753Z  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-24T05:19:51.2951067Z  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-24T05:19:51.2951069Z 2026-10-24T05:19:51.2951378Z ⚠ eslint(no-unused-vars): Variable 'lastOutcome' is declared but never used. Unused variables should start with a '_'. 2026-10-24T05:19:51.2951573Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:128:9] 2026-10-24T05:19:51.2951640Z 127 │ let cancelled = false; 2026-10-24T05:19:51.2951728Z 128 │ let lastOutcome: string | null = null; 2026-10-24T05:19:51.2951803Z ·  ─────┬───── 2026-10-24T05:19:51.2951937Z · ╰── 'lastOutcome' is declared here 2026-10-24T05:19:51.2952110Z 129 │ void retryShowcaseOperation(async () => applyNativeShowcaseOrientation(orientation), { 2026-10-24T05:19:51.2952161Z ╰──── 2026-10-24T05:19:51.2952263Z  help: Consider removing this declaration. 2026-10-24T05:19:51.2952265Z 2026-10-24T05:19:51.2952470Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:19:51.2952611Z ╭─[apps/mobile/src/state/use-thread-outbox-drain.ts:1315:5] 2026-10-24T05:19:51.2952691Z 1314 │ queuedMessagesByThreadKey, 2026-10-24T05:19:51.2952751Z 1315 │ retryTick, 2026-10-24T05:19:51.2952828Z ·  ────┬──── 2026-10-24T05:19:51.2952967Z · ╰── Unnecessary dependency `retryTick` 2026-10-24T05:19:51.2953037Z 1316 │ restoreQueuedMessage, 2026-10-24T05:19:51.2953086Z ╰──── 2026-10-24T05:19:51.2953372Z  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-24T05:19:51.2953682Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2953687Z 2026-10-24T05:19:51.2953901Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T05:19:51.2954032Z ╭─[apps/mobile/src/state/use-composer-drafts.ts:1022:15] 2026-10-24T05:19:51.2954096Z 1021 │ instanceId, 2026-10-24T05:19:51.2954235Z 1022 │ { ...(persisted.modelOptionMemory[instanceId] ?? {}), ...models }, 2026-10-24T05:19:51.2954370Z ·  ────────────────────────────────────────────────── 2026-10-24T05:19:51.2954432Z 1023 │ ]), 2026-10-24T05:19:51.2954482Z ╰──── 2026-10-24T05:19:51.2954740Z  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-24T05:19:51.2954743Z 2026-10-24T05:19:51.2954915Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T05:19:51.2955039Z ╭─[apps/web/src/hooks/useThreadActions.ts:821:56] 2026-10-24T05:19:51.2955140Z 820 │ const resolved = resolveThreadTarget(target); 2026-10-24T05:19:51.2955296Z 821 │ if (resolved && !canSnooze(resolved.thread, { now: new Date().toISOString() })) { 2026-10-24T05:19:51.2955413Z ·  ─────┬──── 2026-10-24T05:19:51.2955578Z · ╰── Cannot call impure function 2026-10-24T05:19:51.2955655Z 822 │ return AsyncResult.failure( 2026-10-24T05:19:51.2955706Z ╰──── 2026-10-24T05:19:51.2956025Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T05:19:51.2956340Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T05:19:51.2956343Z 2026-10-24T05:19:51.2956503Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T05:19:51.2956618Z ╭─[apps/web/src/hooks/useThreadActions.ts:709:46] 2026-10-24T05:19:51.2956687Z 708 │ const wokeAt = resolved 2026-10-24T05:19:51.2956820Z 709 │ ? threadWokeAt(resolved.thread, { now: new Date().toISOString() }) 2026-10-24T05:19:51.2956929Z ·  ─────┬──── 2026-10-24T05:19:51.2957082Z · ╰── Cannot call impure function 2026-10-24T05:19:51.2957144Z 710 │ : null; 2026-10-24T05:19:51.2957199Z ╰──── 2026-10-24T05:19:51.2957469Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T05:19:51.2957752Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T05:19:51.2957756Z 2026-10-24T05:19:51.2957969Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T05:19:51.2958089Z ╭─[packages/shared/src/serverSettings.ts:346:9] 2026-10-24T05:19:51.2958190Z 345 │ const entry: ProjectSettingsOverrides = { 2026-10-24T05:19:51.2958317Z 346 │ ...(entries.get(projectId) ?? currentEntries[projectId] ?? {}), 2026-10-24T05:19:51.2958478Z ·  ────────────────────────────────────────────────────────────── 2026-10-24T05:19:51.2958538Z 347 │ }; 2026-10-24T05:19:51.2958641Z ╰──── 2026-10-24T05:19:51.2958929Z  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-24T05:19:51.2958932Z 2026-10-24T05:19:51.2959142Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in Array.prototype.reduce() 2026-10-24T05:19:51.2959259Z ╭─[packages/shared/src/serverSettings.ts:448:24] 2026-10-24T05:19:51.2959325Z 447 │ const favorites = 2026-10-24T05:19:51.2959431Z 448 │ setModelFavorites?.reduce((current, change) => { 2026-10-24T05:19:51.2959515Z ·  ───┬── 2026-10-24T05:19:51.2959699Z · ╰── For this reduce 2026-10-24T05:19:51.2959823Z 449 │ const exists = current.some( 2026-10-24T05:19:51.2959991Z 450 │ (favorite) => favorite.provider === change.provider && favorite.model === change.model, 2026-10-24T05:19:51.2960045Z 451 │ ); 2026-10-24T05:19:51.2960115Z 452 │ return change.favorite 2026-10-24T05:19:51.2960175Z 453 │ ? exists 2026-10-24T05:19:51.2960235Z 454 │ ? current 2026-10-24T05:19:51.2960366Z 455 │ : [...current, { provider: change.provider, model: change.model }] 2026-10-24T05:19:51.2960449Z ·  ─────┬──── 2026-10-24T05:19:51.2960564Z · ╰── From this spread 2026-10-24T05:19:51.2960630Z 456 │ : current.filter( 2026-10-24T05:19:51.2960678Z ╰──── 2026-10-24T05:19:51.2960886Z  help: Consider using `Object.assign()` or `Array.prototype.push()` to mutate the accumulator instead. 2026-10-24T05:19:51.2961040Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T05:19:51.2961043Z 2026-10-24T05:19:51.2961226Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-24T05:19:51.2961340Z ╭─[packages/shared/src/serverSettings.ts:466:3] 2026-10-24T05:19:51.2961397Z 464 │ null; 2026-10-24T05:19:51.2961510Z 465 │ let nextModelPreferences = initialModelPreferences; 2026-10-24T05:19:51.2961595Z ·  ──────────┬───────── 2026-10-24T05:19:51.2961718Z · ╰── From this accumulator 2026-10-24T05:19:51.2961817Z 466 │ for (const change of setModelsHidden ?? []) { 2026-10-24T05:19:51.2961882Z ·  ─┬─ 2026-10-24T05:19:51.2961990Z · ╰── For this loop 2026-10-24T05:19:51.2962125Z 467 │ const preferences = nextModelPreferences?.[change.provider] ?? { 2026-10-24T05:19:51.2962191Z 468 │ hiddenModels: [], 2026-10-24T05:19:51.2962257Z 469 │ modelOrder: [], 2026-10-24T05:19:51.2962311Z 470 │ }; 2026-10-24T05:19:51.2962488Z 471 │ const hiddenModels = preferences.hiddenModels.filter((model) => model !== change.model); 2026-10-24T05:19:51.2962596Z 472 │ if (change.hidden) hiddenModels.push(change.model); 2026-10-24T05:19:51.2962667Z 473 │ nextModelPreferences = { 2026-10-24T05:19:51.2962741Z 474 │ ...nextModelPreferences, 2026-10-24T05:19:51.2962832Z ·  ───────────┬─────────── 2026-10-24T05:19:51.2962952Z · ╰── From this spread 2026-10-24T05:19:51.2963067Z 475 │ [change.provider]: { ...preferences, hiddenModels }, 2026-10-24T05:19:51.2963120Z ╰──── 2026-10-24T05:19:51.2963270Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-24T05:19:51.2963421Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T05:19:51.2963423Z 2026-10-24T05:19:51.2963620Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:19:51.2963732Z ╭─[apps/mobile/src/state/thread-order.ts:29:7] 2026-10-24T05:19:51.2963803Z 28 │ getPendingThreadOrder(); 2026-10-24T05:19:51.2963880Z 29 │ }, [nowMinute, snoozeWakeTick]); 2026-10-24T05:19:51.2964000Z ·  ────┬──── ───────┬────── 2026-10-24T05:19:51.2964238Z · │ ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T05:19:51.2964403Z · ╰── Unnecessary dependency `nowMinute` 2026-10-24T05:19:51.2964467Z 30 │ return pending; 2026-10-24T05:19:51.2964519Z ╰──── 2026-10-24T05:19:51.2964803Z  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-24T05:19:51.2965106Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:19:51.2965110Z 2026-10-24T05:19:51.2965557Z ⚠ 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-24T05:19:51.2965696Z ╭─[packages/contracts/src/composerContext.test.ts:181:18] 2026-10-24T05:19:51.2965831Z 180 │ it("sends a message without the records the wire cannot carry", () => { 2026-10-24T05:19:51.2966012Z 181 │ const wire = Schema.encodeUnknownSync(Schema.toCodecJson(OrchestrationMessageContext))({ 2026-10-24T05:19:51.2966114Z ·  ──────────────────────── 2026-10-24T05:19:51.2966178Z 182 │ version: 1, 2026-10-24T05:19:51.2966227Z ╰──── 2026-10-24T05:19:51.2966229Z 2026-10-24T05:19:51.2966422Z ⚠ eslint(no-unused-vars): Identifier 'Duration' is imported but never used. 2026-10-24T05:19:51.2966552Z ╭─[packages/provider-pi/src/server/adapter.test.ts:24:13] 2026-10-24T05:19:51.2966644Z 23 │ import * as Deferred from "effect/Deferred"; 2026-10-24T05:19:51.2966733Z 24 │ import * as Duration from "effect/Duration"; 2026-10-24T05:19:51.2966815Z ·  ────┬─── 2026-10-24T05:19:51.2966946Z · ╰── 'Duration' is imported here 2026-10-24T05:19:51.2967033Z 25 │ import * as Effect from "effect/Effect"; 2026-10-24T05:19:51.2967082Z ╰──── 2026-10-24T05:19:51.2967179Z  help: Consider removing this import. 2026-10-24T05:19:51.2967181Z 2026-10-24T05:19:51.2967431Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:19:51.2967556Z ╭─[apps/mobile/src/state/use-vcs-action-state.ts:86:5] 2026-10-24T05:19:51.2967662Z 83 │ const [nowMs, setNowMs] = useState(() => Date.now()); 2026-10-24T05:19:51.2967725Z 84 │ useEffect(() => { 2026-10-24T05:19:51.2967795Z ·  ────┬──── 2026-10-24T05:19:51.2967924Z · ╰── This is the containing effect 2026-10-24T05:19:51.2968009Z 85 │ if (!actionState.isRunning) return; 2026-10-24T05:19:51.2968077Z 86 │ setNowMs(Date.now()); 2026-10-24T05:19:51.2968145Z ·  ────┬─── 2026-10-24T05:19:51.2968306Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:19:51.2968428Z 87 │ const interval = setInterval(() => setNowMs(Date.now()), 1000); 2026-10-24T05:19:51.2968477Z ╰──── 2026-10-24T05:19:51.2969094Z  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-24T05:19:51.2969478Z  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-24T05:19:51.2969510Z 2026-10-24T05:19:51.2969726Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T05:19:51.2969857Z ╭─[apps/mobile/src/state/use-model-option-memory.ts:21:7] 2026-10-24T05:19:51.2969919Z 20 │ [instanceId]: { 2026-10-24T05:19:51.2969994Z 21 │ ...(state[instanceId] ?? {}), 2026-10-24T05:19:51.2970092Z ·  ──────────────────────────── 2026-10-24T05:19:51.2970159Z 22 │ [model]: options, 2026-10-24T05:19:51.2970208Z ╰──── 2026-10-24T05:19:51.2970463Z  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-24T05:19:51.2970473Z 2026-10-24T05:19:51.2970722Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T05:19:51.2970849Z ╭─[packages/provider-pi/src/server/adapter.ts:3405:7] 2026-10-24T05:19:51.2970902Z 3404 │ 2026-10-24T05:19:51.2971088Z 3405 │ const layer: Layer.Layer = 2026-10-24T05:19:51.2971156Z ·  ──┬── 2026-10-24T05:19:51.2971278Z · ╰── 'layer' is declared here 2026-10-24T05:19:51.2971343Z 3406 │ Layer.effect( 2026-10-24T05:19:51.2971395Z ╰──── 2026-10-24T05:19:51.2971493Z  help: Consider removing this declaration. 2026-10-24T05:19:51.2971496Z 2026-10-24T05:19:51.2971861Z ⚠ 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-24T05:19:51.2971973Z ╭─[packages/contracts/src/auth.test.ts:17:12] 2026-10-24T05:19:51.2972128Z 16 │ it("decodes legacy review credentials without offering them in new grants", () => { 2026-10-24T05:19:51.2972289Z 17 │ expect(Schema.decodeUnknownSync(AuthEnvironmentScopes)(["review:write"])).toEqual([ 2026-10-24T05:19:51.2972387Z ·  ──────────────────────── 2026-10-24T05:19:51.2972451Z 18 │ "review:write", 2026-10-24T05:19:51.2972500Z ╰──── 2026-10-24T05:19:51.2972503Z 2026-10-24T05:19:51.2972856Z ⚠ 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-24T05:19:51.2972969Z ╭─[packages/contracts/src/auth.test.ts:20:18] 2026-10-24T05:19:51.2973028Z 19 │ ]); 2026-10-24T05:19:51.2973185Z 20 │ expect(() => Schema.decodeUnknownSync(AuthGrantScopes)(["review:write"])).toThrow(); 2026-10-24T05:19:51.2973286Z ·  ──────────────────────── 2026-10-24T05:19:51.2973412Z 21 │ expect(AuthStandardClientScopes).not.toContain("review:write"); 2026-10-24T05:19:51.2973461Z ╰──── 2026-10-24T05:19:51.2973463Z 2026-10-24T05:19:51.2973813Z ⚠ 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-24T05:19:51.2973920Z ╭─[packages/contracts/src/auth.test.ts:58:21] 2026-10-24T05:19:51.2974133Z 57 │ it("ignores unknown response permissions without falling back to broader scopes", () => { 2026-10-24T05:19:51.2974284Z 58 │ const session = Schema.decodeUnknownSync(AuthSessionState)({ 2026-10-24T05:19:51.2974387Z ·  ──────────────────────── 2026-10-24T05:19:51.2974455Z 59 │ authenticated: true, 2026-10-24T05:19:51.2974502Z ╰──── 2026-10-24T05:19:51.2974505Z 2026-10-24T05:19:51.2974705Z ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed 2026-10-24T05:19:51.2974808Z ╭─[packages/contracts/src/rpc.ts:297:8] 2026-10-24T05:19:51.2974873Z 296 │ } from "./device.ts"; 2026-10-24T05:19:51.2974962Z 297 │ import {} from "./previewAutomation.ts"; 2026-10-24T05:19:51.2975030Z ·  ── 2026-10-24T05:19:51.2975088Z 298 │ import { 2026-10-24T05:19:51.2975142Z ╰──── 2026-10-24T05:19:51.2975225Z  help: Remove empty braces 2026-10-24T05:19:51.2975234Z 2026-10-24T05:19:51.2975444Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T05:19:51.2975544Z ╭─[apps/mobile/src/Stack.tsx:1079:21] 2026-10-24T05:19:51.2975607Z 1078 │ } 2026-10-24T05:19:51.2975870Z ·  ───────────────────────────────────────────── 2026-10-24T05:19:51.2975951Z 1080 │ screenOptions={({ route }) => 2026-10-24T05:19:51.2976003Z ╰──── 2026-10-24T05:19:51.2976352Z  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-24T05:19:51.2976355Z 2026-10-24T05:19:51.2976525Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T05:19:51.2976655Z ╭─[apps/web/src/components/CommandPalette.tsx:1996:20] 2026-10-24T05:19:51.2976769Z 1995 │ title: inferProjectTitleFromPath(destinationPath), 2026-10-24T05:19:51.2976860Z 1996 │ createdAt: new Date().toISOString(), 2026-10-24T05:19:51.2976947Z ·  ─────┬──── 2026-10-24T05:19:51.2977085Z · ╰── Cannot call impure function 2026-10-24T05:19:51.2977188Z 1997 │ remoteUrl: addProjectCloneFlow.remoteUrl, 2026-10-24T05:19:51.2977237Z ╰──── 2026-10-24T05:19:51.2977509Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T05:19:51.2977851Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T05:19:51.2977936Z 2026-10-24T05:19:51.2978136Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable. 2026-10-24T05:19:51.2978256Z ╭─[apps/web/src/contextMenuFallback.test.ts:38:9] 2026-10-24T05:19:51.2978320Z 37 │ get isConnected() { 2026-10-24T05:19:51.2978408Z 38 │ let current: FakeElement | null = this; 2026-10-24T05:19:51.2978478Z ·  ─────── 2026-10-24T05:19:51.2978548Z 39 │ while (current?.parent) { 2026-10-24T05:19:51.2978630Z ╰──── 2026-10-24T05:19:51.2978896Z  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-24T05:19:51.2978899Z 2026-10-24T05:19:51.2979350Z ⚠ 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-24T05:19:51.2979475Z ╭─[packages/contracts/src/baseSchemas.test.ts:39:9] 2026-10-24T05:19:51.2979539Z 38 │ JSON.stringify( 2026-10-24T05:19:51.2979653Z 39 │ Schema.encodeUnknownSync(Schema.toCodecJson(Named))([ 2026-10-24T05:19:51.2979745Z ·  ──────────────────────── 2026-10-24T05:19:51.2979809Z 40 │ { name: "a" }, 2026-10-24T05:19:51.2979856Z ╰──── 2026-10-24T05:19:51.2979860Z 2026-10-24T05:19:51.2980072Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T05:19:51.2980202Z ╭─[scripts/lib/cli-external-packages.test.ts:114:11] 2026-10-24T05:19:51.2980274Z 113 │ const declared = { 2026-10-24T05:19:51.2980367Z 114 │ ...(manifest.dependencies ?? {}), 2026-10-24T05:19:51.2980474Z ·  ──────────────────────────────── 2026-10-24T05:19:51.2980576Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T05:19:51.2980626Z ╰──── 2026-10-24T05:19:51.2980882Z  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-24T05:19:51.2980885Z 2026-10-24T05:19:51.2981095Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T05:19:51.2981219Z ╭─[scripts/lib/cli-external-packages.test.ts:115:11] 2026-10-24T05:19:51.2981307Z 114 │ ...(manifest.dependencies ?? {}), 2026-10-24T05:19:51.2981413Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T05:19:51.2981532Z ·  ──────────────────────────────────────── 2026-10-24T05:19:51.2981625Z 116 │ ...(manifest.peerDependencies ?? {}), 2026-10-24T05:19:51.2981679Z ╰──── 2026-10-24T05:19:51.2981937Z  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-24T05:19:51.2981940Z 2026-10-24T05:19:51.2982148Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T05:19:51.2982270Z ╭─[scripts/lib/cli-external-packages.test.ts:116:11] 2026-10-24T05:19:51.2982368Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T05:19:51.2982461Z 116 │ ...(manifest.peerDependencies ?? {}), 2026-10-24T05:19:51.2982624Z ·  ──────────────────────────────────── 2026-10-24T05:19:51.2982713Z 117 │ }; 2026-10-24T05:19:51.2982763Z ╰──── 2026-10-24T05:19:51.2983017Z  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-24T05:19:51.2983019Z 2026-10-24T05:19:51.2983292Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T05:19:51.2983457Z ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:473:19] 2026-10-24T05:19:51.2983520Z 472 │ onFilters, 2026-10-24T05:19:51.2983585Z 473 │ authorOptions = [], 2026-10-24T05:19:51.2983662Z ·  ── 2026-10-24T05:19:51.2983733Z 474 │ labelOptions = [], 2026-10-24T05:19:51.2983785Z ╰──── 2026-10-24T05:19:51.2984093Z  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-24T05:19:51.2984096Z 2026-10-24T05:19:51.2984366Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T05:19:51.2984528Z ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:474:18] 2026-10-24T05:19:51.2984593Z 473 │ authorOptions = [], 2026-10-24T05:19:51.2984655Z 474 │ labelOptions = [], 2026-10-24T05:19:51.2984729Z ·  ── 2026-10-24T05:19:51.2984791Z 475 │ optionScope, 2026-10-24T05:19:51.2984839Z ╰──── 2026-10-24T05:19:51.2985145Z  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-24T05:19:51.2985150Z 2026-10-24T05:19:51.2985356Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T05:19:51.2985476Z ╭─[apps/mobile/src/lib/markdownDocument.ts:259:28] 2026-10-24T05:19:51.2985574Z 258 │ visit(parser.parse(markdown), false, false); 2026-10-24T05:19:51.2985655Z 259 │ for (const edit of edits.reverse()) 2026-10-24T05:19:51.2985747Z ·  ─────── 2026-10-24T05:19:51.2985906Z 260 │ markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end); 2026-10-24T05:19:51.2985955Z ╰──── 2026-10-24T05:19:51.2986211Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T05:19:51.2986217Z 2026-10-24T05:19:51.2986419Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T05:19:51.2986538Z ╭─[apps/mobile/src/lib/markdownDocument.ts:290:28] 2026-10-24T05:19:51.2986616Z 289 │ visit(parser.parse(markdown)); 2026-10-24T05:19:51.2986696Z 290 │ for (const edit of edits.reverse()) 2026-10-24T05:19:51.2986786Z ·  ─────── 2026-10-24T05:19:51.2986944Z 291 │ markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end); 2026-10-24T05:19:51.2986993Z ╰──── 2026-10-24T05:19:51.2987242Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T05:19:51.2987245Z 2026-10-24T05:19:51.2987501Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T05:19:51.2987645Z ╭─[apps/mobile/src/lib/markdownDocument.ts:344:38] 2026-10-24T05:19:51.2987721Z 343 │ visit(parser.parse(markdown)); 2026-10-24T05:19:51.2987822Z 344 │ for (const lineStart of lineStarts.reverse()) { 2026-10-24T05:19:51.2987921Z ·  ─────── 2026-10-24T05:19:51.2988081Z 345 │ // The header row may be a lazy line without its container markers (`>` or list indent), 2026-10-24T05:19:51.2988130Z ╰──── 2026-10-24T05:19:51.2988381Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T05:19:51.2988383Z 2026-10-24T05:19:51.2988603Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T05:19:51.2988747Z ╭─[apps/mobile/modules/t3-source-text/src/SourceText.tsx:36:9] 2026-10-24T05:19:51.2988832Z 35 │ { 2026-10-24T05:19:51.2990118Z 57 │ if (pulse) { 2026-10-24T05:19:51.2990204Z 58 │ pulseProgress.value = withRepeat( 2026-10-24T05:19:51.2990279Z ·  ──────┬────── 2026-10-24T05:19:51.2990418Z · ╰── `pulseProgress` cannot be modified 2026-10-24T05:19:51.2990483Z 59 │ withTiming(1, { 2026-10-24T05:19:51.2990533Z ╰──── 2026-10-24T05:19:51.2990795Z  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-24T05:19:51.2991096Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:19:51.2991099Z 2026-10-24T05:19:51.2991295Z ⚠ eslint(no-unused-vars): Type 'ThreadRunSummary' is imported but never used. 2026-10-24T05:19:51.2991382Z ╭─[apps/web/src/types.ts:22:3] 2026-10-24T05:19:51.2991451Z 21 │ EnvironmentThreadShell, 2026-10-24T05:19:51.2991513Z 22 │ ThreadRunSummary, 2026-10-24T05:19:51.2991588Z ·  ────────┬─────── 2026-10-24T05:19:51.2991724Z · ╰── 'ThreadRunSummary' is imported here 2026-10-24T05:19:51.2991789Z 23 │ ThreadRuntimeSummary, 2026-10-24T05:19:51.2991839Z ╰──── 2026-10-24T05:19:51.2991984Z  help: Consider removing this import. 2026-10-24T05:19:51.2992014Z 2026-10-24T05:19:51.2992264Z ⚠ unicorn(prefer-add-event-listener): Prefer `addEventListener()` over their `on`-function counterparts. 2026-10-24T05:19:51.2992404Z ╭─[apps/web/src/components/device/deviceHubApi.test.ts:12:14] 2026-10-24T05:19:51.2992554Z 11 │ addEventListener(_type: string, listener: (event: { data: string }) => void) { 2026-10-24T05:19:51.2992630Z 12 │ this.onmessage = listener; 2026-10-24T05:19:51.2992705Z ·  ───────── 2026-10-24T05:19:51.2992758Z 13 │ } 2026-10-24T05:19:51.2992807Z ╰──── 2026-10-24T05:19:51.2993116Z  help: `addEventListener()` can register multiple handlers and accepts options such as `{ once: true }`; assigning to `on` replaces any previously registered handler. 2026-10-24T05:19:51.2993118Z 2026-10-24T05:19:51.2993319Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable. 2026-10-24T05:19:51.2993458Z ╭─[apps/web/src/components/device/deviceHubApi.test.ts:16:9] 2026-10-24T05:19:51.2993522Z 15 │ constructor() { 2026-10-24T05:19:51.2993584Z 16 │ source = this; 2026-10-24T05:19:51.2993651Z ·  ────── 2026-10-24T05:19:51.2993705Z 17 │ } 2026-10-24T05:19:51.2993754Z ╰──── 2026-10-24T05:19:51.2994016Z  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-24T05:19:51.2994018Z 2026-10-24T05:19:51.2994243Z ⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence. 2026-10-24T05:19:51.2994405Z ╭─[apps/web/src/components/pullRequest/pullRequestList.logic.ts:265:9] 2026-10-24T05:19:51.2994466Z 264 │ ): boolean { 2026-10-24T05:19:51.2994612Z 265 │ const labels = entry.labels.map((label) => label.name.trim().toLowerCase()); 2026-10-24T05:19:51.2994772Z ·  ───────────────────────────────────────────────────────────────────── 2026-10-24T05:19:51.2994913Z 266 │ const holds = (label: string) => labels.includes(label.trim().toLowerCase()); 2026-10-24T05:19:51.2994963Z ╰──── 2026-10-24T05:19:51.2995036Z  help: Switch to `Set` 2026-10-24T05:19:51.2995039Z 2026-10-24T05:19:51.2995236Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T05:19:51.2995393Z ╭─[apps/web/src/components/settings/ProviderSettingsPanel.logic.ts:4:8] 2026-10-24T05:19:51.2995465Z 3 │ AuthProvidersManageScope, 2026-10-24T05:19:51.2995581Z 4 │ type AuthSessionState, 2026-10-24T05:19:51.2995692Z ·  ────────┬─────── 2026-10-24T05:19:51.2995831Z · ╰── 'AuthSessionState' is imported here 2026-10-24T05:19:51.2995895Z 5 │ type EnvironmentId, 2026-10-24T05:19:51.2995944Z ╰──── 2026-10-24T05:19:51.2996039Z  help: Consider removing this import. 2026-10-24T05:19:51.2996042Z 2026-10-24T05:19:51.2996202Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T05:19:51.2996344Z ╭─[apps/web/src/components/chat/useThreadLifecycle.tsx:178:58] 2026-10-24T05:19:51.2996452Z 177 │ if (snoozeClockState.shell !== activeThreadShell) { 2026-10-24T05:19:51.2996610Z 178 │ setSnoozeClockState({ shell: activeThreadShell, now: new Date().toISOString() }); 2026-10-24T05:19:51.2996733Z ·  ─────┬──── 2026-10-24T05:19:51.2996902Z · ╰── Cannot call impure function 2026-10-24T05:19:51.2996959Z 179 │ } 2026-10-24T05:19:51.2997010Z ╰──── 2026-10-24T05:19:51.2997279Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T05:19:51.2997566Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T05:19:51.2997568Z 2026-10-24T05:19:51.2997792Z ⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence. 2026-10-24T05:19:51.2997928Z ╭─[apps/web/src/components/chat/useComposerSend.ts:985:13] 2026-10-24T05:19:51.2998053Z 984 │ const changedBeforeDecline = draftChangedSinceSend(); 2026-10-24T05:19:51.2998286Z 985 │ ╭─▶ const pendingIdsBeforeDecline = pendingApprovalsRef.current.map( 2026-10-24T05:19:51.2998404Z 986 │ │ (approval) => approval.requestId, 2026-10-24T05:19:51.2998545Z 987 │ ╰─▶ ); 2026-10-24T05:19:51.2998748Z 988 │ const approvalResponding = approvalsToDecline.some((approval) => 2026-10-24T05:19:51.2998797Z ╰──── 2026-10-24T05:19:51.2998872Z  help: Switch to `Set` 2026-10-24T05:19:51.2998874Z 2026-10-24T05:19:51.2999063Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T05:19:51.2999230Z ╭─[apps/web/src/components/pullRequest/PullRequestSummaryTab.tsx:814:17] 2026-10-24T05:19:51.2999293Z 813 │