2026-10-24T04:18:16.2205301Z Current runner version: '2.338.1' 2026-10-24T04:18:16.2209361Z Runner name: 'blacksmith-8vcpu-ubuntu-2404-dloogds3vrhj7zvs' 2026-10-24T04:18:16.2210334Z Runner group name: 'blacksmith scale sets - blacksmith-8vcpu-ubuntu-2404' 2026-10-24T04:18:16.2211334Z Machine name: 'ip-172-31-73-130' 2026-10-24T04:18:16.2213860Z ##[group]GITHUB_TOKEN Permissions 2026-10-24T04:18:16.2215338Z Contents: read 2026-10-24T04:18:16.2215747Z Metadata: read 2026-10-24T04:18:16.2216308Z ##[endgroup] 2026-10-24T04:18:16.2218002Z Secret source: Actions 2026-10-24T04:18:16.2218627Z Cache mode: write 2026-10-24T04:18:16.2219228Z Prepare workflow directory 2026-10-24T04:18:16.2387283Z Prepare all required actions 2026-10-24T04:18:16.2411717Z Getting action download info 2026-10-24T04:18:16.3640035Z Download action repository 'actions/checkout@v6' (SHA:d23441a48e516b6c34aea4fa41551a30e30af803) 2026-10-24T04:18:16.4038560Z Download action repository 'actions/cache@v6' (SHA:55cc8345863c7cc4c66a329aec7e433d2d1c52a9) 2026-10-24T04:18:16.5102022Z Setting BLACKSMITH_ACTIONS_RESULTS_URL to https://results-receiver.actions.githubusercontent.com/ 2026-10-24T04:18:16.5137950Z Complete job name: Lint 2026-10-24T04:18:16.5478219Z A job started hook has been configured by the self-hosted runner administrator 2026-10-24T04:18:16.5538787Z ##[group]Run '/setup.sh' 2026-10-24T04:18:16.5548079Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T04:18:16.5548478Z env: 2026-10-24T04:18:16.5548697Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 156 2026-10-24T04:18:16.5548980Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 354 2026-10-24T04:18:16.5549255Z BLACKSMITH_CHECK_RUN_ID: 120776724055 2026-10-24T04:18:16.5549582Z BLACKSMITH_JOB_DISPLAY_NAME: Lint 2026-10-24T04:18:16.5549847Z GITHUB_ACTIONS_CACHE_MODE: write 2026-10-24T04:18:16.5550101Z ##[endgroup] 2026-10-24T04:18:16.5751319Z Logging daemon started (blacksmithd for logs) 2026-10-24T04:18:16.5858518Z Results daemon started (blacksmithd for results) 2026-10-24T04:18:16.5976039Z Background adoption and SSH setup started (PID: 3165) 2026-10-24T04:18:16.5976530Z 2026-10-24T04:18:16.5977878Z ---------------------------------------- 2026-10-24T04:18:16.5978651Z View this job: https://app.blacksmith.sh/pingdotgg/runs/40061803754/jobs/120776724055 2026-10-24T04:18:16.5979370Z SSH Access (using your GitHub SSH key): 2026-10-24T04:18:16.5979846Z ssh -p 64000 runner@blacksmith-8vcpu-ubuntu-2404-dloogds3vrhj7zvs.vm.blacksmith.sh 2026-10-24T04:18:16.5980149Z 2026-10-24T04:18:16.5980250Z No GitHub SSH key? Add one at: 2026-10-24T04:18:16.5980722Z https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account 2026-10-24T04:18:16.5981114Z 2026-10-24T04:18:16.5981216Z ---------------------------------------- 2026-10-24T04:18:16.5981387Z 2026-10-24T04:18:16.5981526Z VM ID: blacksmith-8vcpu-ubuntu-2404-dloogds3vrhj7zvs 2026-10-24T04:18:16.5981931Z Host: production-152.236.31.181-x8664 2026-10-24T04:18:16.5982349Z Host Agent PID: 4096245 2026-10-24T04:18:16.5982731Z Host Agent Git SHA: 1637818df 2026-10-24T04:18:16.5983134Z Host CPU Manufacturer: AuthenticAMD 2026-10-24T04:18:16.5983569Z Blacksmith Host Generation: gen 2 2026-10-24T04:18:16.5984014Z Petname: production-organic-chicken-c74b7d6d 2026-10-24T04:18:16.5984476Z Region: us-east 2026-10-24T04:18:16.5984834Z Rootfs Version: ubuntu24-full-x64-081926 2026-10-24T04:18:16.5987418Z OS Version: Ubuntu 24.04.4 LTS 2026-10-24T04:18:16.5987773Z 2026-10-24T04:18:16.5988070Z Enabling Blacksmith transparent cache 2026-10-24T04:18:16.6243048Z ##[group]Run actions/checkout@v6 2026-10-24T04:18:16.6243335Z with: 2026-10-24T04:18:16.6243647Z sparse-checkout: /* !/.repos/ !/apps/mobile/modules/t3-terminal/Vendor/**/*.a 2026-10-24T04:18:16.6244027Z sparse-checkout-cone-mode: false 2026-10-24T04:18:16.6244292Z repository: pingdotgg/t3code 2026-10-24T04:18:16.6246135Z token: *** 2026-10-24T04:18:16.6246337Z ssh-strict: true 2026-10-24T04:18:16.6246546Z ssh-user: git 2026-10-24T04:18:16.6246765Z persist-credentials: true 2026-10-24T04:18:16.6247196Z clean: true 2026-10-24T04:18:16.6247398Z fetch-depth: 1 2026-10-24T04:18:16.6247602Z fetch-tags: false 2026-10-24T04:18:16.6247819Z show-progress: true 2026-10-24T04:18:16.6248032Z lfs: false 2026-10-24T04:18:16.6248232Z submodules: false 2026-10-24T04:18:16.6248452Z set-safe-directory: true 2026-10-24T04:18:16.6248696Z allow-unsafe-pr-checkout: false 2026-10-24T04:18:16.6248941Z env: 2026-10-24T04:18:16.6249166Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 156 2026-10-24T04:18:16.6249641Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 354 2026-10-24T04:18:16.6249912Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T04:18:16.6250163Z ##[endgroup] 2026-10-24T04:18:16.7451951Z Syncing repository: pingdotgg/t3code 2026-10-24T04:18:16.7452834Z ##[group]Getting Git version info 2026-10-24T04:18:16.7453155Z Working directory is '/home/runner/_work/t3code/t3code' 2026-10-24T04:18:16.7453609Z [command]/usr/local/bin/git version 2026-10-24T04:18:16.7511847Z git version 2.55.0 2026-10-24T04:18:16.7521219Z ##[endgroup] 2026-10-24T04:18:16.7527061Z Temporarily overriding HOME='/home/runner/_work/_temp/746cc89b-5f9e-41d0-b0d2-8fcbeae34350' before making global git config changes 2026-10-24T04:18:16.7527696Z Adding repository directory to the temporary git global config as a safe directory 2026-10-24T04:18:16.7529770Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code 2026-10-24T04:18:16.7558363Z Deleting the contents of '/home/runner/_work/t3code/t3code' 2026-10-24T04:18:16.7560085Z ##[group]Determining repository object format 2026-10-24T04:18:16.7561130Z ##[endgroup] 2026-10-24T04:18:16.7561471Z ##[group]Initializing the repository 2026-10-24T04:18:16.7563238Z [command]/usr/local/bin/git init /home/runner/_work/t3code/t3code 2026-10-24T04:18:16.7598230Z hint: Using 'master' as the name for the initial branch. This default branch name 2026-10-24T04:18:16.7598691Z hint: will change to "main" in Git 3.0. To configure the initial branch name 2026-10-24T04:18:16.7599135Z hint: to use in all of your new repositories, which will suppress this warning, 2026-10-24T04:18:16.7599507Z hint: call: 2026-10-24T04:18:16.7599705Z hint: 2026-10-24T04:18:16.7599962Z hint: git config --global init.defaultBranch 2026-10-24T04:18:16.7600258Z hint: 2026-10-24T04:18:16.7600532Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and 2026-10-24T04:18:16.7600976Z hint: 'development'. The just-created branch can be renamed via this command: 2026-10-24T04:18:16.7601330Z hint: 2026-10-24T04:18:16.7601534Z hint: git branch -m 2026-10-24T04:18:16.7601763Z hint: 2026-10-24T04:18:16.7602063Z hint: Disable this message with "git config set advice.defaultBranchName false" 2026-10-24T04:18:16.7602516Z Initialized empty Git repository in /home/runner/_work/t3code/t3code/.git/ 2026-10-24T04:18:16.7603254Z [command]/usr/local/bin/git remote add origin https://github.com/pingdotgg/t3code 2026-10-24T04:18:16.7630015Z ##[endgroup] 2026-10-24T04:18:16.7630365Z ##[group]Disabling automatic garbage collection 2026-10-24T04:18:16.7632221Z [command]/usr/local/bin/git config --local gc.auto 0 2026-10-24T04:18:16.7652581Z ##[endgroup] 2026-10-24T04:18:16.7652920Z ##[group]Setting up auth 2026-10-24T04:18:16.7653172Z Removing SSH command configuration 2026-10-24T04:18:16.7656445Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand 2026-10-24T04:18:16.7677881Z [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-24T04:18:16.7814135Z Removing HTTP extra header 2026-10-24T04:18:16.7816440Z [command]/usr/local/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader 2026-10-24T04:18:16.7841260Z [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-24T04:18:16.7939907Z Removing includeIf entries pointing to credentials config files 2026-10-24T04:18:16.7942536Z [command]/usr/local/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir: 2026-10-24T04:18:16.7963201Z [command]/usr/local/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url 2026-10-24T04:18:16.8065424Z [command]/usr/local/bin/git config --file /home/runner/_work/_temp/git-credentials-ca2cb3ff-1b35-4212-b71b-34d2335eb079.config http.https://github.com/.extraheader AUTHORIZATION: basic *** 2026-10-24T04:18:16.8088618Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git.path /home/runner/_work/_temp/git-credentials-ca2cb3ff-1b35-4212-b71b-34d2335eb079.config 2026-10-24T04:18:16.8109550Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git/worktrees/*.path /home/runner/_work/_temp/git-credentials-ca2cb3ff-1b35-4212-b71b-34d2335eb079.config 2026-10-24T04:18:16.8132219Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git.path /github/runner_temp/git-credentials-ca2cb3ff-1b35-4212-b71b-34d2335eb079.config 2026-10-24T04:18:16.8151863Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git/worktrees/*.path /github/runner_temp/git-credentials-ca2cb3ff-1b35-4212-b71b-34d2335eb079.config 2026-10-24T04:18:16.8168900Z ##[endgroup] 2026-10-24T04:18:16.8169242Z ##[group]Fetching the repository 2026-10-24T04:18:16.8172898Z [command]/usr/local/bin/git -c protocol.version=2 fetch --no-tags --prune --no-recurse-submodules --filter=blob:none --depth=1 origin +c8a6e71329b7974615754c95f01fdf30811e8d63:refs/remotes/pull/24334/merge 2026-10-24T04:18:17.0538198Z From https://github.com/pingdotgg/t3code 2026-10-24T04:18:17.0539390Z * [new ref] c8a6e71329b7974615754c95f01fdf30811e8d63 -> pull/24334/merge 2026-10-24T04:18:17.0561722Z ##[endgroup] 2026-10-24T04:18:17.0562469Z ##[group]Determining the checkout info 2026-10-24T04:18:17.0563274Z ##[endgroup] 2026-10-24T04:18:17.0563943Z ##[group]Setting up sparse checkout 2026-10-24T04:18:17.0565408Z [command]/usr/local/bin/git config core.sparseCheckout true 2026-10-24T04:18:17.0587842Z [command]/usr/local/bin/git rev-parse --git-path info/sparse-checkout 2026-10-24T04:18:17.0603621Z .git/info/sparse-checkout 2026-10-24T04:18:17.0607766Z ##[endgroup] 2026-10-24T04:18:17.0608526Z ##[group]Checking out the ref 2026-10-24T04:18:17.0610715Z [command]/usr/local/bin/git checkout --progress --force refs/remotes/pull/24334/merge 2026-10-24T04:18:23.5345713Z Updating files: 0% (1/6323) 2026-10-24T04:18:23.5372192Z Updating files: 1% (64/6323) 2026-10-24T04:18:23.5388593Z Updating files: 2% (127/6323) 2026-10-24T04:18:23.5405921Z Updating files: 3% (190/6323) 2026-10-24T04:18:23.5427419Z Updating files: 4% (253/6323) 2026-10-24T04:18:23.5455664Z Updating files: 5% (317/6323) 2026-10-24T04:18:23.5476638Z Updating files: 6% (380/6323) 2026-10-24T04:18:23.5537614Z Updating files: 7% (443/6323) 2026-10-24T04:18:23.5575106Z Updating files: 8% (506/6323) 2026-10-24T04:18:23.5599417Z Updating files: 9% (570/6323) 2026-10-24T04:18:23.5882779Z Updating files: 10% (633/6323) 2026-10-24T04:18:23.5897869Z Updating files: 11% (696/6323) 2026-10-24T04:18:23.5908255Z Updating files: 12% (759/6323) 2026-10-24T04:18:23.5921688Z Updating files: 13% (822/6323) 2026-10-24T04:18:23.5936843Z Updating files: 14% (886/6323) 2026-10-24T04:18:23.5953844Z Updating files: 15% (949/6323) 2026-10-24T04:18:23.5971543Z Updating files: 16% (1012/6323) 2026-10-24T04:18:23.5987156Z Updating files: 17% (1075/6323) 2026-10-24T04:18:23.6004569Z Updating files: 18% (1139/6323) 2026-10-24T04:18:23.6018768Z Updating files: 19% (1202/6323) 2026-10-24T04:18:23.6040075Z Updating files: 20% (1265/6323) 2026-10-24T04:18:23.6057965Z Updating files: 21% (1328/6323) 2026-10-24T04:18:23.6075472Z Updating files: 22% (1392/6323) 2026-10-24T04:18:23.6088329Z Updating files: 23% (1455/6323) 2026-10-24T04:18:23.6101146Z Updating files: 24% (1518/6323) 2026-10-24T04:18:23.6115566Z Updating files: 25% (1581/6323) 2026-10-24T04:18:23.6129320Z Updating files: 26% (1644/6323) 2026-10-24T04:18:23.6142454Z Updating files: 27% (1708/6323) 2026-10-24T04:18:23.6160854Z Updating files: 28% (1771/6323) 2026-10-24T04:18:23.6193068Z Updating files: 29% (1834/6323) 2026-10-24T04:18:23.6212664Z Updating files: 30% (1897/6323) 2026-10-24T04:18:23.6235402Z Updating files: 31% (1961/6323) 2026-10-24T04:18:23.6263742Z Updating files: 32% (2024/6323) 2026-10-24T04:18:23.6293073Z Updating files: 33% (2087/6323) 2026-10-24T04:18:23.6359762Z Updating files: 34% (2150/6323) 2026-10-24T04:18:23.6422677Z Updating files: 35% (2214/6323) 2026-10-24T04:18:23.6455504Z Updating files: 36% (2277/6323) 2026-10-24T04:18:23.6485726Z Updating files: 37% (2340/6323) 2026-10-24T04:18:23.6528535Z Updating files: 38% (2403/6323) 2026-10-24T04:18:23.6553369Z Updating files: 39% (2466/6323) 2026-10-24T04:18:23.6583180Z Updating files: 40% (2530/6323) 2026-10-24T04:18:23.6612258Z Updating files: 41% (2593/6323) 2026-10-24T04:18:23.6627651Z Updating files: 42% (2656/6323) 2026-10-24T04:18:23.6637912Z Updating files: 43% (2719/6323) 2026-10-24T04:18:23.6663842Z Updating files: 44% (2783/6323) 2026-10-24T04:18:23.6691438Z Updating files: 45% (2846/6323) 2026-10-24T04:18:23.6715370Z Updating files: 46% (2909/6323) 2026-10-24T04:18:23.6740765Z Updating files: 47% (2972/6323) 2026-10-24T04:18:23.6769163Z Updating files: 48% (3036/6323) 2026-10-24T04:18:23.6797618Z Updating files: 49% (3099/6323) 2026-10-24T04:18:23.6834181Z Updating files: 50% (3162/6323) 2026-10-24T04:18:23.6848878Z Updating files: 51% (3225/6323) 2026-10-24T04:18:23.6883158Z Updating files: 52% (3288/6323) 2026-10-24T04:18:23.6906977Z Updating files: 53% (3352/6323) 2026-10-24T04:18:23.6926037Z Updating files: 54% (3415/6323) 2026-10-24T04:18:23.6948528Z Updating files: 55% (3478/6323) 2026-10-24T04:18:23.6965649Z Updating files: 56% (3541/6323) 2026-10-24T04:18:23.6982189Z Updating files: 57% (3605/6323) 2026-10-24T04:18:23.6999849Z Updating files: 58% (3668/6323) 2026-10-24T04:18:23.7353634Z Updating files: 59% (3731/6323) 2026-10-24T04:18:23.7366872Z Updating files: 60% (3794/6323) 2026-10-24T04:18:23.7382348Z Updating files: 61% (3858/6323) 2026-10-24T04:18:23.7399413Z Updating files: 62% (3921/6323) 2026-10-24T04:18:23.7419154Z Updating files: 63% (3984/6323) 2026-10-24T04:18:23.7444727Z Updating files: 64% (4047/6323) 2026-10-24T04:18:23.7465440Z Updating files: 65% (4110/6323) 2026-10-24T04:18:23.7480570Z Updating files: 66% (4174/6323) 2026-10-24T04:18:23.7504775Z Updating files: 67% (4237/6323) 2026-10-24T04:18:23.7516794Z Updating files: 68% (4300/6323) 2026-10-24T04:18:23.7535287Z Updating files: 69% (4363/6323) 2026-10-24T04:18:23.7547540Z Updating files: 70% (4427/6323) 2026-10-24T04:18:23.7562595Z Updating files: 71% (4490/6323) 2026-10-24T04:18:23.7578932Z Updating files: 72% (4553/6323) 2026-10-24T04:18:23.7603293Z Updating files: 73% (4616/6323) 2026-10-24T04:18:23.7850011Z Updating files: 74% (4680/6323) 2026-10-24T04:18:23.8030230Z Updating files: 75% (4743/6323) 2026-10-24T04:18:23.8050487Z Updating files: 76% (4806/6323) 2026-10-24T04:18:23.8069767Z Updating files: 77% (4869/6323) 2026-10-24T04:18:23.8094047Z Updating files: 78% (4932/6323) 2026-10-24T04:18:23.8112731Z Updating files: 79% (4996/6323) 2026-10-24T04:18:23.8130964Z Updating files: 80% (5059/6323) 2026-10-24T04:18:23.8148119Z Updating files: 81% (5122/6323) 2026-10-24T04:18:23.8166424Z Updating files: 82% (5185/6323) 2026-10-24T04:18:23.8184063Z Updating files: 83% (5249/6323) 2026-10-24T04:18:23.8204819Z Updating files: 84% (5312/6323) 2026-10-24T04:18:23.8226118Z Updating files: 85% (5375/6323) 2026-10-24T04:18:23.8248285Z Updating files: 86% (5438/6323) 2026-10-24T04:18:23.8314059Z Updating files: 87% (5502/6323) 2026-10-24T04:18:23.8344648Z Updating files: 88% (5565/6323) 2026-10-24T04:18:23.8362118Z Updating files: 89% (5628/6323) 2026-10-24T04:18:23.8386043Z Updating files: 90% (5691/6323) 2026-10-24T04:18:23.8418614Z Updating files: 91% (5754/6323) 2026-10-24T04:18:23.8434009Z Updating files: 92% (5818/6323) 2026-10-24T04:18:23.8449439Z Updating files: 93% (5881/6323) 2026-10-24T04:18:23.8468980Z Updating files: 94% (5944/6323) 2026-10-24T04:18:23.8491661Z Updating files: 95% (6007/6323) 2026-10-24T04:18:23.8542935Z Updating files: 96% (6071/6323) 2026-10-24T04:18:23.8567578Z Updating files: 97% (6134/6323) 2026-10-24T04:18:23.8611755Z Updating files: 98% (6197/6323) 2026-10-24T04:18:23.8630101Z Updating files: 99% (6260/6323) 2026-10-24T04:18:23.8630310Z Updating files: 100% (6323/6323) 2026-10-24T04:18:23.8630494Z Updating files: 100% (6323/6323), done. 2026-10-24T04:18:23.8774805Z Note: switching to 'refs/remotes/pull/24334/merge'. 2026-10-24T04:18:23.8775112Z 2026-10-24T04:18:23.8775274Z You are in 'detached HEAD' state. You can look around, make experimental 2026-10-24T04:18:23.8775602Z changes and commit them, and you can discard any commits you make in this 2026-10-24T04:18:23.8776218Z state without impacting any branches by switching back to a branch. 2026-10-24T04:18:23.8776619Z 2026-10-24T04:18:23.8776761Z If you want to create a new branch to retain commits you create, you may 2026-10-24T04:18:23.8777049Z do so (now or later) by using -c with the switch command. Example: 2026-10-24T04:18:23.8777206Z 2026-10-24T04:18:23.8777286Z git switch -c 2026-10-24T04:18:23.8777393Z 2026-10-24T04:18:23.8777465Z Or undo this operation with: 2026-10-24T04:18:23.8777566Z 2026-10-24T04:18:23.8777630Z git switch - 2026-10-24T04:18:23.8777743Z 2026-10-24T04:18:23.8777888Z Turn off this advice by setting config variable advice.detachedHead to false 2026-10-24T04:18:23.8778070Z 2026-10-24T04:18:23.8778279Z HEAD is now at c8a6e71 Merge 09a0912b055c177c0131a03bc7bbda55963f1284 into d14ace8233ad3cf7856b6b834824f888240d67a1 2026-10-24T04:18:23.8787204Z ##[endgroup] 2026-10-24T04:18:23.8818104Z [command]/usr/local/bin/git log -1 --format=%H 2026-10-24T04:18:23.8836786Z c8a6e71329b7974615754c95f01fdf30811e8d63 2026-10-24T04:18:23.8907889Z ##[group]Run files="$(git ls-files .github/pr-assets)" 2026-10-24T04:18:23.8908107Z files="$(git ls-files .github/pr-assets)" 2026-10-24T04:18:23.8908284Z if test -n "$files"; then 2026-10-24T04:18:23.8908502Z  printf 'PR evidence must be uploaded to GitHub, not committed:\n%s\n' "$files" >&2 2026-10-24T04:18:23.8908708Z  exit 1 2026-10-24T04:18:23.8908814Z fi 2026-10-24T04:18:23.8919887Z shell: /usr/bin/bash -e {0} 2026-10-24T04:18:23.8920017Z env: 2026-10-24T04:18:23.8920144Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 156 2026-10-24T04:18:23.8920308Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 354 2026-10-24T04:18:23.8920445Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T04:18:23.8920574Z ##[endgroup] 2026-10-24T04:18:23.9053540Z Prepare all required actions 2026-10-24T04:18:23.9053876Z Getting action download info 2026-10-24T04:18:24.0180960Z Download action repository 'voidzero-dev/setup-vp@v1' (SHA:250f29ce396baf5e8f24498e17c0dfdebabc26eb) 2026-10-24T04:18:24.1011703Z ##[group]Run ./.github/actions/setup-ci-deps 2026-10-24T04:18:24.1011868Z env: 2026-10-24T04:18:24.1011982Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 156 2026-10-24T04:18:24.1012127Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 354 2026-10-24T04:18:24.1012277Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T04:18:24.1012425Z ##[endgroup] 2026-10-24T04:18:24.1085335Z ##[start-action display=Resolve Vite+ version;id=__self.vp] 2026-10-24T04:18:24.1098835Z ##[group]Run echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-24T04:18:24.1099276Z echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-24T04:18:24.1099570Z echo "node=$(jq -r '.engines.node' package.json)" >> "$GITHUB_OUTPUT" 2026-10-24T04:18:24.1099810Z echo "pnpm=$(jq -r '.packageManager' package.json)" >> "$GITHUB_OUTPUT" 2026-10-24T04:18:24.1109512Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T04:18:24.1109675Z env: 2026-10-24T04:18:24.1109788Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 156 2026-10-24T04:18:24.1109930Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 354 2026-10-24T04:18:24.1110071Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T04:18:24.1110205Z ##[endgroup] 2026-10-24T04:18:24.1172993Z ##[end-action id=__self.vp;outcome=success;conclusion=success;duration_ms=8] 2026-10-24T04:18:24.1174203Z ##[start-action display=Cache Vite+;id=__self.vp_cache] 2026-10-24T04:18:24.1218527Z ##[group]Run actions/cache@v6 2026-10-24T04:18:24.1218746Z with: 2026-10-24T04:18:24.1218901Z path: ~/.vite-plus 2026-10-24T04:18:24.1219156Z key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T04:18:24.1219393Z enableCrossOsArchive: false 2026-10-24T04:18:24.1219524Z fail-on-cache-miss: false 2026-10-24T04:18:24.1219645Z lookup-only: false 2026-10-24T04:18:24.1219755Z save-always: false 2026-10-24T04:18:24.1219862Z env: 2026-10-24T04:18:24.1219969Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 156 2026-10-24T04:18:24.1220116Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 354 2026-10-24T04:18:24.1220342Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T04:18:24.1220558Z ##[endgroup] 2026-10-24T04:18:24.3073228Z Cache hit for: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T04:18:24.6811166Z Received 170349591 of 170349591 (100.0%), 468.2 MBs/sec 2026-10-24T04:18:24.6812580Z Cache Size: ~162 MB (170349591 B) 2026-10-24T04:18:24.6835661Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/060d2ca1-3eb2-4c0c-92fd-2bcf7144bb72/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T04:18:25.3023238Z Cache restored successfully 2026-10-24T04:18:25.3152822Z Cache restored from key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T04:18:25.3228332Z ##[end-action id=__self.vp_cache;outcome=success;conclusion=success;duration_ms=1205] 2026-10-24T04:18:25.3230688Z ##[start-action display=Use cached Vite+;id=__self.__run] 2026-10-24T04:18:25.3251185Z ##[group]Run echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-24T04:18:25.3251398Z echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-24T04:18:25.3251568Z "$HOME/.vite-plus/bin/vp" env use "26.12.1" 2026-10-24T04:18:25.3263552Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T04:18:25.3263712Z env: 2026-10-24T04:18:25.3263830Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 156 2026-10-24T04:18:25.3263972Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 354 2026-10-24T04:18:25.3264113Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T04:18:25.3264257Z ##[endgroup] 2026-10-24T04:18:25.3302186Z Using Node.js v26.12.1 (resolved from 26.12.1) 2026-10-24T04:18:25.3310130Z ##[end-action id=__self.__run;outcome=success;conclusion=success;duration_ms=7] 2026-10-24T04:18:25.3311349Z ##[start-action display=Setup Vite+;id=__self.__voidzero-dev_setup-vp] 2026-10-24T04:18:25.3314761Z ##[end-action id=__self.__voidzero-dev_setup-vp;outcome=skipped;conclusion=skipped;duration_ms=0] 2026-10-24T04:18:25.3315839Z ##[start-action display=Resolve pnpm store path;id=__self.pnpm_store] 2026-10-24T04:18:25.3327179Z ##[group]Run store_path="$(vp pm cache dir)" 2026-10-24T04:18:25.3327392Z store_path="$(vp pm cache dir)" 2026-10-24T04:18:25.3340519Z echo "path=$store_path" >> "$GITHUB_OUTPUT" 2026-10-24T04:18:25.3351126Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T04:18:25.3351287Z env: 2026-10-24T04:18:25.3351396Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 156 2026-10-24T04:18:25.3351538Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 354 2026-10-24T04:18:25.3351809Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T04:18:25.3351939Z ##[endgroup] 2026-10-24T04:18:25.3483148Z ##[end-action id=__self.pnpm_store;outcome=success;conclusion=success;duration_ms=16] 2026-10-24T04:18:25.3484284Z ##[start-action display=Cache full pnpm store;id=__self.__actions_cache] 2026-10-24T04:18:25.3820089Z ##[group]Run actions/cache@v6 2026-10-24T04:18:25.3820218Z with: 2026-10-24T04:18:25.3820335Z path: /home/runner/.local/share/pnpm/store/v11 2026-10-24T04:18:25.3820586Z key: pnpm-full-v1-Linux-X64-3cb0b4d7cff93dc8fe33f2ea73cac71ca25a36270fcb648b9b4a9320151012ef 2026-10-24T04:18:25.3820833Z restore-keys: pnpm-full-v1-Linux-X64- 2026-10-24T04:18:25.3820975Z enableCrossOsArchive: false 2026-10-24T04:18:25.3821112Z fail-on-cache-miss: false 2026-10-24T04:18:25.3821229Z lookup-only: false 2026-10-24T04:18:25.3821341Z save-always: false 2026-10-24T04:18:25.3821445Z env: 2026-10-24T04:18:25.3821551Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 156 2026-10-24T04:18:25.3821700Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 354 2026-10-24T04:18:25.3821836Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T04:18:25.3821964Z ##[endgroup] 2026-10-24T04:18:25.5668382Z Cache hit for: pnpm-full-v1-Linux-X64-3cb0b4d7cff93dc8fe33f2ea73cac71ca25a36270fcb648b9b4a9320151012ef 2026-10-24T04:18:26.6613961Z Received 671088640 of 995020926 (67.4%), 597.0 MBs/sec 2026-10-24T04:18:27.0823749Z Received 995020926 of 995020926 (100.0%), 635.6 MBs/sec 2026-10-24T04:18:27.0828038Z Cache Size: ~949 MB (995020926 B) 2026-10-24T04:18:27.0863361Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/90b97ca0-100c-4290-96c9-c45b9f721400/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T04:18:32.0618971Z Cache restored successfully 2026-10-24T04:18:32.1066023Z Cache restored from key: pnpm-full-v1-Linux-X64-3cb0b4d7cff93dc8fe33f2ea73cac71ca25a36270fcb648b9b4a9320151012ef 2026-10-24T04:18:32.1145370Z ##[end-action id=__self.__actions_cache;outcome=success;conclusion=success;duration_ms=6766] 2026-10-24T04:18:32.1148393Z ##[start-action display=Install dependencies;id=__self.__run_2] 2026-10-24T04:18:32.1162407Z ##[group]Run vp install 2026-10-24T04:18:32.1162590Z vp install 2026-10-24T04:18:32.1178977Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T04:18:32.1179156Z env: 2026-10-24T04:18:32.1179274Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 156 2026-10-24T04:18:32.1179430Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 354 2026-10-24T04:18:32.1179575Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T04:18:32.1179716Z ##[endgroup] 2026-10-24T04:18:32.1589018Z Scope: all 33 workspace projects 2026-10-24T04:18:32.2584238Z ? Verifying lockfile against supply-chain policies (2088 entries)... 2026-10-24T04:18:32.4945809Z Packages are hard linked from the content-addressable store to the virtual store. 2026-10-24T04:18:32.4946137Z Content-addressable store is at: /home/runner/.local/share/pnpm/store/v11 2026-10-24T04:18:32.4946452Z Virtual store is at: node_modules/.pnpm 2026-10-24T04:18:34.3189190Z ✓ Lockfile passes supply-chain policies (2088 entries in 2.1s) 2026-10-24T04:18:34.3189493Z Lockfile is up to date, resolution step is skipped 2026-10-24T04:18:34.3350349Z Packages: +1721 2026-10-24T04:18:34.3350530Z ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2026-10-24T04:18:34.3654804Z Progress: resolved 1721, reused 1718, downloaded 0, added 1721, done 2026-10-24T04:18:35.2081875Z . prepare$ vp config --no-agent 2026-10-24T04:18:35.2967924Z . prepare: Done 2026-10-24T04:18:35.2982096Z 2026-10-24T04:18:35.2982336Z devDependencies: 2026-10-24T04:18:35.2982561Z + @coderabbitai/config 1.1.0 2026-10-24T04:18:35.2982784Z + @shadcn/lint 0.1.5 2026-10-24T04:18:35.2983023Z + @types/node 24.12.4 2026-10-24T04:18:35.2983213Z + knip 6.34.0 2026-10-24T04:18:35.2983420Z + typescript <- @tsc-rs/typescript 0.8.0 2026-10-24T04:18:35.2983649Z + vite-plus 1.3.0 2026-10-24T04:18:35.2983754Z 2026-10-24T04:18:35.2998339Z Done in 3.2s using pnpm v12.14.0 2026-10-24T04:18:35.3146979Z ##[end-action id=__self.__run_2;outcome=success;conclusion=success;duration_ms=3199] 2026-10-24T04:18:35.3588569Z ##[group]Run actions/cache@v6 2026-10-24T04:18:35.3588787Z with: 2026-10-24T04:18:35.3588951Z path: ~/.cache/electron 2026-10-24T04:18:35.3589287Z key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T04:18:35.3589655Z enableCrossOsArchive: false 2026-10-24T04:18:35.3589861Z fail-on-cache-miss: false 2026-10-24T04:18:35.3589988Z lookup-only: false 2026-10-24T04:18:35.3590102Z save-always: false 2026-10-24T04:18:35.3590206Z env: 2026-10-24T04:18:35.3590311Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 156 2026-10-24T04:18:35.3590461Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 354 2026-10-24T04:18:35.3590616Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T04:18:35.3590749Z ##[endgroup] 2026-10-24T04:18:35.5627510Z Cache hit for: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T04:18:35.7246947Z Received 122906203 of 122906203 (100.0%), 802.8 MBs/sec 2026-10-24T04:18:35.7247322Z Cache Size: ~117 MB (122906203 B) 2026-10-24T04:18:35.7283552Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/61fcb4d8-b125-4c9d-965c-e80f6c568b83/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T04:18:35.7803791Z Cache restored successfully 2026-10-24T04:18:35.7912680Z Cache restored from key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T04:18:35.8004015Z ##[group]Run vp run --filter @t3tools/desktop ensure:electron 2026-10-24T04:18:35.8004353Z vp run --filter @t3tools/desktop ensure:electron 2026-10-24T04:18:35.8016176Z shell: /usr/bin/bash -e {0} 2026-10-24T04:18:35.8016302Z env: 2026-10-24T04:18:35.8016671Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 156 2026-10-24T04:18:35.8016817Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 354 2026-10-24T04:18:35.8016953Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T04:18:35.8017085Z ##[endgroup] 2026-10-24T04:18:35.9457521Z ~/apps/desktop$ node scripts/ensure-electron-runtime.mjs ⊘ cache disabled 2026-10-24T04:18:36.4919125Z /home/runner/_work/t3code/t3code/node_modules/.pnpm/electron@44.9.3_supports-color@8.1.1/node_modules/electron/dist/electron 2026-10-24T04:18:36.4933648Z 2026-10-24T04:18:36.5007622Z ##[group]Run vp run knip:check 2026-10-24T04:18:36.5007788Z vp run knip:check 2026-10-24T04:18:36.5019522Z shell: /usr/bin/bash -e {0} 2026-10-24T04:18:36.5019642Z env: 2026-10-24T04:18:36.5019755Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 156 2026-10-24T04:18:36.5019897Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 354 2026-10-24T04:18:36.5020036Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T04:18:36.5020164Z ##[endgroup] 2026-10-24T04:18:36.6407217Z $ knip --include files,dependencies --no-config-hints ⊘ cache disabled 2026-10-24T04:18:40.2037934Z 2026-10-24T04:18:40.2040912Z $ 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-24T04:18:48.0453322Z 2026-10-24T04:18:48.0454189Z --- 2026-10-24T04:18:48.0454525Z vp run: 2/2 successful. (Run `vp run --last-details` for full details) 2026-10-24T04:18:48.0522618Z ##[group]Run vp run --filter @t3tools/source-control-github generate --check 2026-10-24T04:18:48.0522898Z vp run --filter @t3tools/source-control-github generate --check 2026-10-24T04:18:48.0534296Z shell: /usr/bin/bash -e {0} 2026-10-24T04:18:48.0534433Z env: 2026-10-24T04:18:48.0534561Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 156 2026-10-24T04:18:48.0534706Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 354 2026-10-24T04:18:48.0534841Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T04:18:48.0534971Z ##[endgroup] 2026-10-24T04:18:48.1933787Z ~/packages/source-control-github$ graphqlgen --check ⊘ cache disabled 2026-10-24T04:18:48.3726602Z 2026-10-24T04:18:48.3791834Z ##[group]Run vp run --filter t3 generate --check 2026-10-24T04:18:48.3792044Z vp run --filter t3 generate --check 2026-10-24T04:18:48.3803463Z shell: /usr/bin/bash -e {0} 2026-10-24T04:18:48.3803592Z env: 2026-10-24T04:18:48.3803715Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 156 2026-10-24T04:18:48.3803861Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 354 2026-10-24T04:18:48.3804000Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T04:18:48.3804129Z ##[endgroup] 2026-10-24T04:18:48.5192910Z ~/apps/server$ graphqlgen --check ⊘ cache disabled 2026-10-24T04:18:48.6676402Z 2026-10-24T04:18:48.6741450Z ##[group]Run vp check 2026-10-24T04:18:48.6741603Z vp check 2026-10-24T04:18:48.6752766Z shell: /usr/bin/bash -e {0} 2026-10-24T04:18:48.6752895Z env: 2026-10-24T04:18:48.6753003Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 156 2026-10-24T04:18:48.6753148Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 354 2026-10-24T04:18:48.6753283Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T04:18:48.6753412Z ##[endgroup] 2026-10-24T04:18:49.1962046Z pass: All 5678 files are correctly formatted (383ms, 8 threads) 2026-10-24T04:18:54.1359560Z warn: Lint warnings found 2026-10-24T04:18:54.1360618Z ⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence. 2026-10-24T04:18:54.1361026Z ╭─[apps/web/src/components/pullRequest/pullRequestList.logic.ts:265:9] 2026-10-24T04:18:54.1361257Z 264 │ ): boolean { 2026-10-24T04:18:54.1361507Z 265 │ const labels = entry.labels.map((label) => label.name.trim().toLowerCase()); 2026-10-24T04:18:54.1361843Z ·  ───────────────────────────────────────────────────────────────────── 2026-10-24T04:18:54.1362132Z 266 │ const holds = (label: string) => labels.includes(label.trim().toLowerCase()); 2026-10-24T04:18:54.1362337Z ╰──── 2026-10-24T04:18:54.1362473Z  help: Switch to `Set` 2026-10-24T04:18:54.1362574Z 2026-10-24T04:18:54.1362797Z ⚠ typescript(no-extraneous-class): Unexpected class with only a constructor. 2026-10-24T04:18:54.1363125Z ╭─[apps/desktop/src/preview/Manager.test.ts:158:18] 2026-10-24T04:18:54.1363359Z 157 │ BrowserWindow: browserWindowConstructor, 2026-10-24T04:18:54.1363634Z 158 │ ╭─▶ ClipboardItem: class { 2026-10-24T04:18:54.1363915Z 159 │ │ constructor(data: Record) { 2026-10-24T04:18:54.1364206Z 160 │ │ clipboardItemConstructor(data); 2026-10-24T04:18:54.1364408Z 161 │ │ } 2026-10-24T04:18:54.1364616Z 162 │ ╰─▶ }, 2026-10-24T04:18:54.1364810Z 163 │ clipboard: { 2026-10-24T04:18:54.1364941Z ╰──── 2026-10-24T04:18:54.1365175Z  help: Try replacing this class with a standalone function or deleting it entirely 2026-10-24T04:18:54.1365348Z 2026-10-24T04:18:54.1365538Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T04:18:54.1365897Z ╭─[apps/web/src/components/pullRequest/PullRequestSummaryTab.tsx:814:17] 2026-10-24T04:18:54.1366126Z 813 │
{ 2026-10-24T04:18:54.1379248Z ·  ────┬──── 2026-10-24T04:18:54.1379459Z · ╰── This is the containing effect 2026-10-24T04:18:54.1379669Z 119 │ void refreshNotifications(); 2026-10-24T04:18:54.1379950Z ·  ──────────┬───────── 2026-10-24T04:18:54.1380262Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T04:18:54.1380565Z 120 │ const subscription = AppState.addEventListener("change", (state) => { 2026-10-24T04:18:54.1380767Z ╰──── 2026-10-24T04:18:54.1381404Z  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-24T04:18:54.1382239Z  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-24T04:18:54.1382539Z 2026-10-24T04:18:54.1382791Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T04:18:54.1383214Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:128:7] 2026-10-24T04:18:54.1383447Z 125 │ 2026-10-24T04:18:54.1383570Z 126 │ useEffect(() => { 2026-10-24T04:18:54.1383720Z ·  ────┬──── 2026-10-24T04:18:54.1383937Z · ╰── This is the containing effect 2026-10-24T04:18:54.1384156Z 127 │ if (!isLoaded) { 2026-10-24T04:18:54.1384333Z 128 │ setLiveActivityStatus("checking"); 2026-10-24T04:18:54.1384525Z ·  ──────────┬────────── 2026-10-24T04:18:54.1384786Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T04:18:54.1385014Z 129 │ return; 2026-10-24T04:18:54.1385143Z ╰──── 2026-10-24T04:18:54.1385783Z  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-24T04:18:54.1386615Z  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-24T04:18:54.1386909Z 2026-10-24T04:18:54.1387326Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const. 2026-10-24T04:18:54.1387849Z ╭─[apps/server/src/provider/acp/AntigravityProtocol.ts:263:20] 2026-10-24T04:18:54.1388083Z 262 │ ...(update._meta !== undefined 2026-10-24T04:18:54.1388350Z 263 │ ? { _meta: Schema.is(Schema.Record(Schema.String, Schema.Json))(meta) ? meta : null } 2026-10-24T04:18:54.1388598Z ·  ───────── 2026-10-24T04:18:54.1388760Z 264 │ : {}), 2026-10-24T04:18:54.1388882Z ╰──── 2026-10-24T04:18:54.1388938Z 2026-10-24T04:18:54.1389146Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T04:18:54.1389475Z ╭─[apps/web/src/lib/composerContextReferences.ts:90:40] 2026-10-24T04:18:54.1389689Z 89 │ let cursor = prompt.length; 2026-10-24T04:18:54.1389891Z 90 │ for (const occurrence of occurrences.reverse()) { 2026-10-24T04:18:54.1390173Z ·  ─────── 2026-10-24T04:18:54.1390407Z 91 │ let { start, end } = occurrence; 2026-10-24T04:18:54.1390553Z ╰──── 2026-10-24T04:18:54.1390864Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T04:18:54.1391110Z 2026-10-24T04:18:54.1391287Z ⚠ eslint(no-unused-vars): Type 'Scope' is imported but never used. 2026-10-24T04:18:54.1391603Z ╭─[apps/server/src/provider/ProviderAuthService.ts:15:18] 2026-10-24T04:18:54.1391829Z 14 │ import * as Layer from "effect/Layer"; 2026-10-24T04:18:54.1392023Z 15 │ import type * as Scope from "effect/Scope"; 2026-10-24T04:18:54.1392207Z ·  ──┬── 2026-10-24T04:18:54.1392428Z · ╰── 'Scope' is imported here 2026-10-24T04:18:54.1392648Z 16 │ import * as Stream from "effect/Stream"; 2026-10-24T04:18:54.1392806Z ╰──── 2026-10-24T04:18:54.1392952Z  help: Consider removing this import. 2026-10-24T04:18:54.1393064Z 2026-10-24T04:18:54.1393303Z ⚠ eslint(no-unused-vars): Function 'normalizeTerminalContextSelection' is declared but never used. 2026-10-24T04:18:54.1393641Z ╭─[apps/web/src/lib/terminalContext.ts:56:10] 2026-10-24T04:18:54.1393814Z 55 │ 2026-10-24T04:18:54.1393967Z 56 │ function normalizeTerminalContextSelection( 2026-10-24T04:18:54.1394616Z ·  ────────────────┬──────────────── 2026-10-24T04:18:54.1394971Z · ╰── 'normalizeTerminalContextSelection' is declared here 2026-10-24T04:18:54.1395257Z 57 │ selection: TerminalContextSelection, 2026-10-24T04:18:54.1395425Z ╰──── 2026-10-24T04:18:54.1395609Z  help: Consider removing this declaration. 2026-10-24T04:18:54.1395738Z 2026-10-24T04:18:54.1395970Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-24T04:18:54.1396309Z ╭─[apps/server/src/terminal/Manager.test.ts:731:31] 2026-10-24T04:18:54.1396501Z 730 │ ); 2026-10-24T04:18:54.1396743Z 731 │ const snapshot = events.filter((event) => event.type === "snapshot").at(-1)?.snapshot; 2026-10-24T04:18:54.1397137Z ·  ────── 2026-10-24T04:18:54.1397363Z 732 │ expect(snapshot?.history).toBe("aa😀\rEND"); 2026-10-24T04:18:54.1397533Z ╰──── 2026-10-24T04:18:54.1397754Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T04:18:54.1397930Z 2026-10-24T04:18:54.1398249Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T04:18:54.1398600Z ╭─[apps/web/src/components/chat/useThreadLifecycle.tsx:178:58] 2026-10-24T04:18:54.1398865Z 177 │ if (snoozeClockState.shell !== activeThreadShell) { 2026-10-24T04:18:54.1399143Z 178 │ setSnoozeClockState({ shell: activeThreadShell, now: new Date().toISOString() }); 2026-10-24T04:18:54.1399432Z ·  ─────┬──── 2026-10-24T04:18:54.1399741Z · ╰── Cannot call impure function 2026-10-24T04:18:54.1399956Z 179 │ } 2026-10-24T04:18:54.1400069Z ╰──── 2026-10-24T04:18:54.1400409Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T04:18:54.1400965Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T04:18:54.1401241Z 2026-10-24T04:18:54.1401432Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T04:18:54.1401786Z ╭─[apps/web/src/components/pullRequest/PullRequestChecksPopover.tsx:88:15] 2026-10-24T04:18:54.1402025Z 87 │
  • { 2026-10-24T04:18:54.1404436Z ·  ────┬──── 2026-10-24T04:18:54.1404644Z · ╰── This is the containing effect 2026-10-24T04:18:54.1404832Z 436 │ if ( 2026-10-24T04:18:54.1404977Z 437 │ props.active === false || 2026-10-24T04:18:54.1405147Z 438 │ activeDraftKey !== null || 2026-10-24T04:18:54.1405326Z 439 │ editingPendingTask !== null || 2026-10-24T04:18:54.1405510Z 440 │ selectedProject === null 2026-10-24T04:18:54.1405667Z 441 │ ) { 2026-10-24T04:18:54.1405794Z 442 │ return; 2026-10-24T04:18:54.1405923Z 443 │ } 2026-10-24T04:18:54.1406055Z 444 │ setActiveDraftKey( 2026-10-24T04:18:54.1406221Z ·  ────────┬──────── 2026-10-24T04:18:54.1406483Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T04:18:54.1406713Z 445 │ createNewTaskDraft({ 2026-10-24T04:18:54.1406858Z ╰──── 2026-10-24T04:18:54.1407499Z  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-24T04:18:54.1408409Z  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-24T04:18:54.1408740Z 2026-10-24T04:18:54.1408974Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T04:18:54.1409693Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:1244:36] 2026-10-24T04:18:54.1409975Z 1243 │ 2026-10-24T04:18:54.1410296Z 1244 │ {props.children} 2026-10-24T04:18:54.1410600Z ·  ───────────── 2026-10-24T04:18:54.1410794Z 1245 │ 2026-10-24T04:18:54.1410936Z ╰──── 2026-10-24T04:18:54.1411220Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T04:18:54.1411568Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T04:18:54.1411742Z 2026-10-24T04:18:54.1411897Z ⚠ react(immutability): This value cannot be modified 2026-10-24T04:18:54.1412208Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:111:5] 2026-10-24T04:18:54.1412429Z 107 │ ); 2026-10-24T04:18:54.1412640Z 108 │ const separationProgress = useSharedValue(props.showScrollToEnd ? 1 : 0); 2026-10-24T04:18:54.1412887Z ·  ─────────┬──────── 2026-10-24T04:18:54.1413132Z · ╰── `separationProgress` originates here 2026-10-24T04:18:54.1413348Z 109 │ 2026-10-24T04:18:54.1413477Z 110 │ useEffect(() => { 2026-10-24T04:18:54.1413735Z 111 │ separationProgress.value = withTiming(props.showScrollToEnd ? 1 : 0, CONTROL_TIMING); 2026-10-24T04:18:54.1413988Z ·  ─────────┬──────── 2026-10-24T04:18:54.1414271Z · ╰── `separationProgress` cannot be modified 2026-10-24T04:18:54.1414528Z 112 │ }, [props.showScrollToEnd, separationProgress]); 2026-10-24T04:18:54.1414700Z ╰──── 2026-10-24T04:18:54.1415016Z  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-24T04:18:54.1415566Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T04:18:54.1415852Z 2026-10-24T04:18:54.1416011Z ⚠ react(immutability): This value cannot be modified 2026-10-24T04:18:54.1416323Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5] 2026-10-24T04:18:54.1416749Z 128 │ // and repeatedly retargets the animation as it grows. 2026-10-24T04:18:54.1416985Z 129 │ const capsuleWidth = useSharedValue(null); 2026-10-24T04:18:54.1417195Z ·  ──────┬───── 2026-10-24T04:18:54.1417420Z · ╰── `capsuleWidth` originates here 2026-10-24T04:18:54.1417670Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T04:18:54.1417905Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T04:18:54.1418139Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T04:18:54.1418352Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T04:18:54.1418633Z 134 │ return; 2026-10-24T04:18:54.1418826Z 135 │ } 2026-10-24T04:18:54.1418994Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T04:18:54.1419201Z 137 │ measuredWidthRef.current = width; 2026-10-24T04:18:54.1419444Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T04:18:54.1419675Z ·  ──────┬───── 2026-10-24T04:18:54.1436633Z · ╰── `capsuleWidth` cannot be modified 2026-10-24T04:18:54.1436930Z 139 │ }; 2026-10-24T04:18:54.1437127Z ╰──── 2026-10-24T04:18:54.1437552Z  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-24T04:18:54.1438122Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T04:18:54.1438412Z 2026-10-24T04:18:54.1438580Z ⚠ react(immutability): This value cannot be modified 2026-10-24T04:18:54.1438943Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7] 2026-10-24T04:18:54.1439479Z 128 │ // and repeatedly retargets the animation as it grows. 2026-10-24T04:18:54.1439848Z 129 │ const capsuleWidth = useSharedValue(null); 2026-10-24T04:18:54.1440182Z ·  ──────┬───── 2026-10-24T04:18:54.1440550Z · ╰── `capsuleWidth` originates here 2026-10-24T04:18:54.1440943Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T04:18:54.1441216Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T04:18:54.1441454Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T04:18:54.1441674Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T04:18:54.1441844Z 134 │ return; 2026-10-24T04:18:54.1441970Z 135 │ } 2026-10-24T04:18:54.1442135Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T04:18:54.1442333Z 137 │ measuredWidthRef.current = width; 2026-10-24T04:18:54.1442570Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T04:18:54.1442766Z 139 │ }; 2026-10-24T04:18:54.1442911Z 140 │ const hasStatus = props.status !== null; 2026-10-24T04:18:54.1443143Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-24T04:18:54.1443353Z 142 │ useEffect(() => { 2026-10-24T04:18:54.1443495Z 143 │ if (!hasStatus) { 2026-10-24T04:18:54.1443660Z 144 │ measuredWidthRef.current = null; 2026-10-24T04:18:54.1443841Z 145 │ capsuleWidth.value = null; 2026-10-24T04:18:54.1444017Z ·  ──────┬───── 2026-10-24T04:18:54.1444288Z · ╰── `capsuleWidth` cannot be modified 2026-10-24T04:18:54.1444475Z 146 │ } 2026-10-24T04:18:54.1444588Z ╰──── 2026-10-24T04:18:54.1444895Z  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-24T04:18:54.1445435Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T04:18:54.1445714Z 2026-10-24T04:18:54.1445909Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T04:18:54.1446349Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7] 2026-10-24T04:18:54.1446687Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-24T04:18:54.1446894Z 142 │ useEffect(() => { 2026-10-24T04:18:54.1447050Z ·  ───┬─── 2026-10-24T04:18:54.1447357Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-24T04:18:54.1447619Z 143 │ if (!hasStatus) { 2026-10-24T04:18:54.1447789Z 144 │ measuredWidthRef.current = null; 2026-10-24T04:18:54.1447964Z 145 │ capsuleWidth.value = null; 2026-10-24T04:18:54.1448134Z ·  ──────┬───── 2026-10-24T04:18:54.1448355Z · ╰── This modifies `capsuleWidth` 2026-10-24T04:18:54.1448546Z 146 │ } 2026-10-24T04:18:54.1448661Z ╰──── 2026-10-24T04:18:54.1449051Z  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-24T04:18:54.1449652Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T04:18:54.1449931Z 2026-10-24T04:18:54.1450127Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T04:18:54.1450472Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5] 2026-10-24T04:18:54.1450743Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T04:18:54.1450977Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T04:18:54.1451233Z ·  ───────────────┬─────────────── 2026-10-24T04:18:54.1451587Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-24T04:18:54.1451904Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T04:18:54.1452115Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T04:18:54.1452286Z 134 │ return; 2026-10-24T04:18:54.1452415Z 135 │ } 2026-10-24T04:18:54.1452580Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T04:18:54.1452783Z 137 │ measuredWidthRef.current = width; 2026-10-24T04:18:54.1453021Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T04:18:54.1453249Z ·  ──────┬───── 2026-10-24T04:18:54.1453471Z · ╰── This modifies `capsuleWidth` 2026-10-24T04:18:54.1453660Z 139 │ }; 2026-10-24T04:18:54.1453770Z ╰──── 2026-10-24T04:18:54.1454181Z  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-24T04:18:54.1454775Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T04:18:54.1455054Z 2026-10-24T04:18:54.1455486Z ⚠ 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-24T04:18:54.1456001Z ╭─[apps/server/src/assets/AssetAccess.test.ts:1043:32] 2026-10-24T04:18:54.1456333Z 1042 │ expect(error._tag).toBe("AssetGitHubMediaUrlValidationError"); 2026-10-24T04:18:54.1457181Z 1043 │ const encoded = yield* Schema.encodeEffect(Schema.fromJsonString(AssetAccessError))(error); 2026-10-24T04:18:54.1457486Z ·  ─────────────────── 2026-10-24T04:18:54.1457697Z 1044 │ expect(encoded).not.toContain(url); 2026-10-24T04:18:54.1457860Z ╰──── 2026-10-24T04:18:54.1457916Z 2026-10-24T04:18:54.1458194Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T04:18:54.1458620Z ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:473:19] 2026-10-24T04:18:54.1458846Z 472 │ onFilters, 2026-10-24T04:18:54.1458990Z 473 │ authorOptions = [], 2026-10-24T04:18:54.1459157Z ·  ── 2026-10-24T04:18:54.1459317Z 474 │ labelOptions = [], 2026-10-24T04:18:54.1459452Z ╰──── 2026-10-24T04:18:54.1459818Z  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-24T04:18:54.1460112Z 2026-10-24T04:18:54.1460383Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T04:18:54.1460800Z ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:474:18] 2026-10-24T04:18:54.1461033Z 473 │ authorOptions = [], 2026-10-24T04:18:54.1461180Z 474 │ labelOptions = [], 2026-10-24T04:18:54.1461339Z ·  ── 2026-10-24T04:18:54.1461493Z 475 │ optionScope, 2026-10-24T04:18:54.1461627Z ╰──── 2026-10-24T04:18:54.1461989Z  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-24T04:18:54.1462280Z 2026-10-24T04:18:54.1462604Z ⚠ 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-24T04:18:54.1463040Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:50:18] 2026-10-24T04:18:54.1463352Z 49 │ for (const tool of ["sendMessage", "followupTask", "interruptAgent", "listAgents"]) { 2026-10-24T04:18:54.1463681Z 50 │ assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true); 2026-10-24T04:18:54.1463941Z ·  ───────── 2026-10-24T04:18:54.1464344Z 51 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true); 2026-10-24T04:18:54.1464617Z ╰──── 2026-10-24T04:18:54.1464671Z 2026-10-24T04:18:54.1464995Z ⚠ 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-24T04:18:54.1465431Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:51:18] 2026-10-24T04:18:54.1465740Z 50 │ assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true); 2026-10-24T04:18:54.1466081Z 51 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true); 2026-10-24T04:18:54.1466340Z ·  ───────── 2026-10-24T04:18:54.1466491Z 52 │ } 2026-10-24T04:18:54.1466601Z ╰──── 2026-10-24T04:18:54.1466658Z 2026-10-24T04:18:54.1466980Z ⚠ 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-24T04:18:54.1467413Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:55:5] 2026-10-24T04:18:54.1467621Z 54 │ assert.equal( 2026-10-24T04:18:54.1467867Z 55 │ Schema.is(CodexSchema.ServerNotification__CollabAgentToolCallStatus)("interrupted"), 2026-10-24T04:18:54.1468109Z ·  ───────── 2026-10-24T04:18:54.1468251Z 56 │ true, 2026-10-24T04:18:54.1468367Z ╰──── 2026-10-24T04:18:54.1468423Z 2026-10-24T04:18:54.1468746Z ⚠ 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-24T04:18:54.1469181Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:59:5] 2026-10-24T04:18:54.1469394Z 58 │ assert.equal( 2026-10-24T04:18:54.1469655Z 59 │ Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentToolCallStatus)("interrupted"), 2026-10-24T04:18:54.1469909Z ·  ───────── 2026-10-24T04:18:54.1470049Z 60 │ true, 2026-10-24T04:18:54.1470166Z ╰──── 2026-10-24T04:18:54.1470218Z 2026-10-24T04:18:54.1470538Z ⚠ 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-24T04:18:54.1470976Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:103:16] 2026-10-24T04:18:54.1471179Z 102 │ 2026-10-24T04:18:54.1471405Z 103 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse)(resumeResponse), true); 2026-10-24T04:18:54.1471658Z ·  ───────── 2026-10-24T04:18:54.1471812Z 104 │ }); 2026-10-24T04:18:54.1471928Z ╰──── 2026-10-24T04:18:54.1471987Z 2026-10-24T04:18:54.1472239Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T04:18:54.1472634Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:512:5] 2026-10-24T04:18:54.1472845Z 510 │ }, []); 2026-10-24T04:18:54.1472985Z 511 │ useEffect(() => { 2026-10-24T04:18:54.1473139Z ·  ────┬──── 2026-10-24T04:18:54.1473361Z · ╰── This is the containing effect 2026-10-24T04:18:54.1473578Z 512 │ setKeyboardStateSuspect(false); 2026-10-24T04:18:54.1473772Z ·  ───────────┬─────────── 2026-10-24T04:18:54.1474133Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T04:18:54.1474429Z 513 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-24T04:18:54.1474593Z ╰──── 2026-10-24T04:18:54.1475235Z  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-24T04:18:54.1476073Z  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-24T04:18:54.1476373Z 2026-10-24T04:18:54.1476630Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T04:18:54.1477021Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:872:7] 2026-10-24T04:18:54.1477335Z 869 │ const [lastKnownKeyboardHeight, setLastKnownKeyboardHeight] = useState(0); 2026-10-24T04:18:54.1477562Z 870 │ useEffect(() => { 2026-10-24T04:18:54.1477718Z ·  ────┬──── 2026-10-24T04:18:54.1477929Z · ╰── This is the containing effect 2026-10-24T04:18:54.1478217Z 871 │ if (liveKeyboardHeight > 0 && liveKeyboardHeight !== lastKnownKeyboardHeight) { 2026-10-24T04:18:54.1478489Z 872 │ setLastKnownKeyboardHeight(liveKeyboardHeight); 2026-10-24T04:18:54.1478710Z ·  ─────────────┬──────────── 2026-10-24T04:18:54.1478992Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T04:18:54.1479217Z 873 │ } 2026-10-24T04:18:54.1479336Z ╰──── 2026-10-24T04:18:54.1479982Z  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-24T04:18:54.1480822Z  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-24T04:18:54.1481120Z 2026-10-24T04:18:54.1481371Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T04:18:54.1481760Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1119:5] 2026-10-24T04:18:54.1481973Z 1117 │ 2026-10-24T04:18:54.1482103Z 1118 │ useEffect(() => { 2026-10-24T04:18:54.1482259Z ·  ────┬──── 2026-10-24T04:18:54.1482478Z · ╰── This is the containing effect 2026-10-24T04:18:54.1482688Z 1119 │ setAnchorMessageId(null); 2026-10-24T04:18:54.1482873Z ·  ─────────┬──────── 2026-10-24T04:18:54.1483140Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T04:18:54.1483389Z 1120 │ setSubmittedMessageId(null); 2026-10-24T04:18:54.1483539Z ╰──── 2026-10-24T04:18:54.1484532Z  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-24T04:18:54.1485568Z  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-24T04:18:54.1485874Z 2026-10-24T04:18:54.1486100Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T04:18:54.1486466Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:513:7] 2026-10-24T04:18:54.1486722Z 512 │ setKeyboardStateSuspect(false); 2026-10-24T04:18:54.1486928Z 513 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-24T04:18:54.1487210Z ·  ────────┬──────── ─────────┬──────── 2026-10-24T04:18:54.1487568Z · │ ╰── Unnecessary dependency `liveKeyboardHeight` 2026-10-24T04:18:54.1487929Z · ╰── Unnecessary dependency `isKeyboardVisible` 2026-10-24T04:18:54.1488217Z 514 │ const handleOwnedInputFocusChange = (focused: boolean) => { 2026-10-24T04:18:54.1488455Z ╰──── 2026-10-24T04:18:54.1488807Z  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-24T04:18:54.1489393Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.1489687Z 2026-10-24T04:18:54.1489885Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T04:18:54.1490233Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1067:7] 2026-10-24T04:18:54.1490479Z 1066 │ userInputInsetProgress.set(1); 2026-10-24T04:18:54.1490750Z 1067 │ }, [activeUserInputRequestId, userInputCardProgress, userInputInsetProgress]); 2026-10-24T04:18:54.1491013Z ·  ────────────┬─────────── 2026-10-24T04:18:54.1491299Z · ╰── Unnecessary dependency `activeUserInputRequestId` 2026-10-24T04:18:54.1491576Z 1068 │ const showContent = props.showContent ?? true; 2026-10-24T04:18:54.1491752Z ╰──── 2026-10-24T04:18:54.1492096Z  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-24T04:18:54.1492669Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.1492963Z 2026-10-24T04:18:54.1493159Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T04:18:54.1493511Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1125:15] 2026-10-24T04:18:54.1493736Z 1124 │ freeze.set(false); 2026-10-24T04:18:54.1493908Z 1125 │ }, [freeze, selectedThreadKey]); 2026-10-24T04:18:54.1494146Z ·  ────────┬──────── 2026-10-24T04:18:54.1494418Z · ╰── Unnecessary dependency `selectedThreadKey` 2026-10-24T04:18:54.1494630Z 1126 │ 2026-10-24T04:18:54.1494744Z ╰──── 2026-10-24T04:18:54.1495086Z  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-24T04:18:54.1495718Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.1496039Z 2026-10-24T04:18:54.1496191Z ⚠ react(immutability): This value cannot be modified 2026-10-24T04:18:54.1496556Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:955:5] 2026-10-24T04:18:54.1496820Z 950 │ const composerPopoverHeight = useSharedValue(0); 2026-10-24T04:18:54.1497043Z 951 │ const floatingControlCoverage = useSharedValue( 2026-10-24T04:18:54.1497250Z ·  ───────────┬─────────── 2026-10-24T04:18:54.1497510Z · ╰── `floatingControlCoverage` originates here 2026-10-24T04:18:54.1497787Z 952 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-24T04:18:54.1497975Z 953 │ ); 2026-10-24T04:18:54.1498105Z 954 │ useEffect(() => { 2026-10-24T04:18:54.1498283Z 955 │ floatingControlCoverage.value = withTiming( 2026-10-24T04:18:54.1498487Z ·  ───────────┬─────────── 2026-10-24T04:18:54.1498748Z · ╰── `floatingControlCoverage` cannot be modified 2026-10-24T04:18:54.1499030Z 956 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-24T04:18:54.1499214Z ╰──── 2026-10-24T04:18:54.1499526Z  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-24T04:18:54.1500060Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T04:18:54.1500339Z 2026-10-24T04:18:54.1500497Z ⚠ react(immutability): This value cannot be modified 2026-10-24T04:18:54.1500793Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:973:7] 2026-10-24T04:18:54.1501123Z 963 │ const userInputCoverageApplies = Platform.OS === "ios" && activeUserInputRequestId !== null; 2026-10-24T04:18:54.1501420Z 964 │ const combinedContentInsetEndAdjustment = useSharedValue( 2026-10-24T04:18:54.1501661Z ·  ────────────────┬──────────────── 2026-10-24T04:18:54.1501952Z · ╰── `combinedContentInsetEndAdjustment` originates here 2026-10-24T04:18:54.1502252Z 965 │ Math.max(0, estimatedOverlayHeight - nativeInsetOvercount), 2026-10-24T04:18:54.1502440Z 966 │ ); 2026-10-24T04:18:54.1502570Z 967 │ useAnimatedReaction( 2026-10-24T04:18:54.1502711Z 968 │ () => 2026-10-24T04:18:54.1502948Z 969 │ contentInsetEndAdjustment.value + 2026-10-24T04:18:54.1503174Z 970 │ floatingControlCoverage.value + 2026-10-24T04:18:54.1503468Z 971 │ (userInputCoverageApplies ? userInputInsetProgress.value * userInputCardCoverage.value : 0), 2026-10-24T04:18:54.1503721Z 972 │ (value) => { 2026-10-24T04:18:54.1503907Z 973 │ combinedContentInsetEndAdjustment.value = value; 2026-10-24T04:18:54.1504174Z ·  ────────────────┬──────────────── 2026-10-24T04:18:54.1504471Z · ╰── `combinedContentInsetEndAdjustment` cannot be modified 2026-10-24T04:18:54.1504705Z 974 │ }, 2026-10-24T04:18:54.1504819Z ╰──── 2026-10-24T04:18:54.1505134Z  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-24T04:18:54.1505675Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T04:18:54.1505956Z 2026-10-24T04:18:54.1506201Z ⚠ eslint(no-unused-vars): Function 'layerClaudeAgentSdkReplayQueryRunner' is declared but never used. 2026-10-24T04:18:54.1506608Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.testkit.ts:960:10] 2026-10-24T04:18:54.1506836Z 959 │ 2026-10-24T04:18:54.1506998Z 960 │ function layerClaudeAgentSdkReplayQueryRunner( 2026-10-24T04:18:54.1507233Z ·  ──────────────────┬───────────────── 2026-10-24T04:18:54.1507539Z · ╰── 'layerClaudeAgentSdkReplayQueryRunner' is declared here 2026-10-24T04:18:54.1507821Z 961 │ transcript: ClaudeAgentSdkReplayTranscript, 2026-10-24T04:18:54.1507995Z ╰──── 2026-10-24T04:18:54.1508151Z  help: Consider removing this declaration. 2026-10-24T04:18:54.1508266Z 2026-10-24T04:18:54.1508417Z ⚠ react(immutability): This value cannot be modified 2026-10-24T04:18:54.1508707Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:174:5] 2026-10-24T04:18:54.1508997Z 170 │ const expandedAngle = props.collapsedDirection === "right" ? 90 : 180; 2026-10-24T04:18:54.1509275Z 171 │ const rotation = useSharedValue(props.expanded ? expandedAngle : 0); 2026-10-24T04:18:54.1509491Z ·  ────┬─── 2026-10-24T04:18:54.1509706Z · ╰── `rotation` originates here 2026-10-24T04:18:54.1509886Z 172 │ 2026-10-24T04:18:54.1510012Z 173 │ useLayoutEffect(() => { 2026-10-24T04:18:54.1510231Z 174 │ rotation.value = withTiming(props.expanded ? expandedAngle : 0, { 2026-10-24T04:18:54.1510441Z ·  ────┬─── 2026-10-24T04:18:54.1510652Z · ╰── `rotation` cannot be modified 2026-10-24T04:18:54.1510879Z 175 │ duration: THREAD_DISCLOSURE_TRANSITION_MS, 2026-10-24T04:18:54.1511040Z ╰──── 2026-10-24T04:18:54.1511345Z  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-24T04:18:54.1511875Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T04:18:54.1512154Z 2026-10-24T04:18:54.1512342Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T04:18:54.1512719Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:1246:23] 2026-10-24T04:18:54.1512963Z 1245 │ { 2026-10-24T04:18:54.1515185Z ·  ────┬──── 2026-10-24T04:18:54.1515395Z · ╰── This is the containing effect 2026-10-24T04:18:54.1515694Z 213 │ const inserted = ownerKey ? readComposerDraftSelection(ownerKey, draftMessage) : null; 2026-10-24T04:18:54.1515924Z 214 │ if (inserted) { 2026-10-24T04:18:54.1516076Z 215 │ setSelection((current) => 2026-10-24T04:18:54.1516241Z ·  ──────┬───── 2026-10-24T04:18:54.1516491Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T04:18:54.1516814Z 216 │ current.start === inserted.start && current.end === inserted.end ? current : inserted, 2026-10-24T04:18:54.1517026Z ╰──── 2026-10-24T04:18:54.1517668Z  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-24T04:18:54.1518498Z  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-24T04:18:54.1518796Z 2026-10-24T04:18:54.1519046Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T04:18:54.1519445Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:296:7] 2026-10-24T04:18:54.1519683Z 284 │ }, [hasWorkspaceSnapshot]); 2026-10-24T04:18:54.1519839Z 285 │ useEffect(() => { 2026-10-24T04:18:54.1519998Z ·  ────┬──── 2026-10-24T04:18:54.1520210Z · ╰── This is the containing effect 2026-10-24T04:18:54.1520488Z 286 │ if (!environmentId || !projectCwd || !selectedProviderInstanceId) return; 2026-10-24T04:18:54.1520781Z 287 │ const key = `${environmentId}:${selectedProviderInstanceId}:${projectCwd}`; 2026-10-24T04:18:54.1521004Z 288 │ const now = Date.now(); 2026-10-24T04:18:54.1521202Z 289 │ const lastRequest = workspaceRefreshKeyRef.current; 2026-10-24T04:18:54.1521392Z 290 │ if ( 2026-10-24T04:18:54.1521545Z 291 │ lastRequest?.key === key && 2026-10-24T04:18:54.1521775Z 292 │ now - lastRequest.requestedAt < PROVIDER_WORKSPACE_SNAPSHOT_TTL_MS 2026-10-24T04:18:54.1521979Z 293 │ ) 2026-10-24T04:18:54.1522105Z 294 │ return; 2026-10-24T04:18:54.1522412Z 295 │ if (hasCurrentProviderWorkspaceSnapshot(selectedProviderStatus, projectCwd, now)) { 2026-10-24T04:18:54.1522703Z 296 │ setWorkspaceRefreshRetry(null); 2026-10-24T04:18:54.1522903Z ·  ────────────┬─────────── 2026-10-24T04:18:54.1523178Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T04:18:54.1523408Z 297 │ return; 2026-10-24T04:18:54.1523531Z ╰──── 2026-10-24T04:18:54.1524202Z  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-24T04:18:54.1525037Z  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-24T04:18:54.1525332Z 2026-10-24T04:18:54.1525528Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T04:18:54.1525877Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:326:5] 2026-10-24T04:18:54.1526096Z 325 │ }, [ 2026-10-24T04:18:54.1526224Z 326 │ draftMessage, 2026-10-24T04:18:54.1526381Z ·  ──────┬───── 2026-10-24T04:18:54.1526612Z · ╰── Unnecessary dependency `draftMessage` 2026-10-24T04:18:54.1526818Z 327 │ environmentId, 2026-10-24T04:18:54.1526952Z ╰──── 2026-10-24T04:18:54.1527289Z  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-24T04:18:54.1527866Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.1528157Z 2026-10-24T04:18:54.1528378Z ⚠ eslint(no-unneeded-ternary): Unnecessary use of boolean literals in conditional expression 2026-10-24T04:18:54.1528722Z ╭─[packages/shared/src/serverSettings.test.ts:35:7] 2026-10-24T04:18:54.1529032Z 34 │ const fallback = fallbackTextGenerationModelSelection(providerInstances, (instanceId) => 2026-10-24T04:18:54.1529308Z 35 │ instanceId === configured ? true : false, 2026-10-24T04:18:54.1529531Z ·  ──────────────────────────────────────── 2026-10-24T04:18:54.1529705Z 36 │ ); 2026-10-24T04:18:54.1529817Z ╰──── 2026-10-24T04:18:54.1529966Z  help: Remove this ternary operator 2026-10-24T04:18:54.1530073Z 2026-10-24T04:18:54.1530261Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T04:18:54.1530545Z ╭─[packages/shared/src/qrCode.ts:458:44] 2026-10-24T04:18:54.1530725Z 457 │ ): Array { 2026-10-24T04:18:54.1530910Z 458 │ let result: Array = divisor.map((_) => 0); 2026-10-24T04:18:54.1531125Z ·  ┬ 2026-10-24T04:18:54.1531379Z · ╰── '_' is declared here 2026-10-24T04:18:54.1531584Z 459 │ for (const b of data) { 2026-10-24T04:18:54.1531721Z ╰──── 2026-10-24T04:18:54.1531877Z  help: Consider removing this parameter. 2026-10-24T04:18:54.1531991Z 2026-10-24T04:18:54.1532371Z ⚠ eslint(no-unused-vars): Variable 'layerCodexAppServerClientFactoryCommand' is declared but never used. Unused variables should start with a '_'. 2026-10-24T04:18:54.1532870Z ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1444:7] 2026-10-24T04:18:54.1533087Z 1443 │ 2026-10-24T04:18:54.1533264Z 1444 │ const layerCodexAppServerClientFactoryCommand = ( 2026-10-24T04:18:54.1533510Z ·  ───────────────────┬─────────────────── 2026-10-24T04:18:54.1533833Z · ╰── 'layerCodexAppServerClientFactoryCommand' is declared here 2026-10-24T04:18:54.1534170Z 1445 │ options: CodexClient.CodexAppServerClientOptions & { 2026-10-24T04:18:54.1534357Z ╰──── 2026-10-24T04:18:54.1534514Z  help: Consider removing this declaration. 2026-10-24T04:18:54.1534631Z 2026-10-24T04:18:54.1534892Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T04:18:54.1535290Z ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1680:7] 2026-10-24T04:18:54.1535506Z 1679 │ 2026-10-24T04:18:54.1535633Z 1680 │ const layer: Layer.Layer< 2026-10-24T04:18:54.1535796Z ·  ──┬── 2026-10-24T04:18:54.1536003Z · ╰── 'layer' is declared here 2026-10-24T04:18:54.1536226Z 1681 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T04:18:54.1536388Z ╰──── 2026-10-24T04:18:54.1536845Z  help: Consider removing this declaration. 2026-10-24T04:18:54.1536960Z 2026-10-24T04:18:54.1537208Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T04:18:54.1537611Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts:10579:7] 2026-10-24T04:18:54.1537836Z 10578 │ 2026-10-24T04:18:54.1537966Z 10579 │ const layer: Layer.Layer< 2026-10-24T04:18:54.1538126Z ·  ──┬── 2026-10-24T04:18:54.1538332Z · ╰── 'layer' is declared here 2026-10-24T04:18:54.1538554Z 10580 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T04:18:54.1538718Z ╰──── 2026-10-24T04:18:54.1538877Z  help: Consider removing this declaration. 2026-10-24T04:18:54.1538991Z 2026-10-24T04:18:54.1539246Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T04:18:54.1539636Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:361:7] 2026-10-24T04:18:54.1539929Z 355 │ }, [cancelledIncomingShareId, navigation, props.incomingShareId]); 2026-10-24T04:18:54.1540145Z 356 │ useEffect(() => { 2026-10-24T04:18:54.1540295Z ·  ────┬──── 2026-10-24T04:18:54.1540505Z · ╰── This is the containing effect 2026-10-24T04:18:54.1540723Z 357 │ if (!isReturningToProjectPicker) { 2026-10-24T04:18:54.1540885Z 358 │ return; 2026-10-24T04:18:54.1541014Z 359 │ } 2026-10-24T04:18:54.1541171Z 360 │ if (requestedInitialProjectAvailable) { 2026-10-24T04:18:54.1541378Z 361 │ setIsReturningToProjectPicker(false); 2026-10-24T04:18:54.1541587Z ·  ──────────────┬────────────── 2026-10-24T04:18:54.1541869Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T04:18:54.1542095Z 362 │ return; 2026-10-24T04:18:54.1542217Z ╰──── 2026-10-24T04:18:54.1542932Z  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-24T04:18:54.1543805Z  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-24T04:18:54.1544112Z 2026-10-24T04:18:54.1544395Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T04:18:54.1544784Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:504:9] 2026-10-24T04:18:54.1544991Z 447 │ 2026-10-24T04:18:54.1545118Z 448 │ useEffect(() => { 2026-10-24T04:18:54.1545273Z ·  ────┬──── 2026-10-24T04:18:54.1545484Z · ╰── This is the containing effect 2026-10-24T04:18:54.1545720Z 449 │ if (props.pendingTaskId || props.draftId) { 2026-10-24T04:18:54.1545895Z 450 │ return; 2026-10-24T04:18:54.1546024Z 451 │ } 2026-10-24T04:18:54.1546226Z 452 │ if (lastInitialProjectRefRef.current !== props.initialProjectRef) { 2026-10-24T04:18:54.1546510Z 453 │ lastInitialProjectRefRef.current = props.initialProjectRef; 2026-10-24T04:18:54.1546756Z 454 │ appliedInitialProjectKeyRef.current = null; 2026-10-24T04:18:54.1546932Z 455 │ } 2026-10-24T04:18:54.1547134Z 456 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-24T04:18:54.1547414Z 457 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-24T04:18:54.1547658Z 458 │ if (initialEnvironmentId && initialProjectId) { 2026-10-24T04:18:54.1547851Z 459 │ const directProject = 2026-10-24T04:18:54.1548008Z 460 │ projects.find( 2026-10-24T04:18:54.1548155Z 461 │ (project) => 2026-10-24T04:18:54.1548410Z 462 │ project.environmentId === initialEnvironmentId && project.id === initialProjectId, 2026-10-24T04:18:54.1548642Z 463 │ ) ?? null; 2026-10-24T04:18:54.1548774Z 464 │ 2026-10-24T04:18:54.1548902Z 465 │ if (directProject) { 2026-10-24T04:18:54.1549126Z 466 │ // Apply the route's project once. Re-applying on every change would 2026-10-24T04:18:54.1549407Z 467 │ // instantly revert environment/project switches made in the picker. 2026-10-24T04:18:54.1549716Z 468 │ const directProjectKey = `${directProject.environmentId}:${directProject.id}`; 2026-10-24T04:18:54.1550070Z 469 │ if (appliedInitialProjectKeyRef.current === directProjectKey) { 2026-10-24T04:18:54.1550322Z 470 │ return; 2026-10-24T04:18:54.1550458Z 471 │ } 2026-10-24T04:18:54.1550621Z 472 │ if (props.initialProjectRef?.branch) { 2026-10-24T04:18:54.1550795Z 473 │ if ( 2026-10-24T04:18:54.1551009Z 474 │ selectedProject?.environmentId !== directProject.environmentId || 2026-10-24T04:18:54.1551261Z 475 │ selectedProject.id !== directProject.id 2026-10-24T04:18:54.1551432Z 476 │ ) { 2026-10-24T04:18:54.1551590Z 477 │ setProject(directProject); 2026-10-24T04:18:54.1551755Z 478 │ return; 2026-10-24T04:18:54.1551897Z 479 │ } 2026-10-24T04:18:54.1552048Z 480 │ if (!flow.draftKey) return; 2026-10-24T04:18:54.1552283Z 481 │ // The route completes checkout before mounting this composer. Local 2026-10-24T04:18:54.1552579Z 482 │ // mode reuses an existing worktree; worktree mode would create another. 2026-10-24T04:18:54.1552839Z 483 │ updateComposerDraftSettings(flow.draftKey, { 2026-10-24T04:18:54.1553043Z 484 │ workspaceSelection: { 2026-10-24T04:18:54.1553208Z 485 │ mode: "local", 2026-10-24T04:18:54.1553404Z 486 │ branch: props.initialProjectRef.branch, 2026-10-24T04:18:54.1553658Z 487 │ worktreePath: props.initialProjectRef.worktreePath ?? null, 2026-10-24T04:18:54.1553890Z 488 │ startFromOrigin: false, 2026-10-24T04:18:54.1554074Z 489 │ }, 2026-10-24T04:18:54.1554210Z 490 │ }); 2026-10-24T04:18:54.1554338Z 491 │ } 2026-10-24T04:18:54.1554532Z 492 │ appliedInitialProjectKeyRef.current = directProjectKey; 2026-10-24T04:18:54.1554731Z 493 │ if ( 2026-10-24T04:18:54.1554949Z 494 │ selectedProject?.environmentId === directProject.environmentId && 2026-10-24T04:18:54.1555199Z 495 │ selectedProject.id === directProject.id 2026-10-24T04:18:54.1555367Z 496 │ ) { 2026-10-24T04:18:54.1555499Z 497 │ return; 2026-10-24T04:18:54.1555631Z 498 │ } 2026-10-24T04:18:54.1555779Z 499 │ setProject(directProject); 2026-10-24T04:18:54.1555940Z 500 │ return; 2026-10-24T04:18:54.1556068Z 501 │ } 2026-10-24T04:18:54.1556191Z 502 │ 2026-10-24T04:18:54.1556325Z 503 │ if (projects.length > 0) { 2026-10-24T04:18:54.1556521Z 504 │ setIsReturningToProjectPicker(true); 2026-10-24T04:18:54.1556739Z ·  ──────────────┬────────────── 2026-10-24T04:18:54.1557031Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T04:18:54.1557265Z 505 │ } 2026-10-24T04:18:54.1557389Z ╰──── 2026-10-24T04:18:54.1558027Z  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-24T04:18:54.1558869Z  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-24T04:18:54.1559171Z 2026-10-24T04:18:54.1559425Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T04:18:54.1559824Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:604:5] 2026-10-24T04:18:54.1560089Z 545 │ 2026-10-24T04:18:54.1560245Z 546 │ useEffect(() => { 2026-10-24T04:18:54.1560400Z ·  ────┬──── 2026-10-24T04:18:54.1560617Z · ╰── This is the containing effect 2026-10-24T04:18:54.1560842Z 547 │ const shareId = props.incomingShareId; 2026-10-24T04:18:54.1561038Z 548 │ const draftKey = flow.draftKey; 2026-10-24T04:18:54.1561240Z 549 │ const destinationProject = selectedProject; 2026-10-24T04:18:54.1561495Z 550 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-24T04:18:54.1561776Z 551 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-24T04:18:54.1562001Z 552 │ const selectedProjectMatchesRoute = 2026-10-24T04:18:54.1562188Z 553 │ !initialEnvironmentId || 2026-10-24T04:18:54.1562351Z 554 │ !initialProjectId || 2026-10-24T04:18:54.1562577Z 555 │ (destinationProject?.environmentId === initialEnvironmentId && 2026-10-24T04:18:54.1562823Z 556 │ destinationProject.id === initialProjectId); 2026-10-24T04:18:54.1563005Z 557 │ if ( 2026-10-24T04:18:54.1563136Z 558 │ !shareId || 2026-10-24T04:18:54.1563280Z 559 │ !draftKey || 2026-10-24T04:18:54.1563433Z 560 │ !destinationProject || 2026-10-24T04:18:54.1563610Z 561 │ !selectedProjectMatchesRoute || 2026-10-24T04:18:54.1563807Z 562 │ cancelledIncomingShareId === shareId 2026-10-24T04:18:54.1563966Z 563 │ ) { 2026-10-24T04:18:54.1564110Z 564 │ return; 2026-10-24T04:18:54.1564267Z 565 │ } 2026-10-24T04:18:54.1564429Z 566 │ const importKey = `${shareId}:${draftKey}`; 2026-10-24T04:18:54.1564597Z 567 │ if ( 2026-10-24T04:18:54.1564775Z 568 │ startedShareImportKeyRef.current === importKey || 2026-10-24T04:18:54.1565015Z 569 │ cancellingShareImportKeyRef.current === importKey 2026-10-24T04:18:54.1565196Z 570 │ ) { 2026-10-24T04:18:54.1565322Z 571 │ return; 2026-10-24T04:18:54.1565448Z 572 │ } 2026-10-24T04:18:54.1565564Z 573 │ 2026-10-24T04:18:54.1565691Z 574 │ if (!incomingShare) { 2026-10-24T04:18:54.1565972Z 575 │ if (isIncomingShareUnavailable && alertedUnavailableIncomingShareIdRef.current !== shareId) { 2026-10-24T04:18:54.1566295Z 576 │ alertedUnavailableIncomingShareIdRef.current = shareId; 2026-10-24T04:18:54.1566505Z 577 │ Dialog.alert( 2026-10-24T04:18:54.1566673Z 578 │ "Shared content unavailable", 2026-10-24T04:18:54.1566945Z 579 │ "The shared content is no longer in the inbox. You can continue editing this task draft.", 2026-10-24T04:18:54.1567179Z 580 │ ); 2026-10-24T04:18:54.1567304Z 581 │ } 2026-10-24T04:18:54.1567436Z 582 │ return; 2026-10-24T04:18:54.1567566Z 583 │ } 2026-10-24T04:18:54.1567684Z 584 │ 2026-10-24T04:18:54.1567800Z 585 │ if ( 2026-10-24T04:18:54.1568027Z 586 │ incomingShare.attachments.some((attachment) => attachment.type === "file") && 2026-10-24T04:18:54.1568290Z 587 │ selectedEnvironmentServerConfig === null 2026-10-24T04:18:54.1568461Z 588 │ ) { 2026-10-24T04:18:54.1568589Z 589 │ return; 2026-10-24T04:18:54.1568713Z 590 │ } 2026-10-24T04:18:54.1568830Z 591 │ 2026-10-24T04:18:54.1569026Z 592 │ if (alertedUnavailableIncomingShareIdRef.current === shareId) { 2026-10-24T04:18:54.1569295Z 593 │ alertedUnavailableIncomingShareIdRef.current = null; 2026-10-24T04:18:54.1569481Z 594 │ } 2026-10-24T04:18:54.1569652Z 595 │ startedShareImportKeyRef.current = importKey; 2026-10-24T04:18:54.1569904Z 596 │ const draftBackup = 2026-10-24T04:18:54.1570205Z 597 │ shareImportDraftBackupRef.current.get(importKey) ?? getComposerDraftSnapshot(draftKey); 2026-10-24T04:18:54.1570534Z 598 │ shareImportDraftBackupRef.current.set(importKey, draftBackup); 2026-10-24T04:18:54.1570766Z 599 │ const importToken = Symbol(importKey); 2026-10-24T04:18:54.1570954Z 600 │ let didReserveShare = false; 2026-10-24T04:18:54.1571124Z 601 │ let didConsumeShare = false; 2026-10-24T04:18:54.1571304Z 602 │ let needsDraftRestore = false; 2026-10-24T04:18:54.1571511Z 603 │ activeShareImportTokenRef.current = importToken; 2026-10-24T04:18:54.1571718Z 604 │ setImportingShareKey(importKey); 2026-10-24T04:18:54.1571907Z ·  ──────────┬───────── 2026-10-24T04:18:54.1572180Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T04:18:54.1572420Z 605 │ void (async () => { 2026-10-24T04:18:54.1572562Z ╰──── 2026-10-24T04:18:54.1573199Z  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-24T04:18:54.1574046Z  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-24T04:18:54.1574368Z 2026-10-24T04:18:54.1574569Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T04:18:54.1574915Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:524:5] 2026-10-24T04:18:54.1575152Z 523 │ props.initialProjectRef, 2026-10-24T04:18:54.1575322Z 524 │ props.incomingShareId, 2026-10-24T04:18:54.1575499Z ·  ──────────┬────────── 2026-10-24T04:18:54.1575763Z · ╰── Unnecessary dependency `props.incomingShareId` 2026-10-24T04:18:54.1575997Z 525 │ props.pendingTaskId, 2026-10-24T04:18:54.1576136Z ╰──── 2026-10-24T04:18:54.1576491Z  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-24T04:18:54.1577097Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.1577386Z 2026-10-24T04:18:54.1577602Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T04:18:54.1577959Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:543:5] 2026-10-24T04:18:54.1578232Z 542 │ loadedBranchesProjectKeyRef.current = projectKey; 2026-10-24T04:18:54.1578430Z 543 │ flow.loadBranches(); 2026-10-24T04:18:54.1578588Z ·  ──┬─ 2026-10-24T04:18:54.1578789Z · ╰── Missing dependency `flow` 2026-10-24T04:18:54.1579012Z 544 │ }, [flow.loadBranches, selectedProject]); 2026-10-24T04:18:54.1579205Z ·  ────────┬──────── 2026-10-24T04:18:54.1579498Z · ╰── Overly precise dependency `flow.loadBranches`, use `flow` instead 2026-10-24T04:18:54.1579736Z 545 │ 2026-10-24T04:18:54.1579855Z ╰──── 2026-10-24T04:18:54.1580392Z  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-24T04:18:54.1581123Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.1581414Z 2026-10-24T04:18:54.1581609Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T04:18:54.1581951Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:766:5] 2026-10-24T04:18:54.1582168Z 765 │ flow.draftKey, 2026-10-24T04:18:54.1582328Z 766 │ hasImportedIncomingShare, 2026-10-24T04:18:54.1582516Z ·  ────────────┬─────────── 2026-10-24T04:18:54.1582798Z · ╰── Unnecessary dependency `hasImportedIncomingShare` 2026-10-24T04:18:54.1583036Z 767 │ incomingShare, 2026-10-24T04:18:54.1583203Z 768 │ isIncomingShareInboxLoading, 2026-10-24T04:18:54.1583399Z ·  ─────────────┬───────────── 2026-10-24T04:18:54.1583680Z · ╰── Unnecessary dependency `isIncomingShareInboxLoading` 2026-10-24T04:18:54.1583936Z 769 │ isIncomingShareUnavailable, 2026-10-24T04:18:54.1584131Z 770 │ props.incomingShareId, 2026-10-24T04:18:54.1584318Z 771 │ props.initialProjectRef?.environmentId, 2026-10-24T04:18:54.1584513Z 772 │ props.initialProjectRef?.projectId, 2026-10-24T04:18:54.1584695Z 773 │ releaseShareReservation, 2026-10-24T04:18:54.1584850Z 774 │ reserveShare, 2026-10-24T04:18:54.1585016Z 775 │ selectedEnvironmentServerConfig, 2026-10-24T04:18:54.1585193Z 776 │ selectedProject, 2026-10-24T04:18:54.1585351Z 777 │ shareImportAttempt, 2026-10-24T04:18:54.1585521Z ·  ─────────┬──────── 2026-10-24T04:18:54.1585778Z · ╰── Unnecessary dependency `shareImportAttempt` 2026-10-24T04:18:54.1585994Z 778 │ ]); 2026-10-24T04:18:54.1586107Z ╰──── 2026-10-24T04:18:54.1586455Z  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-24T04:18:54.1587030Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.1587320Z 2026-10-24T04:18:54.1587537Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T04:18:54.1587845Z ╭─[apps/mobile/src/Stack.tsx:1074:21] 2026-10-24T04:18:54.1588027Z 1073 │ } 2026-10-24T04:18:54.1588512Z ·  ───────────────────────────────────────────── 2026-10-24T04:18:54.1588714Z 1075 │ screenListeners={{ 2026-10-24T04:18:54.1588857Z ╰──── 2026-10-24T04:18:54.1589268Z  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-24T04:18:54.1589596Z 2026-10-24T04:18:54.1589853Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T04:18:54.1590313Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5] 2026-10-24T04:18:54.1590576Z 259 │ .join("|"); 2026-10-24T04:18:54.1590716Z 260 │ useEffect(() => { 2026-10-24T04:18:54.1590872Z ·  ────┬──── 2026-10-24T04:18:54.1591083Z · ╰── This is the containing effect 2026-10-24T04:18:54.1591279Z 261 │ stop(); 2026-10-24T04:18:54.1591417Z ·  ──┬─ 2026-10-24T04:18:54.1591662Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T04:18:54.1591892Z 262 │ }, [orderVersion]); 2026-10-24T04:18:54.1592026Z ╰──── 2026-10-24T04:18:54.1592675Z  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-24T04:18:54.1593514Z  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-24T04:18:54.1593814Z 2026-10-24T04:18:54.1594034Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T04:18:54.1594419Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5] 2026-10-24T04:18:54.1594645Z 260 │ useEffect(() => { 2026-10-24T04:18:54.1594787Z 261 │ stop(); 2026-10-24T04:18:54.1601813Z ·  ──┬─ 2026-10-24T04:18:54.1602045Z · ╰── Missing dependency `stop` 2026-10-24T04:18:54.1602251Z 262 │ }, [orderVersion]); 2026-10-24T04:18:54.1602414Z ·  ──────┬───── 2026-10-24T04:18:54.1602650Z · ╰── Unnecessary dependency `orderVersion` 2026-10-24T04:18:54.1602854Z 263 │ useEffect( 2026-10-24T04:18:54.1602976Z ╰──── 2026-10-24T04:18:54.1603438Z  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-24T04:18:54.1604164Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.1604454Z 2026-10-24T04:18:54.1604599Z ⚠ react(refs): Cannot access refs during render 2026-10-24T04:18:54.1604983Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:96:9] 2026-10-24T04:18:54.1605249Z 95 │ const latest = useRef(props); 2026-10-24T04:18:54.1605418Z 96 │ latest.current = props; 2026-10-24T04:18:54.1605606Z ·  ───┬──────┬─── 2026-10-24T04:18:54.1605891Z · │ ╰── Cannot update ref value during render 2026-10-24T04:18:54.1606168Z · ╰── This value is a ref 2026-10-24T04:18:54.1606351Z 97 │ const gesture = useMemo( 2026-10-24T04:18:54.1606488Z ╰──── 2026-10-24T04:18:54.1606999Z  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-24T04:18:54.1607705Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T04:18:54.1607978Z 2026-10-24T04:18:54.1608121Z ⚠ react(refs): Cannot access refs during render 2026-10-24T04:18:54.1608423Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:104:18] 2026-10-24T04:18:54.1608649Z 103 │ .runOnJS(true) 2026-10-24T04:18:54.1608835Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T04:18:54.1609066Z ·  ───────────────┬────────────── 2026-10-24T04:18:54.1609384Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T04:18:54.1609709Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T04:18:54.1609908Z ╰──── 2026-10-24T04:18:54.1610421Z  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-24T04:18:54.1611111Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T04:18:54.1611380Z 2026-10-24T04:18:54.1611518Z ⚠ react(refs): Cannot access refs during render 2026-10-24T04:18:54.1611821Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:105:19] 2026-10-24T04:18:54.1612076Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T04:18:54.1612322Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T04:18:54.1612603Z ·  ──────────────────────────┬───────────────────────── 2026-10-24T04:18:54.1612944Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T04:18:54.1613256Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T04:18:54.1613446Z ╰──── 2026-10-24T04:18:54.1613949Z  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-24T04:18:54.1614716Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T04:18:54.1615014Z 2026-10-24T04:18:54.1615153Z ⚠ react(refs): Cannot access refs during render 2026-10-24T04:18:54.1615450Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:106:16] 2026-10-24T04:18:54.1615736Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T04:18:54.1615998Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T04:18:54.1616267Z ·  ──────────────────────────┬───────────────────────── 2026-10-24T04:18:54.1616736Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T04:18:54.1617047Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T04:18:54.1617237Z ╰──── 2026-10-24T04:18:54.1617745Z  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-24T04:18:54.1618436Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T04:18:54.1618708Z 2026-10-24T04:18:54.1618849Z ⚠ react(refs): Cannot access refs during render 2026-10-24T04:18:54.1619147Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:107:21] 2026-10-24T04:18:54.1619437Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T04:18:54.1619691Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T04:18:54.1619961Z ·  ───────────────────────┬────────────────────── 2026-10-24T04:18:54.1620302Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T04:18:54.1620553Z 108 │ [props.disabled], 2026-10-24T04:18:54.1620694Z ╰──── 2026-10-24T04:18:54.1621196Z  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-24T04:18:54.1622284Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T04:18:54.1622555Z 2026-10-24T04:18:54.1622702Z ⚠ react(refs): Cannot access refs during render 2026-10-24T04:18:54.1623008Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:249:9] 2026-10-24T04:18:54.1623281Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-24T04:18:54.1623512Z 249 │ latest.current = { rows, planners, moveThread }; 2026-10-24T04:18:54.1623736Z ·  ───┬──────┬─── 2026-10-24T04:18:54.1624051Z · │ ╰── Cannot update ref value during render 2026-10-24T04:18:54.1624333Z · ╰── This value is a ref 2026-10-24T04:18:54.1624509Z 250 │ 2026-10-24T04:18:54.1624618Z ╰──── 2026-10-24T04:18:54.1625208Z  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-24T04:18:54.1625938Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T04:18:54.1626213Z 2026-10-24T04:18:54.1626354Z ⚠ react(refs): Cannot access refs during render 2026-10-24T04:18:54.1626655Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:247:22] 2026-10-24T04:18:54.1626937Z 246 │ const [preview, setPreview] = useState(null); 2026-10-24T04:18:54.1627180Z 247 │ const translateY = useRef(new Animated.Value(0)).current; 2026-10-24T04:18:54.1627437Z ·  ──────────────────┬────────────────── 2026-10-24T04:18:54.1627725Z · ╰── Cannot access ref value during render 2026-10-24T04:18:54.1627996Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-24T04:18:54.1628169Z ╰──── 2026-10-24T04:18:54.1628678Z  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-24T04:18:54.1629373Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T04:18:54.1629646Z 2026-10-24T04:18:54.1629813Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T04:18:54.1630137Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:324:16] 2026-10-24T04:18:54.1630369Z 323 │ update(0); 2026-10-24T04:18:54.1630525Z 324 │ let last = performance.now(); 2026-10-24T04:18:54.1630724Z ·  ────────┬──────── 2026-10-24T04:18:54.1630967Z · ╰── Cannot call impure function 2026-10-24T04:18:54.1631176Z 325 │ const tick = () => { 2026-10-24T04:18:54.1631313Z ╰──── 2026-10-24T04:18:54.1631668Z  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-24T04:18:54.1632232Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T04:18:54.1632508Z 2026-10-24T04:18:54.1632702Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T04:18:54.1633042Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:99:15] 2026-10-24T04:18:54.1633268Z  98 │ () => 2026-10-24T04:18:54.1633407Z  99 │ Gesture.Pan() 2026-10-24T04:18:54.1633570Z ·  ─┬─ 2026-10-24T04:18:54.1633794Z · ╰── `Pan` may be a component 2026-10-24T04:18:54.1634005Z 100 │ .enabled(!props.disabled) 2026-10-24T04:18:54.1634190Z ╰──── 2026-10-24T04:18:54.1634514Z  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-24T04:18:54.1635342Z  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-24T04:18:54.1635841Z 2026-10-24T04:18:54.1636026Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T04:18:54.1636361Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:108:5] 2026-10-24T04:18:54.1636597Z 103 │ .runOnJS(true) 2026-10-24T04:18:54.1636779Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T04:18:54.1636979Z ·  ───┬── 2026-10-24T04:18:54.1637506Z · ╰── 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-24T04:18:54.1638018Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T04:18:54.1638286Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T04:18:54.1638540Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T04:18:54.1638744Z 108 │ [props.disabled], 2026-10-24T04:18:54.1638912Z ·  ────────┬─────── 2026-10-24T04:18:54.1639191Z · ╰── This dependency list is missing values used by the callback 2026-10-24T04:18:54.1639424Z 109 │ ); 2026-10-24T04:18:54.1639540Z ╰──── 2026-10-24T04:18:54.1639799Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T04:18:54.1640309Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.1640606Z 2026-10-24T04:18:54.1640811Z ⚠ eslint(no-unused-vars): Identifier 'HookForwarder' is imported but never used. 2026-10-24T04:18:54.1641112Z ╭─[infra/relay/src/http/Api.ts:69:13] 2026-10-24T04:18:54.1641364Z 68 │ import * as EnvironmentLinks from "../environments/EnvironmentLinks.ts"; 2026-10-24T04:18:54.1641632Z 69 │ import * as HookForwarder from "../hooks/HookForwarder.ts"; 2026-10-24T04:18:54.1641847Z ·  ──────┬────── 2026-10-24T04:18:54.1642092Z · ╰── 'HookForwarder' is imported here 2026-10-24T04:18:54.1642336Z 70 │ import * as HeldHooks from "../hooks/HeldHooks.ts"; 2026-10-24T04:18:54.1642507Z ╰──── 2026-10-24T04:18:54.1642660Z  help: Consider removing this import. 2026-10-24T04:18:54.1642775Z 2026-10-24T04:18:54.1643054Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-24T04:18:54.1643462Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:1998:15] 2026-10-24T04:18:54.1643703Z 1997 │ assert.equal( 2026-10-24T04:18:54.1643935Z 1998 │ items.filter((item) => item.type === "assistant_message").at(-1)?.text, 2026-10-24T04:18:54.1644209Z ·  ────── 2026-10-24T04:18:54.1644386Z 1999 │ "authoritative answer", 2026-10-24T04:18:54.1644536Z ╰──── 2026-10-24T04:18:54.1644765Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T04:18:54.1644936Z 2026-10-24T04:18:54.1645397Z ⚠ 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-24T04:18:54.1645974Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:3951:7] 2026-10-24T04:18:54.1646323Z 3950 │ const closeFiber = yield* Scope.close(sessionScope, Exit.void).pipe(Effect.forkScoped); 2026-10-24T04:18:54.1646714Z 3951 │ ╭─▶ while (!responseLifecycle.includes("failed")) { 2026-10-24T04:18:54.1647012Z 3952 │ │ yield* Effect.yieldNow; 2026-10-24T04:18:54.1647266Z 3953 │ ╰─▶ } 2026-10-24T04:18:54.1647523Z 3954 │ const responseExit = yield* Fiber.join(responseFiber); 2026-10-24T04:18:54.1647702Z ╰──── 2026-10-24T04:18:54.1647758Z 2026-10-24T04:18:54.1648215Z ⚠ 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-24T04:18:54.1648786Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6062:9] 2026-10-24T04:18:54.1649038Z 6061 │ .pipe(Effect.forkScoped); 2026-10-24T04:18:54.1649321Z 6062 │ ╭─▶ while (promptGates.length < 1) { 2026-10-24T04:18:54.1649602Z 6063 │ │ yield* Effect.yieldNow; 2026-10-24T04:18:54.1649855Z 6064 │ ╰─▶ } 2026-10-24T04:18:54.1650155Z 6065 │ assert.isDefined(sessionUpdateHandler, "session update handler must be wired"); 2026-10-24T04:18:54.1650378Z ╰──── 2026-10-24T04:18:54.1650436Z 2026-10-24T04:18:54.1650880Z ⚠ 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-24T04:18:54.1651445Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6197:9] 2026-10-24T04:18:54.1651694Z 6196 │ .pipe(Effect.forkScoped); 2026-10-24T04:18:54.1651972Z 6197 │ ╭─▶ while (promptGates.length < 2) { 2026-10-24T04:18:54.1652253Z 6198 │ │ yield* Effect.yieldNow; 2026-10-24T04:18:54.1652501Z 6199 │ ╰─▶ } 2026-10-24T04:18:54.1652854Z 6200 │ if (sessionUpdateHandler === undefined || capturedMutation.current === null) { 2026-10-24T04:18:54.1653094Z ╰──── 2026-10-24T04:18:54.1653148Z 2026-10-24T04:18:54.1653402Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T04:18:54.1653767Z ╭─[apps/mobile/src/state/use-vcs-action-state.ts:86:5] 2026-10-24T04:18:54.1654006Z 83 │ const [nowMs, setNowMs] = useState(() => Date.now()); 2026-10-24T04:18:54.1654213Z 84 │ useEffect(() => { 2026-10-24T04:18:54.1654362Z ·  ────┬──── 2026-10-24T04:18:54.1654572Z · ╰── This is the containing effect 2026-10-24T04:18:54.1654789Z 85 │ if (!actionState.isRunning) return; 2026-10-24T04:18:54.1654957Z 86 │ setNowMs(Date.now()); 2026-10-24T04:18:54.1655116Z ·  ────┬─── 2026-10-24T04:18:54.1655362Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T04:18:54.1655643Z 87 │ const interval = setInterval(() => setNowMs(Date.now()), 1000); 2026-10-24T04:18:54.1655825Z ╰──── 2026-10-24T04:18:54.1656462Z  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-24T04:18:54.1657347Z  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-24T04:18:54.1657645Z 2026-10-24T04:18:54.1657901Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T04:18:54.1658291Z ╭─[apps/mobile/src/features/threads/use-worktree-setup.ts:30:40] 2026-10-24T04:18:54.1658599Z 28 │ const snapshot = resolveWorktreeSetupSnapshot(input.threadId, query.data, live); 2026-10-24T04:18:54.1658826Z 29 │ useEffect(() => { 2026-10-24T04:18:54.1658973Z ·  ────┬──── 2026-10-24T04:18:54.1659186Z · ╰── This is the containing effect 2026-10-24T04:18:54.1659435Z 30 │ if (snapshot && snapshot !== live) setHeld({ key, snapshot }); 2026-10-24T04:18:54.1659666Z ·  ───┬─── 2026-10-24T04:18:54.1659962Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T04:18:54.1660213Z 31 │ }, [key, live, snapshot]); 2026-10-24T04:18:54.1660350Z ╰──── 2026-10-24T04:18:54.1660984Z  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-24T04:18:54.1661820Z  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-24T04:18:54.1662125Z 2026-10-24T04:18:54.1662335Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T04:18:54.1662709Z ╭─[apps/mobile/src/features/threads/NewTaskContextPickerScreens.tsx:249:7] 2026-10-24T04:18:54.1663022Z 248 │ mountedRef.current = false; 2026-10-24T04:18:54.1663230Z 249 │ flow.setBranchQuery(""); 2026-10-24T04:18:54.1663391Z ·  ──┬─ 2026-10-24T04:18:54.1663594Z · ╰── Missing dependency `flow` 2026-10-24T04:18:54.1663780Z 250 │ }; 2026-10-24T04:18:54.1663916Z 251 │ }, [flow.setBranchQuery]); 2026-10-24T04:18:54.1664101Z ·  ─────────┬───────── 2026-10-24T04:18:54.1664425Z · ╰── Overly precise dependency `flow.setBranchQuery`, use `flow` instead 2026-10-24T04:18:54.1664665Z 252 │ 2026-10-24T04:18:54.1664771Z ╰──── 2026-10-24T04:18:54.1665238Z  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-24T04:18:54.1665915Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.1666204Z 2026-10-24T04:18:54.1666658Z ⚠ 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-24T04:18:54.1667181Z ╭─[packages/shared/src/atomicWrite.test.ts:139:5] 2026-10-24T04:18:54.1667385Z 138 │ Effect.gen(function* () { 2026-10-24T04:18:54.1667667Z 139 │ ╭─▶ while (fiber.pollUnsafe() === undefined) { 2026-10-24T04:18:54.1667979Z 140 │ │ yield* TestClock.adjust("100 millis"); 2026-10-24T04:18:54.1668423Z 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-24T04:18:54.1668893Z 142 │ │ yield* Effect.promise(() => new Promise((resolve) => setImmediate(resolve))); 2026-10-24T04:18:54.1669200Z 143 │ ╰─▶ } 2026-10-24T04:18:54.1669416Z 144 │ return yield* Fiber.join(fiber); 2026-10-24T04:18:54.1669567Z ╰──── 2026-10-24T04:18:54.1669622Z 2026-10-24T04:18:54.1669917Z ⚠ eslint(no-unused-vars): Variable 'layerFromProviderAdapter' is declared but never used. Unused variables should start with a '_'. 2026-10-24T04:18:54.1670353Z ╭─[apps/server/src/orchestration-v2/ProviderAdapterRegistry.ts:346:7] 2026-10-24T04:18:54.1670570Z 345 │ 2026-10-24T04:18:54.1670727Z 346 │ const layerFromProviderAdapter: Layer.Layer< 2026-10-24T04:18:54.1670933Z ·  ────────────┬─────────── 2026-10-24T04:18:54.1671196Z · ╰── 'layerFromProviderAdapter' is declared here 2026-10-24T04:18:54.1671428Z 347 │ ProviderAdapterRegistryV2, 2026-10-24T04:18:54.1671573Z ╰──── 2026-10-24T04:18:54.1671727Z  help: Consider removing this declaration. 2026-10-24T04:18:54.1671843Z 2026-10-24T04:18:54.1672096Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T04:18:54.1672476Z ╭─[apps/mobile/src/components/VideoPreviewModal.ios.tsx:63:55] 2026-10-24T04:18:54.1672683Z 61 │ }, []); 2026-10-24T04:18:54.1672872Z 62 │ useEffect(() => { 2026-10-24T04:18:54.1673050Z ·  ────┬──── 2026-10-24T04:18:54.1673256Z · ╰── This is the containing effect 2026-10-24T04:18:54.1673529Z 63 │ if (playbackUrl === null && resolvedUrl !== null) setPlaybackUrl(resolvedUrl); 2026-10-24T04:18:54.1673802Z ·  ───────┬────── 2026-10-24T04:18:54.1674153Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T04:18:54.1674413Z 64 │ }, [playbackUrl, resolvedUrl]); 2026-10-24T04:18:54.1674464Z ╰──── 2026-10-24T04:18:54.1675057Z  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-24T04:18:54.1675377Z  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-24T04:18:54.1675380Z 2026-10-24T04:18:54.1675638Z ⚠ eslint(no-unused-vars): Variable 'claudeCaps' is declared but never used. Unused variables should start with a '_'. 2026-10-24T04:18:54.1675745Z ╭─[packages/shared/src/model.test.ts:36:7] 2026-10-24T04:18:54.1675796Z 35 │ 2026-10-24T04:18:54.1675924Z 36 │ const claudeCaps: ModelCapabilities = createModelCapabilities({ 2026-10-24T04:18:54.1675999Z ·  ─────┬──── 2026-10-24T04:18:54.1676135Z · ╰── 'claudeCaps' is declared here 2026-10-24T04:18:54.1676206Z 37 │ optionDescriptors: [ 2026-10-24T04:18:54.1676255Z ╰──── 2026-10-24T04:18:54.1676357Z  help: Consider removing this declaration. 2026-10-24T04:18:54.1676360Z 2026-10-24T04:18:54.1676573Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T04:18:54.1676689Z ╭─[packages/shared/src/serverSettings.ts:346:9] 2026-10-24T04:18:54.1676787Z 345 │ const entry: ProjectSettingsOverrides = { 2026-10-24T04:18:54.1676913Z 346 │ ...(entries.get(projectId) ?? currentEntries[projectId] ?? {}), 2026-10-24T04:18:54.1677067Z ·  ────────────────────────────────────────────────────────────── 2026-10-24T04:18:54.1677123Z 347 │ }; 2026-10-24T04:18:54.1677174Z ╰──── 2026-10-24T04:18:54.1677437Z  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-24T04:18:54.1677443Z 2026-10-24T04:18:54.1677657Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in Array.prototype.reduce() 2026-10-24T04:18:54.1677772Z ╭─[packages/shared/src/serverSettings.ts:448:24] 2026-10-24T04:18:54.1677837Z 447 │ const favorites = 2026-10-24T04:18:54.1677941Z 448 │ setModelFavorites?.reduce((current, change) => { 2026-10-24T04:18:54.1678027Z ·  ───┬── 2026-10-24T04:18:54.1678147Z · ╰── For this reduce 2026-10-24T04:18:54.1678226Z 449 │ const exists = current.some( 2026-10-24T04:18:54.1678394Z 450 │ (favorite) => favorite.provider === change.provider && favorite.model === change.model, 2026-10-24T04:18:54.1678500Z 451 │ ); 2026-10-24T04:18:54.1678603Z 452 │ return change.favorite 2026-10-24T04:18:54.1678665Z 453 │ ? exists 2026-10-24T04:18:54.1678725Z 454 │ ? current 2026-10-24T04:18:54.1678857Z 455 │ : [...current, { provider: change.provider, model: change.model }] 2026-10-24T04:18:54.1678939Z ·  ─────┬──── 2026-10-24T04:18:54.1679056Z · ╰── From this spread 2026-10-24T04:18:54.1679123Z 456 │ : current.filter( 2026-10-24T04:18:54.1679175Z ╰──── 2026-10-24T04:18:54.1679375Z  help: Consider using `Object.assign()` or `Array.prototype.push()` to mutate the accumulator instead. 2026-10-24T04:18:54.1679531Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T04:18:54.1679534Z 2026-10-24T04:18:54.1679718Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-24T04:18:54.1679835Z ╭─[packages/shared/src/serverSettings.ts:466:3] 2026-10-24T04:18:54.1679893Z 464 │ null; 2026-10-24T04:18:54.1680006Z 465 │ let nextModelPreferences = initialModelPreferences; 2026-10-24T04:18:54.1680090Z ·  ──────────┬───────── 2026-10-24T04:18:54.1680214Z · ╰── From this accumulator 2026-10-24T04:18:54.1680313Z 466 │ for (const change of setModelsHidden ?? []) { 2026-10-24T04:18:54.1680378Z ·  ─┬─ 2026-10-24T04:18:54.1680480Z · ╰── For this loop 2026-10-24T04:18:54.1680612Z 467 │ const preferences = nextModelPreferences?.[change.provider] ?? { 2026-10-24T04:18:54.1680680Z 468 │ hiddenModels: [], 2026-10-24T04:18:54.1680751Z 469 │ modelOrder: [], 2026-10-24T04:18:54.1680807Z 470 │ }; 2026-10-24T04:18:54.1680984Z 471 │ const hiddenModels = preferences.hiddenModels.filter((model) => model !== change.model); 2026-10-24T04:18:54.1681090Z 472 │ if (change.hidden) hiddenModels.push(change.model); 2026-10-24T04:18:54.1681162Z 473 │ nextModelPreferences = { 2026-10-24T04:18:54.1681236Z 474 │ ...nextModelPreferences, 2026-10-24T04:18:54.1681331Z ·  ───────────┬─────────── 2026-10-24T04:18:54.1681451Z · ╰── From this spread 2026-10-24T04:18:54.1681559Z 475 │ [change.provider]: { ...preferences, hiddenModels }, 2026-10-24T04:18:54.1681609Z ╰──── 2026-10-24T04:18:54.1681758Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-24T04:18:54.1681954Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T04:18:54.1681984Z 2026-10-24T04:18:54.1682237Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T04:18:54.1682392Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:285:5] 2026-10-24T04:18:54.1682509Z 283 │ const [snoozeWakeTick, bumpSnoozeWakeTick] = useState(0); 2026-10-24T04:18:54.1682572Z 284 │ useEffect(() => { 2026-10-24T04:18:54.1682640Z ·  ────┬──── 2026-10-24T04:18:54.1682765Z · ╰── This is the containing effect 2026-10-24T04:18:54.1682847Z 285 │ setNow(new Date().toISOString()); 2026-10-24T04:18:54.1682916Z ·  ───┬── 2026-10-24T04:18:54.1683084Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T04:18:54.1683219Z 286 │ const id = setInterval(() => setNow(new Date().toISOString()), 60_000); 2026-10-24T04:18:54.1683271Z ╰──── 2026-10-24T04:18:54.1683853Z  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-24T04:18:54.1684209Z  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-24T04:18:54.1684211Z 2026-10-24T04:18:54.1684408Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T04:18:54.1684570Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:365:25] 2026-10-24T04:18:54.1684700Z 364 │ // range) the boundary string is identical and the chain would die. 2026-10-24T04:18:54.1684790Z 365 │ }, [nextSnoozeWakeAt, snoozeWakeTick]); 2026-10-24T04:18:54.1684889Z ·  ───────┬────── 2026-10-24T04:18:54.1685050Z · ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T04:18:54.1685158Z 366 │ const listItems = ((): readonly SidebarListItem[] => { 2026-10-24T04:18:54.1685209Z ╰──── 2026-10-24T04:18:54.1685497Z  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-24T04:18:54.1685805Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.1685811Z 2026-10-24T04:18:54.1685973Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T04:18:54.1686132Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:356:53] 2026-10-24T04:18:54.1686215Z 355 │ if (Number.isNaN(wakeAtMs)) return; 2026-10-24T04:18:54.1686367Z 356 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647); 2026-10-24T04:18:54.1686482Z ·  ─────┬──── 2026-10-24T04:18:54.1686645Z · ╰── Cannot call impure function 2026-10-24T04:18:54.1686723Z 357 │ const id = setTimeout(() => { 2026-10-24T04:18:54.1686773Z ╰──── 2026-10-24T04:18:54.1687094Z  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-24T04:18:54.1687413Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T04:18:54.1687416Z 2026-10-24T04:18:54.1687604Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T04:18:54.1687752Z ╭─[apps/mobile/src/features/review/ReviewCommentCard.tsx:223:31] 2026-10-24T04:18:54.1687857Z 222 │ ? snippetTokens.map((line, lineIndex) => ( 2026-10-24T04:18:54.1687949Z 223 │ 2026-10-24T04:18:54.1688053Z ·  ─────────────── 2026-10-24T04:18:54.1688148Z 224 │ {lineIndex > 0 ? "\n" : ""} 2026-10-24T04:18:54.1688201Z ╰──── 2026-10-24T04:18:54.1688343Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T04:18:54.1688346Z 2026-10-24T04:18:54.1688533Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T04:18:54.1688678Z ╭─[apps/mobile/src/features/review/ReviewCommentCard.tsx:227:25] 2026-10-24T04:18:54.1688753Z 226 │ { 2026-10-24T04:18:54.1694243Z ·  ────┬──── 2026-10-24T04:18:54.1694369Z · ╰── This is the containing effect 2026-10-24T04:18:54.1694449Z 60 │ setMountedModes((current) => { 2026-10-24T04:18:54.1694527Z ·  ───────┬─────── 2026-10-24T04:18:54.1694695Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T04:18:54.1694775Z 61 │ if (current.has(props.mode)) { 2026-10-24T04:18:54.1694827Z ╰──── 2026-10-24T04:18:54.1695414Z  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-24T04:18:54.1695733Z  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-24T04:18:54.1695735Z 2026-10-24T04:18:54.1696100Z ⚠ 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-24T04:18:54.1696220Z ╭─[packages/shared/src/otelEnvironment.ts:146:14] 2026-10-24T04:18:54.1696280Z 145 │ name, 2026-10-24T04:18:54.1696417Z 146 │ (raw) => Schema.decodeUnknownOption(OtlpProtocol)(raw.toLowerCase()), 2026-10-24T04:18:54.1696634Z ·  ────────────────────────── 2026-10-24T04:18:54.1696788Z 147 │ `${name} is not http/protobuf or http/json, ${NOT_EXPORTED}`, 2026-10-24T04:18:54.1696839Z ╰──── 2026-10-24T04:18:54.1696842Z 2026-10-24T04:18:54.1697039Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T04:18:54.1697150Z ╭─[apps/mobile/src/state/thread-order.ts:29:7] 2026-10-24T04:18:54.1697221Z 28 │ getPendingThreadOrder(); 2026-10-24T04:18:54.1697299Z 29 │ }, [nowMinute, snoozeWakeTick]); 2026-10-24T04:18:54.1697420Z ·  ────┬──── ───────┬────── 2026-10-24T04:18:54.1697610Z · │ ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T04:18:54.1697750Z · ╰── Unnecessary dependency `nowMinute` 2026-10-24T04:18:54.1697820Z 30 │ return pending; 2026-10-24T04:18:54.1697875Z ╰──── 2026-10-24T04:18:54.1698162Z  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-24T04:18:54.1698466Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.1698469Z 2026-10-24T04:18:54.1698682Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T04:18:54.1698814Z ╭─[apps/mobile/src/state/use-model-option-memory.ts:21:7] 2026-10-24T04:18:54.1698880Z 20 │ [instanceId]: { 2026-10-24T04:18:54.1698959Z 21 │ ...(state[instanceId] ?? {}), 2026-10-24T04:18:54.1699060Z ·  ──────────────────────────── 2026-10-24T04:18:54.1699131Z 22 │ [model]: options, 2026-10-24T04:18:54.1699186Z ╰──── 2026-10-24T04:18:54.1699449Z  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-24T04:18:54.1699451Z 2026-10-24T04:18:54.1699906Z ⚠ 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-24T04:18:54.1700070Z ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:566:7] 2026-10-24T04:18:54.1700173Z 565 │ let afterSequence = created[0]!.sequence; 2026-10-24T04:18:54.1700370Z 566 │ ╭─▶ for (let index = 1; index <= 32; index += 1) { 2026-10-24T04:18:54.1700472Z 567 │ │ const nextEvent = { 2026-10-24T04:18:54.1700625Z 568 │ │ id: EventId.make(`event:foundation-stream-race:${index}`), 2026-10-24T04:18:54.1700759Z 569 │ │ type: "thread.metadata-updated" as const, 2026-10-24T04:18:54.1700849Z 570 │ │ threadId, 2026-10-24T04:18:54.1700952Z 571 │ │ providerInstanceId, 2026-10-24T04:18:54.1701048Z 572 │ │ occurredAt: now, 2026-10-24T04:18:54.1701192Z 573 │ │ payload: { ...thread, title: `Race update ${index}` }, 2026-10-24T04:18:54.1701318Z 574 │ │ } satisfies OrchestrationV2DomainEvent; 2026-10-24T04:18:54.1701482Z 575 │ │ const reader = yield* eventSink 2026-10-24T04:18:54.1701626Z 576 │ │ .stream({ threadId, afterSequence }) 2026-10-24T04:18:54.1701756Z 577 │ │ .pipe(Stream.runHead, Effect.forkChild); 2026-10-24T04:18:54.1701860Z 578 │ │ yield* Effect.yieldNow; 2026-10-24T04:18:54.1702018Z 579 │ │ const written = yield* eventSink.write({ events: [nextEvent] }); 2026-10-24T04:18:54.1702144Z 580 │ │ const received = yield* Fiber.join(reader); 2026-10-24T04:18:54.1702257Z 581 │ │ if (Option.isNone(received)) { 2026-10-24T04:18:54.1702452Z 582 │ │ return yield* Effect.die("The event stream ended before delivering the live event."); 2026-10-24T04:18:54.1702530Z 583 │ │ } 2026-10-24T04:18:54.1702690Z 584 │ │ assert.equal(received.value.sequence, written[0]?.sequence); 2026-10-24T04:18:54.1702834Z 585 │ │ assert.equal(received.value.event.id, nextEvent.id); 2026-10-24T04:18:54.1702961Z 586 │ │ afterSequence = received.value.sequence; 2026-10-24T04:18:54.1703089Z 587 │ ╰─▶ } 2026-10-24T04:18:54.1703148Z 588 │ }), 2026-10-24T04:18:54.1703199Z ╰──── 2026-10-24T04:18:54.1703201Z 2026-10-24T04:18:54.1703656Z ⚠ 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-24T04:18:54.1703830Z ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:2327:9] 2026-10-24T04:18:54.1703909Z 2326 │ let settled = false; 2026-10-24T04:18:54.1704097Z 2327 │ ╭─▶ while (!settled) { 2026-10-24T04:18:54.1704253Z 2328 │ │ settled = (yield* outbox.listByCommandId(commandId)).every( 2026-10-24T04:18:54.1704383Z 2329 │ │ (effect) => effect.status === "succeeded", 2026-10-24T04:18:54.1704464Z 2330 │ │ ); 2026-10-24T04:18:54.1704585Z 2331 │ │ if (!settled) yield* Effect.yieldNow; 2026-10-24T04:18:54.1704721Z 2332 │ ╰─▶ } 2026-10-24T04:18:54.1704836Z 2333 │ }).pipe(Effect.provide(layerWorker), Effect.scoped); 2026-10-24T04:18:54.1704891Z ╰──── 2026-10-24T04:18:54.1704944Z 2026-10-24T04:18:54.1705179Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T04:18:54.1705315Z ╭─[apps/mobile/src/state/use-thread-outbox-drain.ts:1315:5] 2026-10-24T04:18:54.1705392Z 1314 │ queuedMessagesByThreadKey, 2026-10-24T04:18:54.1705455Z 1315 │ retryTick, 2026-10-24T04:18:54.1705526Z ·  ────┬──── 2026-10-24T04:18:54.1705665Z · ╰── Unnecessary dependency `retryTick` 2026-10-24T04:18:54.1705736Z 1316 │ restoreQueuedMessage, 2026-10-24T04:18:54.1705788Z ╰──── 2026-10-24T04:18:54.1706076Z  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-24T04:18:54.1706389Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.1706394Z 2026-10-24T04:18:54.1706602Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T04:18:54.1706739Z ╭─[packages/shared/src/composerContextLegacySend.ts:19:45] 2026-10-24T04:18:54.1706865Z 18 │ const occurrences = collectComposerContextReferences(text); 2026-10-24T04:18:54.1706968Z 19 │ for (const occurrence of [...occurrences].reverse()) { 2026-10-24T04:18:54.1707078Z ·  ─────── 2026-10-24T04:18:54.1707187Z 20 │ const record = recordsById.get(occurrence.contextId); 2026-10-24T04:18:54.1707237Z ╰──── 2026-10-24T04:18:54.1707495Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T04:18:54.1707500Z 2026-10-24T04:18:54.1707715Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T04:18:54.1707848Z ╭─[apps/mobile/src/state/use-composer-drafts.ts:1022:15] 2026-10-24T04:18:54.1707914Z 1021 │ instanceId, 2026-10-24T04:18:54.1708056Z 1022 │ { ...(persisted.modelOptionMemory[instanceId] ?? {}), ...models }, 2026-10-24T04:18:54.1708192Z ·  ────────────────────────────────────────────────── 2026-10-24T04:18:54.1708254Z 1023 │ ]), 2026-10-24T04:18:54.1708305Z ╰──── 2026-10-24T04:18:54.1708562Z  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-24T04:18:54.1708565Z 2026-10-24T04:18:54.1708777Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T04:18:54.1708920Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:773:7] 2026-10-24T04:18:54.1709023Z 772 │ if (settingsSheetPresentation.isActive) { 2026-10-24T04:18:54.1709150Z 773 │ settingsRoutePresentation.present(settingsRouteSession); 2026-10-24T04:18:54.1709241Z ·  ────────────┬──────────── 2026-10-24T04:18:54.1709413Z · ╰── Missing dependency `settingsRoutePresentation` 2026-10-24T04:18:54.1709468Z 774 │ } 2026-10-24T04:18:54.1709667Z 775 │ }, [settingsRoutePresentation.present, settingsRouteSession, settingsSheetPresentation.isActive]); 2026-10-24T04:18:54.1709771Z ·  ────────────────┬──────────────── 2026-10-24T04:18:54.1710092Z · ╰── Overly precise dependency `settingsRoutePresentation.present`, use `settingsRoutePresentation` instead 2026-10-24T04:18:54.1710173Z 776 │ 2026-10-24T04:18:54.1710224Z ╰──── 2026-10-24T04:18:54.1710630Z  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-24T04:18:54.1710934Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.1710936Z 2026-10-24T04:18:54.1711088Z ⚠ react(immutability): This value cannot be modified 2026-10-24T04:18:54.1711231Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:391:5] 2026-10-24T04:18:54.1711387Z 387 │ typeof props.style.borderRadius === "number" ? props.style.borderRadius : 0; 2026-10-24T04:18:54.1711519Z 388 │ const animatedBorderRadius = useSharedValue(targetBorderRadius); 2026-10-24T04:18:54.1711609Z ·  ──────────┬───────── 2026-10-24T04:18:54.1711760Z · ╰── `animatedBorderRadius` originates here 2026-10-24T04:18:54.1711912Z 389 │ const shouldAnimate = props.animateLayout !== false && Platform.OS !== "android"; 2026-10-24T04:18:54.1711978Z 390 │ useLayoutEffect(() => { 2026-10-24T04:18:54.1712078Z 391 │ animatedBorderRadius.value = shouldAnimate 2026-10-24T04:18:54.1712163Z ·  ──────────┬───────── 2026-10-24T04:18:54.1712319Z · ╰── `animatedBorderRadius` cannot be modified 2026-10-24T04:18:54.1712410Z 392 │ ? withTiming(targetBorderRadius, { 2026-10-24T04:18:54.1712466Z ╰──── 2026-10-24T04:18:54.1712726Z  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-24T04:18:54.1713024Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T04:18:54.1713027Z 2026-10-24T04:18:54.1713169Z ⚠ react(refs): Cannot access refs during render 2026-10-24T04:18:54.1713283Z ╭─[apps/mobile/src/components/ui/Menu.tsx:54:36] 2026-10-24T04:18:54.1713469Z 53 │ const child = children as ReactElement>; 2026-10-24T04:18:54.1713654Z 54 │ ╭─▶ children = cloneElement(child, { 2026-10-24T04:18:54.1713761Z 55 │ │ onTouchStart: (event) => { 2026-10-24T04:18:54.1713914Z 56 │ │ // Reset for a new touch, not onPressIn, which also fires when a 2026-10-24T04:18:54.1714268Z 57 │ │ // finger moves out of the row and back during the same gesture. 2026-10-24T04:18:54.1714523Z 58 │ │ menuPress.current.isPreparing = false; 2026-10-24T04:18:54.1714709Z 59 │ │ menuPress.current.suppressPress = menuPress.current.isOpen; 2026-10-24T04:18:54.1714829Z 60 │ │ pendingPress.current = null; 2026-10-24T04:18:54.1714953Z 61 │ │ child.props.onTouchStart?.(event); 2026-10-24T04:18:54.1715033Z 62 │ │ }, 2026-10-24T04:18:54.1715289Z 63 │ │ onPress: (event) => { 2026-10-24T04:18:54.1715541Z 64 │ │ // Accessibility clicks have no touch identifier and must not inherit 2026-10-24T04:18:54.1715680Z 65 │ │ // cancellation from a previous physical gesture. 2026-10-24T04:18:54.1715847Z 66 │ │ const isTouch = typeof event.nativeEvent.identifier === "number"; 2026-10-24T04:18:54.1716052Z 67 │ │ if (isTouch ? menuPress.current.suppressPress : menuPress.current.isOpen) { 2026-10-24T04:18:54.1716188Z 68 │ │ return; 2026-10-24T04:18:54.1716269Z 69 │ │ } 2026-10-24T04:18:54.1716408Z 70 │ │ if (isTouch && menuPress.current.isPreparing) { 2026-10-24T04:18:54.1716580Z 71 │ │ // A release can arrive between native menu preparation and display. 2026-10-24T04:18:54.1716745Z 72 │ │ // Let UIKit's display/cancel callback decide this press's outcome. 2026-10-24T04:18:54.1716841Z 73 │ │ event.persist(); 2026-10-24T04:18:54.1716996Z 74 │ │ pendingPress.current = () => child.props.onPress?.(event); 2026-10-24T04:18:54.1717080Z 75 │ │ return; 2026-10-24T04:18:54.1717157Z 76 │ │ } 2026-10-24T04:18:54.1717266Z 77 │ │ child.props.onPress?.(event); 2026-10-24T04:18:54.1717341Z 78 │ │ }, 2026-10-24T04:18:54.1717473Z 79 │ ├─▶ }); 2026-10-24T04:18:54.1717722Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T04:18:54.1717826Z 80 │ menuProps.onMenuInteractionStart = () => { 2026-10-24T04:18:54.1717882Z ╰──── 2026-10-24T04:18:54.1718345Z  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-24T04:18:54.1718643Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T04:18:54.1718649Z 2026-10-24T04:18:54.1718913Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T04:18:54.1719074Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:400:5] 2026-10-24T04:18:54.1719133Z 398 │ 2026-10-24T04:18:54.1719201Z 399 │ useEffect(() => { 2026-10-24T04:18:54.1719274Z ·  ────┬──── 2026-10-24T04:18:54.1719404Z · ╰── This is the containing effect 2026-10-24T04:18:54.1719495Z 400 │ setInspectorSelection((current) => { 2026-10-24T04:18:54.1719582Z ·  ──────────┬────────── 2026-10-24T04:18:54.1719752Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T04:18:54.1719853Z 401 │ if (props.renderInspector === undefined) { 2026-10-24T04:18:54.1719906Z ╰──── 2026-10-24T04:18:54.1720552Z  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-24T04:18:54.1720937Z  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-24T04:18:54.1720941Z 2026-10-24T04:18:54.1721153Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T04:18:54.1721316Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:528:24] 2026-10-24T04:18:54.1721535Z 527 │ const inspectorHeaderInset = Platform.OS === "ios" ? 0 : safeAreaInsets.top; 2026-10-24T04:18:54.1721700Z 528 │ ╭─▶ const GitInspector = () => ( 2026-10-24T04:18:54.1721801Z 529 │ │ 2026-10-24T04:18:54.1722403Z 534 │ ╰─▶ ); 2026-10-24T04:18:54.1722483Z 535 │ const FilesInspector = () => 2026-10-24T04:18:54.1722534Z ╰──── 2026-10-24T04:18:54.1722749Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-24T04:18:54.1722752Z 2026-10-24T04:18:54.1722963Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T04:18:54.1723114Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:535:26] 2026-10-24T04:18:54.1723174Z 534 │ ); 2026-10-24T04:18:54.1723332Z 535 │ ╭─▶ const FilesInspector = () => 2026-10-24T04:18:54.1723477Z 536 │ │ selectedThread !== null && selectedThreadCwd !== null ? ( 2026-10-24T04:18:54.1723583Z 537 │ │ 2026-10-24T04:18:54.1724562Z 545 │ ╰─▶ ) : null; 2026-10-24T04:18:54.1724710Z 546 │ const RouteInspector = () => props.renderInspector?.(inspectorHeaderInset); 2026-10-24T04:18:54.1724762Z ╰──── 2026-10-24T04:18:54.1724972Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-24T04:18:54.1724975Z 2026-10-24T04:18:54.1725157Z ⚠ eslint(require-yield): This generator function does not have `yield` 2026-10-24T04:18:54.1725363Z ╭─[packages/provider-acp/src/server/mcpOverAcpBridge.ts:81:78] 2026-10-24T04:18:54.1725476Z  80 │ 2026-10-24T04:18:54.1725738Z  81 │ ╭─▶ export const makeAcpMcpOverAcpBridge = Effect.fn("AcpMcpOverAcpBridge.make")(function* ( 2026-10-24T04:18:54.1725853Z  82 │ │ options: AcpMcpOverAcpBridgeOptions, 2026-10-24T04:18:54.1725972Z  83 │ │ ): Effect.fn.Return { 2026-10-24T04:18:54.1726163Z  84 │ │ const fetchImplementation = options.fetchImplementation ?? fetch; 2026-10-24T04:18:54.1726334Z  85 │ │ const connections = new Map(); 2026-10-24T04:18:54.1726402Z  86 │ │ 2026-10-24T04:18:54.1726616Z  87 │ │ const connectionFor = (connectionId: string): Effect.Effect => 2026-10-24T04:18:54.1726717Z  88 │ │ Effect.suspend(() => { 2026-10-24T04:18:54.1726849Z  89 │ │ const connection = connections.get(connectionId); 2026-10-24T04:18:54.1726956Z  90 │ │ return connection === undefined 2026-10-24T04:18:54.1727164Z  91 │ │ ? Effect.fail(new AcpMcpOverAcpError(`Unknown MCP-over-ACP connection "${connectionId}".`)) 2026-10-24T04:18:54.1727272Z  92 │ │ : Effect.succeed(connection); 2026-10-24T04:18:54.1727347Z  93 │ │ }); 2026-10-24T04:18:54.1727412Z  94 │ │ 2026-10-24T04:18:54.1727498Z  95 │ │ const send = ( 2026-10-24T04:18:54.1727595Z  96 │ │ connection: Connection, 2026-10-24T04:18:54.1727692Z  97 │ │ message: unknown, 2026-10-24T04:18:54.1727846Z  98 │ │ ): Effect.Effect, AcpMcpOverAcpError> => 2026-10-24T04:18:54.1727960Z  99 │ │ connection.mutex.withPermits(1)( 2026-10-24T04:18:54.1728063Z 100 │ │ Effect.gen(function* () { 2026-10-24T04:18:54.1728182Z 101 │ │ const body = JSON.stringify(message); 2026-10-24T04:18:54.1728320Z 102 │ │ if (Buffer.byteLength(body) > MAX_MESSAGE_BYTES) { 2026-10-24T04:18:54.1728524Z 103 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("MCP-over-ACP message exceeds 8 MiB.")); 2026-10-24T04:18:54.1728601Z 104 │ │ } 2026-10-24T04:18:54.1728730Z 105 │ │ const response = yield* Effect.tryPromise({ 2026-10-24T04:18:54.1728831Z 106 │ │ try: (signal) => 2026-10-24T04:18:54.1728962Z 107 │ │ fetchImplementation(options.endpoint, { 2026-10-24T04:18:54.1729062Z 108 │ │ method: "POST", 2026-10-24T04:18:54.1729153Z 109 │ │ signal, 2026-10-24T04:18:54.1729249Z 110 │ │ headers: { 2026-10-24T04:18:54.1729371Z 111 │ │ "content-type": "application/json", 2026-10-24T04:18:54.1729512Z 112 │ │ accept: "application/json, text/event-stream", 2026-10-24T04:18:54.1729642Z 113 │ │ authorization: options.authorization, 2026-10-24T04:18:54.1729770Z 114 │ │ ...(connection.sessionId === null 2026-10-24T04:18:54.1729911Z 115 │ │ ? {} 2026-10-24T04:18:54.1730177Z 116 │ │ : { "mcp-session-id": connection.sessionId }), 2026-10-24T04:18:54.1730306Z 117 │ │ ...(connection.protocolVersion === null 2026-10-24T04:18:54.1730393Z 118 │ │ ? {} 2026-10-24T04:18:54.1730551Z 119 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-24T04:18:54.1730633Z 120 │ │ }, 2026-10-24T04:18:54.1730767Z 121 │ │ body, 2026-10-24T04:18:54.1730871Z 122 │ │ }), 2026-10-24T04:18:54.1730968Z 123 │ │ catch: bridgeError, 2026-10-24T04:18:54.1731046Z 124 │ │ }); 2026-10-24T04:18:54.1731256Z 125 │ │ connection.sessionId = response.headers.get("mcp-session-id") ?? connection.sessionId; 2026-10-24T04:18:54.1731356Z 126 │ │ if (!response.ok) { 2026-10-24T04:18:54.1731457Z 127 │ │ yield* Effect.promise( 2026-10-24T04:18:54.1731640Z 128 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-24T04:18:54.1731720Z 129 │ │ ); 2026-10-24T04:18:54.1731829Z 130 │ │ return yield* Effect.fail( 2026-10-24T04:18:54.1732029Z 131 │ │ new AcpMcpOverAcpError(`T3 Code MCP endpoint responded with HTTP ${response.status}.`), 2026-10-24T04:18:54.1732108Z 132 │ │ ); 2026-10-24T04:18:54.1732186Z 133 │ │ } 2026-10-24T04:18:54.1732395Z 134 │ │ const payloads = [...(yield* Stream.runCollect(responsePayloads(response, bridgeError)))]; 2026-10-24T04:18:54.1732516Z 135 │ │ for (const payload of payloads) { 2026-10-24T04:18:54.1732722Z 136 │ │ connection.protocolVersion = protocolVersionOf(payload) ?? connection.protocolVersion; 2026-10-24T04:18:54.1732798Z 137 │ │ } 2026-10-24T04:18:54.1732896Z 138 │ │ return payloads; 2026-10-24T04:18:54.1733017Z 139 │ │ }).pipe(Effect.mapError(bridgeError)), 2026-10-24T04:18:54.1733089Z 140 │ │ ); 2026-10-24T04:18:54.1733157Z 141 │ │ 2026-10-24T04:18:54.1733328Z 142 │ │ const disconnect = Effect.fn("mcpOverAcpBridge.disconnect")(function* ( 2026-10-24T04:18:54.1733503Z 143 │ │ request: AcpSchema.DisconnectMcpRequest, 2026-10-24T04:18:54.1733743Z 144 │ │ ): Effect.fn.Return { 2026-10-24T04:18:54.1733903Z 145 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T04:18:54.1734083Z 146 │ │ connections.delete(request.connectionId); 2026-10-24T04:18:54.1734202Z 147 │ │ const sessionId = connection.sessionId; 2026-10-24T04:18:54.1734305Z 148 │ │ if (sessionId !== null) { 2026-10-24T04:18:54.1734500Z 149 │ │ const response = yield* Effect.tryPromise({ 2026-10-24T04:18:54.1734595Z 150 │ │ try: (signal) => 2026-10-24T04:18:54.1734728Z 151 │ │ fetchImplementation(options.endpoint, { 2026-10-24T04:18:54.1734825Z 152 │ │ method: "DELETE", 2026-10-24T04:18:54.1734912Z 153 │ │ signal, 2026-10-24T04:18:54.1735004Z 154 │ │ headers: { 2026-10-24T04:18:54.1735128Z 155 │ │ authorization: options.authorization, 2026-10-24T04:18:54.1735241Z 156 │ │ "mcp-session-id": sessionId, 2026-10-24T04:18:54.1735371Z 157 │ │ ...(connection.protocolVersion === null 2026-10-24T04:18:54.1735457Z 158 │ │ ? {} 2026-10-24T04:18:54.1735615Z 159 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-24T04:18:54.1735696Z 160 │ │ }, 2026-10-24T04:18:54.1735782Z 161 │ │ }), 2026-10-24T04:18:54.1735881Z 162 │ │ catch: bridgeError, 2026-10-24T04:18:54.1735957Z 163 │ │ }); 2026-10-24T04:18:54.1736083Z 164 │ │ if (!response.ok && response.status !== 404) { 2026-10-24T04:18:54.1736190Z 165 │ │ return yield* Effect.fail( 2026-10-24T04:18:54.1736297Z 166 │ │ new AcpMcpOverAcpError( 2026-10-24T04:18:54.1736474Z 167 │ │ `T3 Code MCP endpoint rejected disconnect with HTTP ${response.status}.`, 2026-10-24T04:18:54.1736614Z 168 │ │ ), 2026-10-24T04:18:54.1736737Z 169 │ │ ); 2026-10-24T04:18:54.1736832Z 170 │ │ } 2026-10-24T04:18:54.1736939Z 171 │ │ yield* Effect.promise( 2026-10-24T04:18:54.1737111Z 172 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-24T04:18:54.1737186Z 173 │ │ ); 2026-10-24T04:18:54.1737259Z 174 │ │ } 2026-10-24T04:18:54.1737341Z 175 │ │ return {}; 2026-10-24T04:18:54.1737412Z 176 │ │ }); 2026-10-24T04:18:54.1737480Z 177 │ │ 2026-10-24T04:18:54.1737559Z 178 │ │ return { 2026-10-24T04:18:54.1737725Z 179 │ │ connect: Effect.fn("mcpOverAcpBridge.connect")(function* (request) { 2026-10-24T04:18:54.1737839Z 180 │ │ if (request.serverId !== "t3-code") { 2026-10-24T04:18:54.1737947Z 181 │ │ return yield* Effect.fail( 2026-10-24T04:18:54.1738209Z 182 │ │ new AcpMcpOverAcpError(`Unknown ACP MCP server "${request.serverId}".`), 2026-10-24T04:18:54.1738378Z 183 │ │ ); 2026-10-24T04:18:54.1738489Z 184 │ │ } 2026-10-24T04:18:54.1738624Z 185 │ │ if (connections.size >= MAX_CONNECTIONS) { 2026-10-24T04:18:54.1738829Z 186 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("Too many MCP-over-ACP connections.")); 2026-10-24T04:18:54.1738902Z 187 │ │ } 2026-10-24T04:18:54.1739113Z 188 │ │ const connectionId = yield* options.allocateConnectionId; 2026-10-24T04:18:54.1739296Z 189 │ │ connections.set(connectionId, { 2026-10-24T04:18:54.1739464Z 190 │ │ mutex: yield* Semaphore.make(1), 2026-10-24T04:18:54.1739565Z 191 │ │ sessionId: null, 2026-10-24T04:18:54.1739670Z 192 │ │ protocolVersion: null, 2026-10-24T04:18:54.1739764Z 193 │ │ nextRequestId: 0, 2026-10-24T04:18:54.1739839Z 194 │ │ }); 2026-10-24T04:18:54.1739937Z 195 │ │ return { connectionId }; 2026-10-24T04:18:54.1740010Z 196 │ │ }), 2026-10-24T04:18:54.1740172Z 197 │ │ message: Effect.fn("mcpOverAcpBridge.message")(function* (request) { 2026-10-24T04:18:54.1740329Z 198 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T04:18:54.1740447Z 199 │ │ const id = ++connection.nextRequestId; 2026-10-24T04:18:54.1740576Z 200 │ │ const payloads = yield* send(connection, { 2026-10-24T04:18:54.1740671Z 201 │ │ jsonrpc: "2.0", 2026-10-24T04:18:54.1740751Z 202 │ │ id, 2026-10-24T04:18:54.1740852Z 203 │ │ method: request.method, 2026-10-24T04:18:54.1741003Z 204 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-24T04:18:54.1741077Z 205 │ │ }); 2026-10-24T04:18:54.1741257Z 206 │ │ const response = payloads.find((payload) => asEnvelope(payload)?.id === id); 2026-10-24T04:18:54.1741376Z 207 │ │ const envelope = asEnvelope(response); 2026-10-24T04:18:54.1741474Z 208 │ │ if (envelope === null) { 2026-10-24T04:18:54.1741575Z 209 │ │ return yield* Effect.fail( 2026-10-24T04:18:54.1741758Z 210 │ │ new AcpMcpOverAcpError("MCP server did not return a matching response."), 2026-10-24T04:18:54.1741838Z 211 │ │ ); 2026-10-24T04:18:54.1741911Z 212 │ │ } 2026-10-24T04:18:54.1742024Z 213 │ │ if (envelope.error !== undefined) { 2026-10-24T04:18:54.1742211Z 214 │ │ return yield* Effect.fail(new AcpMcpOverAcpError(errorMessage(envelope.error))); 2026-10-24T04:18:54.1742286Z 215 │ │ } 2026-10-24T04:18:54.1742449Z 216 │ │ return (envelope.result ?? null) as AcpSchema.MessageMcpResponse; 2026-10-24T04:18:54.1742519Z 217 │ │ }), 2026-10-24T04:18:54.1742705Z 218 │ │ notification: Effect.fn("mcpOverAcpBridge.notification")(function* (request) { 2026-10-24T04:18:54.1742919Z 219 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T04:18:54.1743084Z 220 │ │ yield* send(connection, { 2026-10-24T04:18:54.1743177Z 221 │ │ jsonrpc: "2.0", 2026-10-24T04:18:54.1743274Z 222 │ │ method: request.method, 2026-10-24T04:18:54.1743428Z 223 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-24T04:18:54.1743503Z 224 │ │ }); 2026-10-24T04:18:54.1743572Z 225 │ │ }), 2026-10-24T04:18:54.1743659Z 226 │ │ disconnect, 2026-10-24T04:18:54.1743831Z 227 │ │ dispose: Effect.suspend(() => 2026-10-24T04:18:54.1743931Z 228 │ │ Effect.forEach( 2026-10-24T04:18:54.1744073Z 229 │ │ [...connections.keys()], 2026-10-24T04:18:54.1744240Z 230 │ │ (connectionId) => disconnect({ connectionId }).pipe(Effect.ignore), 2026-10-24T04:18:54.1744335Z 231 │ │ { discard: true }, 2026-10-24T04:18:54.1744423Z 232 │ │ ), 2026-10-24T04:18:54.1744534Z 233 │ │ ), 2026-10-24T04:18:54.1744656Z 234 │ │ }; 2026-10-24T04:18:54.1744824Z 235 │ ╰─▶ }); 2026-10-24T04:18:54.1744876Z ╰──── 2026-10-24T04:18:54.1745226Z  help: Add a `yield` expression inside the generator body, or convert it to a regular function if iteration behavior is not needed. 2026-10-24T04:18:54.1745232Z 2026-10-24T04:18:54.1745563Z ⚠ eslint(no-unused-vars): Function 'summarizePayload' is declared but never used. 2026-10-24T04:18:54.1745781Z ╭─[packages/provider-acp/src/server/nativeLogging.ts:22:10] 2026-10-24T04:18:54.1745843Z 21 │ 2026-10-24T04:18:54.1745996Z 22 │ function summarizePayload(payload: unknown): Readonly> { 2026-10-24T04:18:54.1746078Z ·  ────────┬─────── 2026-10-24T04:18:54.1746224Z · ╰── 'summarizePayload' is declared here 2026-10-24T04:18:54.1746322Z 23 │ if (payload === null) return { valueType: "null" }; 2026-10-24T04:18:54.1746373Z ╰──── 2026-10-24T04:18:54.1746471Z  help: Consider removing this declaration. 2026-10-24T04:18:54.1746474Z 2026-10-24T04:18:54.1746728Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T04:18:54.1746890Z ╭─[apps/server/src/orchestration-v2/ThreadPullRequestService.ts:413:7] 2026-10-24T04:18:54.1746941Z 412 │ 2026-10-24T04:18:54.1747060Z 413 │ const layer = Layer.effect(ThreadPullRequestServiceV2, make); 2026-10-24T04:18:54.1747130Z ·  ──┬── 2026-10-24T04:18:54.1747250Z · ╰── 'layer' is declared here 2026-10-24T04:18:54.1747302Z ╰──── 2026-10-24T04:18:54.1747399Z  help: Consider removing this declaration. 2026-10-24T04:18:54.1747401Z 2026-10-24T04:18:54.1747757Z ⚠ 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-24T04:18:54.1747878Z ╭─[apps/server/src/auth/RpcAuthorization.ts:237:17] 2026-10-24T04:18:54.1748065Z 236 │ const requiredScopesForSettingsUpdate = (payload: unknown) => { 2026-10-24T04:18:54.1748252Z 237 │ const input = Schema.decodeUnknownSync(SettingsUpdate)(payload); 2026-10-24T04:18:54.1748354Z ·  ──────────────────────── 2026-10-24T04:18:54.1748486Z 238 │ const scopes = requiredScopesForServerSettingsPatch(input.patch); 2026-10-24T04:18:54.1748536Z ╰──── 2026-10-24T04:18:54.1748539Z 2026-10-24T04:18:54.1748889Z ⚠ 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-24T04:18:54.1749076Z ╭─[apps/server/src/auth/RpcAuthorization.ts:256:26] 2026-10-24T04:18:54.1749172Z 255 │ if (method === WS_METHODS.assetsCreateUrl) { 2026-10-24T04:18:54.1749327Z 256 │ const { resource } = Schema.decodeUnknownSync(AssetCreateUrlInput)(payload); 2026-10-24T04:18:54.1749442Z ·  ──────────────────────── 2026-10-24T04:18:54.1749502Z 257 │ return [ 2026-10-24T04:18:54.1749552Z ╰──── 2026-10-24T04:18:54.1749554Z 2026-10-24T04:18:54.1749813Z ⚠ eslint(no-unused-vars): Variable 'layerDaemon' is declared but never used. Unused variables should start with a '_'. 2026-10-24T04:18:54.1749942Z ╭─[apps/server/src/orchestration-v2/EffectWorker.ts:914:7] 2026-10-24T04:18:54.1749993Z 913 │ 2026-10-24T04:18:54.1750173Z 914 │ const layerDaemon: Layer.Layer = Layer.effectDiscard( 2026-10-24T04:18:54.1750247Z ·  ─────┬───── 2026-10-24T04:18:54.1750380Z · ╰── 'layerDaemon' is declared here 2026-10-24T04:18:54.1750470Z 915 │ runDaemon.pipe(Effect.forkScoped), 2026-10-24T04:18:54.1750521Z ╰──── 2026-10-24T04:18:54.1750621Z  help: Consider removing this declaration. 2026-10-24T04:18:54.1750624Z 2026-10-24T04:18:54.1750801Z ⚠ react(static-components): Cannot create components during render 2026-10-24T04:18:54.1750955Z ╭─[apps/mobile/src/features/terminal/NativeTerminalSurface.tsx:234:10] 2026-10-24T04:18:54.1751040Z 196 │ const { onInput, onResize } = props; 2026-10-24T04:18:54.1751180Z 197 │ const NativeTerminalSurfaceView = resolveNativeTerminalSurfaceView(); 2026-10-24T04:18:54.1751307Z ·  ────────────────┬─────────────── 2026-10-24T04:18:54.1751488Z · ╰── The component is created during render here 2026-10-24T04:18:54.1751616Z 198 │ const hasNativeSurface = Boolean(NativeTerminalSurfaceView); 2026-10-24T04:18:54.1751674Z 199 │ 2026-10-24T04:18:54.1751741Z 200 │ useEffect(() => { 2026-10-24T04:18:54.1751824Z 201 │ terminalDebugLog("native:surface", { 2026-10-24T04:18:54.1751907Z 202 │ terminalKey: props.terminalKey, 2026-10-24T04:18:54.1751983Z 203 │ native: hasNativeSurface, 2026-10-24T04:18:54.1752112Z 204 │ hardwareKeyRevision: getNativeTerminalHardwareKeyRevision(), 2026-10-24T04:18:54.1752191Z 205 │ bufferLen: props.buffer.length, 2026-10-24T04:18:54.1752267Z 206 │ isRunning: props.isRunning, 2026-10-24T04:18:54.1752322Z 207 │ }); 2026-10-24T04:18:54.1752475Z 208 │ }, [hasNativeSurface, props.buffer.length, props.isRunning, props.terminalKey]); 2026-10-24T04:18:54.1752557Z 209 │ const handleNativeInput = useCallback( 2026-10-24T04:18:54.1752725Z 210 │ (event: NativeSyntheticEvent) => { 2026-10-24T04:18:54.1752877Z 211 │ if (!props.isRunning || props.readOnly) { 2026-10-24T04:18:54.1752938Z 212 │ return; 2026-10-24T04:18:54.1752990Z 213 │ } 2026-10-24T04:18:54.1753077Z 214 │ terminalDebugLog("native:onInput", { 2026-10-24T04:18:54.1753220Z 215 │ codes: Array.from(event.nativeEvent.data, (char) => char.codePointAt(0)), 2026-10-24T04:18:54.1753276Z 216 │ }); 2026-10-24T04:18:54.1753356Z 217 │ onInput(event.nativeEvent.data); 2026-10-24T04:18:54.1753412Z 218 │ }, 2026-10-24T04:18:54.1753541Z 219 │ [onInput, props.isRunning, props.readOnly], 2026-10-24T04:18:54.1753625Z 220 │ ); 2026-10-24T04:18:54.1753710Z 221 │ const handleNativeResize = useCallback( 2026-10-24T04:18:54.1753820Z 222 │ (event: NativeSyntheticEvent) => { 2026-10-24T04:18:54.1753886Z 223 │ onResize({ 2026-10-24T04:18:54.1753966Z 224 │ cols: event.nativeEvent.cols, 2026-10-24T04:18:54.1754079Z 225 │ rows: event.nativeEvent.rows, 2026-10-24T04:18:54.1754144Z 226 │ }); 2026-10-24T04:18:54.1754198Z 227 │ }, 2026-10-24T04:18:54.1754256Z 228 │ [onResize], 2026-10-24T04:18:54.1754308Z 229 │ ); 2026-10-24T04:18:54.1754359Z 230 │ 2026-10-24T04:18:54.1754440Z 231 │ if (NativeTerminalSurfaceView) { 2026-10-24T04:18:54.1754496Z 232 │ return ( 2026-10-24T04:18:54.1754571Z 233 │ 2026-10-24T04:18:54.1754649Z 234 │ (null); 2026-10-24T04:18:54.1759229Z 155 │ useLayoutEffect(() => { 2026-10-24T04:18:54.1759304Z ·  ───────┬─────── 2026-10-24T04:18:54.1759432Z · ╰── This is the containing effect 2026-10-24T04:18:54.1759513Z 156 │ if (faviconRequest === null) return; 2026-10-24T04:18:54.1759564Z 157 │ 2026-10-24T04:18:54.1759692Z 158 │ const endRequest = beginProjectFaviconRequest(faviconRequest); 2026-10-24T04:18:54.1759790Z 159 │ setActiveFaviconRequest(faviconRequest); 2026-10-24T04:18:54.1759879Z ·  ───────────┬─────────── 2026-10-24T04:18:54.1760044Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T04:18:54.1760111Z 160 │ return endRequest; 2026-10-24T04:18:54.1760160Z ╰──── 2026-10-24T04:18:54.1760740Z  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-24T04:18:54.1761055Z  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-24T04:18:54.1761110Z 2026-10-24T04:18:54.1761389Z ⚠ eslint(no-unused-vars): Function 'resolveThreadWorkspaceCwd' is declared but never used. 2026-10-24T04:18:54.1761504Z ╭─[apps/server/src/checkpointing/Utils.ts:12:10] 2026-10-24T04:18:54.1761557Z 11 │ 2026-10-24T04:18:54.1761647Z 12 │ function resolveThreadWorkspaceCwd(input: { 2026-10-24T04:18:54.1761744Z ·  ────────────┬──────────── 2026-10-24T04:18:54.1761955Z · ╰── 'resolveThreadWorkspaceCwd' is declared here 2026-10-24T04:18:54.1762036Z 13 │ readonly thread: { 2026-10-24T04:18:54.1762085Z ╰──── 2026-10-24T04:18:54.1762185Z  help: Consider removing this declaration. 2026-10-24T04:18:54.1762187Z 2026-10-24T04:18:54.1762439Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T04:18:54.1762604Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:123:7] 2026-10-24T04:18:54.1762654Z 118 │ 2026-10-24T04:18:54.1762718Z 119 │ useEffect(() => { 2026-10-24T04:18:54.1762786Z ·  ────┬──── 2026-10-24T04:18:54.1762909Z · ╰── This is the containing effect 2026-10-24T04:18:54.1762987Z 120 │ if (orientationSettled) return; 2026-10-24T04:18:54.1763097Z 121 │ const orientation = getNativeShowcaseOrientation(); 2026-10-24T04:18:54.1763170Z 122 │ if (orientation === null) { 2026-10-24T04:18:54.1763248Z 123 │ setOrientationSettled(true); 2026-10-24T04:18:54.1763331Z ·  ──────────┬────────── 2026-10-24T04:18:54.1763507Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T04:18:54.1763571Z 124 │ return; 2026-10-24T04:18:54.1763623Z ╰──── 2026-10-24T04:18:54.1764233Z  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-24T04:18:54.1764545Z  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-24T04:18:54.1764547Z 2026-10-24T04:18:54.1764793Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T04:18:54.1764961Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:304:7] 2026-10-24T04:18:54.1765014Z 292 │ 2026-10-24T04:18:54.1765076Z 293 │ useEffect(() => { 2026-10-24T04:18:54.1765145Z ·  ────┬──── 2026-10-24T04:18:54.1765268Z · ╰── This is the containing effect 2026-10-24T04:18:54.1765324Z 294 │ if ( 2026-10-24T04:18:54.1765388Z 295 │ scene === null || 2026-10-24T04:18:54.1765463Z 296 │ requestedScene === null || 2026-10-24T04:18:54.1765538Z 297 │ scene !== requestedScene || 2026-10-24T04:18:54.1765599Z 298 │ !hasFixture || 2026-10-24T04:18:54.1765670Z 299 │ !orientationSettled || 2026-10-24T04:18:54.1765738Z 300 │ !themeApplied || 2026-10-24T04:18:54.1765851Z 301 │ (scene === "agent-activity" && !agentActivityStaged) || 2026-10-24T04:18:54.1766030Z 302 │ !isShowcaseNativeContentReady({ scene, themeId, renderSignal }) 2026-10-24T04:18:54.1766145Z 303 │ ) { 2026-10-24T04:18:54.1766216Z 304 │ setReadyScene(null); 2026-10-24T04:18:54.1766294Z ·  ──────┬────── 2026-10-24T04:18:54.1766456Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T04:18:54.1766517Z 305 │ return; 2026-10-24T04:18:54.1766570Z ╰──── 2026-10-24T04:18:54.1767220Z  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-24T04:18:54.1767533Z  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-24T04:18:54.1767538Z 2026-10-24T04:18:54.1767794Z ⚠ eslint(no-unused-vars): Variable 'lastOutcome' is declared but never used. Unused variables should start with a '_'. 2026-10-24T04:18:54.1767961Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:128:9] 2026-10-24T04:18:54.1768031Z 127 │ let cancelled = false; 2026-10-24T04:18:54.1768119Z 128 │ let lastOutcome: string | null = null; 2026-10-24T04:18:54.1804228Z ·  ─────┬───── 2026-10-24T04:18:54.1804453Z · ╰── 'lastOutcome' is declared here 2026-10-24T04:18:54.1804632Z 129 │ void retryShowcaseOperation(async () => applyNativeShowcaseOrientation(orientation), { 2026-10-24T04:18:54.1804683Z ╰──── 2026-10-24T04:18:54.1804806Z  help: Consider removing this declaration. 2026-10-24T04:18:54.1804815Z 2026-10-24T04:18:54.1804962Z ⚠ react(refs): Cannot access refs during render 2026-10-24T04:18:54.1805114Z ╭─[apps/mobile/src/features/home/thread-swipe-actions.tsx:494:27] 2026-10-24T04:18:54.1805174Z 493 │ > 2026-10-24T04:18:54.1805252Z 494 │ {props.children(close)} 2026-10-24T04:18:54.1805339Z ·  ──┬── 2026-10-24T04:18:54.1805494Z · ╰── Cannot access ref value during render 2026-10-24T04:18:54.1805568Z 495 │ 2026-10-24T04:18:54.1805618Z ╰──── 2026-10-24T04:18:54.1806077Z  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-24T04:18:54.1806366Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T04:18:54.1806369Z 2026-10-24T04:18:54.1806623Z ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'. 2026-10-24T04:18:54.1806751Z ╭─[apps/server/src/telemetry/AnalyticsService.ts:340:7] 2026-10-24T04:18:54.1806802Z 339 │ 2026-10-24T04:18:54.1806898Z 340 │ const layerTest = AnalyticsService.layerTest; 2026-10-24T04:18:54.1806969Z ·  ────┬──── 2026-10-24T04:18:54.1807096Z · ╰── 'layerTest' is declared here 2026-10-24T04:18:54.1807147Z ╰──── 2026-10-24T04:18:54.1807376Z  help: Consider removing this declaration. 2026-10-24T04:18:54.1807431Z 2026-10-24T04:18:54.1807743Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T04:18:54.1807868Z ╭─[packages/provider-pi/src/server/adapter.ts:3405:7] 2026-10-24T04:18:54.1807919Z 3404 │ 2026-10-24T04:18:54.1808100Z 3405 │ const layer: Layer.Layer = 2026-10-24T04:18:54.1808168Z ·  ──┬── 2026-10-24T04:18:54.1808341Z · ╰── 'layer' is declared here 2026-10-24T04:18:54.1808423Z 3406 │ Layer.effect( 2026-10-24T04:18:54.1808473Z ╰──── 2026-10-24T04:18:54.1808572Z  help: Consider removing this declaration. 2026-10-24T04:18:54.1808581Z 2026-10-24T04:18:54.1808778Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T04:18:54.1808909Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:231:6] 2026-10-24T04:18:54.1809065Z 227 │ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents( 2026-10-24T04:18:54.1809152Z 228 │ nativeEventSnapshotsRef.current, 2026-10-24T04:18:54.1809239Z ·  ───────────┬─────────── 2026-10-24T04:18:54.1809681Z · ╰── 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-24T04:18:54.1809751Z 229 │ mostRecentEventCount, 2026-10-24T04:18:54.1809805Z 230 │ ); 2026-10-24T04:18:54.1809927Z 231 │ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]); 2026-10-24T04:18:54.1810059Z ·  ──────────────────────────┬────────────────────────── 2026-10-24T04:18:54.1810251Z · ╰── This dependency list is missing values used by the callback 2026-10-24T04:18:54.1810332Z 232 │ const assumedValue = props.value; 2026-10-24T04:18:54.1810381Z ╰──── 2026-10-24T04:18:54.1810542Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T04:18:54.1810840Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.1810843Z 2026-10-24T04:18:54.1811053Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T04:18:54.1811184Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:239:7] 2026-10-24T04:18:54.1811318Z 238 │ nativeEventSnapshotsRef.current = assumeComposerControlledState( 2026-10-24T04:18:54.1811405Z 239 │ nativeEventSnapshotsRef.current, 2026-10-24T04:18:54.1811494Z ·  ───────────┬─────────── 2026-10-24T04:18:54.1811931Z · ╰── 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-24T04:18:54.1811998Z 240 │ controlledEventCount, 2026-10-24T04:18:54.1812060Z 241 │ assumedValue, 2026-10-24T04:18:54.1812113Z 242 │ ); 2026-10-24T04:18:54.1812315Z 243 │ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]); 2026-10-24T04:18:54.1812504Z ·  ───────────┬────────── 2026-10-24T04:18:54.1812702Z · ╰── Unnecessary dependency `controlledDocumentJson` 2026-10-24T04:18:54.1812787Z 244 │ const acceptNativeEvent = useCallback( 2026-10-24T04:18:54.1812835Z ╰──── 2026-10-24T04:18:54.1813309Z  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-24T04:18:54.1813608Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.1813611Z 2026-10-24T04:18:54.1813752Z ⚠ react(refs): Cannot access refs during render 2026-10-24T04:18:54.1813886Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:29] 2026-10-24T04:18:54.1814005Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T04:18:54.1814153Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T04:18:54.1814266Z ·  ─────────────┬──────────── 2026-10-24T04:18:54.1814424Z · ╰── Cannot access ref value during render 2026-10-24T04:18:54.1814478Z 165 │ }); 2026-10-24T04:18:54.1814524Z ╰──── 2026-10-24T04:18:54.1814971Z  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-24T04:18:54.1815250Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T04:18:54.1815252Z 2026-10-24T04:18:54.1815391Z ⚠ react(refs): Cannot access refs during render 2026-10-24T04:18:54.1815522Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:29] 2026-10-24T04:18:54.1815635Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T04:18:54.1815741Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T04:18:54.1815851Z ·  ─────────────┬──────────── 2026-10-24T04:18:54.1816092Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T04:18:54.1816198Z 165 │ }); 2026-10-24T04:18:54.1816246Z ╰──── 2026-10-24T04:18:54.1816809Z  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-24T04:18:54.1817084Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T04:18:54.1817086Z 2026-10-24T04:18:54.1817222Z ⚠ react(refs): Cannot access refs during render 2026-10-24T04:18:54.1817349Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:166:23] 2026-10-24T04:18:54.1817401Z 165 │ }); 2026-10-24T04:18:54.1817491Z 166 │ confirmedTokensRef.current = tokens; 2026-10-24T04:18:54.1817611Z ·  ─────────┬────────────┬─── 2026-10-24T04:18:54.1817789Z · │ ╰── Cannot update ref value during render 2026-10-24T04:18:54.1817899Z · ╰── This value is a ref 2026-10-24T04:18:54.1817966Z 167 │ return JSON.stringify( 2026-10-24T04:18:54.1818013Z ╰──── 2026-10-24T04:18:54.1818450Z  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-24T04:18:54.1818729Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T04:18:54.1818733Z 2026-10-24T04:18:54.1818869Z ⚠ react(refs): Cannot access refs during render 2026-10-24T04:18:54.1818997Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:208:5] 2026-10-24T04:18:54.1819064Z 207 │ mostRecentEventCount, 2026-10-24T04:18:54.1819146Z 208 │ nativeEventSnapshotsRef.current, 2026-10-24T04:18:54.1819245Z ·  ───────────────┬─────────────── 2026-10-24T04:18:54.1819424Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T04:18:54.1819477Z 209 │ ); 2026-10-24T04:18:54.1819524Z ╰──── 2026-10-24T04:18:54.1819970Z  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-24T04:18:54.1820249Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T04:18:54.1820251Z 2026-10-24T04:18:54.1820387Z ⚠ react(refs): Cannot access refs during render 2026-10-24T04:18:54.1820516Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:214:5] 2026-10-24T04:18:54.1820582Z 213 │ mostRecentEventCount, 2026-10-24T04:18:54.1820664Z 214 │ nativeEventSnapshotsRef.current, 2026-10-24T04:18:54.1820762Z ·  ───────────────┬─────────────── 2026-10-24T04:18:54.1820937Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T04:18:54.1821048Z 215 │ ); 2026-10-24T04:18:54.1821160Z ╰──── 2026-10-24T04:18:54.1821600Z  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-24T04:18:54.1821940Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T04:18:54.1821944Z 2026-10-24T04:18:54.1822123Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T04:18:54.1822250Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:199:6] 2026-10-24T04:18:54.1822366Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T04:18:54.1822476Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T04:18:54.1822582Z ·  ─────────┬──────── 2026-10-24T04:18:54.1823023Z · ╰── 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-24T04:18:54.1823076Z 165 │ }); 2026-10-24T04:18:54.1823161Z 166 │ confirmedTokensRef.current = tokens; 2026-10-24T04:18:54.1823227Z 167 │ return JSON.stringify( 2026-10-24T04:18:54.1823381Z 168 │ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => { 2026-10-24T04:18:54.1823444Z 169 │ const record = 2026-10-24T04:18:54.1823519Z 170 │ token.type === "context" 2026-10-24T04:18:54.1823680Z 171 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-24T04:18:54.1823742Z 172 │ : undefined; 2026-10-24T04:18:54.1823845Z 173 │ const presentation = contextChipPresentation( 2026-10-24T04:18:54.1823950Z 174 │ token.type === "context" ? token.kind : token.type, 2026-10-24T04:18:54.1824010Z 175 │ record, 2026-10-24T04:18:54.1824101Z 176 │ ); 2026-10-24T04:18:54.1824181Z 177 │ const icon = contextChipIcon( 2026-10-24T04:18:54.1824244Z 178 │ presentation, 2026-10-24T04:18:54.1824379Z 179 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-24T04:18:54.1824434Z 180 │ ); 2026-10-24T04:18:54.1824491Z 181 │ return { 2026-10-24T04:18:54.1824556Z 182 │ type: token.type, 2026-10-24T04:18:54.1824632Z 183 │ source: token.source, 2026-10-24T04:18:54.1824703Z 184 │ start: token.start, 2026-10-24T04:18:54.1824765Z 185 │ end: token.end, 2026-10-24T04:18:54.1824906Z 186 │ accent: contextChipAccent(presentation.accent, theme, chipTextColor), 2026-10-24T04:18:54.1824962Z 187 │ label: 2026-10-24T04:18:54.1825038Z 188 │ token.type === "skill" 2026-10-24T04:18:54.1825141Z 189 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-24T04:18:54.1825219Z 190 │ : token.type === "context" 2026-10-24T04:18:54.1825441Z 191 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-24T04:18:54.1825519Z 192 │ : basename(token.value), 2026-10-24T04:18:54.1825655Z 193 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-24T04:18:54.1825796Z 194 │ iconUri: contextChipIconUri(icon), 2026-10-24T04:18:54.1825936Z 195 │ tintsIcon: icon.kind === "chip", 2026-10-24T04:18:54.1825992Z 196 │ }; 2026-10-24T04:18:54.1826046Z 197 │ }), 2026-10-24T04:18:54.1826098Z 198 │ ); 2026-10-24T04:18:54.1826223Z 199 │ }, [props.value, props.context, skillLabels, theme, chipTextColor]); 2026-10-24T04:18:54.1826370Z ·  ───────────────────────────────┬─────────────────────────────── 2026-10-24T04:18:54.1826571Z · ╰── This dependency list is missing values used by the callback 2026-10-24T04:18:54.1826759Z 200 │ // Every render resolves against the snapshot history, so a render whose 2026-10-24T04:18:54.1826818Z ╰──── 2026-10-24T04:18:54.1827022Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T04:18:54.1827323Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.1827326Z 2026-10-24T04:18:54.1827503Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T04:18:54.1827631Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:261:5] 2026-10-24T04:18:54.1827754Z 253 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-24T04:18:54.1827850Z 254 │ nativeEventSnapshotsRef.current.push({ 2026-10-24T04:18:54.1827939Z ·  ───────────┬─────────── 2026-10-24T04:18:54.1828378Z · ╰── 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-24T04:18:54.1828467Z 255 │ eventCount: acknowledgedEventCount, 2026-10-24T04:18:54.1828526Z 256 │ value, 2026-10-24T04:18:54.1828600Z 257 │ selection: nextSelection, 2026-10-24T04:18:54.1828653Z 258 │ }); 2026-10-24T04:18:54.1828731Z 259 │ return acknowledgedEventCount; 2026-10-24T04:18:54.1828783Z 260 │ }, 2026-10-24T04:18:54.1828835Z 261 │ [], 2026-10-24T04:18:54.1828899Z ·  ─┬ 2026-10-24T04:18:54.1829070Z · ╰── This dependency list is missing values used by the callback 2026-10-24T04:18:54.1829121Z 262 │ ); 2026-10-24T04:18:54.1829169Z ╰──── 2026-10-24T04:18:54.1829370Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T04:18:54.1829669Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.1829672Z 2026-10-24T04:18:54.1829864Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T04:18:54.1829988Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:533:25] 2026-10-24T04:18:54.1830112Z 532 │ // range) the boundary string is identical and the chain would die. 2026-10-24T04:18:54.1830197Z 533 │ }, [nextSnoozeWakeAt, snoozeWakeTick]); 2026-10-24T04:18:54.1830294Z ·  ───────┬────── 2026-10-24T04:18:54.1830451Z · ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T04:18:54.1830633Z 534 │ const v2SearchQuery = props.searchQuery.trim().toLocaleLowerCase(); 2026-10-24T04:18:54.1830761Z ╰──── 2026-10-24T04:18:54.1831042Z  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-24T04:18:54.1831341Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.1831343Z 2026-10-24T04:18:54.1831545Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T04:18:54.1831698Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:524:53] 2026-10-24T04:18:54.1831779Z 523 │ if (Number.isNaN(wakeAtMs)) return; 2026-10-24T04:18:54.1831937Z 524 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647); 2026-10-24T04:18:54.1832054Z ·  ─────┬──── 2026-10-24T04:18:54.1832209Z · ╰── Cannot call impure function 2026-10-24T04:18:54.1832283Z 525 │ const id = setTimeout(() => { 2026-10-24T04:18:54.1832333Z ╰──── 2026-10-24T04:18:54.1832606Z  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-24T04:18:54.1832883Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T04:18:54.1832886Z 2026-10-24T04:18:54.1833042Z ⚠ eslint(no-control-regex): Unexpected control character 2026-10-24T04:18:54.1833228Z ╭─[apps/mobile/src/features/settings/SettingsProviderAccountsRouteScreen.tsx:220:46] 2026-10-24T04:18:54.1833364Z 219 │ 2026-10-24T04:18:54.1833502Z 220 │ {interaction.output.replace(/\x1b\[[0-?]*[ -/]*[@-~]/g, "")} 2026-10-24T04:18:54.1833607Z ·  ──┬─ 2026-10-24T04:18:54.1833763Z · ╰── 'U+001B' is a control character. 2026-10-24T04:18:54.1833826Z 221 │ 2026-10-24T04:18:54.1833874Z ╰──── 2026-10-24T04:18:54.1834128Z  help: Avoid matching control characters in regular expressions. If intentional, disable this rule for the expression. 2026-10-24T04:18:54.1834131Z 2026-10-24T04:18:54.1834274Z ⚠ react(refs): Cannot access refs during render 2026-10-24T04:18:54.1834389Z ╭─[apps/mobile/src/native/StackHeader.tsx:185:9] 2026-10-24T04:18:54.1834451Z 184 │ "options", 2026-10-24T04:18:54.1834541Z 185 │ latestOptionFunctionsRef.current, 2026-10-24T04:18:54.1834644Z ·  ────────────────┬─────────────── 2026-10-24T04:18:54.1834828Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T04:18:54.1834920Z 186 │ optionFunctionWrappersRef.current, 2026-10-24T04:18:54.1834968Z ╰──── 2026-10-24T04:18:54.1835459Z  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-24T04:18:54.1835795Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T04:18:54.1835798Z 2026-10-24T04:18:54.1835935Z ⚠ react(refs): Cannot access refs during render 2026-10-24T04:18:54.1836046Z ╭─[apps/mobile/src/native/StackHeader.tsx:186:9] 2026-10-24T04:18:54.1836134Z 185 │ latestOptionFunctionsRef.current, 2026-10-24T04:18:54.1836228Z 186 │ optionFunctionWrappersRef.current, 2026-10-24T04:18:54.1836362Z ·  ────────────────┬──────────────── 2026-10-24T04:18:54.1836580Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T04:18:54.1836667Z 187 │ ) as NativeStackNavigationOptions) 2026-10-24T04:18:54.1836720Z ╰──── 2026-10-24T04:18:54.1837163Z  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-24T04:18:54.1837441Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T04:18:54.1837443Z 2026-10-24T04:18:54.1837634Z ⚠ eslint(no-unused-vars): Identifier 'Duration' is imported but never used. 2026-10-24T04:18:54.1837763Z ╭─[packages/provider-pi/src/server/adapter.test.ts:24:13] 2026-10-24T04:18:54.1837852Z 23 │ import * as Deferred from "effect/Deferred"; 2026-10-24T04:18:54.1837939Z 24 │ import * as Duration from "effect/Duration"; 2026-10-24T04:18:54.1838017Z ·  ────┬─── 2026-10-24T04:18:54.1838146Z · ╰── 'Duration' is imported here 2026-10-24T04:18:54.1838226Z 25 │ import * as Effect from "effect/Effect"; 2026-10-24T04:18:54.1838275Z ╰──── 2026-10-24T04:18:54.1838367Z  help: Consider removing this import. 2026-10-24T04:18:54.1838370Z 2026-10-24T04:18:54.1838548Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T04:18:54.1838656Z ╭─[apps/mobile/src/lib/useHoverGesture.ts:8:15] 2026-10-24T04:18:54.1838709Z 7 │ () => 2026-10-24T04:18:54.1838773Z 8 │ Gesture.Hover() 2026-10-24T04:18:54.1838846Z ·  ──┬── 2026-10-24T04:18:54.1838971Z · ╰── `Hover` may be a component 2026-10-24T04:18:54.1839096Z 9 │ .manualActivation(true) 2026-10-24T04:18:54.1839194Z ╰──── 2026-10-24T04:18:54.1839463Z  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-24T04:18:54.1839897Z  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-24T04:18:54.1839901Z 2026-10-24T04:18:54.1840329Z ⚠ 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-24T04:18:54.1840442Z ╭─[packages/effect-acp/src/client.ts:1269:11] 2026-10-24T04:18:54.1840590Z 1268 │ extNotificationHandlers.set(CLIENT_METHODS.mcp_message, (params) => 2026-10-24T04:18:54.1840756Z 1269 │ Schema.decodeUnknownEffect(AcpSchemaV2.MessageMcpNotification)(params).pipe( 2026-10-24T04:18:54.1840856Z ·  ────────────────────────── 2026-10-24T04:18:54.1840997Z 1270 │ Effect.mapError(() => AcpError.AcpRequestError.invalidParams()), 2026-10-24T04:18:54.1841046Z ╰──── 2026-10-24T04:18:54.1841049Z 2026-10-24T04:18:54.1841315Z ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'. 2026-10-24T04:18:54.1841437Z ╭─[apps/server/src/provider/AntigravityAuth.ts:285:20] 2026-10-24T04:18:54.1841490Z 284 │ }, 2026-10-24T04:18:54.1841569Z 285 │ (effect, flow, stopSessions) => 2026-10-24T04:18:54.1841662Z ·  ──────┬───── 2026-10-24T04:18:54.1841805Z · ╰── 'stopSessions' is declared here 2026-10-24T04:18:54.1841868Z 286 │ effect.pipe( 2026-10-24T04:18:54.1841918Z ╰──── 2026-10-24T04:18:54.1842016Z  help: Consider removing this parameter. 2026-10-24T04:18:54.1842018Z 2026-10-24T04:18:54.1842336Z ⚠ 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-24T04:18:54.1842449Z ╭─[packages/effect-acp/src/schema.test.ts:18:12] 2026-10-24T04:18:54.1842605Z 17 │ const command = { name: "plan", description: "Make a plan", input: { hint: "Task" } }; 2026-10-24T04:18:54.1842720Z 18 │ expect(Schema.is(V1.AvailableCommand)(command)).toBe(true); 2026-10-24T04:18:54.1842799Z ·  ───────── 2026-10-24T04:18:54.1842857Z 19 │ expect( 2026-10-24T04:18:54.1842907Z ╰──── 2026-10-24T04:18:54.1842910Z 2026-10-24T04:18:54.1843225Z ⚠ 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-24T04:18:54.1843336Z ╭─[packages/effect-acp/src/schema.test.ts:20:7] 2026-10-24T04:18:54.1843391Z 19 │ expect( 2026-10-24T04:18:54.1843551Z 20 │ Schema.is(V2.AvailableCommand)({ ...command, input: { type: "text", hint: "Task" } }), 2026-10-24T04:18:54.1843621Z ·  ───────── 2026-10-24T04:18:54.1843681Z 21 │ ).toBe(true); 2026-10-24T04:18:54.1843728Z ╰──── 2026-10-24T04:18:54.1843730Z 2026-10-24T04:18:54.1843959Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T04:18:54.1844205Z ╭─[apps/mobile/src/features/threads/ThreadQueueControl.tsx:602:27] 2026-10-24T04:18:54.1844369Z 601 │ const onEnd = useEffectEvent((y: number, success: boolean) => props.onEnd(y, success)); 2026-10-24T04:18:54.1844442Z 602 │ const gesture = Gesture.Pan() 2026-10-24T04:18:54.1844526Z ·  ─┬─ 2026-10-24T04:18:54.1844660Z · ╰── `Pan` may be a component 2026-10-24T04:18:54.1844765Z 603 │ .enabled(!props.disabled) 2026-10-24T04:18:54.1844843Z ╰──── 2026-10-24T04:18:54.1845111Z  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-24T04:18:54.1845541Z  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-24T04:18:54.1845547Z 2026-10-24T04:18:54.1845985Z ⚠ 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-24T04:18:54.1846109Z ╭─[packages/effect-acp/src/protocol.test.ts:500:31] 2026-10-24T04:18:54.1846159Z 499 │ 2026-10-24T04:18:54.1846270Z 500 │ const response = yield* Schema.decodeUnknownEffect( 2026-10-24T04:18:54.1846385Z ·  ────────────────────────── 2026-10-24T04:18:54.1846490Z 501 │ Schema.fromJsonString(JsonRpcErrorResponse), 2026-10-24T04:18:54.1846537Z ╰──── 2026-10-24T04:18:54.1846546Z 2026-10-24T04:18:54.1846745Z ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed 2026-10-24T04:18:54.1846845Z ╭─[packages/contracts/src/rpc.ts:297:8] 2026-10-24T04:18:54.1846908Z 296 │ } from "./device.ts"; 2026-10-24T04:18:54.1846995Z 297 │ import {} from "./previewAutomation.ts"; 2026-10-24T04:18:54.1847062Z ·  ── 2026-10-24T04:18:54.1847119Z 298 │ import { 2026-10-24T04:18:54.1847168Z ╰──── 2026-10-24T04:18:54.1847247Z  help: Remove empty braces 2026-10-24T04:18:54.1847249Z 2026-10-24T04:18:54.1847684Z ⚠ 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-24T04:18:54.1847803Z ╭─[packages/effect-acp/src/errors.test.ts:129:28] 2026-10-24T04:18:54.1847895Z 128 │ const secret = "acp-summary-secret"; 2026-10-24T04:18:54.1847998Z 129 │ const cause = yield* Schema.decodeUnknownEffect( 2026-10-24T04:18:54.1848110Z ·  ────────────────────────── 2026-10-24T04:18:54.1848174Z 130 │ Schema.Struct({ 2026-10-24T04:18:54.1848223Z ╰──── 2026-10-24T04:18:54.1848225Z 2026-10-24T04:18:54.1848574Z ⚠ 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-24T04:18:54.1848682Z ╭─[packages/contracts/src/auth.test.ts:17:12] 2026-10-24T04:18:54.1848835Z 16 │ it("decodes legacy review credentials without offering them in new grants", () => { 2026-10-24T04:18:54.1849050Z 17 │ expect(Schema.decodeUnknownSync(AuthEnvironmentScopes)(["review:write"])).toEqual([ 2026-10-24T04:18:54.1849208Z ·  ──────────────────────── 2026-10-24T04:18:54.1849270Z 18 │ "review:write", 2026-10-24T04:18:54.1849319Z ╰──── 2026-10-24T04:18:54.1849321Z 2026-10-24T04:18:54.1849667Z ⚠ 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-24T04:18:54.1849772Z ╭─[packages/contracts/src/auth.test.ts:20:18] 2026-10-24T04:18:54.1849856Z 19 │ ]); 2026-10-24T04:18:54.1850050Z 20 │ expect(() => Schema.decodeUnknownSync(AuthGrantScopes)(["review:write"])).toThrow(); 2026-10-24T04:18:54.1850153Z ·  ──────────────────────── 2026-10-24T04:18:54.1850286Z 21 │ expect(AuthStandardClientScopes).not.toContain("review:write"); 2026-10-24T04:18:54.1850336Z ╰──── 2026-10-24T04:18:54.1850338Z 2026-10-24T04:18:54.1850681Z ⚠ 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-24T04:18:54.1850786Z ╭─[packages/contracts/src/auth.test.ts:58:21] 2026-10-24T04:18:54.1850948Z 57 │ it("ignores unknown response permissions without falling back to broader scopes", () => { 2026-10-24T04:18:54.1851068Z 58 │ const session = Schema.decodeUnknownSync(AuthSessionState)({ 2026-10-24T04:18:54.1851168Z ·  ──────────────────────── 2026-10-24T04:18:54.1851235Z 59 │ authenticated: true, 2026-10-24T04:18:54.1851283Z ╰──── 2026-10-24T04:18:54.1851285Z 2026-10-24T04:18:54.1851475Z ⚠ eslint(no-unused-vars): Identifier 'Image' is imported but never used. 2026-10-24T04:18:54.1851612Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:17:10] 2026-10-24T04:18:54.1851741Z 16 │ import type { NativeSyntheticEvent, ViewProps } from "react-native"; 2026-10-24T04:18:54.1851850Z 17 │ import { Image, Platform, StyleSheet } from "react-native"; 2026-10-24T04:18:54.1851918Z ·  ──┬── 2026-10-24T04:18:54.1852037Z · ╰── 'Image' is imported here 2026-10-24T04:18:54.1852087Z 18 │ 2026-10-24T04:18:54.1852138Z ╰──── 2026-10-24T04:18:54.1852233Z  help: Consider removing this import. 2026-10-24T04:18:54.1852235Z 2026-10-24T04:18:54.1852428Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T04:18:54.1852570Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:229:6] 2026-10-24T04:18:54.1852728Z 225 │ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents( 2026-10-24T04:18:54.1852817Z 226 │ nativeEventSnapshotsRef.current, 2026-10-24T04:18:54.1852904Z ·  ───────────┬─────────── 2026-10-24T04:18:54.1853348Z · ╰── 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-24T04:18:54.1853417Z 227 │ mostRecentEventCount, 2026-10-24T04:18:54.1853470Z 228 │ ); 2026-10-24T04:18:54.1853585Z 229 │ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]); 2026-10-24T04:18:54.1853713Z ·  ──────────────────────────┬────────────────────────── 2026-10-24T04:18:54.1853954Z · ╰── This dependency list is missing values used by the callback 2026-10-24T04:18:54.1854104Z 230 │ const assumedValue = props.value; 2026-10-24T04:18:54.1854185Z ╰──── 2026-10-24T04:18:54.1854346Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T04:18:54.1854644Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.1854647Z 2026-10-24T04:18:54.1854922Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T04:18:54.1855059Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:237:7] 2026-10-24T04:18:54.1855200Z 236 │ nativeEventSnapshotsRef.current = assumeComposerControlledState( 2026-10-24T04:18:54.1855289Z 237 │ nativeEventSnapshotsRef.current, 2026-10-24T04:18:54.1855376Z ·  ───────────┬─────────── 2026-10-24T04:18:54.1855821Z · ╰── 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-24T04:18:54.1855889Z 238 │ controlledEventCount, 2026-10-24T04:18:54.1855951Z 239 │ assumedValue, 2026-10-24T04:18:54.1856003Z 240 │ ); 2026-10-24T04:18:54.1856153Z 241 │ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]); 2026-10-24T04:18:54.1856283Z ·  ───────────┬────────── 2026-10-24T04:18:54.1856545Z · ╰── Unnecessary dependency `controlledDocumentJson` 2026-10-24T04:18:54.1856686Z 242 │ const acceptNativeEvent = useCallback( 2026-10-24T04:18:54.1856767Z ╰──── 2026-10-24T04:18:54.1857184Z  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-24T04:18:54.1857484Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.1857487Z 2026-10-24T04:18:54.1857625Z ⚠ react(refs): Cannot access refs during render 2026-10-24T04:18:54.1857830Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29] 2026-10-24T04:18:54.1858068Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T04:18:54.1858239Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T04:18:54.1858381Z ·  ─────────────┬──────────── 2026-10-24T04:18:54.1858541Z · ╰── Cannot access ref value during render 2026-10-24T04:18:54.1858601Z 163 │ }); 2026-10-24T04:18:54.1858648Z ╰──── 2026-10-24T04:18:54.1859402Z  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-24T04:18:54.1859735Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T04:18:54.1859741Z 2026-10-24T04:18:54.1859879Z ⚠ react(refs): Cannot access refs during render 2026-10-24T04:18:54.1860017Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29] 2026-10-24T04:18:54.1860133Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T04:18:54.1860241Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T04:18:54.1860353Z ·  ─────────────┬──────────── 2026-10-24T04:18:54.1860553Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T04:18:54.1860605Z 163 │ }); 2026-10-24T04:18:54.1860653Z ╰──── 2026-10-24T04:18:54.1861104Z  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-24T04:18:54.1861386Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T04:18:54.1861388Z 2026-10-24T04:18:54.1861525Z ⚠ react(refs): Cannot access refs during render 2026-10-24T04:18:54.1861661Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:164:23] 2026-10-24T04:18:54.1861714Z 163 │ }); 2026-10-24T04:18:54.1861800Z 164 │ confirmedTokensRef.current = tokens; 2026-10-24T04:18:54.1861918Z ·  ─────────┬────────────┬─── 2026-10-24T04:18:54.1862102Z · │ ╰── Cannot update ref value during render 2026-10-24T04:18:54.1862216Z · ╰── This value is a ref 2026-10-24T04:18:54.1862285Z 165 │ return JSON.stringify( 2026-10-24T04:18:54.1862335Z ╰──── 2026-10-24T04:18:54.1862776Z  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-24T04:18:54.1863053Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T04:18:54.1863056Z 2026-10-24T04:18:54.1863238Z ⚠ react(refs): Cannot access refs during render 2026-10-24T04:18:54.1863428Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:206:5] 2026-10-24T04:18:54.1863496Z 205 │ mostRecentEventCount, 2026-10-24T04:18:54.1863579Z 206 │ nativeEventSnapshotsRef.current, 2026-10-24T04:18:54.1863680Z ·  ───────────────┬─────────────── 2026-10-24T04:18:54.1863861Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T04:18:54.1863915Z 207 │ ); 2026-10-24T04:18:54.1863965Z ╰──── 2026-10-24T04:18:54.1864512Z  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-24T04:18:54.1864797Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T04:18:54.1864803Z 2026-10-24T04:18:54.1864940Z ⚠ react(refs): Cannot access refs during render 2026-10-24T04:18:54.1865074Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:212:5] 2026-10-24T04:18:54.1865141Z 211 │ mostRecentEventCount, 2026-10-24T04:18:54.1865225Z 212 │ nativeEventSnapshotsRef.current, 2026-10-24T04:18:54.1865324Z ·  ───────────────┬─────────────── 2026-10-24T04:18:54.1865500Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T04:18:54.1865554Z 213 │ ); 2026-10-24T04:18:54.1865603Z ╰──── 2026-10-24T04:18:54.1866208Z  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-24T04:18:54.1866596Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T04:18:54.1866598Z 2026-10-24T04:18:54.1866776Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T04:18:54.1866912Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:197:6] 2026-10-24T04:18:54.1867029Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T04:18:54.1867135Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T04:18:54.1867237Z ·  ─────────┬──────── 2026-10-24T04:18:54.1867689Z · ╰── 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-24T04:18:54.1867746Z 163 │ }); 2026-10-24T04:18:54.1867833Z 164 │ confirmedTokensRef.current = tokens; 2026-10-24T04:18:54.1867900Z 165 │ return JSON.stringify( 2026-10-24T04:18:54.1868056Z 166 │ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => { 2026-10-24T04:18:54.1868120Z 167 │ const record = 2026-10-24T04:18:54.1868194Z 168 │ token.type === "context" 2026-10-24T04:18:54.1868351Z 169 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-24T04:18:54.1868412Z 170 │ : undefined; 2026-10-24T04:18:54.1868578Z 171 │ const presentation = contextChipPresentation( 2026-10-24T04:18:54.1868743Z 172 │ token.type === "context" ? token.kind : token.type, 2026-10-24T04:18:54.1868802Z 173 │ record, 2026-10-24T04:18:54.1868859Z 174 │ ); 2026-10-24T04:18:54.1868939Z 175 │ const icon = contextChipIcon( 2026-10-24T04:18:54.1869003Z 176 │ presentation, 2026-10-24T04:18:54.1869139Z 177 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-24T04:18:54.1869195Z 178 │ ); 2026-10-24T04:18:54.1869253Z 179 │ return { 2026-10-24T04:18:54.1869325Z 180 │ type: token.type, 2026-10-24T04:18:54.1869439Z 181 │ source: token.source, 2026-10-24T04:18:54.1869529Z 182 │ start: token.start, 2026-10-24T04:18:54.1869594Z 183 │ end: token.end, 2026-10-24T04:18:54.1869743Z 184 │ accent: contextChipAccent(presentation.accent, theme, chipTextColor), 2026-10-24T04:18:54.1869803Z 185 │ label: 2026-10-24T04:18:54.1869877Z 186 │ token.type === "skill" 2026-10-24T04:18:54.1869981Z 187 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-24T04:18:54.1870061Z 188 │ : token.type === "context" 2026-10-24T04:18:54.1870286Z 189 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-24T04:18:54.1870365Z 190 │ : basename(token.value), 2026-10-24T04:18:54.1870502Z 191 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-24T04:18:54.1870591Z 192 │ iconUri: contextChipIconUri(icon), 2026-10-24T04:18:54.1870673Z 193 │ tintsIcon: icon.kind === "chip", 2026-10-24T04:18:54.1870734Z 194 │ }; 2026-10-24T04:18:54.1870791Z 195 │ }), 2026-10-24T04:18:54.1870842Z 196 │ ); 2026-10-24T04:18:54.1870967Z 197 │ }, [props.value, props.context, skillLabels, theme, chipTextColor]); 2026-10-24T04:18:54.1871113Z ·  ───────────────────────────────┬─────────────────────────────── 2026-10-24T04:18:54.1871308Z · ╰── This dependency list is missing values used by the callback 2026-10-24T04:18:54.1871440Z 198 │ // Every render resolves against the snapshot history, so a render whose 2026-10-24T04:18:54.1871487Z ╰──── 2026-10-24T04:18:54.1871687Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T04:18:54.1871994Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.1872000Z 2026-10-24T04:18:54.1872179Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T04:18:54.1872312Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:259:5] 2026-10-24T04:18:54.1872436Z 251 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-24T04:18:54.1872534Z 252 │ nativeEventSnapshotsRef.current.push({ 2026-10-24T04:18:54.1872623Z ·  ───────────┬─────────── 2026-10-24T04:18:54.1873060Z · ╰── 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-24T04:18:54.1873195Z 253 │ eventCount: acknowledgedEventCount, 2026-10-24T04:18:54.1873316Z 254 │ value, 2026-10-24T04:18:54.1873393Z 255 │ selection: nextSelection, 2026-10-24T04:18:54.1873451Z 256 │ }); 2026-10-24T04:18:54.1873529Z 257 │ return acknowledgedEventCount; 2026-10-24T04:18:54.1873581Z 258 │ }, 2026-10-24T04:18:54.1873635Z 259 │ [], 2026-10-24T04:18:54.1873699Z ·  ─┬ 2026-10-24T04:18:54.1873873Z · ╰── This dependency list is missing values used by the callback 2026-10-24T04:18:54.1873934Z 260 │ ); 2026-10-24T04:18:54.1874014Z ╰──── 2026-10-24T04:18:54.1874469Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T04:18:54.1874791Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.1874801Z 2026-10-24T04:18:54.1875002Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable. 2026-10-24T04:18:54.1875126Z ╭─[apps/web/src/contextMenuFallback.test.ts:38:9] 2026-10-24T04:18:54.1875192Z 37 │ get isConnected() { 2026-10-24T04:18:54.1875282Z 38 │ let current: FakeElement | null = this; 2026-10-24T04:18:54.1875355Z ·  ─────── 2026-10-24T04:18:54.1875425Z 39 │ while (current?.parent) { 2026-10-24T04:18:54.1875476Z ╰──── 2026-10-24T04:18:54.1875736Z  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-24T04:18:54.1875739Z 2026-10-24T04:18:54.1875996Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T04:18:54.1876167Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:327:7] 2026-10-24T04:18:54.1876221Z 322 │ }; 2026-10-24T04:18:54.1876283Z 323 │ useEffect(() => { 2026-10-24T04:18:54.1876352Z ·  ────┬──── 2026-10-24T04:18:54.1876482Z · ╰── This is the containing effect 2026-10-24T04:18:54.1876578Z 324 │ if (!guidesEnabled && section === "guide") { 2026-10-24T04:18:54.1876668Z 325 │ requestedSection.current = "overview"; 2026-10-24T04:18:54.1876832Z 326 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-24T04:18:54.1876902Z 327 │ setSection("overview"); 2026-10-24T04:18:54.1876976Z ·  ─────┬──── 2026-10-24T04:18:54.1877241Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T04:18:54.1877328Z 328 │ } 2026-10-24T04:18:54.1877380Z ╰──── 2026-10-24T04:18:54.1877957Z  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-24T04:18:54.1878266Z  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-24T04:18:54.1878269Z 2026-10-24T04:18:54.1878462Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T04:18:54.1878631Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:329:6] 2026-10-24T04:18:54.1878728Z 324 │ if (!guidesEnabled && section === "guide") { 2026-10-24T04:18:54.1878818Z 325 │ requestedSection.current = "overview"; 2026-10-24T04:18:54.1878897Z ·  ────────┬─────── 2026-10-24T04:18:54.1879325Z · ╰── 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-24T04:18:54.1879484Z 326 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-24T04:18:54.1879626Z ·  ─────────┬───────── ──────┬────── 2026-10-24T04:18:54.1880109Z · │ ╰── 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-24T04:18:54.1880536Z · ╰── 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-24T04:18:54.1880609Z 327 │ setSection("overview"); 2026-10-24T04:18:54.1880661Z 328 │ } 2026-10-24T04:18:54.1880749Z 329 │ }, [guidesEnabled, section, insets.top]); 2026-10-24T04:18:54.1880857Z ·  ──────────────────┬───────────────── 2026-10-24T04:18:54.1881045Z · ╰── This dependency list is missing values used by the callback 2026-10-24T04:18:54.1881132Z 330 │ const tabContent = activityContent; 2026-10-24T04:18:54.1881183Z ╰──── 2026-10-24T04:18:54.1881345Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T04:18:54.1881646Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.1881649Z 2026-10-24T04:18:54.1881845Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T04:18:54.1882008Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:864:6] 2026-10-24T04:18:54.1882064Z 847 │ if ( 2026-10-24T04:18:54.1882176Z 848 │ lastSelection.current.path === route.params.path && 2026-10-24T04:18:54.1882301Z ·  ──────┬────── 2026-10-24T04:18:54.1882743Z · ╰── 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-24T04:18:54.1882868Z 849 │ lastSelection.current.id === route.params.fileSelectionId 2026-10-24T04:18:54.1882918Z 850 │ ) 2026-10-24T04:18:54.1882978Z 851 │ return; 2026-10-24T04:18:54.1883146Z 852 │ lastSelection.current = { path: route.params.path, id: route.params.fileSelectionId }; 2026-10-24T04:18:54.1883276Z 853 │ if (route.params.focus) navigation.setParams({ focus: undefined }); 2026-10-24T04:18:54.1883358Z 854 │ setJumpPath(route.params.path); 2026-10-24T04:18:54.1883429Z 855 │ setSelectedRowId(null); 2026-10-24T04:18:54.1883505Z 856 │ jumpStarted.current = false; 2026-10-24T04:18:54.1883651Z 857 │ const file = data.files.find((entry) => entry.path === route.params.path); 2026-10-24T04:18:54.1883740Z 858 │ if (!file || !nativeView.current) return; 2026-10-24T04:18:54.1883826Z ·  ─────┬──── 2026-10-24T04:18:54.1884389Z · ╰── 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-24T04:18:54.1884525Z 859 │ setCollapsedIds((ids) => ids.filter((id) => id !== file.id)); 2026-10-24T04:18:54.1884599Z 860 │ jumpStarted.current = true; 2026-10-24T04:18:54.1884731Z 861 │ void nativeView.current.scrollToFile(file.id, false).catch(() => { 2026-10-24T04:18:54.1884808Z 862 │ jumpStarted.current = false; 2026-10-24T04:18:54.1884870Z 863 │ }); 2026-10-24T04:18:54.1885064Z 864 │ }, [route.params.path, route.params.fileSelectionId, route.params.focus, data.files, navigation]); 2026-10-24T04:18:54.1885255Z ·  ──────────────────────────────────────────────┬────────────────────────────────────────────── 2026-10-24T04:18:54.1885467Z · ╰── This dependency list is missing values used by the callback 2026-10-24T04:18:54.1885574Z 865 │ const appliedFilter = useRef(filter.hideTestFiles); 2026-10-24T04:18:54.1885624Z ╰──── 2026-10-24T04:18:54.1885784Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T04:18:54.1886086Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.1886095Z 2026-10-24T04:18:54.1886260Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T04:18:54.1886405Z ╭─[apps/server/src/provider/Drivers/CodexDriver.test.ts:466:14] 2026-10-24T04:18:54.1886455Z 465 │ 2026-10-24T04:18:54.1886556Z 466 │ for (const {} of ["direct", "wrapper"] as const) { 2026-10-24T04:18:54.1886625Z ·  ── 2026-10-24T04:18:54.1886676Z 467 │ } 2026-10-24T04:18:54.1886723Z ╰──── 2026-10-24T04:18:54.1886946Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T04:18:54.1886949Z 2026-10-24T04:18:54.1887110Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T04:18:54.1887336Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:697:76] 2026-10-24T04:18:54.1887573Z 696 │ const [snoozeGateClock, setSnoozeGateClock] = useState(() => ({ thread, now: Date.now() })); 2026-10-24T04:18:54.1887731Z 697 │ if (snoozeGateClock.thread !== thread) setSnoozeGateClock({ thread, now: Date.now() }); 2026-10-24T04:18:54.1887862Z ·  ─────┬──── 2026-10-24T04:18:54.1888037Z · ╰── Cannot call impure function 2026-10-24T04:18:54.1888237Z 698 │ const snoozeGateNow = new Date(snoozeGateClock.now).toISOString(); 2026-10-24T04:18:54.1888285Z ╰──── 2026-10-24T04:18:54.1888563Z  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-24T04:18:54.1888857Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T04:18:54.1888862Z 2026-10-24T04:18:54.1889022Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T04:18:54.1889173Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:718:71] 2026-10-24T04:18:54.1889248Z 717 │ const snoozePresets = useMemo( 2026-10-24T04:18:54.1889420Z 718 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-24T04:18:54.1889547Z ·  ─────┬──── 2026-10-24T04:18:54.1889718Z · ╰── Cannot call impure function 2026-10-24T04:18:54.1889835Z 719 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-24T04:18:54.1889890Z ╰──── 2026-10-24T04:18:54.1890155Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T04:18:54.1890431Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T04:18:54.1890434Z 2026-10-24T04:18:54.1890602Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T04:18:54.1890749Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:719:6] 2026-10-24T04:18:54.1890916Z 718 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-24T04:18:54.1891027Z 719 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-24T04:18:54.1891118Z ·  ────────────┬─────────── 2026-10-24T04:18:54.1891284Z · ╰── Unnecessary dependency `props.snoozePresetMinute` 2026-10-24T04:18:54.1891335Z 720 │ ); 2026-10-24T04:18:54.1891384Z ╰──── 2026-10-24T04:18:54.1891683Z  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-24T04:18:54.1891976Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.1891978Z 2026-10-24T04:18:54.1892147Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T04:18:54.1892340Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:765:7] 2026-10-24T04:18:54.1892464Z 764 │ thread.pinnedAt, 2026-10-24T04:18:54.1892522Z 765 │ variant, 2026-10-24T04:18:54.1892590Z ·  ───┬─── 2026-10-24T04:18:54.1892719Z · ╰── Unnecessary dependency `variant` 2026-10-24T04:18:54.1892771Z 766 │ ], 2026-10-24T04:18:54.1892818Z ╰──── 2026-10-24T04:18:54.1893119Z  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-24T04:18:54.1893485Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.1893488Z 2026-10-24T04:18:54.1893679Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T04:18:54.1893831Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:1215:21] 2026-10-24T04:18:54.1893953Z 1214 │ {providerDrivers.slice(0, -1).map((driver, index) => ( 2026-10-24T04:18:54.1894122Z 1215 │ 2026-10-24T04:18:54.1894229Z ·  ────────────────────────── 2026-10-24T04:18:54.1894333Z 1216 │ 2026-10-24T04:18:54.1894381Z ╰──── 2026-10-24T04:18:54.1894521Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T04:18:54.1894524Z 2026-10-24T04:18:54.1894734Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T04:18:54.1894853Z ╭─[apps/mobile/src/lib/markdownDocument.ts:259:28] 2026-10-24T04:18:54.1894947Z 258 │ visit(parser.parse(markdown), false, false); 2026-10-24T04:18:54.1895027Z 259 │ for (const edit of edits.reverse()) 2026-10-24T04:18:54.1895118Z ·  ─────── 2026-10-24T04:18:54.1895276Z 260 │ markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end); 2026-10-24T04:18:54.1895323Z ╰──── 2026-10-24T04:18:54.1895569Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T04:18:54.1895572Z 2026-10-24T04:18:54.1895770Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T04:18:54.1895934Z ╭─[apps/mobile/src/lib/markdownDocument.ts:290:28] 2026-10-24T04:18:54.1896063Z 289 │ visit(parser.parse(markdown)); 2026-10-24T04:18:54.1896142Z 290 │ for (const edit of edits.reverse()) 2026-10-24T04:18:54.1896233Z ·  ─────── 2026-10-24T04:18:54.1896387Z 291 │ markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end); 2026-10-24T04:18:54.1896434Z ╰──── 2026-10-24T04:18:54.1896788Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T04:18:54.1896791Z 2026-10-24T04:18:54.1896988Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T04:18:54.1897102Z ╭─[apps/mobile/src/lib/markdownDocument.ts:344:38] 2026-10-24T04:18:54.1897181Z 343 │ visit(parser.parse(markdown)); 2026-10-24T04:18:54.1897281Z 344 │ for (const lineStart of lineStarts.reverse()) { 2026-10-24T04:18:54.1897377Z ·  ─────── 2026-10-24T04:18:54.1897531Z 345 │ // The header row may be a lazy line without its container markers (`>` or list indent), 2026-10-24T04:18:54.1897580Z ╰──── 2026-10-24T04:18:54.1897823Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T04:18:54.1897826Z 2026-10-24T04:18:54.1898067Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T04:18:54.1898202Z ╭─[packages/provider-opencode/src/server/adapter.ts:3755:7] 2026-10-24T04:18:54.1898252Z 3754 │ 2026-10-24T04:18:54.1898445Z 3755 │ const layer: Layer.Layer = 2026-10-24T04:18:54.1898516Z ·  ──┬── 2026-10-24T04:18:54.1898635Z · ╰── 'layer' is declared here 2026-10-24T04:18:54.1898697Z 3756 │ Layer.effect( 2026-10-24T04:18:54.1898744Z ╰──── 2026-10-24T04:18:54.1898842Z  help: Consider removing this declaration. 2026-10-24T04:18:54.1898844Z 2026-10-24T04:18:54.1899087Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T04:18:54.1899215Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2169:5] 2026-10-24T04:18:54.1899266Z 2167 │ ); 2026-10-24T04:18:54.1899329Z 2168 │ useEffect(() => { 2026-10-24T04:18:54.1899399Z ·  ────┬──── 2026-10-24T04:18:54.1899531Z · ╰── This is the containing effect 2026-10-24T04:18:54.1899602Z 2169 │ setExpandedVideo(null); 2026-10-24T04:18:54.1899680Z ·  ────────┬─────── 2026-10-24T04:18:54.1899843Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T04:18:54.1899912Z 2170 │ setExpandedFile(null); 2026-10-24T04:18:54.1899959Z ╰──── 2026-10-24T04:18:54.1900536Z  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-24T04:18:54.1900908Z  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-24T04:18:54.1900953Z 2026-10-24T04:18:54.1901190Z ⚠ eslint(no-unused-vars): Identifier 'isMarkdownFileLinkLabel' is imported but never used. 2026-10-24T04:18:54.1901318Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:69:10] 2026-10-24T04:18:54.1901449Z 68 │ import { resolveAssetUrl } from "@t3tools/client-runtime/state/assets"; 2026-10-24T04:18:54.1901583Z 69 │ import { isMarkdownFileLinkLabel } from "@t3tools/shared/markdownLinks"; 2026-10-24T04:18:54.1901682Z ·  ───────────┬─────────── 2026-10-24T04:18:54.1901909Z · ╰── 'isMarkdownFileLinkLabel' is imported here 2026-10-24T04:18:54.1902062Z 70 │ import { formatAttachmentSize } from "@t3tools/client-runtime/state/attachments"; 2026-10-24T04:18:54.1902116Z ╰──── 2026-10-24T04:18:54.1902212Z  help: Consider removing this import. 2026-10-24T04:18:54.1902215Z 2026-10-24T04:18:54.1902412Z ⚠ eslint(no-unused-vars): Identifier 'createContext' is imported but never used. 2026-10-24T04:18:54.1902538Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:95:3] 2026-10-24T04:18:54.1902591Z 94 │ import { 2026-10-24T04:18:54.1902654Z 95 │ createContext, 2026-10-24T04:18:54.1902726Z ·  ──────┬────── 2026-10-24T04:18:54.1902855Z · ╰── 'createContext' is imported here 2026-10-24T04:18:54.1902907Z 96 │ memo, 2026-10-24T04:18:54.1902954Z ╰──── 2026-10-24T04:18:54.1903046Z  help: Consider removing this import. 2026-10-24T04:18:54.1903049Z 2026-10-24T04:18:54.1903255Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-24T04:18:54.1903382Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:111:3] 2026-10-24T04:18:54.1903438Z 110 │ import { 2026-10-24T04:18:54.1903501Z 111 │ ActivityIndicator, 2026-10-24T04:18:54.1903579Z ·  ────────┬──────── 2026-10-24T04:18:54.1903715Z · ╰── 'ActivityIndicator' is imported here 2026-10-24T04:18:54.1903770Z 112 │ Image, 2026-10-24T04:18:54.1903818Z ╰──── 2026-10-24T04:18:54.1903907Z  help: Consider removing this import. 2026-10-24T04:18:54.1903911Z 2026-10-24T04:18:54.1904134Z ⚠ eslint(no-unused-vars): Identifier 'ScrollView' is imported but never used. 2026-10-24T04:18:54.1904259Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:118:3] 2026-10-24T04:18:54.1904324Z 117 │ Pressable, 2026-10-24T04:18:54.1904386Z 118 │ ScrollView, 2026-10-24T04:18:54.1904453Z ·  ─────┬──── 2026-10-24T04:18:54.1904580Z · ╰── 'ScrollView' is imported here 2026-10-24T04:18:54.1904638Z 119 │ StyleSheet, 2026-10-24T04:18:54.1904687Z ╰──── 2026-10-24T04:18:54.1904778Z  help: Consider removing this import. 2026-10-24T04:18:54.1904780Z 2026-10-24T04:18:54.1904968Z ⚠ eslint(no-unused-vars): Identifier 'NativeText' is imported but never used. 2026-10-24T04:18:54.1905093Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:120:11] 2026-10-24T04:18:54.1905149Z 119 │ StyleSheet, 2026-10-24T04:18:54.1905212Z 120 │ Text as NativeText, 2026-10-24T04:18:54.1905288Z ·  ─────┬──── 2026-10-24T04:18:54.1905468Z · ╰── 'NativeText' is imported here 2026-10-24T04:18:54.1905588Z 121 │ type ColorValue, 2026-10-24T04:18:54.1905636Z ╰──── 2026-10-24T04:18:54.1905727Z  help: Consider removing this import. 2026-10-24T04:18:54.1905730Z 2026-10-24T04:18:54.1905930Z ⚠ eslint(no-unused-vars): Identifier 'tryOpenExternalUrl' is imported but never used. 2026-10-24T04:18:54.1906057Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:143:10] 2026-10-24T04:18:54.1906185Z 142 │ import { copyTextWithHaptic } from "../../lib/copyTextWithHaptic"; 2026-10-24T04:18:54.1906325Z 143 │ import { tryOpenExternalUrl } from "../../lib/openExternalUrl"; 2026-10-24T04:18:54.1906459Z ·  ─────────┬──────── 2026-10-24T04:18:54.1906614Z · ╰── 'tryOpenExternalUrl' is imported here 2026-10-24T04:18:54.1906755Z 144 │ import { downloadAndShareAttachment } from "../../lib/attachmentDownload"; 2026-10-24T04:18:54.1906806Z ╰──── 2026-10-24T04:18:54.1906896Z  help: Consider removing this import. 2026-10-24T04:18:54.1906898Z 2026-10-24T04:18:54.1907103Z ⚠ eslint(no-unused-vars): Identifier 'faviconUrlForOrigin' is imported but never used. 2026-10-24T04:18:54.1907228Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:146:10] 2026-10-24T04:18:54.1907355Z 145 │ import { hasWideMarkdownBlock } from "../../lib/wideMarkdownBlocks"; 2026-10-24T04:18:54.1907472Z 146 │ import { faviconUrlForOrigin } from "@t3tools/shared/favicon"; 2026-10-24T04:18:54.1907557Z ·  ─────────┬───────── 2026-10-24T04:18:54.1907707Z · ╰── 'faviconUrlForOrigin' is imported here 2026-10-24T04:18:54.1907765Z 147 │ import { 2026-10-24T04:18:54.1907813Z ╰──── 2026-10-24T04:18:54.1907901Z  help: Consider removing this import. 2026-10-24T04:18:54.1907903Z 2026-10-24T04:18:54.1908102Z ⚠ eslint(no-unused-vars): Identifier 'MediaVideoPlayer' is imported but never used. 2026-10-24T04:18:54.1908230Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:160:10] 2026-10-24T04:18:54.1908370Z 159 │ import { VideoAttachmentTile } from "../../components/VideoAttachmentTile"; 2026-10-24T04:18:54.1908499Z 160 │ import { MediaVideoPlayer } from "../../components/MediaVideoPlayer"; 2026-10-24T04:18:54.1908581Z ·  ────────┬─────── 2026-10-24T04:18:54.1908723Z · ╰── 'MediaVideoPlayer' is imported here 2026-10-24T04:18:54.1908859Z 161 │ import { resolveMarkdownMediaPreview } from "../../lib/markdownMedia"; 2026-10-24T04:18:54.1908910Z ╰──── 2026-10-24T04:18:54.1908999Z  help: Consider removing this import. 2026-10-24T04:18:54.1909003Z 2026-10-24T04:18:54.1909211Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoPreviewUri' is imported but never used. 2026-10-24T04:18:54.1909335Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:164:3] 2026-10-24T04:18:54.1909414Z 163 │ attachmentVideoPreviewSource, 2026-10-24T04:18:54.1909482Z 164 │ mediaVideoPreviewUri, 2026-10-24T04:18:54.1909562Z ·  ──────────┬───────── 2026-10-24T04:18:54.1909706Z · ╰── 'mediaVideoPreviewUri' is imported here 2026-10-24T04:18:54.1909775Z 165 │ mediaVideoThumbnailKey, 2026-10-24T04:18:54.1909822Z ╰──── 2026-10-24T04:18:54.1909973Z  help: Consider removing this import. 2026-10-24T04:18:54.1910013Z 2026-10-24T04:18:54.1910241Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoThumbnailKey' is imported but never used. 2026-10-24T04:18:54.1910369Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:165:3] 2026-10-24T04:18:54.1910437Z 164 │ mediaVideoPreviewUri, 2026-10-24T04:18:54.1910504Z 165 │ mediaVideoThumbnailKey, 2026-10-24T04:18:54.1910589Z ·  ───────────┬────────── 2026-10-24T04:18:54.1910771Z · ╰── 'mediaVideoThumbnailKey' is imported here 2026-10-24T04:18:54.1910882Z 166 │ type MediaVideoPreviewSource, 2026-10-24T04:18:54.1910930Z ╰──── 2026-10-24T04:18:54.1911021Z  help: Consider removing this import. 2026-10-24T04:18:54.1911023Z 2026-10-24T04:18:54.1911232Z ⚠ eslint(no-unused-vars): Type 'MediaVideoPreviewSource' is imported but never used. 2026-10-24T04:18:54.1911360Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:166:8] 2026-10-24T04:18:54.1911425Z 165 │ mediaVideoThumbnailKey, 2026-10-24T04:18:54.1911500Z 166 │ type MediaVideoPreviewSource, 2026-10-24T04:18:54.1911590Z ·  ───────────┬─────────── 2026-10-24T04:18:54.1911744Z · ╰── 'MediaVideoPreviewSource' is imported here 2026-10-24T04:18:54.1911825Z 167 │ } from "../../lib/videoPreviewSource"; 2026-10-24T04:18:54.1911874Z ╰──── 2026-10-24T04:18:54.1911964Z  help: Consider removing this import. 2026-10-24T04:18:54.1911966Z 2026-10-24T04:18:54.1912154Z ⚠ eslint(no-unused-vars): Type 'ReviewDiffTheme' is imported but never used. 2026-10-24T04:18:54.1912284Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:174:15] 2026-10-24T04:18:54.1912454Z 173 │ import { parseReviewCommentMessageSegments } from "../review/reviewCommentSelection"; 2026-10-24T04:18:54.1912586Z 174 │ import type { ReviewDiffTheme } from "../review/shikiReviewHighlighter"; 2026-10-24T04:18:54.1912671Z ·  ───────┬─────── 2026-10-24T04:18:54.1912811Z · ╰── 'ReviewDiffTheme' is imported here 2026-10-24T04:18:54.1912866Z 175 │ import { 2026-10-24T04:18:54.1912916Z ╰──── 2026-10-24T04:18:54.1913006Z  help: Consider removing this import. 2026-10-24T04:18:54.1913008Z 2026-10-24T04:18:54.1913222Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownFontSizes' is imported but never used. 2026-10-24T04:18:54.1913351Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:189:3] 2026-10-24T04:18:54.1913408Z 188 │ import { 2026-10-24T04:18:54.1913482Z 189 │ resolveMarkdownFontSizes, 2026-10-24T04:18:54.1913567Z ·  ────────────┬─────────── 2026-10-24T04:18:54.1913717Z · ╰── 'resolveMarkdownFontSizes' is imported here 2026-10-24T04:18:54.1913799Z 190 │ resolveNativeMarkdownTypography, 2026-10-24T04:18:54.1913849Z ╰──── 2026-10-24T04:18:54.1913937Z  help: Consider removing this import. 2026-10-24T04:18:54.1913939Z 2026-10-24T04:18:54.1914192Z ⚠ eslint(no-unused-vars): Identifier 'markdownLinkIconSource' is imported but never used. 2026-10-24T04:18:54.1914319Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:194:10] 2026-10-24T04:18:54.1914503Z 193 │ import { PierreEntryIcon } from "../../components/PierreEntryIcon"; 2026-10-24T04:18:54.1914693Z 194 │ import { markdownLinkIconSource } from "../../lib/markdownLinkIcons"; 2026-10-24T04:18:54.1914782Z ·  ───────────┬────────── 2026-10-24T04:18:54.1914935Z · ╰── 'markdownLinkIconSource' is imported here 2026-10-24T04:18:54.1914991Z 195 │ import { 2026-10-24T04:18:54.1915037Z ╰──── 2026-10-24T04:18:54.1915129Z  help: Consider removing this import. 2026-10-24T04:18:54.1915131Z 2026-10-24T04:18:54.1915418Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownInlineCodePresentation' is imported but never used. 2026-10-24T04:18:54.1915577Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:197:3] 2026-10-24T04:18:54.1915651Z 196 │ normalizeNativeMarkdownUrl, 2026-10-24T04:18:54.1915745Z 197 │ resolveMarkdownInlineCodePresentation, 2026-10-24T04:18:54.1915854Z ·  ──────────────────┬────────────────── 2026-10-24T04:18:54.1916039Z · ╰── 'resolveMarkdownInlineCodePresentation' is imported here 2026-10-24T04:18:54.1916110Z 198 │ resolveMarkdownLinkIcon, 2026-10-24T04:18:54.1916157Z ╰──── 2026-10-24T04:18:54.1916247Z  help: Consider removing this import. 2026-10-24T04:18:54.1916249Z 2026-10-24T04:18:54.1916467Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownLinkIcon' is imported but never used. 2026-10-24T04:18:54.1916591Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:198:3] 2026-10-24T04:18:54.1916681Z 197 │ resolveMarkdownInlineCodePresentation, 2026-10-24T04:18:54.1916750Z 198 │ resolveMarkdownLinkIcon, 2026-10-24T04:18:54.1916842Z ·  ───────────┬─────────── 2026-10-24T04:18:54.1916995Z · ╰── 'resolveMarkdownLinkIcon' is imported here 2026-10-24T04:18:54.1917076Z 199 │ resolveMarkdownLinkPresentation, 2026-10-24T04:18:54.1917124Z ╰──── 2026-10-24T04:18:54.1917216Z  help: Consider removing this import. 2026-10-24T04:18:54.1917218Z 2026-10-24T04:18:54.1917434Z ⚠ eslint(no-unused-vars): Identifier 'useMarkdownCodeHighlight' is imported but never used. 2026-10-24T04:18:54.1917559Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:237:10] 2026-10-24T04:18:54.1917658Z 236 │ import { ThreadMcpApp } from "./McpAppWebView"; 2026-10-24T04:18:54.1917798Z 237 │ import { useMarkdownCodeHighlight } from "./markdownCodeHighlightState"; 2026-10-24T04:18:54.1917892Z ·  ────────────┬─────────── 2026-10-24T04:18:54.1918101Z · ╰── 'useMarkdownCodeHighlight' is imported here 2026-10-24T04:18:54.1918215Z 238 │ import { 2026-10-24T04:18:54.1918262Z ╰──── 2026-10-24T04:18:54.1918353Z  help: Consider removing this import. 2026-10-24T04:18:54.1918355Z 2026-10-24T04:18:54.1918553Z ⚠ eslint(no-unused-vars): Identifier 'useAssetUrlState' is imported but never used. 2026-10-24T04:18:54.1918677Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:241:3] 2026-10-24T04:18:54.1918738Z 240 │ useAssetUrl, 2026-10-24T04:18:54.1918803Z 241 │ useAssetUrlState, 2026-10-24T04:18:54.1918911Z ·  ────────┬─────── 2026-10-24T04:18:54.1919078Z · ╰── 'useAssetUrlState' is imported here 2026-10-24T04:18:54.1919144Z 242 │ useRefreshAssetUrl, 2026-10-24T04:18:54.1919198Z ╰──── 2026-10-24T04:18:54.1919290Z  help: Consider removing this import. 2026-10-24T04:18:54.1919292Z 2026-10-24T04:18:54.1919485Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T04:18:54.1919614Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2171:7] 2026-10-24T04:18:54.1919684Z 2170 │ setExpandedFile(null); 2026-10-24T04:18:54.1919835Z 2171 │ }, [props.environmentId, props.threadId, props.contentPresentation.kind]); 2026-10-24T04:18:54.1920047Z ·  ─────────┬───────── ───────┬────── ───────────────┬────────────── 2026-10-24T04:18:54.1920335Z · │ │ ╰── Unnecessary dependency `props.contentPresentation.kind` 2026-10-24T04:18:54.1920531Z · │ ╰── Unnecessary dependency `props.threadId` 2026-10-24T04:18:54.1920687Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-24T04:18:54.1920822Z 2172 │ const horizontalPadding = props.layoutVariant === "split" ? 20 : 16; 2026-10-24T04:18:54.1920873Z ╰──── 2026-10-24T04:18:54.1921160Z  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-24T04:18:54.1921461Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.1921463Z 2026-10-24T04:18:54.1921661Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T04:18:54.1921793Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2659:7] 2026-10-24T04:18:54.1921886Z 2658 │ reportHeaderMaterialVisibility(false); 2026-10-24T04:18:54.1921998Z 2659 │ }, [feedThreadKey, reportHeaderMaterialVisibility]); 2026-10-24T04:18:54.1922075Z ·  ──────┬────── 2026-10-24T04:18:54.1922219Z · ╰── Unnecessary dependency `feedThreadKey` 2026-10-24T04:18:54.1922271Z 2660 │ 2026-10-24T04:18:54.1922321Z ╰──── 2026-10-24T04:18:54.1922602Z  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-24T04:18:54.1922950Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.1922992Z 2026-10-24T04:18:54.1923206Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T04:18:54.1923336Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2675:7] 2026-10-24T04:18:54.1923390Z 2674 │ } 2026-10-24T04:18:54.1923515Z 2675 │ }, [listMountKey, props.contentInsetEndAdjustment, listRef]); 2026-10-24T04:18:54.1923592Z ·  ──────┬───── 2026-10-24T04:18:54.1923739Z · ╰── Unnecessary dependency `listMountKey` 2026-10-24T04:18:54.1923802Z 2676 │ 2026-10-24T04:18:54.1923881Z ╰──── 2026-10-24T04:18:54.1924233Z  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-24T04:18:54.1924536Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.1924538Z 2026-10-24T04:18:54.1924730Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T04:18:54.1924857Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2832:7] 2026-10-24T04:18:54.1924910Z 2831 │ } 2026-10-24T04:18:54.1925083Z 2832 │ }, [expandedTurnIds, expandedWorkGroups, expandedWorkRows, settleDisclosureAfterLayout]); 2026-10-24T04:18:54.1925274Z ·  ───────┬─────── ─────────┬──────── ────────┬─────── 2026-10-24T04:18:54.1925520Z · │ │ ╰── Unnecessary dependency `expandedWorkRows` 2026-10-24T04:18:54.1925717Z · │ ╰── Unnecessary dependency `expandedWorkGroups` 2026-10-24T04:18:54.1925864Z · ╰── Unnecessary dependency `expandedTurnIds` 2026-10-24T04:18:54.1925916Z 2833 │ 2026-10-24T04:18:54.1925964Z ╰──── 2026-10-24T04:18:54.1926248Z  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-24T04:18:54.1926552Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.1926554Z 2026-10-24T04:18:54.1926734Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T04:18:54.1926866Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:616:9] 2026-10-24T04:18:54.1926923Z 615 │ }; 2026-10-24T04:18:54.1927037Z 616 │ }, [props.environmentId, attachment.id, httpBaseUrl]), 2026-10-24T04:18:54.1927223Z ·  ─────────┬───────── ──────┬────── ─────┬───── 2026-10-24T04:18:54.1927453Z · │ │ ╰── Unnecessary dependency `httpBaseUrl` 2026-10-24T04:18:54.1927643Z · │ ╰── Unnecessary dependency `attachment.id` 2026-10-24T04:18:54.1927863Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-24T04:18:54.1927973Z 617 │ ); 2026-10-24T04:18:54.1928025Z ╰──── 2026-10-24T04:18:54.1928331Z  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-24T04:18:54.1928638Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.1928640Z 2026-10-24T04:18:54.1928945Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T04:18:54.1929101Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:290:50] 2026-10-24T04:18:54.1929164Z 289 │ return ( 2026-10-24T04:18:54.1929302Z 290 │ 2026-10-24T04:18:54.1929424Z ·  ───────────── 2026-10-24T04:18:54.1929494Z 291 │ {props.children} 2026-10-24T04:18:54.1929547Z ╰──── 2026-10-24T04:18:54.1929765Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T04:18:54.1929900Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T04:18:54.1929906Z 2026-10-24T04:18:54.1930139Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T04:18:54.1930292Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:654:44] 2026-10-24T04:18:54.1930352Z 653 │ return ( 2026-10-24T04:18:54.1930476Z 654 │ 2026-10-24T04:18:54.1930590Z ·  ───────────── 2026-10-24T04:18:54.1930659Z 655 │ {props.children} 2026-10-24T04:18:54.1930711Z ╰──── 2026-10-24T04:18:54.1930927Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T04:18:54.1931058Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T04:18:54.1931061Z 2026-10-24T04:18:54.1931290Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T04:18:54.1931445Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:1462:55] 2026-10-24T04:18:54.1931505Z 1461 │ return ( 2026-10-24T04:18:54.1931713Z 1462 │ 2026-10-24T04:18:54.1931952Z ·  ──────────────────── 2026-10-24T04:18:54.1932051Z 1463 │ { 2026-10-24T04:18:54.1933549Z ╰──── 2026-10-24T04:18:54.1933823Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T04:18:54.1934150Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T04:18:54.1934157Z 2026-10-24T04:18:54.1934350Z ⚠ react(immutability): This value cannot be modified 2026-10-24T04:18:54.1934515Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-24T04:18:54.1934602Z  86 │ 2026-10-24T04:18:54.1934724Z  87 │ const cardCoverage = props.cardCoverage; 2026-10-24T04:18:54.1934892Z ·  ──────┬───── 2026-10-24T04:18:54.1935038Z · ╰── `cardCoverage` originates here 2026-10-24T04:18:54.1935154Z  88 │ const barHeightRef = useRef(0); 2026-10-24T04:18:54.1935265Z  89 │ const cardHeightRef = useRef(0); 2026-10-24T04:18:54.1935382Z  90 │ const cardHeight = useSharedValue(0); 2026-10-24T04:18:54.1935492Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-24T04:18:54.1935594Z  92 │ if (!cardCoverage) { 2026-10-24T04:18:54.1935691Z  93 │ return; 2026-10-24T04:18:54.1935774Z  94 │ } 2026-10-24T04:18:54.1935945Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T04:18:54.1936071Z  96 │ if (coverage === cardCoverage.value) { 2026-10-24T04:18:54.1936161Z  97 │ return; 2026-10-24T04:18:54.1936241Z  98 │ } 2026-10-24T04:18:54.1936325Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T04:18:54.1936571Z 100 │ cardCoverage.value = coverage; 2026-10-24T04:18:54.1936717Z ·  ──────┬───── 2026-10-24T04:18:54.1936886Z · ╰── `cardCoverage` cannot be modified 2026-10-24T04:18:54.1936958Z 101 │ return; 2026-10-24T04:18:54.1937042Z ╰──── 2026-10-24T04:18:54.1937441Z  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-24T04:18:54.1937869Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T04:18:54.1937872Z 2026-10-24T04:18:54.1938035Z ⚠ react(immutability): This value cannot be modified 2026-10-24T04:18:54.1938218Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7] 2026-10-24T04:18:54.1938386Z  89 │ const cardHeightRef = useRef(0); 2026-10-24T04:18:54.1938550Z  90 │ const cardHeight = useSharedValue(0); 2026-10-24T04:18:54.1938637Z ·  ─────┬──── 2026-10-24T04:18:54.1938799Z · ╰── `cardHeight` originates here 2026-10-24T04:18:54.1938920Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-24T04:18:54.1939028Z  92 │ if (!cardCoverage) { 2026-10-24T04:18:54.1939102Z  93 │ return; 2026-10-24T04:18:54.1939249Z  94 │ } 2026-10-24T04:18:54.1939423Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T04:18:54.1939554Z  96 │ if (coverage === cardCoverage.value) { 2026-10-24T04:18:54.1939623Z  97 │ return; 2026-10-24T04:18:54.1939707Z  98 │ } 2026-10-24T04:18:54.1939817Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T04:18:54.1939930Z 100 │ cardCoverage.value = coverage; 2026-10-24T04:18:54.1940007Z 101 │ return; 2026-10-24T04:18:54.1940089Z 102 │ } 2026-10-24T04:18:54.1940218Z 103 │ cardCoverage.value = withTiming(coverage, { 2026-10-24T04:18:54.1940331Z 104 │ duration: USER_INPUT_TOGGLE_DURATION_MS, 2026-10-24T04:18:54.1940437Z 105 │ easing: Easing.out(Easing.cubic), 2026-10-24T04:18:54.1940533Z 106 │ }); 2026-10-24T04:18:54.1940635Z 107 │ }, [cardCoverage]); 2026-10-24T04:18:54.1940752Z 108 │ const handleBarLayout = useCallback( 2026-10-24T04:18:54.1940835Z 109 │ (event: LayoutChangeEvent) => { 2026-10-24T04:18:54.1941008Z 110 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T04:18:54.1941102Z 111 │ notifyCoverage(); 2026-10-24T04:18:54.1941252Z 112 │ }, 2026-10-24T04:18:54.1941331Z 113 │ [notifyCoverage], 2026-10-24T04:18:54.1941419Z 114 │ ); 2026-10-24T04:18:54.1941537Z 115 │ const handleCardLayout = useCallback( 2026-10-24T04:18:54.1941649Z 116 │ (event: LayoutChangeEvent) => { 2026-10-24T04:18:54.1941784Z 117 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T04:18:54.1941916Z 118 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-24T04:18:54.1942040Z ·  ─────┬──── 2026-10-24T04:18:54.1942211Z · ╰── `cardHeight` cannot be modified 2026-10-24T04:18:54.1942290Z 119 │ notifyCoverage(); 2026-10-24T04:18:54.1942368Z ╰──── 2026-10-24T04:18:54.1942658Z  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-24T04:18:54.1942994Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T04:18:54.1942997Z 2026-10-24T04:18:54.1943218Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T04:18:54.1943381Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-24T04:18:54.1943541Z  90 │ const cardHeight = useSharedValue(0); 2026-10-24T04:18:54.1943746Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-24T04:18:54.1943947Z ·  ───┬─── 2026-10-24T04:18:54.1944228Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-24T04:18:54.1944353Z  92 │ if (!cardCoverage) { 2026-10-24T04:18:54.1944483Z  93 │ return; 2026-10-24T04:18:54.1944573Z  94 │ } 2026-10-24T04:18:54.1944733Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T04:18:54.1944847Z  96 │ if (coverage === cardCoverage.value) { 2026-10-24T04:18:54.1944931Z  97 │ return; 2026-10-24T04:18:54.1945028Z  98 │ } 2026-10-24T04:18:54.1945122Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T04:18:54.1945231Z 100 │ cardCoverage.value = coverage; 2026-10-24T04:18:54.1945341Z ·  ──────┬───── 2026-10-24T04:18:54.1945504Z · ╰── This modifies `cardCoverage` 2026-10-24T04:18:54.1945582Z 101 │ return; 2026-10-24T04:18:54.1945661Z ╰──── 2026-10-24T04:18:54.1946021Z  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-24T04:18:54.1946346Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T04:18:54.1946349Z 2026-10-24T04:18:54.1946654Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T04:18:54.1946822Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-24T04:18:54.1946932Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T04:18:54.1947045Z 100 │ cardCoverage.value = coverage; 2026-10-24T04:18:54.1947157Z ·  ──────┬───── 2026-10-24T04:18:54.1947307Z · ╰── This modifies `cardCoverage` 2026-10-24T04:18:54.1947395Z 101 │ return; 2026-10-24T04:18:54.1947480Z 102 │ } 2026-10-24T04:18:54.1947610Z 103 │ cardCoverage.value = withTiming(coverage, { 2026-10-24T04:18:54.1947729Z 104 │ duration: USER_INPUT_TOGGLE_DURATION_MS, 2026-10-24T04:18:54.1947849Z 105 │ easing: Easing.out(Easing.cubic), 2026-10-24T04:18:54.1947936Z 106 │ }); 2026-10-24T04:18:54.1948031Z 107 │ }, [cardCoverage]); 2026-10-24T04:18:54.1948124Z 108 │ const handleBarLayout = useCallback( 2026-10-24T04:18:54.1948252Z 109 │ (event: LayoutChangeEvent) => { 2026-10-24T04:18:54.1948384Z ·  ───────────────┬─────────────── 2026-10-24T04:18:54.1948638Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-24T04:18:54.1948770Z 110 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T04:18:54.1948863Z ╰──── 2026-10-24T04:18:54.1949289Z  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-24T04:18:54.1949616Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T04:18:54.1949619Z 2026-10-24T04:18:54.1949878Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T04:18:54.1950109Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7] 2026-10-24T04:18:54.1950244Z 115 │ const handleCardLayout = useCallback( 2026-10-24T04:18:54.1950348Z 116 │ (event: LayoutChangeEvent) => { 2026-10-24T04:18:54.1950481Z ·  ───────────────┬─────────────── 2026-10-24T04:18:54.1950761Z · ╰── This function may (indirectly) reassign or modify `cardHeight` after render 2026-10-24T04:18:54.1950928Z 117 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T04:18:54.1951082Z 118 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-24T04:18:54.1951182Z ·  ─────┬──── 2026-10-24T04:18:54.1951324Z · ╰── This modifies `cardHeight` 2026-10-24T04:18:54.1951415Z 119 │ notifyCoverage(); 2026-10-24T04:18:54.1951515Z ╰──── 2026-10-24T04:18:54.1951860Z  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-24T04:18:54.1952162Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T04:18:54.1952180Z 2026-10-24T04:18:54.1952421Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T04:18:54.1952644Z ╭─[packages/provider-opencode/src/server/OpenCodeRuntime.environment.test.ts:53:14] 2026-10-24T04:18:54.1952731Z 52 │ 2026-10-24T04:18:54.1952827Z 53 │ for (const {} of [ 2026-10-24T04:18:54.1952914Z ·  ── 2026-10-24T04:18:54.1953002Z 54 │ { healthy: true }, 2026-10-24T04:18:54.1953099Z ╰──── 2026-10-24T04:18:54.1953346Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T04:18:54.1953349Z 2026-10-24T04:18:54.1953557Z ⚠ eslint(no-unused-vars): Type 'ThreadRunSummary' is imported but never used. 2026-10-24T04:18:54.1953679Z ╭─[apps/web/src/types.ts:22:3] 2026-10-24T04:18:54.1953777Z 21 │ EnvironmentThreadShell, 2026-10-24T04:18:54.1953876Z 22 │ ThreadRunSummary, 2026-10-24T04:18:54.1953964Z ·  ────────┬─────── 2026-10-24T04:18:54.1954177Z · ╰── 'ThreadRunSummary' is imported here 2026-10-24T04:18:54.1954274Z 23 │ ThreadRuntimeSummary, 2026-10-24T04:18:54.1954377Z ╰──── 2026-10-24T04:18:54.1954484Z  help: Consider removing this import. 2026-10-24T04:18:54.1954487Z 2026-10-24T04:18:54.1954709Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T04:18:54.1954936Z ╭─[apps/mobile/src/components/ComposerEditor.tsx:82:6] 2026-10-24T04:18:54.1955020Z 81 │ }, 2026-10-24T04:18:54.1955101Z 82 │ [draftKey], 2026-10-24T04:18:54.1955197Z ·  ────┬─── 2026-10-24T04:18:54.1955359Z · ╰── Unnecessary dependency `draftKey` 2026-10-24T04:18:54.1955433Z 83 │ ); 2026-10-24T04:18:54.1955503Z ╰──── 2026-10-24T04:18:54.1955876Z  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-24T04:18:54.1956273Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.1956276Z 2026-10-24T04:18:54.1956553Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T04:18:54.1956721Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:68:5] 2026-10-24T04:18:54.1956903Z 66 │ const { id: attachmentId, fileUri } = attachment; 2026-10-24T04:18:54.1956998Z 67 │ useEffect(() => { 2026-10-24T04:18:54.1957093Z ·  ────┬──── 2026-10-24T04:18:54.1957239Z · ╰── This is the containing effect 2026-10-24T04:18:54.1957323Z 68 │ setUri(null); 2026-10-24T04:18:54.1957435Z ·  ───┬── 2026-10-24T04:18:54.1957689Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T04:18:54.1957781Z 69 │ setError(null); 2026-10-24T04:18:54.1957837Z ╰──── 2026-10-24T04:18:54.1958462Z  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-24T04:18:54.1958798Z  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-24T04:18:54.1958801Z 2026-10-24T04:18:54.1959027Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T04:18:54.1959179Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:91:7] 2026-10-24T04:18:54.1959256Z 90 │ }; 2026-10-24T04:18:54.1959368Z 91 │ }, [attachmentId, fileUri]); 2026-10-24T04:18:54.1959509Z ·  ──────┬───── ───┬─── 2026-10-24T04:18:54.1959711Z · │ ╰── Unnecessary dependency `fileUri` 2026-10-24T04:18:54.1959856Z · ╰── Unnecessary dependency `attachmentId` 2026-10-24T04:18:54.1960034Z 92 │ const mimeType = videoMimeType(attachment) ?? attachment.mimeType; 2026-10-24T04:18:54.1960113Z ╰──── 2026-10-24T04:18:54.1960478Z  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-24T04:18:54.1960860Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.1960863Z 2026-10-24T04:18:54.1961088Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T04:18:54.1961385Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:213:34] 2026-10-24T04:18:54.1961478Z 212 │ useEffect(() => { 2026-10-24T04:18:54.1961620Z 213 │ if (!isFocused && hasSource) props.onRequestClose(); 2026-10-24T04:18:54.1961721Z ·  ──┬── 2026-10-24T04:18:54.1961908Z · ╰── Missing dependency `props` 2026-10-24T04:18:54.1962044Z 214 │ }, [isFocused, hasSource, props.onRequestClose]); 2026-10-24T04:18:54.1962189Z ·  ──────────┬───────── 2026-10-24T04:18:54.1962427Z · ╰── Overly precise dependency `props.onRequestClose`, use `props` instead 2026-10-24T04:18:54.1962520Z 215 │ const { source } = props; 2026-10-24T04:18:54.1962604Z ╰──── 2026-10-24T04:18:54.1963039Z  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-24T04:18:54.1963363Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.1963365Z 2026-10-24T04:18:54.1963560Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T04:18:54.1963724Z ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:372:47] 2026-10-24T04:18:54.1963886Z 371 │ const { open, onOpenChange, onSnooze, timestampFormat } = props; 2026-10-24T04:18:54.1964081Z 372 │ const presets = open ? resolveSnoozePresets(new Date(), timestampFormat) : []; 2026-10-24T04:18:54.1964241Z ·  ─────┬──── 2026-10-24T04:18:54.1964416Z · ╰── Cannot call impure function 2026-10-24T04:18:54.1964577Z 373 │ return ( 2026-10-24T04:18:54.1964661Z ╰──── 2026-10-24T04:18:54.1964962Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T04:18:54.1965251Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T04:18:54.1965279Z 2026-10-24T04:18:54.1965457Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T04:18:54.1965633Z ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:853:39] 2026-10-24T04:18:54.1965754Z 852 │ if (snoozeGateClock.thread !== thread) { 2026-10-24T04:18:54.1965900Z 853 │ setSnoozeGateClock({ thread, now: new Date().toISOString() }); 2026-10-24T04:18:54.1966024Z ·  ─────┬──── 2026-10-24T04:18:54.1966213Z · ╰── Cannot call impure function 2026-10-24T04:18:54.1966294Z 854 │ } 2026-10-24T04:18:54.1966429Z ╰──── 2026-10-24T04:18:54.1966764Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T04:18:54.1967095Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T04:18:54.1967097Z 2026-10-24T04:18:54.1967330Z ⚠ unicorn(no-new-array): Do not use `new Array(singleArgument)`. 2026-10-24T04:18:54.1967511Z ╭─[apps/web/src/terminal/ghostty/core.ts:194:19] 2026-10-24T04:18:54.1967726Z 193 │ const count = Math.min(CHUNK_SIZE, graphemeLength - start); 2026-10-24T04:18:54.1967836Z 194 │ const codes = new Array(count); 2026-10-24T04:18:54.1967981Z ·  ──────────────────────── 2026-10-24T04:18:54.1968113Z 195 │ for (let index = 0; index < count; index += 1) { 2026-10-24T04:18:54.1968196Z ╰──── 2026-10-24T04:18:54.1968601Z  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-24T04:18:54.1968604Z 2026-10-24T04:18:54.1968872Z ⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence. 2026-10-24T04:18:54.1969031Z ╭─[apps/web/src/components/chat/useComposerSend.ts:985:13] 2026-10-24T04:18:54.1969176Z 984 │ const changedBeforeDecline = draftChangedSinceSend(); 2026-10-24T04:18:54.1969441Z 985 │ ╭─▶ const pendingIdsBeforeDecline = pendingApprovalsRef.current.map( 2026-10-24T04:18:54.1969583Z 986 │ │ (approval) => approval.requestId, 2026-10-24T04:18:54.1969746Z 987 │ ╰─▶ ); 2026-10-24T04:18:54.1969909Z 988 │ const approvalResponding = approvalsToDecline.some((approval) => 2026-10-24T04:18:54.1969991Z ╰──── 2026-10-24T04:18:54.1970074Z  help: Switch to `Set` 2026-10-24T04:18:54.1970077Z 2026-10-24T04:18:54.1970275Z ⚠ react(immutability): This value cannot be modified 2026-10-24T04:18:54.1970459Z ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:42:5] 2026-10-24T04:18:54.1970608Z 35 │ 2026-10-24T04:18:54.1970753Z 36 │ const inspectorProgress = useSharedValue(inspectorVisible ? 1 : 0); 2026-10-24T04:18:54.1970879Z ·  ────────┬──────── 2026-10-24T04:18:54.1971062Z · ╰── `inspectorProgress` originates here 2026-10-24T04:18:54.1971187Z 37 │ const { renderedInspectorWidth } = props; 2026-10-24T04:18:54.1971325Z 38 │ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0); 2026-10-24T04:18:54.1971397Z 39 │ 2026-10-24T04:18:54.1971520Z 40 │ const onClosed = props.onClosed; 2026-10-24T04:18:54.1971613Z 41 │ useEffect(() => { 2026-10-24T04:18:54.1971717Z 42 │ inspectorProgress.value = withTiming( 2026-10-24T04:18:54.1971827Z ·  ────────┬──────── 2026-10-24T04:18:54.1972002Z · ╰── `inspectorProgress` cannot be modified 2026-10-24T04:18:54.1972116Z 43 │ inspectorVisible ? 1 : 0, 2026-10-24T04:18:54.1972184Z ╰──── 2026-10-24T04:18:54.1972530Z  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-24T04:18:54.1972916Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T04:18:54.1976559Z 2026-10-24T04:18:54.1976743Z ⚠ react(immutability): This value cannot be modified 2026-10-24T04:18:54.1976900Z ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:67:7] 2026-10-24T04:18:54.1976991Z 37 │ const { renderedInspectorWidth } = props; 2026-10-24T04:18:54.1977117Z 38 │ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0); 2026-10-24T04:18:54.1977207Z ·  ──────────┬───────── 2026-10-24T04:18:54.1977368Z · ╰── `renderedContentWidth` originates here 2026-10-24T04:18:54.1977424Z 39 │ 2026-10-24T04:18:54.1977503Z 40 │ const onClosed = props.onClosed; 2026-10-24T04:18:54.1977564Z 41 │ useEffect(() => { 2026-10-24T04:18:54.1977650Z 42 │ inspectorProgress.value = withTiming( 2026-10-24T04:18:54.1977723Z 43 │ inspectorVisible ? 1 : 0, 2026-10-24T04:18:54.1977792Z 44 │ WORKSPACE_PANE_TIMING, 2026-10-24T04:18:54.1977854Z 45 │ (finished) => { 2026-10-24T04:18:54.1977990Z 46 │ if (finished === true && !inspectorVisible && onClosed !== undefined) { 2026-10-24T04:18:54.1978062Z 47 │ runOnJS(onClosed)(); 2026-10-24T04:18:54.1978116Z 48 │ } 2026-10-24T04:18:54.1978168Z 49 │ }, 2026-10-24T04:18:54.1978220Z 50 │ ); 2026-10-24T04:18:54.1978346Z 51 │ const targetWidth = inspectorVisible ? (inspectorWidth ?? 0) : 0; 2026-10-24T04:18:54.1978430Z 52 │ renderedInspectorWidth.set( 2026-10-24T04:18:54.1978572Z 53 │ resizing ? targetWidth : withTiming(targetWidth, WORKSPACE_PANE_TIMING), 2026-10-24T04:18:54.1978625Z 54 │ ); 2026-10-24T04:18:54.1978677Z 55 │ }, [ 2026-10-24T04:18:54.1978742Z 56 │ inspectorProgress, 2026-10-24T04:18:54.1978805Z 57 │ inspectorVisible, 2026-10-24T04:18:54.1978868Z 58 │ inspectorWidth, 2026-10-24T04:18:54.1978926Z 59 │ onClosed, 2026-10-24T04:18:54.1978993Z 60 │ renderedInspectorWidth, 2026-10-24T04:18:54.1979050Z 61 │ resizing, 2026-10-24T04:18:54.1979102Z 62 │ ]); 2026-10-24T04:18:54.1979151Z 63 │ 2026-10-24T04:18:54.1979209Z 64 │ useEffect(() => { 2026-10-24T04:18:54.1979299Z 65 │ const targetWidth = inspectorWidth ?? 0; 2026-10-24T04:18:54.1979381Z 66 │ if (!inspectorVisible || resizing) { 2026-10-24T04:18:54.1979481Z 67 │ renderedContentWidth.value = targetWidth; 2026-10-24T04:18:54.1979570Z ·  ──────────┬───────── 2026-10-24T04:18:54.1979725Z · ╰── `renderedContentWidth` cannot be modified 2026-10-24T04:18:54.1979782Z 68 │ return; 2026-10-24T04:18:54.1979830Z ╰──── 2026-10-24T04:18:54.1980087Z  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-24T04:18:54.1980382Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T04:18:54.1980385Z 2026-10-24T04:18:54.1980573Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T04:18:54.1980820Z ╭─[apps/mobile/src/components/ComposerContextSheet.tsx:267:25] 2026-10-24T04:18:54.1981012Z 266 │ {record.elements?.map((element, index) => ( 2026-10-24T04:18:54.1981173Z 267 │ 2026-10-24T04:18:54.1981325Z ·  ─────────────────────────────────────────────────────── 2026-10-24T04:18:54.1981399Z 268 │ 2026-10-24T04:18:54.1983598Z 817 │ 2026-10-24T04:18:54.1983709Z ·  ──────────────────── 2026-10-24T04:18:54.1983798Z 818 │ 2026-10-24T04:18:54.1984803Z 832 │ 2026-10-24T04:18:54.1984920Z ·  ──────────────────── 2026-10-24T04:18:54.1985017Z 833 │ 2026-10-24T04:18:54.1985069Z ╰──── 2026-10-24T04:18:54.1985280Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T04:18:54.1985409Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T04:18:54.1985414Z 2026-10-24T04:18:54.1985663Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T04:18:54.1985845Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:60:5] 2026-10-24T04:18:54.1986003Z 57 │ 2026-10-24T04:18:54.1986067Z 58 │ useEffect(() => { 2026-10-24T04:18:54.1986134Z ·  ────┬──── 2026-10-24T04:18:54.1986259Z · ╰── This is the containing effect 2026-10-24T04:18:54.1986349Z 59 │ const controller = new AbortController(); 2026-10-24T04:18:54.1986420Z 60 │ setLoadState("pending"); 2026-10-24T04:18:54.1986492Z ·  ──────┬───── 2026-10-24T04:18:54.1986705Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T04:18:54.1986875Z 61 │ // A renewed signature is used on Retry, not as a reason to reset the native player. 2026-10-24T04:18:54.1986924Z ╰──── 2026-10-24T04:18:54.1987506Z  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-24T04:18:54.1987819Z  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-24T04:18:54.1987822Z 2026-10-24T04:18:54.1988013Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T04:18:54.1988142Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:71:7] 2026-10-24T04:18:54.1988221Z 70 │ return () => controller.abort(); 2026-10-24T04:18:54.1988311Z 71 │ }, [player, props.playRequested, attempt]); 2026-10-24T04:18:54.1988482Z ·  ───┬── ─────────┬───────── ───┬─── 2026-10-24T04:18:54.1988705Z · │ │ ╰── Unnecessary dependency `attempt` 2026-10-24T04:18:54.1988896Z · │ ╰── Unnecessary dependency `props.playRequested` 2026-10-24T04:18:54.1989027Z · ╰── Unnecessary dependency `player_0` 2026-10-24T04:18:54.1989077Z 72 │ 2026-10-24T04:18:54.1989126Z ╰──── 2026-10-24T04:18:54.1989409Z  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-24T04:18:54.1989756Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.1989800Z 2026-10-24T04:18:54.1989952Z ⚠ react(refs): Cannot access refs during render 2026-10-24T04:18:54.1990098Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:152:27] 2026-10-24T04:18:54.1990273Z 151 │ 2026-10-24T04:18:54.1990350Z 152 │ {props.children(open)} 2026-10-24T04:18:54.1990435Z ·  ──┬─ 2026-10-24T04:18:54.1990661Z · ╰── Cannot access ref value during render 2026-10-24T04:18:54.1990725Z 153 │ 2026-10-24T04:18:54.1990776Z ╰──── 2026-10-24T04:18:54.1991229Z  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-24T04:18:54.1991513Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T04:18:54.1991516Z 2026-10-24T04:18:54.1991705Z ⚠ react(memo-dependencies): Found missing/extra memoization dependencies 2026-10-24T04:18:54.1991850Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:140:9] 2026-10-24T04:18:54.1991927Z 139 │ if (action.id !== undefined) { 2026-10-24T04:18:54.1992005Z 140 │ props.onPressAction?.({ 2026-10-24T04:18:54.1992074Z ·  ──┬── 2026-10-24T04:18:54.1992203Z · ╰── Missing dependency `props` 2026-10-24T04:18:54.1992293Z 141 │ nativeEvent: { event: action.id }, 2026-10-24T04:18:54.1992433Z 142 │ } as Parameters>[0]); 2026-10-24T04:18:54.1992486Z 143 │ } 2026-10-24T04:18:54.1992541Z 144 │ }, 2026-10-24T04:18:54.1992618Z 145 │ [close, props.onPressAction], 2026-10-24T04:18:54.1992712Z ·  ─────────┬───────── 2026-10-24T04:18:54.1992915Z · ╰── Overly precise dependency `props.onPressAction`, use `props` instead 2026-10-24T04:18:54.1992968Z 146 │ ); 2026-10-24T04:18:54.1993016Z ╰──── 2026-10-24T04:18:54.1993480Z  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-24T04:18:54.1993781Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.1993783Z 2026-10-24T04:18:54.1994065Z ⚠ eslint(no-unused-vars): Function 'promptResponseHasMissingXAiStopReason' is declared but never used. 2026-10-24T04:18:54.1994215Z ╭─[packages/provider-grok/src/server/xaiAcpExtension.ts:1620:10] 2026-10-24T04:18:54.1994266Z 1619 │ 2026-10-24T04:18:54.1994470Z 1620 │ function promptResponseHasMissingXAiStopReason(response: EffectAcpSchema.PromptResponse): boolean { 2026-10-24T04:18:54.1994584Z ·  ──────────────────┬────────────────── 2026-10-24T04:18:54.1994827Z · ╰── 'promptResponseHasMissingXAiStopReason' is declared here 2026-10-24T04:18:54.1994960Z 1621 │ const meta = response._meta; 2026-10-24T04:18:54.1995012Z ╰──── 2026-10-24T04:18:54.1995114Z  help: Consider removing this declaration. 2026-10-24T04:18:54.1995117Z 2026-10-24T04:18:54.1995569Z ⚠ 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-24T04:18:54.1995800Z ╭─[apps/mobile/src/features/agent-awareness/remoteRegistration.test.ts:223:5] 2026-10-24T04:18:54.1995876Z 222 │ let idlePasses = 0; 2026-10-24T04:18:54.1996015Z 223 │ ╭─▶ for (;;) { 2026-10-24T04:18:54.1996151Z 224 │ │ yield* Effect.promise(() => Promise.resolve()); 2026-10-24T04:18:54.1996294Z 225 │ │ const pending = backgroundRuntime.pending.shift(); 2026-10-24T04:18:54.1996384Z 226 │ │ if (!pending) { 2026-10-24T04:18:54.1996476Z 227 │ │ idlePasses++; 2026-10-24T04:18:54.1996578Z 228 │ │ if (idlePasses >= 3) { 2026-10-24T04:18:54.1996661Z 229 │ │ return; 2026-10-24T04:18:54.1996735Z 230 │ │ } 2026-10-24T04:18:54.1996819Z 231 │ │ continue; 2026-10-24T04:18:54.1996892Z 232 │ │ } 2026-10-24T04:18:54.1996982Z 233 │ │ idlePasses = 0; 2026-10-24T04:18:54.1997098Z 234 │ │ const exit = yield* Effect.exit( 2026-10-24T04:18:54.1997306Z 235 │ │ pending.operation as Effect.Effect, 2026-10-24T04:18:54.1997381Z 236 │ │ ); 2026-10-24T04:18:54.1997486Z 237 │ │ yield* Effect.sync(() => { 2026-10-24T04:18:54.1997585Z 238 │ │ pending.resolve(exit); 2026-10-24T04:18:54.1997660Z 239 │ │ }); 2026-10-24T04:18:54.1997785Z 240 │ ╰─▶ } 2026-10-24T04:18:54.1997840Z 241 │ }, 2026-10-24T04:18:54.1997889Z ╰──── 2026-10-24T04:18:54.1997891Z 2026-10-24T04:18:54.1998142Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T04:18:54.1998273Z ╭─[packages/provider-grok/src/server/adapter.ts:408:7] 2026-10-24T04:18:54.1998327Z 407 │ 2026-10-24T04:18:54.1998393Z 408 │ const layer: Layer.Layer< 2026-10-24T04:18:54.1998462Z ·  ──┬── 2026-10-24T04:18:54.1998580Z · ╰── 'layer' is declared here 2026-10-24T04:18:54.1998667Z 409 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T04:18:54.1998716Z ╰──── 2026-10-24T04:18:54.1998815Z  help: Consider removing this declaration. 2026-10-24T04:18:54.1998817Z 2026-10-24T04:18:54.1999065Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T04:18:54.1999229Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:643:5] 2026-10-24T04:18:54.1999279Z 638 │ 2026-10-24T04:18:54.1999396Z 639 │ useEffect(() => { 2026-10-24T04:18:54.1999524Z ·  ────┬──── 2026-10-24T04:18:54.1999651Z · ╰── This is the containing effect 2026-10-24T04:18:54.1999757Z 640 │ if (pendingLaunchEntry.key === launchTargetKey) { 2026-10-24T04:18:54.1999817Z 641 │ return; 2026-10-24T04:18:54.1999870Z 642 │ } 2026-10-24T04:18:54.1999942Z 643 │ setPendingLaunchEntry({ 2026-10-24T04:18:54.2000027Z ·  ──────────┬────────── 2026-10-24T04:18:54.2000240Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T04:18:54.2000330Z 644 │ key: launchTargetKey, 2026-10-24T04:18:54.2000380Z ╰──── 2026-10-24T04:18:54.2000963Z  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-24T04:18:54.2001276Z  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-24T04:18:54.2001279Z 2026-10-24T04:18:54.2001526Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T04:18:54.2001687Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:653:5] 2026-10-24T04:18:54.2001739Z 648 │ 2026-10-24T04:18:54.2001800Z 649 │ useEffect(() => { 2026-10-24T04:18:54.2001868Z ·  ────┬──── 2026-10-24T04:18:54.2001995Z · ╰── This is the containing effect 2026-10-24T04:18:54.2002109Z 650 │ if (initialAttachGridEntry.key === launchTargetKey) { 2026-10-24T04:18:54.2002168Z 651 │ return; 2026-10-24T04:18:54.2002222Z 652 │ } 2026-10-24T04:18:54.2002300Z 653 │ setInitialAttachGridEntry({ 2026-10-24T04:18:54.2002388Z ·  ────────────┬──────────── 2026-10-24T04:18:54.2002554Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T04:18:54.2002624Z 654 │ key: launchTargetKey, 2026-10-24T04:18:54.2002673Z ╰──── 2026-10-24T04:18:54.2003263Z  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-24T04:18:54.2003574Z  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-24T04:18:54.2003576Z 2026-10-24T04:18:54.2003821Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T04:18:54.2003981Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:746:7] 2026-10-24T04:18:54.2004053Z 743 │ 2026-10-24T04:18:54.2004116Z 744 │ useEffect(() => { 2026-10-24T04:18:54.2004206Z ·  ────┬──── 2026-10-24T04:18:54.2004328Z · ╰── This is the containing effect 2026-10-24T04:18:54.2004475Z 745 │ if (!routeEnvironmentId || !routeThreadId) { 2026-10-24T04:18:54.2004598Z 746 │ setLastGridSize({ 2026-10-24T04:18:54.2004679Z ·  ───────┬─────── 2026-10-24T04:18:54.2004842Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T04:18:54.2004921Z 747 │ cols: DEFAULT_TERMINAL_COLS, 2026-10-24T04:18:54.2004969Z ╰──── 2026-10-24T04:18:54.2005629Z  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-24T04:18:54.2005942Z  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-24T04:18:54.2005947Z 2026-10-24T04:18:54.2006141Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T04:18:54.2006305Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:538:24] 2026-10-24T04:18:54.2006357Z 537 │ }); 2026-10-24T04:18:54.2006476Z 538 │ }, [terminal.buffer, terminal.buffer.length, terminalKey]); 2026-10-24T04:18:54.2006582Z ·  ───────────┬────────── 2026-10-24T04:18:54.2006817Z · ╰── Overly precise dependency `terminal.buffer.length`, use `terminal.buffer` instead 2026-10-24T04:18:54.2006975Z 539 │ const cwd = terminal.summary?.cwd ?? selectedThreadProject?.workspaceRoot ?? null; 2026-10-24T04:18:54.2007022Z ╰──── 2026-10-24T04:18:54.2007311Z  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-24T04:18:54.2007611Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.2007613Z 2026-10-24T04:18:54.2007805Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T04:18:54.2007964Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:709:7] 2026-10-24T04:18:54.2008057Z 708 │ sentInitialInputKeyRef.current = null; 2026-10-24T04:18:54.2008122Z 709 │ }, [terminalKey]); 2026-10-24T04:18:54.2008197Z ·  ─────┬───── 2026-10-24T04:18:54.2008339Z · ╰── Unnecessary dependency `terminalKey` 2026-10-24T04:18:54.2008393Z 710 │ 2026-10-24T04:18:54.2008441Z ╰──── 2026-10-24T04:18:54.2008721Z  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-24T04:18:54.2009017Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.2009021Z 2026-10-24T04:18:54.2009210Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T04:18:54.2009370Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:800:52] 2026-10-24T04:18:54.2009424Z 799 │ }; 2026-10-24T04:18:54.2009596Z 800 │ }, [canOperateTerminal, isRunning, pasteSession, terminal.lifecycleVersion, terminalKey]); 2026-10-24T04:18:54.2009815Z ·  ────────────┬──────────── ─────┬───── 2026-10-24T04:18:54.2010096Z · │ ╰── Unnecessary dependency `terminalKey` 2026-10-24T04:18:54.2010296Z · ╰── Unnecessary dependency `terminal.lifecycleVersion` 2026-10-24T04:18:54.2010348Z 801 │ 2026-10-24T04:18:54.2010395Z ╰──── 2026-10-24T04:18:54.2010749Z  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-24T04:18:54.2011052Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.2011058Z 2026-10-24T04:18:54.2011198Z ⚠ react(refs): Cannot access refs during render 2026-10-24T04:18:54.2011360Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:793:24] 2026-10-24T04:18:54.2011412Z 792 │ } 2026-10-24T04:18:54.2011515Z 793 │ const pasteSession = pasteSessionRef.current; 2026-10-24T04:18:54.2011624Z ·  ───────────┬─────────── 2026-10-24T04:18:54.2011783Z · ╰── Cannot access ref value during render 2026-10-24T04:18:54.2011832Z 794 │ 2026-10-24T04:18:54.2011881Z ╰──── 2026-10-24T04:18:54.2012342Z  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-24T04:18:54.2012626Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T04:18:54.2012628Z 2026-10-24T04:18:54.2012817Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T04:18:54.2012968Z ╭─[apps/mobile/src/features/terminal/TerminalContextSheet.tsx:72:15] 2026-10-24T04:18:54.2013033Z 71 │ { 2026-10-24T04:18:54.2015711Z ·  ────┬──── 2026-10-24T04:18:54.2015834Z · ╰── This is the containing effect 2026-10-24T04:18:54.2015903Z 57 │ scheduler.reset(); 2026-10-24T04:18:54.2015999Z 58 │ highlightedRowIdsRef.current = new Set(); 2026-10-24T04:18:54.2016083Z 59 │ visibleChunkIndexRef.current = 0; 2026-10-24T04:18:54.2016197Z 60 │ setVisibleRange({ firstRowIndex: 0, lastRowIndex: 80 }); 2026-10-24T04:18:54.2016276Z ·  ───────┬─────── 2026-10-24T04:18:54.2016437Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T04:18:54.2016707Z 61 │ setTokensPatchJson(createEmptyTokenPatch(resetKey)); 2026-10-24T04:18:54.2016762Z ╰──── 2026-10-24T04:18:54.2017344Z  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-24T04:18:54.2017657Z  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-24T04:18:54.2017660Z 2026-10-24T04:18:54.2017853Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T04:18:54.2018020Z ╭─[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:63:7] 2026-10-24T04:18:54.2018098Z 62 │ return () => scheduler.cancel(); 2026-10-24T04:18:54.2018198Z 63 │ }, [enabled, resetKey, rows.length, scheduler]); 2026-10-24T04:18:54.2018319Z ·  ───┬─── ─────┬───── 2026-10-24T04:18:54.2018504Z · │ ╰── Unnecessary dependency `rows.length` 2026-10-24T04:18:54.2018707Z · ╰── Unnecessary dependency `enabled` 2026-10-24T04:18:54.2018822Z 64 │ 2026-10-24T04:18:54.2018869Z ╰──── 2026-10-24T04:18:54.2019152Z  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-24T04:18:54.2019458Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.2019461Z 2026-10-24T04:18:54.2019706Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T04:18:54.2019863Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:100:85] 2026-10-24T04:18:54.2019960Z  99 │ const startEditor = startScheduledTaskEditor; 2026-10-24T04:18:54.2020142Z 100 │ const resetEditor = useCallback(() => startEditor(defaultEditor), [defaultEditor, startEditor]); 2026-10-24T04:18:54.2020284Z ·  ─────┬───── 2026-10-24T04:18:54.2020479Z · ╰── Unnecessary dependency `startEditor` 2026-10-24T04:18:54.2020555Z 101 │ const readEditor = useCallback( 2026-10-24T04:18:54.2020605Z ╰──── 2026-10-24T04:18:54.2020907Z  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-24T04:18:54.2021214Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.2021219Z 2026-10-24T04:18:54.2021392Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T04:18:54.2021544Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:121:7] 2026-10-24T04:18:54.2021607Z 120 │ setEditor, 2026-10-24T04:18:54.2021669Z 121 │ startEditor, 2026-10-24T04:18:54.2021745Z ·  ─────┬───── 2026-10-24T04:18:54.2021882Z · ╰── Unnecessary dependency `startEditor` 2026-10-24T04:18:54.2021943Z 122 │ hasChanges, 2026-10-24T04:18:54.2021991Z ╰──── 2026-10-24T04:18:54.2022290Z  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-24T04:18:54.2022593Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.2022600Z 2026-10-24T04:18:54.2022747Z ⚠ react(immutability): This value cannot be modified 2026-10-24T04:18:54.2022909Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:93:5] 2026-10-24T04:18:54.2022962Z 90 │ }) { 2026-10-24T04:18:54.2023069Z 91 │ const rotation = useSharedValue(props.hidden ? 1 : 0); 2026-10-24T04:18:54.2023141Z ·  ────┬─── 2026-10-24T04:18:54.2023269Z · ╰── `rotation` originates here 2026-10-24T04:18:54.2023336Z 92 │ useLayoutEffect(() => { 2026-10-24T04:18:54.2023471Z 93 │ rotation.value = withTiming(props.hidden ? 1 : 0, TOOLBAR_FLIP_TIMING); 2026-10-24T04:18:54.2023592Z ·  ────┬─── 2026-10-24T04:18:54.2023776Z · ╰── `rotation` cannot be modified 2026-10-24T04:18:54.2023850Z 94 │ }, [props.hidden, rotation]); 2026-10-24T04:18:54.2023898Z ╰──── 2026-10-24T04:18:54.2024195Z  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-24T04:18:54.2024568Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T04:18:54.2024570Z 2026-10-24T04:18:54.2024722Z ⚠ react(immutability): This value cannot be modified 2026-10-24T04:18:54.2024886Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:269:5] 2026-10-24T04:18:54.2024980Z 266 │ const variant = props.variant ?? "plain"; 2026-10-24T04:18:54.2025112Z 267 │ const loadingVisibility = useSharedValue(props.loading ? 1 : 0); 2026-10-24T04:18:54.2025198Z ·  ────────┬──────── 2026-10-24T04:18:54.2025341Z · ╰── `loadingVisibility` originates here 2026-10-24T04:18:54.2025407Z 268 │ useLayoutEffect(() => { 2026-10-24T04:18:54.2025562Z 269 │ loadingVisibility.value = withTiming(props.loading ? 1 : 0, DICTATION_TIMING); 2026-10-24T04:18:54.2025640Z ·  ────────┬──────── 2026-10-24T04:18:54.2025782Z · ╰── `loadingVisibility` cannot be modified 2026-10-24T04:18:54.2025869Z 270 │ }, [loadingVisibility, props.loading]); 2026-10-24T04:18:54.2025917Z ╰──── 2026-10-24T04:18:54.2026178Z  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-24T04:18:54.2026473Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T04:18:54.2026475Z 2026-10-24T04:18:54.2026623Z ⚠ react(immutability): This value cannot be modified 2026-10-24T04:18:54.2026785Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:328:5] 2026-10-24T04:18:54.2026838Z 325 │ }) { 2026-10-24T04:18:54.2026991Z 326 │ const recordingVisibility = useSharedValue(props.phase === "recording" ? 1 : 0); 2026-10-24T04:18:54.2027077Z ·  ─────────┬───────── 2026-10-24T04:18:54.2027223Z · ╰── `recordingVisibility` originates here 2026-10-24T04:18:54.2027296Z 327 │ useLayoutEffect(() => { 2026-10-24T04:18:54.2027480Z 328 │ recordingVisibility.value = withTiming(props.phase === "recording" ? 1 : 0, DICTATION_TIMING); 2026-10-24T04:18:54.2027563Z ·  ─────────┬───────── 2026-10-24T04:18:54.2027708Z · ╰── `recordingVisibility` cannot be modified 2026-10-24T04:18:54.2027796Z 329 │ }, [props.phase, recordingVisibility]); 2026-10-24T04:18:54.2027846Z ╰──── 2026-10-24T04:18:54.2028099Z  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-24T04:18:54.2028390Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T04:18:54.2028393Z 2026-10-24T04:18:54.2028586Z ⚠ react(refs): Cannot access refs during render 2026-10-24T04:18:54.2028804Z ╭─[apps/mobile/src/features/voice-input/useVoiceInputController.ts:27:14] 2026-10-24T04:18:54.2028885Z 26 │ const latestInput = useRef(input); 2026-10-24T04:18:54.2028958Z 27 │ latestInput.current = input; 2026-10-24T04:18:54.2029067Z ·  ─────┬─────────┬─── 2026-10-24T04:18:54.2029244Z · │ ╰── Cannot update ref value during render 2026-10-24T04:18:54.2029387Z · ╰── This value is a ref 2026-10-24T04:18:54.2029495Z 28 │ const mounted = useRef(true); 2026-10-24T04:18:54.2029544Z ╰──── 2026-10-24T04:18:54.2030002Z  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-24T04:18:54.2030290Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T04:18:54.2030293Z 2026-10-24T04:18:54.2030443Z ⚠ react(immutability): This value cannot be modified 2026-10-24T04:18:54.2030600Z ╭─[apps/mobile/src/features/voice-input/GlobalVoiceInputControl.tsx:68:5] 2026-10-24T04:18:54.2030700Z 65 │ const [expanded, setExpanded] = useState(false); 2026-10-24T04:18:54.2030783Z 66 │ const progress = useSharedValue(0); 2026-10-24T04:18:54.2030855Z ·  ────┬─── 2026-10-24T04:18:54.2030979Z · ╰── `progress` originates here 2026-10-24T04:18:54.2031047Z 67 │ useEffect(() => { 2026-10-24T04:18:54.2031168Z 68 │ progress.value = withTiming(expanded ? 1 : 0, MORPH_TIMING); 2026-10-24T04:18:54.2031236Z ·  ────┬─── 2026-10-24T04:18:54.2031364Z · ╰── `progress` cannot be modified 2026-10-24T04:18:54.2031432Z 69 │ }, [expanded, progress]); 2026-10-24T04:18:54.2031481Z ╰──── 2026-10-24T04:18:54.2031734Z  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-24T04:18:54.2032026Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T04:18:54.2032030Z 2026-10-24T04:18:54.2032173Z ⚠ react(refs): Cannot access refs during render 2026-10-24T04:18:54.2032330Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:122:38] 2026-10-24T04:18:54.2032483Z 121 │ const audioLevelsRef = useRef(Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-24T04:18:54.2032603Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-24T04:18:54.2032718Z ·  ───────────┬────────── 2026-10-24T04:18:54.2032884Z · ╰── Cannot access ref value during render 2026-10-24T04:18:54.2032999Z 123 │ const sessionRef = useRef(null); 2026-10-24T04:18:54.2033050Z ╰──── 2026-10-24T04:18:54.2033549Z  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-24T04:18:54.2033886Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T04:18:54.2033888Z 2026-10-24T04:18:54.2034056Z ⚠ react(refs): Cannot access refs during render 2026-10-24T04:18:54.2034209Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:8] 2026-10-24T04:18:54.2034260Z 125 │ 2026-10-24T04:18:54.2034378Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T04:18:54.2034513Z ·  ─────────┬──────── 2026-10-24T04:18:54.2034668Z · ╰── Cannot access ref value during render 2026-10-24T04:18:54.2034772Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T04:18:54.2034823Z ╰──── 2026-10-24T04:18:54.2035267Z  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-24T04:18:54.2035545Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T04:18:54.2035548Z 2026-10-24T04:18:54.2035685Z ⚠ react(refs): Cannot access refs during render 2026-10-24T04:18:54.2035835Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:7] 2026-10-24T04:18:54.2035886Z 125 │ 2026-10-24T04:18:54.2035989Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T04:18:54.2036077Z ·  ─────────┬───────── 2026-10-24T04:18:54.2036219Z · ╰── Cannot access ref value during render 2026-10-24T04:18:54.2036316Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T04:18:54.2036366Z ╰──── 2026-10-24T04:18:54.2036814Z  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-24T04:18:54.2037093Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T04:18:54.2037095Z 2026-10-24T04:18:54.2037232Z ⚠ react(refs): Cannot access refs during render 2026-10-24T04:18:54.2037437Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:31] 2026-10-24T04:18:54.2037540Z 125 │ 2026-10-24T04:18:54.2037643Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T04:18:54.2037753Z ·  ─────────┬───────── 2026-10-24T04:18:54.2037916Z · ╰── Cannot access ref value during render 2026-10-24T04:18:54.2038013Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T04:18:54.2038062Z ╰──── 2026-10-24T04:18:54.2038590Z  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-24T04:18:54.2038874Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T04:18:54.2038878Z 2026-10-24T04:18:54.2039016Z ⚠ react(refs): Cannot access refs during render 2026-10-24T04:18:54.2039167Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:30] 2026-10-24T04:18:54.2039216Z 125 │ 2026-10-24T04:18:54.2039317Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T04:18:54.2039426Z ·  ──────────┬───────── 2026-10-24T04:18:54.2039586Z · ╰── Cannot access ref value during render 2026-10-24T04:18:54.2039682Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T04:18:54.2039730Z ╰──── 2026-10-24T04:18:54.2040185Z  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-24T04:18:54.2040466Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T04:18:54.2040468Z 2026-10-24T04:18:54.2040606Z ⚠ react(refs): Cannot access refs during render 2026-10-24T04:18:54.2040759Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:127:46] 2026-10-24T04:18:54.2040864Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T04:18:54.2041055Z 127 │ ╭─▶ const recorder = createLazyVoiceRecorder({ 2026-10-24T04:18:54.2041226Z 128 │ │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-24T04:18:54.2041386Z 129 │ │ onStatus: (status: RecordingStatus) => { 2026-10-24T04:18:54.2041603Z 130 │ │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-24T04:18:54.2041776Z 131 │ │ isFinished: status.isFinished, 2026-10-24T04:18:54.2042045Z 132 │ │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-24T04:18:54.2042188Z 133 │ │ error: status.error, 2026-10-24T04:18:54.2042281Z 134 │ │ url: status.url, 2026-10-24T04:18:54.2042360Z 135 │ │ }); 2026-10-24T04:18:54.2042435Z 136 │ │ }, 2026-10-24T04:18:54.2042683Z 137 │ │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-24T04:18:54.2042885Z 138 │ │ selectInput: (inputs) => { 2026-10-24T04:18:54.2043034Z 139 │ │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-24T04:18:54.2043175Z 140 │ │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-24T04:18:54.2043333Z 141 │ │ const known = microphoneOrder(preferences.value.microphones); 2026-10-24T04:18:54.2043502Z 142 │ │ const order = rememberMicrophones(known, inputs); 2026-10-24T04:18:54.2043659Z 143 │ │ if (order !== known) { 2026-10-24T04:18:54.2043804Z 144 │ │ registry.set(updateMobilePreferencesAtom, { 2026-10-24T04:18:54.2043921Z 145 │ │ transform: (current) => ({ 2026-10-24T04:18:54.2044151Z 146 │ │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-24T04:18:54.2044235Z 147 │ │ }), 2026-10-24T04:18:54.2044313Z 148 │ │ }); 2026-10-24T04:18:54.2044389Z 149 │ │ } 2026-10-24T04:18:54.2044524Z 150 │ │ return preferredMicrophoneInput(inputs, order); 2026-10-24T04:18:54.2044596Z 151 │ │ }, 2026-10-24T04:18:54.2044723Z 152 │ ├─▶ }); 2026-10-24T04:18:54.2044960Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T04:18:54.2045045Z 153 │ recorderRef.current = recorder; 2026-10-24T04:18:54.2045094Z ╰──── 2026-10-24T04:18:54.2045544Z  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-24T04:18:54.2045823Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T04:18:54.2045826Z 2026-10-24T04:18:54.2045964Z ⚠ react(refs): Cannot access refs during render 2026-10-24T04:18:54.2046116Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:153:16] 2026-10-24T04:18:54.2046170Z 152 │ }); 2026-10-24T04:18:54.2046252Z 153 │ recorderRef.current = recorder; 2026-10-24T04:18:54.2046363Z ·  ─────┬─────────┬─── 2026-10-24T04:18:54.2046540Z · │ ╰── Cannot update ref value during render 2026-10-24T04:18:54.2046650Z · ╰── This value is a ref 2026-10-24T04:18:54.2046755Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T04:18:54.2046804Z ╰──── 2026-10-24T04:18:54.2047250Z  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-24T04:18:54.2047577Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T04:18:54.2047639Z 2026-10-24T04:18:54.2047790Z ⚠ react(refs): Cannot access refs during render 2026-10-24T04:18:54.2047943Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:48] 2026-10-24T04:18:54.2048025Z 153 │ recorderRef.current = recorder; 2026-10-24T04:18:54.2048211Z 154 │ ╭─▶ sessionRef.current = new VoiceInputSession({ 2026-10-24T04:18:54.2048292Z 155 │ │ recorder, 2026-10-24T04:18:54.2048485Z 156 │ │ getTranscriber: getLocalVoiceTranscriber, 2026-10-24T04:18:54.2048598Z 157 │ │ requestPermission: async () => { 2026-10-24T04:18:54.2048762Z 158 │ │ const permission = await requestRecordingPermissionsAsync(); 2026-10-24T04:18:54.2048947Z 159 │ │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-24T04:18:54.2049022Z 160 │ │ }, 2026-10-24T04:18:54.2049158Z 161 │ │ configureRecording: configureVoiceRecordingAudio, 2026-10-24T04:18:54.2049289Z 162 │ │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-24T04:18:54.2049417Z 163 │ │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-24T04:18:54.2049526Z 164 │ │ onStateChange: (nextState) => 2026-10-24T04:18:54.2049613Z 165 │ │ setState({ 2026-10-24T04:18:54.2049711Z 166 │ │ state: nextState, 2026-10-24T04:18:54.2049846Z 167 │ │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-24T04:18:54.2049973Z 168 │ │ label: sessionRef.current?.label ?? null, 2026-10-24T04:18:54.2050050Z 169 │ │ }), 2026-10-24T04:18:54.2050174Z 170 │ ├─▶ }); 2026-10-24T04:18:54.2050362Z · ╰──── Cannot access ref value during render 2026-10-24T04:18:54.2050417Z 171 │ } 2026-10-24T04:18:54.2050468Z ╰──── 2026-10-24T04:18:54.2050915Z  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-24T04:18:54.2051198Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T04:18:54.2051204Z 2026-10-24T04:18:54.2051341Z ⚠ react(refs): Cannot access refs during render 2026-10-24T04:18:54.2051495Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:15] 2026-10-24T04:18:54.2051575Z 153 │ recorderRef.current = recorder; 2026-10-24T04:18:54.2051675Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T04:18:54.2051780Z ·  ─────┬────────┬─── 2026-10-24T04:18:54.2051955Z · │ ╰── Cannot update ref value during render 2026-10-24T04:18:54.2052065Z · ╰── This value is a ref 2026-10-24T04:18:54.2052128Z 155 │ recorder, 2026-10-24T04:18:54.2052230Z ╰──── 2026-10-24T04:18:54.2052740Z  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-24T04:18:54.2053023Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T04:18:54.2053025Z 2026-10-24T04:18:54.2053231Z ⚠ react(refs): Cannot access refs during render 2026-10-24T04:18:54.2053383Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:7] 2026-10-24T04:18:54.2053465Z 184 │ return () => subscription.remove(); 2026-10-24T04:18:54.2053528Z 185 │ }, [controller]); 2026-10-24T04:18:54.2053606Z ·  ─────┬──── 2026-10-24T04:18:54.2053746Z · ╰── Cannot access ref value during render 2026-10-24T04:18:54.2053796Z 186 │ 2026-10-24T04:18:54.2053846Z ╰──── 2026-10-24T04:18:54.2054335Z  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-24T04:18:54.2054614Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T04:18:54.2054617Z 2026-10-24T04:18:54.2054752Z ⚠ react(refs): Cannot access refs during render 2026-10-24T04:18:54.2054907Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:6] 2026-10-24T04:18:54.2054992Z 184 │ return () => subscription.remove(); 2026-10-24T04:18:54.2055056Z 185 │ }, [controller]); 2026-10-24T04:18:54.2055129Z ·  ──────┬───── 2026-10-24T04:18:54.2055266Z · ╰── Cannot access ref value during render 2026-10-24T04:18:54.2055317Z 186 │ 2026-10-24T04:18:54.2055364Z ╰──── 2026-10-24T04:18:54.2055809Z  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-24T04:18:54.2056085Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T04:18:54.2056087Z 2026-10-24T04:18:54.2056228Z ⚠ react(refs): Cannot access refs during render 2026-10-24T04:18:54.2056382Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:6] 2026-10-24T04:18:54.2056437Z 191 │ }, 2026-10-24T04:18:54.2056580Z 192 │ [controller, recorder], 2026-10-24T04:18:54.2056682Z ·  ─────┬──── 2026-10-24T04:18:54.2056820Z · ╰── Cannot access ref value during render 2026-10-24T04:18:54.2056875Z 193 │ ); 2026-10-24T04:18:54.2056922Z ╰──── 2026-10-24T04:18:54.2057367Z  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-24T04:18:54.2057711Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T04:18:54.2057760Z 2026-10-24T04:18:54.2057950Z ⚠ react(refs): Cannot access refs during render 2026-10-24T04:18:54.2058101Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:175:20] 2026-10-24T04:18:54.2058188Z 174 │ const controller = session.controller; 2026-10-24T04:18:54.2058272Z 175 │ const recorder = recorderRef.current; 2026-10-24T04:18:54.2058373Z ·  ─────────┬───────── 2026-10-24T04:18:54.2058532Z · ╰── Cannot access ref value during render 2026-10-24T04:18:54.2058613Z 176 │ 2026-10-24T04:18:54.2058693Z ╰──── 2026-10-24T04:18:54.2059191Z  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-24T04:18:54.2059473Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T04:18:54.2059475Z 2026-10-24T04:18:54.2059611Z ⚠ react(refs): Cannot access refs during render 2026-10-24T04:18:54.2059761Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:5] 2026-10-24T04:18:54.2059813Z 191 │ }, 2026-10-24T04:18:54.2059881Z 192 │ [controller, recorder], 2026-10-24T04:18:54.2059967Z ·  ───────────┬────────── 2026-10-24T04:18:54.2060114Z · ╰── Cannot access ref value during render 2026-10-24T04:18:54.2060173Z 193 │ ); 2026-10-24T04:18:54.2060221Z ╰──── 2026-10-24T04:18:54.2060665Z  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-24T04:18:54.2060942Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T04:18:54.2060944Z 2026-10-24T04:18:54.2061080Z ⚠ react(refs): Cannot access refs during render 2026-10-24T04:18:54.2061232Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:20] 2026-10-24T04:18:54.2061322Z 245 │ return () => clearInterval(intervalId); 2026-10-24T04:18:54.2061430Z 246 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-24T04:18:54.2061516Z ·  ─────┬──── 2026-10-24T04:18:54.2061665Z · ╰── Cannot access ref value during render 2026-10-24T04:18:54.2061716Z 247 │ 2026-10-24T04:18:54.2061766Z ╰──── 2026-10-24T04:18:54.2062211Z  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-24T04:18:54.2062490Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T04:18:54.2062493Z 2026-10-24T04:18:54.2062677Z ⚠ react(refs): Cannot access refs during render 2026-10-24T04:18:54.2062945Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:6] 2026-10-24T04:18:54.2063030Z 245 │ return () => clearInterval(intervalId); 2026-10-24T04:18:54.2063136Z 246 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-24T04:18:54.2063262Z ·  ────────────────────────┬─────────────────────── 2026-10-24T04:18:54.2063418Z · ╰── Cannot access ref value during render 2026-10-24T04:18:54.2063468Z 247 │ 2026-10-24T04:18:54.2063535Z ╰──── 2026-10-24T04:18:54.2064068Z  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-24T04:18:54.2064374Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T04:18:54.2064377Z 2026-10-24T04:18:54.2064514Z ⚠ react(refs): Cannot access refs during render 2026-10-24T04:18:54.2064663Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:261:5] 2026-10-24T04:18:54.2064729Z 260 │ setOwnerFocused, 2026-10-24T04:18:54.2064788Z 261 │ session, 2026-10-24T04:18:54.2064857Z ·  ───┬─── 2026-10-24T04:18:54.2064990Z · ╰── Cannot access ref value during render 2026-10-24T04:18:54.2065047Z 262 │ stop, 2026-10-24T04:18:54.2065096Z ╰──── 2026-10-24T04:18:54.2065548Z  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-24T04:18:54.2065826Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T04:18:54.2065828Z 2026-10-24T04:18:54.2065965Z ⚠ react(refs): Cannot access refs during render 2026-10-24T04:18:54.2066116Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:251:10] 2026-10-24T04:18:54.2066169Z 250 │ 2026-10-24T04:18:54.2066304Z 251 │ ╭─▶ return { 2026-10-24T04:18:54.2066552Z 252 │ │ isAvailable: getLocalVoiceTranscriber() !== null || getNativeShowcaseScene() !== null, 2026-10-24T04:18:54.2066687Z 253 │ │ state, 2026-10-24T04:18:54.2066772Z 254 │ │ audioLevels, 2026-10-24T04:18:54.2066860Z 255 │ │ elapsedSeconds, 2026-10-24T04:18:54.2066985Z 256 │ │ isBusy: voiceInputBlocksSubmission(state), 2026-10-24T04:18:54.2067066Z 257 │ │ ownerKey, 2026-10-24T04:18:54.2067142Z 258 │ │ label, 2026-10-24T04:18:54.2067227Z 259 │ │ focusedOwners, 2026-10-24T04:18:54.2067323Z 260 │ │ setOwnerFocused, 2026-10-24T04:18:54.2067418Z 261 │ │ session, 2026-10-24T04:18:54.2067537Z 262 │ │ stop, 2026-10-24T04:18:54.2067616Z 263 │ │ cancel, 2026-10-24T04:18:54.2067746Z 264 │ ├─▶ }; 2026-10-24T04:18:54.2067943Z · ╰──── Cannot access ref value during render 2026-10-24T04:18:54.2067995Z 265 │ } 2026-10-24T04:18:54.2068044Z ╰──── 2026-10-24T04:18:54.2068490Z  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-24T04:18:54.2068768Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T04:18:54.2068771Z 2026-10-24T04:18:54.2068926Z ⚠ react(immutability): This value cannot be modified 2026-10-24T04:18:54.2069079Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7] 2026-10-24T04:18:54.2069231Z 121 │ const audioLevelsRef = useRef(Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-24T04:18:54.2069349Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-24T04:18:54.2069428Z ·  ─────┬───── 2026-10-24T04:18:54.2069558Z · ╰── `audioLevels` originates here 2026-10-24T04:18:54.2069670Z 123 │ const sessionRef = useRef(null); 2026-10-24T04:18:54.2069809Z 124 │ const recorderRef = useRef | null>(null); 2026-10-24T04:18:54.2069859Z 125 │ 2026-10-24T04:18:54.2069962Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T04:18:54.2070063Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T04:18:54.2070200Z 128 │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-24T04:18:54.2070291Z 129 │ onStatus: (status: RecordingStatus) => { 2026-10-24T04:18:54.2070406Z 130 │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-24T04:18:54.2070487Z 131 │ isFinished: status.isFinished, 2026-10-24T04:18:54.2070625Z 132 │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-24T04:18:54.2070697Z 133 │ error: status.error, 2026-10-24T04:18:54.2070762Z 134 │ url: status.url, 2026-10-24T04:18:54.2070818Z 135 │ }); 2026-10-24T04:18:54.2070875Z 136 │ }, 2026-10-24T04:18:54.2071034Z 137 │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-24T04:18:54.2071108Z 138 │ selectInput: (inputs) => { 2026-10-24T04:18:54.2071274Z 139 │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-24T04:18:54.2071443Z 140 │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-24T04:18:54.2071570Z 141 │ const known = microphoneOrder(preferences.value.microphones); 2026-10-24T04:18:54.2071675Z 142 │ const order = rememberMicrophones(known, inputs); 2026-10-24T04:18:54.2071743Z 143 │ if (order !== known) { 2026-10-24T04:18:54.2071846Z 144 │ registry.set(updateMobilePreferencesAtom, { 2026-10-24T04:18:54.2071927Z 145 │ transform: (current) => ({ 2026-10-24T04:18:54.2072161Z 146 │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-24T04:18:54.2072224Z 147 │ }), 2026-10-24T04:18:54.2072284Z 148 │ }); 2026-10-24T04:18:54.2072340Z 149 │ } 2026-10-24T04:18:54.2072450Z 150 │ return preferredMicrophoneInput(inputs, order); 2026-10-24T04:18:54.2072506Z 151 │ }, 2026-10-24T04:18:54.2072559Z 152 │ }); 2026-10-24T04:18:54.2072638Z 153 │ recorderRef.current = recorder; 2026-10-24T04:18:54.2072735Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T04:18:54.2072793Z 155 │ recorder, 2026-10-24T04:18:54.2072889Z 156 │ getTranscriber: getLocalVoiceTranscriber, 2026-10-24T04:18:54.2072972Z 157 │ requestPermission: async () => { 2026-10-24T04:18:54.2073097Z 158 │ const permission = await requestRecordingPermissionsAsync(); 2026-10-24T04:18:54.2073248Z 159 │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-24T04:18:54.2073303Z 160 │ }, 2026-10-24T04:18:54.2073409Z 161 │ configureRecording: configureVoiceRecordingAudio, 2026-10-24T04:18:54.2073514Z 162 │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-24T04:18:54.2073615Z 163 │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-24T04:18:54.2073692Z 164 │ onStateChange: (nextState) => 2026-10-24T04:18:54.2073755Z 165 │ setState({ 2026-10-24T04:18:54.2073821Z 166 │ state: nextState, 2026-10-24T04:18:54.2073924Z 167 │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-24T04:18:54.2074051Z 168 │ label: sessionRef.current?.label ?? null, 2026-10-24T04:18:54.2074109Z 169 │ }), 2026-10-24T04:18:54.2074161Z 170 │ }); 2026-10-24T04:18:54.2074212Z 171 │ } 2026-10-24T04:18:54.2074263Z 172 │ 2026-10-24T04:18:54.2074346Z 173 │ const session = sessionRef.current; 2026-10-24T04:18:54.2074430Z 174 │ const controller = session.controller; 2026-10-24T04:18:54.2074514Z 175 │ const recorder = recorderRef.current; 2026-10-24T04:18:54.2074570Z 176 │ 2026-10-24T04:18:54.2074635Z 177 │ useEffect(() => { 2026-10-24T04:18:54.2074779Z 178 │ const subscription = AppState.addEventListener("change", (nextState) => { 2026-10-24T04:18:54.2074917Z 179 │ // iOS reports `inactive` while its permission dialog is open. Only the 2026-10-24T04:18:54.2075050Z 180 │ // real background state cancels preparation; recorder status handles 2026-10-24T04:18:54.2075150Z 181 │ // calls and route interruptions during capture. 2026-10-24T04:18:54.2075279Z 182 │ if (nextState === "background") controller.appMovedToBackground(); 2026-10-24T04:18:54.2075332Z 183 │ }); 2026-10-24T04:18:54.2075415Z 184 │ return () => subscription.remove(); 2026-10-24T04:18:54.2075477Z 185 │ }, [controller]); 2026-10-24T04:18:54.2075527Z 186 │ 2026-10-24T04:18:54.2075585Z 187 │ useEffect( 2026-10-24T04:18:54.2075696Z 188 │ () => () => { 2026-10-24T04:18:54.2075825Z 189 │ controller.dispose(); 2026-10-24T04:18:54.2075893Z 190 │ recorder.release(); 2026-10-24T04:18:54.2075946Z 191 │ }, 2026-10-24T04:18:54.2076015Z 192 │ [controller, recorder], 2026-10-24T04:18:54.2076065Z 193 │ ); 2026-10-24T04:18:54.2076116Z 194 │ 2026-10-24T04:18:54.2076178Z 195 │ useEffect(() => { 2026-10-24T04:18:54.2076267Z 196 │ if (state.phase !== "recording") return; 2026-10-24T04:18:54.2076315Z 197 │ 2026-10-24T04:18:54.2076462Z 198 │ const tag = `voice-input:${keepAwakeId}:${++keepAwakeSessionRef.current}`; 2026-10-24T04:18:54.2076587Z 199 │ const activation = activateKeepAwakeAsync(tag); 2026-10-24T04:18:54.2076710Z 200 │ void activation.catch(() => {}); 2026-10-24T04:18:54.2076771Z 201 │ return () => { 2026-10-24T04:18:54.2076922Z 202 │ // Release after activation settles, even if the recording ends immediately. 2026-10-24T04:18:54.2077059Z 203 │ void activation.then(() => deactivateKeepAwake(tag)).catch(() => {}); 2026-10-24T04:18:54.2077112Z 204 │ }; 2026-10-24T04:18:54.2077188Z 205 │ }, [keepAwakeId, state.phase]); 2026-10-24T04:18:54.2077237Z 206 │ 2026-10-24T04:18:54.2077297Z 207 │ useEffect(() => { 2026-10-24T04:18:54.2077425Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-24T04:18:54.2077474Z 209 │ 2026-10-24T04:18:54.2077589Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-24T04:18:54.2077737Z 211 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-24T04:18:54.2077837Z 212 │ audioLevels.value = audioLevelsRef.current; 2026-10-24T04:18:54.2077910Z ·  ─────┬───── 2026-10-24T04:18:54.2078067Z · ╰── `audioLevels` cannot be modified 2026-10-24T04:18:54.2078123Z 213 │ } 2026-10-24T04:18:54.2078170Z ╰──── 2026-10-24T04:18:54.2078428Z  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-24T04:18:54.2078726Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T04:18:54.2078728Z 2026-10-24T04:18:54.2078921Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T04:18:54.2079074Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7] 2026-10-24T04:18:54.2079123Z 206 │ 2026-10-24T04:18:54.2079184Z 207 │ useEffect(() => { 2026-10-24T04:18:54.2079262Z ·  ───┬─── 2026-10-24T04:18:54.2079476Z · ╰── This function may (indirectly) reassign or modify `audioLevels` after render 2026-10-24T04:18:54.2079605Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-24T04:18:54.2079655Z 209 │ 2026-10-24T04:18:54.2079770Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-24T04:18:54.2079919Z 211 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-24T04:18:54.2080016Z 212 │ audioLevels.value = audioLevelsRef.current; 2026-10-24T04:18:54.2080091Z ·  ─────┬───── 2026-10-24T04:18:54.2080220Z · ╰── This modifies `audioLevels` 2026-10-24T04:18:54.2080275Z 213 │ } 2026-10-24T04:18:54.2080325Z ╰──── 2026-10-24T04:18:54.2080709Z  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-24T04:18:54.2081069Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T04:18:54.2081072Z 2026-10-24T04:18:54.2081538Z ⚠ 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-24T04:18:54.2081754Z ╭─[packages/client-runtime/src/connection/supervisor.test.ts:135:3] 2026-10-24T04:18:54.2081863Z 134 │ let lastState = yield* SubscriptionRef.get(state); 2026-10-24T04:18:54.2082071Z 135 │ ╭─▶ for (let iteration = 0; iteration < 100; iteration += 1) { 2026-10-24T04:18:54.2082204Z 136 │ │ lastState = yield* SubscriptionRef.get(state); 2026-10-24T04:18:54.2082309Z 137 │ │ if (predicate(lastState)) { 2026-10-24T04:18:54.2082399Z 138 │ │ return lastState; 2026-10-24T04:18:54.2082471Z 139 │ │ } 2026-10-24T04:18:54.2082571Z 140 │ │ yield* Effect.yieldNow; 2026-10-24T04:18:54.2082691Z 141 │ ╰─▶ } 2026-10-24T04:18:54.2082762Z 142 │ return yield* Effect.die( 2026-10-24T04:18:54.2082812Z ╰──── 2026-10-24T04:18:54.2082814Z 2026-10-24T04:18:54.2083021Z ⚠ eslint(no-unused-vars): Function 'nonEmptyString' is declared but never used. 2026-10-24T04:18:54.2083165Z ╭─[packages/client-runtime/src/work-log/presentation.ts:234:10] 2026-10-24T04:18:54.2083215Z 233 │ 2026-10-24T04:18:54.2083326Z 234 │ function nonEmptyString(value: unknown): string | null { 2026-10-24T04:18:54.2083409Z ·  ───────┬────── 2026-10-24T04:18:54.2083549Z · ╰── 'nonEmptyString' is declared here 2026-10-24T04:18:54.2083686Z 235 │ return typeof value === "string" && value.trim().length > 0 ? value : null; 2026-10-24T04:18:54.2083735Z ╰──── 2026-10-24T04:18:54.2083836Z  help: Consider removing this declaration. 2026-10-24T04:18:54.2083839Z 2026-10-24T04:18:54.2084115Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T04:18:54.2084270Z ╭─[apps/mobile/src/features/files/FileTreeBrowser.tsx:155:5] 2026-10-24T04:18:54.2084322Z 150 │ 2026-10-24T04:18:54.2084385Z 151 │ useEffect(() => { 2026-10-24T04:18:54.2084454Z ·  ────┬──── 2026-10-24T04:18:54.2084575Z · ╰── This is the containing effect 2026-10-24T04:18:54.2084658Z 152 │ if (!controlledSelectedPath) { 2026-10-24T04:18:54.2084717Z 153 │ return; 2026-10-24T04:18:54.2084771Z 154 │ } 2026-10-24T04:18:54.2084851Z 155 │ setExpandedPaths((current) => { 2026-10-24T04:18:54.2084928Z ·  ────────┬─────── 2026-10-24T04:18:54.2085091Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T04:18:54.2085210Z 156 │ const ancestors = ancestorPaths(controlledSelectedPath); 2026-10-24T04:18:54.2085310Z ╰──── 2026-10-24T04:18:54.2085951Z  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-24T04:18:54.2086338Z  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-24T04:18:54.2086340Z 2026-10-24T04:18:54.2086522Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T04:18:54.2086689Z ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:555:70] 2026-10-24T04:18:54.2086766Z 554 │ assert.deepStrictEqual( 2026-10-24T04:18:54.2086932Z 555 │ (yield* Ref.get(fixture.syncCommands)).map(({ commandId: _, ...rest }) => rest), 2026-10-24T04:18:54.2087052Z ·  ┬ 2026-10-24T04:18:54.2087208Z · ╰── '_' is declared here 2026-10-24T04:18:54.2087266Z 556 │ [ 2026-10-24T04:18:54.2087315Z ╰──── 2026-10-24T04:18:54.2087415Z  help: Consider removing this parameter. 2026-10-24T04:18:54.2087417Z 2026-10-24T04:18:54.2087596Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T04:18:54.2087764Z ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:1155:70] 2026-10-24T04:18:54.2087843Z 1154 │ assert.deepStrictEqual( 2026-10-24T04:18:54.2088007Z 1155 │ (yield* Ref.get(fixture.linkCommands)).map(({ commandId: _, ...rest }) => rest), 2026-10-24T04:18:54.2088128Z ·  ┬ 2026-10-24T04:18:54.2088283Z · ╰── '_' is declared here 2026-10-24T04:18:54.2088343Z 1156 │ [ 2026-10-24T04:18:54.2088394Z ╰──── 2026-10-24T04:18:54.2088493Z  help: Consider removing this parameter. 2026-10-24T04:18:54.2088496Z 2026-10-24T04:18:54.2088768Z ⚠ eslint(no-unused-vars): Variable 'layerUnavailable' is declared but never used. Unused variables should start with a '_'. 2026-10-24T04:18:54.2088907Z ╭─[apps/server/src/orchestration-v2/Orchestrator.ts:12366:7] 2026-10-24T04:18:54.2088962Z 12365 │ 2026-10-24T04:18:54.2089105Z 12366 │ const layerUnavailable: Layer.Layer = Layer.succeed( 2026-10-24T04:18:54.2089190Z ·  ────────┬─────── 2026-10-24T04:18:54.2089330Z · ╰── 'layerUnavailable' is declared here 2026-10-24T04:18:54.2089396Z 12367 │ OrchestratorV2, 2026-10-24T04:18:54.2089447Z ╰──── 2026-10-24T04:18:54.2089550Z  help: Consider removing this declaration. 2026-10-24T04:18:54.2089552Z 2026-10-24T04:18:54.2089745Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T04:18:54.2089885Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:257:7] 2026-10-24T04:18:54.2089979Z 256 │ return () => cancelAnimationFrame(frame); 2026-10-24T04:18:54.2090057Z 257 │ }, [props.path, targetIndex]); 2026-10-24T04:18:54.2090186Z ·  ─────┬──── 2026-10-24T04:18:54.2090381Z · ╰── Unnecessary dependency `props.path` 2026-10-24T04:18:54.2090432Z 258 │ 2026-10-24T04:18:54.2090482Z ╰──── 2026-10-24T04:18:54.2090765Z  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-24T04:18:54.2091120Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.2091123Z 2026-10-24T04:18:54.2091329Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T04:18:54.2091473Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:293:23] 2026-10-24T04:18:54.2091547Z 292 │ 2026-10-24T04:18:54.2092591Z ·  ─────────── 2026-10-24T04:18:54.2092656Z 310 │ {body} 2026-10-24T04:18:54.2092705Z ╰──── 2026-10-24T04:18:54.2092843Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T04:18:54.2092846Z 2026-10-24T04:18:54.2093019Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T04:18:54.2093196Z ╭─[apps/mobile/src/features/keyboard/HardwareKeyboardCommandProvider.tsx:116:34] 2026-10-24T04:18:54.2093263Z 115 │ return [...commands]; 2026-10-24T04:18:54.2093389Z 116 │ }, [activeThreadRef, pathname, registrationVersion, navigation]); 2026-10-24T04:18:54.2093497Z ·  ─────────┬───────── 2026-10-24T04:18:54.2093728Z · ╰── Unnecessary dependency `registrationVersion` 2026-10-24T04:18:54.2093831Z 117 │ 2026-10-24T04:18:54.2093879Z ╰──── 2026-10-24T04:18:54.2094223Z  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-24T04:18:54.2094534Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.2094537Z 2026-10-24T04:18:54.2095057Z ⚠ 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-24T04:18:54.2095185Z ╭─[packages/client-runtime/src/rpc/client.test.ts:131:9] 2026-10-24T04:18:54.2095247Z 130 │ ) { 2026-10-24T04:18:54.2095453Z 131 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T04:18:54.2095573Z 132 │ │ if (subscriptions.length >= count) { 2026-10-24T04:18:54.2095660Z 133 │ │ return; 2026-10-24T04:18:54.2095737Z 134 │ │ } 2026-10-24T04:18:54.2095841Z 135 │ │ yield* Effect.yieldNow; 2026-10-24T04:18:54.2095969Z 136 │ ╰─▶ } 2026-10-24T04:18:54.2096129Z 137 │ return yield* Effect.die(new Error(`Expected ${count} durable subscriptions.`)); 2026-10-24T04:18:54.2096178Z ╰──── 2026-10-24T04:18:54.2096180Z 2026-10-24T04:18:54.2096778Z ⚠ 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-24T04:18:54.2096909Z ╭─[packages/client-runtime/src/rpc/client.test.ts:252:7] 2026-10-24T04:18:54.2097068Z 251 │ yield* SubscriptionRef.set(activeSession, Option.some(session(firstClient))); 2026-10-24T04:18:54.2097311Z 252 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 1; attempt += 1) { 2026-10-24T04:18:54.2097411Z 253 │ │ yield* Effect.yieldNow; 2026-10-24T04:18:54.2097538Z 254 │ ╰─▶ } 2026-10-24T04:18:54.2097656Z 255 │ yield* SubscriptionRef.set(activeSession, Option.none()); 2026-10-24T04:18:54.2097711Z ╰──── 2026-10-24T04:18:54.2097716Z 2026-10-24T04:18:54.2098156Z ⚠ 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-24T04:18:54.2098284Z ╭─[packages/client-runtime/src/rpc/client.test.ts:258:7] 2026-10-24T04:18:54.2098337Z 257 │ 2026-10-24T04:18:54.2098576Z 258 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-24T04:18:54.2098678Z 259 │ │ yield* Effect.yieldNow; 2026-10-24T04:18:54.2098802Z 260 │ ╰─▶ } 2026-10-24T04:18:54.2098967Z 261 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-24T04:18:54.2099076Z ╰──── 2026-10-24T04:18:54.2099079Z 2026-10-24T04:18:54.2099518Z ⚠ 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-24T04:18:54.2099641Z ╭─[packages/client-runtime/src/rpc/client.test.ts:322:7] 2026-10-24T04:18:54.2099702Z 321 │ ); 2026-10-24T04:18:54.2100019Z 322 │ ╭─▶ for (let attempt = 0; attempt < 100 && observedFailures.length < 1; attempt += 1) { 2026-10-24T04:18:54.2100123Z 323 │ │ yield* Effect.yieldNow; 2026-10-24T04:18:54.2100246Z 324 │ ╰─▶ } 2026-10-24T04:18:54.2100308Z 325 │ 2026-10-24T04:18:54.2100359Z ╰──── 2026-10-24T04:18:54.2100362Z 2026-10-24T04:18:54.2100804Z ⚠ 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-24T04:18:54.2100928Z ╭─[packages/client-runtime/src/rpc/client.test.ts:330:7] 2026-10-24T04:18:54.2101084Z 329 │ yield* SubscriptionRef.set(activeSession, Option.some(session(secondClient))); 2026-10-24T04:18:54.2101325Z 330 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-24T04:18:54.2101424Z 331 │ │ yield* Effect.yieldNow; 2026-10-24T04:18:54.2101553Z 332 │ ╰─▶ } 2026-10-24T04:18:54.2101654Z 333 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-24T04:18:54.2101705Z ╰──── 2026-10-24T04:18:54.2101708Z 2026-10-24T04:18:54.2101976Z ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'. 2026-10-24T04:18:54.2102100Z ╭─[packages/provider-cursor/src/server/auth.ts:249:20] 2026-10-24T04:18:54.2102152Z 248 │ }, 2026-10-24T04:18:54.2102232Z 249 │ (effect, flow, stopSessions) => 2026-10-24T04:18:54.2102324Z ·  ──────┬───── 2026-10-24T04:18:54.2102468Z · ╰── 'stopSessions' is declared here 2026-10-24T04:18:54.2102530Z 250 │ effect.pipe( 2026-10-24T04:18:54.2102580Z ╰──── 2026-10-24T04:18:54.2102685Z  help: Consider removing this parameter. 2026-10-24T04:18:54.2102690Z 2026-10-24T04:18:54.2103128Z ⚠ 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-24T04:18:54.2103257Z ╭─[packages/client-runtime/src/rpc/session.test.ts:226:3] 2026-10-24T04:18:54.2103310Z 225 │ ) { 2026-10-24T04:18:54.2103504Z 226 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T04:18:54.2103612Z 227 │ │ const socket = sockets[index]; 2026-10-24T04:18:54.2103697Z 228 │ │ if (socket) { 2026-10-24T04:18:54.2103835Z 229 │ │ return socket; 2026-10-24T04:18:54.2103963Z 230 │ │ } 2026-10-24T04:18:54.2104076Z 231 │ │ yield* Effect.yieldNow; 2026-10-24T04:18:54.2104220Z 232 │ ╰─▶ } 2026-10-24T04:18:54.2104387Z 233 │ return yield* Effect.die(new Error("Expected the RPC protocol to create a websocket.")); 2026-10-24T04:18:54.2104437Z ╰──── 2026-10-24T04:18:54.2104439Z 2026-10-24T04:18:54.2104952Z ⚠ 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-24T04:18:54.2105083Z ╭─[packages/client-runtime/src/rpc/session.test.ts:240:3] 2026-10-24T04:18:54.2105135Z 239 │ ) { 2026-10-24T04:18:54.2105331Z 240 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T04:18:54.2105539Z 241 │ │ const request = socket.sent.map((message) => decodeJson(message)).filter(isRpcRequest)[index]; 2026-10-24T04:18:54.2105626Z 242 │ │ if (request) { 2026-10-24T04:18:54.2105718Z 243 │ │ return request; 2026-10-24T04:18:54.2105788Z 244 │ │ } 2026-10-24T04:18:54.2105888Z 245 │ │ yield* Effect.yieldNow; 2026-10-24T04:18:54.2106007Z 246 │ ╰─▶ } 2026-10-24T04:18:54.2106168Z 247 │ return yield* Effect.die(new Error("Expected the RPC protocol to send a request.")); 2026-10-24T04:18:54.2106215Z ╰──── 2026-10-24T04:18:54.2106218Z 2026-10-24T04:18:54.2106497Z ⚠ eslint(no-unused-vars): Variable 'legacyCredentials' is declared but never used. Unused variables should start with a '_'. 2026-10-24T04:18:54.2106655Z ╭─[packages/provider-cursor/src/server/credentialStore.test.ts:15:7] 2026-10-24T04:18:54.2106709Z 14 │ 2026-10-24T04:18:54.2106778Z 15 │ const legacyCredentials = { 2026-10-24T04:18:54.2106860Z ·  ────────┬──────── 2026-10-24T04:18:54.2107004Z · ╰── 'legacyCredentials' is declared here 2026-10-24T04:18:54.2107071Z 16 │ version: 1 as const, 2026-10-24T04:18:54.2107118Z ╰──── 2026-10-24T04:18:54.2107218Z  help: Consider removing this declaration. 2026-10-24T04:18:54.2107220Z 2026-10-24T04:18:54.2107401Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-24T04:18:54.2107526Z ╭─[packages/client-runtime/src/state/shell.ts:189:5] 2026-10-24T04:18:54.2107632Z 186 │ let waiting = yield* Ref.get(awaitingCompletion); 2026-10-24T04:18:54.2107698Z 187 │ let next = initial; 2026-10-24T04:18:54.2107766Z ·  ──┬─ 2026-10-24T04:18:54.2107882Z · ╰── From this accumulator 2026-10-24T04:18:54.2107958Z 188 │ let receivedSnapshot = false; 2026-10-24T04:18:54.2108031Z 189 │ for (const item of items) { 2026-10-24T04:18:54.2108097Z ·  ─┬─ 2026-10-24T04:18:54.2108199Z · ╰── For this loop 2026-10-24T04:18:54.2108283Z 190 │ if (item.kind === "synchronized") { 2026-10-24T04:18:54.2108348Z 191 │ waiting = false; 2026-10-24T04:18:54.2108437Z 192 │ if (Option.isSome(next.snapshot)) { 2026-10-24T04:18:54.2108606Z 193 │ next = { ...next, status: "live", error: Option.none() }; 2026-10-24T04:18:54.2108745Z ·  ───┬─── 2026-10-24T04:18:54.2108872Z · ╰── From this spread 2026-10-24T04:18:54.2108929Z 194 │ } 2026-10-24T04:18:54.2108979Z ╰──── 2026-10-24T04:18:54.2109128Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-24T04:18:54.2109280Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T04:18:54.2109283Z 2026-10-24T04:18:54.2109564Z ⚠ eslint(no-unused-vars): Function 'assertUserMessagesExclude' is declared but never used. 2026-10-24T04:18:54.2109735Z ╭─[apps/server/src/orchestration-v2/testkit/fixtures/shared.ts:1398:10] 2026-10-24T04:18:54.2109790Z 1397 │ 2026-10-24T04:18:54.2109878Z 1398 │ function assertUserMessagesExclude( 2026-10-24T04:18:54.2109977Z ·  ────────────┬──────────── 2026-10-24T04:18:54.2110139Z · ╰── 'assertUserMessagesExclude' is declared here 2026-10-24T04:18:54.2110242Z 1399 │ projection: OrchestrationV2ThreadProjection, 2026-10-24T04:18:54.2110296Z ╰──── 2026-10-24T04:18:54.2110396Z  help: Consider removing this declaration. 2026-10-24T04:18:54.2110398Z 2026-10-24T04:18:54.2110548Z ⚠ eslint(no-new): Do not use 'new' for side effects. 2026-10-24T04:18:54.2110669Z ╭─[apps/server/src/mcp/McpToolAccess.test.ts:168:3] 2026-10-24T04:18:54.2110778Z 167 │ // @ts-expect-error a declaration constructed directly 2026-10-24T04:18:54.2110875Z 168 │ new McpToolAccess.Declaration(unchecked); 2026-10-24T04:18:54.2110970Z ·  ───────────────────────────── 2026-10-24T04:18:54.2111091Z 169 │ // @ts-expect-error a handlers layer built outside McpToolAccess 2026-10-24T04:18:54.2111143Z ╰──── 2026-10-24T04:18:54.2111296Z  help: Assign the result of 'new' to a variable or compare it to a reference. 2026-10-24T04:18:54.2111298Z 2026-10-24T04:18:54.2111492Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T04:18:54.2111618Z ╭─[packages/client-runtime/src/state/usageAccess.ts:3:8] 2026-10-24T04:18:54.2111690Z 2 │ AuthDiagnosticsReadScope, 2026-10-24T04:18:54.2111757Z 3 │ type AuthSessionState, 2026-10-24T04:18:54.2111837Z ·  ────────┬─────── 2026-10-24T04:18:54.2111982Z · ╰── 'AuthSessionState' is imported here 2026-10-24T04:18:54.2112052Z 4 │ sessionGrantsScope, 2026-10-24T04:18:54.2112104Z ╰──── 2026-10-24T04:18:54.2112199Z  help: Consider removing this import. 2026-10-24T04:18:54.2112202Z 2026-10-24T04:18:54.2112480Z ⚠ eslint(no-unused-vars): Variable 'revokeActiveMcpThread' is declared but never used. Unused variables should start with a '_'. 2026-10-24T04:18:54.2112601Z ╭─[apps/server/src/mcp/McpSessionRegistry.ts:218:7] 2026-10-24T04:18:54.2112654Z 217 │ 2026-10-24T04:18:54.2112799Z 218 │ const revokeActiveMcpThread = (threadId: ThreadId): Effect.Effect => 2026-10-24T04:18:54.2112883Z ·  ──────────┬────────── 2026-10-24T04:18:54.2113034Z · ╰── 'revokeActiveMcpThread' is declared here 2026-10-24T04:18:54.2113263Z 219 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeThread(threadId) : Effect.void; 2026-10-24T04:18:54.2113368Z ╰──── 2026-10-24T04:18:54.2113469Z  help: Consider removing this declaration. 2026-10-24T04:18:54.2113471Z 2026-10-24T04:18:54.2113769Z ⚠ eslint(no-unused-vars): Variable 'revokeAllActiveMcpCredentials' is declared but never used. Unused variables should start with a '_'. 2026-10-24T04:18:54.2113889Z ╭─[apps/server/src/mcp/McpSessionRegistry.ts:221:7] 2026-10-24T04:18:54.2113939Z 220 │ 2026-10-24T04:18:54.2114246Z 221 │ const revokeAllActiveMcpCredentials = (): Effect.Effect => 2026-10-24T04:18:54.2114395Z ·  ──────────────┬────────────── 2026-10-24T04:18:54.2114617Z · ╰── 'revokeAllActiveMcpCredentials' is declared here 2026-10-24T04:18:54.2114821Z 222 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeAll : Effect.void; 2026-10-24T04:18:54.2114891Z ╰──── 2026-10-24T04:18:54.2115017Z  help: Consider removing this declaration. 2026-10-24T04:18:54.2115020Z 2026-10-24T04:18:54.2115269Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T04:18:54.2115426Z ╭─[packages/client-runtime/src/state/filesystem.ts:3:8] 2026-10-24T04:18:54.2115516Z 2 │ AuthFilesystemReadScope, 2026-10-24T04:18:54.2115598Z 3 │ type AuthSessionState, 2026-10-24T04:18:54.2115703Z ·  ────────┬─────── 2026-10-24T04:18:54.2115878Z · ╰── 'AuthSessionState' is imported here 2026-10-24T04:18:54.2115970Z 4 │ type FilesystemBrowseEntry, 2026-10-24T04:18:54.2116028Z ╰──── 2026-10-24T04:18:54.2116156Z  help: Consider removing this import. 2026-10-24T04:18:54.2116164Z 2026-10-24T04:18:54.2116388Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T04:18:54.2116558Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:121:27] 2026-10-24T04:18:54.2116753Z 120 │ const scope = makeScope(options.capabilities ?? new Set(["preview", "worktree"])); 2026-10-24T04:18:54.2116864Z 121 │ const dispatch = vi.fn((_: unknown) => 2026-10-24T04:18:54.2116965Z ·  ┬ 2026-10-24T04:18:54.2117127Z · ╰── '_' is declared here 2026-10-24T04:18:54.2117249Z 122 │ (options.dispatchGate ?? Effect.void).pipe( 2026-10-24T04:18:54.2117311Z ╰──── 2026-10-24T04:18:54.2117438Z  help: Consider removing this parameter. 2026-10-24T04:18:54.2117441Z 2026-10-24T04:18:54.2117750Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T04:18:54.2117954Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:134:39] 2026-10-24T04:18:54.2118024Z 133 │ ); 2026-10-24T04:18:54.2118154Z 134 │ const listLocalBranchNames = vi.fn((_: string) => 2026-10-24T04:18:54.2118271Z ·  ┬ 2026-10-24T04:18:54.2118438Z · ╰── '_' is declared here 2026-10-24T04:18:54.2118523Z 135 │ Effect.succeed( 2026-10-24T04:18:54.2118589Z ╰──── 2026-10-24T04:18:54.2118713Z  help: Consider removing this parameter. 2026-10-24T04:18:54.2118715Z 2026-10-24T04:18:54.2118934Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T04:18:54.2119102Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:178:31] 2026-10-24T04:18:54.2119174Z 177 │ }); 2026-10-24T04:18:54.2119294Z 178 │ const sendToThread = vi.fn((_: unknown) => { 2026-10-24T04:18:54.2119397Z ·  ┬ 2026-10-24T04:18:54.2119560Z · ╰── '_' is declared here 2026-10-24T04:18:54.2119681Z 179 │ switch (options.continuation ?? "queued") { 2026-10-24T04:18:54.2119744Z ╰──── 2026-10-24T04:18:54.2119863Z  help: Consider removing this parameter. 2026-10-24T04:18:54.2119871Z 2026-10-24T04:18:54.2120088Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T04:18:54.2120249Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:203:33] 2026-10-24T04:18:54.2120312Z 202 │ ); 2026-10-24T04:18:54.2120408Z 203 │ const removeWorktree = vi.fn((_: unknown) => 2026-10-24T04:18:54.2120492Z ·  ┬ 2026-10-24T04:18:54.2120620Z · ╰── '_' is declared here 2026-10-24T04:18:54.2120697Z 204 │ options.removeWorktreeFails 2026-10-24T04:18:54.2120746Z ╰──── 2026-10-24T04:18:54.2120838Z  help: Consider removing this parameter. 2026-10-24T04:18:54.2120841Z 2026-10-24T04:18:54.2121013Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T04:18:54.2121139Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:208:36] 2026-10-24T04:18:54.2121191Z 207 │ ); 2026-10-24T04:18:54.2121286Z 208 │ const deleteLocalBranch = vi.fn((_: unknown) => 2026-10-24T04:18:54.2121381Z ·  ┬ 2026-10-24T04:18:54.2121514Z · ╰── '_' is declared here 2026-10-24T04:18:54.2121597Z 209 │ options.deleteLocalBranchFails 2026-10-24T04:18:54.2121645Z ╰──── 2026-10-24T04:18:54.2121741Z  help: Consider removing this parameter. 2026-10-24T04:18:54.2121744Z 2026-10-24T04:18:54.2121914Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T04:18:54.2122041Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:213:42] 2026-10-24T04:18:54.2122092Z 212 │ ); 2026-10-24T04:18:54.2122202Z 213 │ const fetchWorktreeBaseCommit = vi.fn((_: unknown) => 2026-10-24T04:18:54.2122297Z ·  ┬ 2026-10-24T04:18:54.2122482Z · ╰── '_' is declared here 2026-10-24T04:18:54.2122602Z 214 │ options.fetchWorktreeBaseFails 2026-10-24T04:18:54.2122650Z ╰──── 2026-10-24T04:18:54.2122746Z  help: Consider removing this parameter. 2026-10-24T04:18:54.2122748Z 2026-10-24T04:18:54.2122920Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T04:18:54.2123046Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:254:30] 2026-10-24T04:18:54.2123097Z 253 │ ); 2026-10-24T04:18:54.2123184Z 254 │ const localStatus = vi.fn((_: unknown) => 2026-10-24T04:18:54.2123269Z ·  ┬ 2026-10-24T04:18:54.2123394Z · ╰── '_' is declared here 2026-10-24T04:18:54.2123460Z 255 │ Effect.succeed({ 2026-10-24T04:18:54.2123515Z ╰──── 2026-10-24T04:18:54.2123612Z  help: Consider removing this parameter. 2026-10-24T04:18:54.2123614Z 2026-10-24T04:18:54.2123785Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T04:18:54.2123916Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:264:32] 2026-10-24T04:18:54.2123968Z 263 │ ); 2026-10-24T04:18:54.2124204Z 264 │ const refreshStatus = vi.fn((_: string) => Effect.die("refreshStatus stub")); 2026-10-24T04:18:54.2124306Z ·  ┬ 2026-10-24T04:18:54.2124437Z · ╰── '_' is declared here 2026-10-24T04:18:54.2124578Z 265 │ const runForThread = vi.fn((input: { readonly worktreePath: string }) => { 2026-10-24T04:18:54.2124631Z ╰──── 2026-10-24T04:18:54.2124734Z  help: Consider removing this parameter. 2026-10-24T04:18:54.2124741Z 2026-10-24T04:18:54.2124939Z ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed 2026-10-24T04:18:54.2125101Z ╭─[apps/server/src/sourceControl/SourceControlProviderRegistry.ts:15:13] 2026-10-24T04:18:54.2125172Z 14 │ } from "@t3tools/contracts"; 2026-10-24T04:18:54.2125257Z 15 │ import type {} from "@t3tools/contracts"; 2026-10-24T04:18:54.2125327Z ·  ── 2026-10-24T04:18:54.2125502Z 16 │ import { detectSourceControlProviderFromRemoteUrl } from "@t3tools/shared/sourceControl"; 2026-10-24T04:18:54.2125554Z ╰──── 2026-10-24T04:18:54.2125630Z  help: Remove empty braces 2026-10-24T04:18:54.2125633Z 2026-10-24T04:18:54.2125886Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T04:18:54.2126066Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:107:5] 2026-10-24T04:18:54.2126117Z 104 │ 2026-10-24T04:18:54.2126179Z 105 │ useEffect(() => { 2026-10-24T04:18:54.2126247Z ·  ────┬──── 2026-10-24T04:18:54.2126371Z · ╰── This is the containing effect 2026-10-24T04:18:54.2126447Z 106 │ clearReviewCommentTarget(); 2026-10-24T04:18:54.2126539Z 107 │ setPendingNativeCommentSelection(null); 2026-10-24T04:18:54.2126642Z ·  ────────────────┬─────────────── 2026-10-24T04:18:54.2126811Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T04:18:54.2126882Z 108 │ }, [selectedSection?.id]); 2026-10-24T04:18:54.2126930Z ╰──── 2026-10-24T04:18:54.2127589Z  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-24T04:18:54.2127961Z  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-24T04:18:54.2127964Z 2026-10-24T04:18:54.2128211Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T04:18:54.2128443Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:112:7] 2026-10-24T04:18:54.2128503Z 109 │ 2026-10-24T04:18:54.2128573Z 110 │ useEffect(() => { 2026-10-24T04:18:54.2128642Z ·  ────┬──── 2026-10-24T04:18:54.2128765Z · ╰── This is the containing effect 2026-10-24T04:18:54.2128848Z 111 │ if (activeCommentTarget === null) { 2026-10-24T04:18:54.2128946Z 112 │ setPendingNativeCommentSelection(null); 2026-10-24T04:18:54.2129049Z ·  ────────────────┬─────────────── 2026-10-24T04:18:54.2129220Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T04:18:54.2129271Z 113 │ } 2026-10-24T04:18:54.2129320Z ╰──── 2026-10-24T04:18:54.2129903Z  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-24T04:18:54.2130216Z  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-24T04:18:54.2130218Z 2026-10-24T04:18:54.2130411Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T04:18:54.2130586Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:108:7] 2026-10-24T04:18:54.2130680Z 107 │ setPendingNativeCommentSelection(null); 2026-10-24T04:18:54.2130750Z 108 │ }, [selectedSection?.id]); 2026-10-24T04:18:54.2130831Z ·  ─────────┬───────── 2026-10-24T04:18:54.2130987Z · ╰── Unnecessary dependency `selectedSection?.id` 2026-10-24T04:18:54.2131041Z 109 │ 2026-10-24T04:18:54.2131089Z ╰──── 2026-10-24T04:18:54.2131368Z  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-24T04:18:54.2131666Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.2131669Z 2026-10-24T04:18:54.2131856Z ⚠ eslint(no-unused-vars): Type 'EnvironmentId' is imported but never used. 2026-10-24T04:18:54.2131988Z ╭─[packages/client-runtime/src/state/sharedSettings.ts:2:3] 2026-10-24T04:18:54.2132048Z 1 │ import type { 2026-10-24T04:18:54.2132109Z 2 │ EnvironmentId, 2026-10-24T04:18:54.2132179Z ·  ──────┬────── 2026-10-24T04:18:54.2132444Z · ╰── 'EnvironmentId' is imported here 2026-10-24T04:18:54.2132572Z 3 │ ExecutionEnvironmentCapabilities, 2026-10-24T04:18:54.2132621Z ╰──── 2026-10-24T04:18:54.2132714Z  help: Consider removing this import. 2026-10-24T04:18:54.2132716Z 2026-10-24T04:18:54.2133207Z ⚠ 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-24T04:18:54.2133366Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:169:7] 2026-10-24T04:18:54.2133425Z 168 │ }); 2026-10-24T04:18:54.2133610Z 169 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T04:18:54.2133799Z 170 │ │ if ((yield* SubscriptionRef.get(shellState)).status === "synchronizing") break; 2026-10-24T04:18:54.2133904Z 171 │ │ yield* Effect.yieldNow; 2026-10-24T04:18:54.2134065Z 172 │ ╰─▶ } 2026-10-24T04:18:54.2134117Z 173 │ 2026-10-24T04:18:54.2134167Z ╰──── 2026-10-24T04:18:54.2134169Z 2026-10-24T04:18:54.2134613Z ⚠ 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-24T04:18:54.2134752Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:178:7] 2026-10-24T04:18:54.2134855Z 177 │ yield* Deferred.succeed(releaseSave, undefined); 2026-10-24T04:18:54.2135042Z 178 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T04:18:54.2135171Z 179 │ │ if ((yield* Ref.get(saved)).length > 0) break; 2026-10-24T04:18:54.2135272Z 180 │ │ yield* Effect.yieldNow; 2026-10-24T04:18:54.2135396Z 181 │ ╰─▶ } 2026-10-24T04:18:54.2135447Z 182 │ 2026-10-24T04:18:54.2135495Z ╰──── 2026-10-24T04:18:54.2135498Z 2026-10-24T04:18:54.2135934Z ⚠ 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-24T04:18:54.2136079Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:307:7] 2026-10-24T04:18:54.2136201Z 306 │ yield* Deferred.succeed(releaseUnenrichedSave, undefined); 2026-10-24T04:18:54.2136381Z 307 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T04:18:54.2136552Z 308 │ │ const values = yield* Ref.get(saved); 2026-10-24T04:18:54.2136745Z 309 │ │ if (values.length > 0 && values.at(-1)?.projects[0]?.repositoryIdentity != null) { 2026-10-24T04:18:54.2136827Z 310 │ │ break; 2026-10-24T04:18:54.2136901Z 311 │ │ } 2026-10-24T04:18:54.2137002Z 312 │ │ yield* Effect.yieldNow; 2026-10-24T04:18:54.2137125Z 313 │ ╰─▶ } 2026-10-24T04:18:54.2137310Z 314 │ 2026-10-24T04:18:54.2137444Z ╰──── 2026-10-24T04:18:54.2137446Z 2026-10-24T04:18:54.2137607Z ⚠ eslint(no-empty-pattern): Empty array binding pattern 2026-10-24T04:18:54.2139444Z ╭─[apps/server/src/pullRequest/PullRequestService.test.ts:1526:12] 2026-10-24T04:18:54.2139510Z 1525 │ 2026-10-24T04:18:54.2139574Z 1526 │ for (const [] of [ 2026-10-24T04:18:54.2139646Z ·  ── 2026-10-24T04:18:54.2139715Z 1527 │ ["github", "github.com"], 2026-10-24T04:18:54.2139766Z ╰──── 2026-10-24T04:18:54.2140036Z  help: Passing non-iterable values (null, undefined, numbers, booleans, etc.) will result in a runtime error because these values are not iterable. 2026-10-24T04:18:54.2140039Z 2026-10-24T04:18:54.2140299Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T04:18:54.2140463Z ╭─[apps/mobile/src/features/review/ReviewCommentComposerSheet.tsx:103:7] 2026-10-24T04:18:54.2140513Z 100 │ 2026-10-24T04:18:54.2140575Z 101 │ useEffect(() => { 2026-10-24T04:18:54.2140643Z ·  ────┬──── 2026-10-24T04:18:54.2140768Z · ╰── This is the containing effect 2026-10-24T04:18:54.2140866Z 102 │ if (!target || selectedLines.length === 0) { 2026-10-24T04:18:54.2140945Z 103 │ setHighlightedLinesById({}); 2026-10-24T04:18:54.2141033Z ·  ───────────┬─────────── 2026-10-24T04:18:54.2141199Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T04:18:54.2141258Z 104 │ return; 2026-10-24T04:18:54.2141305Z ╰──── 2026-10-24T04:18:54.2141890Z  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-24T04:18:54.2142204Z  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-24T04:18:54.2142207Z 2026-10-24T04:18:54.2142403Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T04:18:54.2142531Z ╭─[apps/mobile/src/features/review/ReviewSheet.tsx:454:7] 2026-10-24T04:18:54.2142610Z 453 │ showAuxiliaryPane("inspector"); 2026-10-24T04:18:54.2142791Z 454 │ }, [environmentId, showAuxiliaryPane, threadId]); 2026-10-24T04:18:54.2143004Z ·  ──────┬────── ────┬─── 2026-10-24T04:18:54.2143192Z · │ ╰── Unnecessary dependency `threadId` 2026-10-24T04:18:54.2143334Z · ╰── Unnecessary dependency `environmentId` 2026-10-24T04:18:54.2143392Z 455 │ const { 2026-10-24T04:18:54.2143440Z ╰──── 2026-10-24T04:18:54.2143800Z  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-24T04:18:54.2144138Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.2144142Z 2026-10-24T04:18:54.2144322Z ⚠ react(static-components): Cannot create components during render 2026-10-24T04:18:54.2144456Z ╭─[apps/mobile/src/features/review/ReviewSheet.tsx:725:20] 2026-10-24T04:18:54.2144516Z 492 │ // same check. 2026-10-24T04:18:54.2144637Z 493 │ const NativeReviewDiffView = resolveNativeReviewDiffView(); 2026-10-24T04:18:54.2144750Z ·  ─────────────┬───────────── 2026-10-24T04:18:54.2144922Z · ╰── The component is created during render here 2026-10-24T04:18:54.2145066Z 494 │ const nativeReviewDiffViewRef = useRef(null); 2026-10-24T04:18:54.2145182Z 495 │ const showcasedReviewDrawRef = useRef(null); 2026-10-24T04:18:54.2145311Z 496 │ const [isPullRefreshing, setIsPullRefreshing] = useState(false); 2026-10-24T04:18:54.2145402Z 497 │ const handlePullToRefresh = async () => { 2026-10-24T04:18:54.2145476Z 498 │ setIsPullRefreshing(true); 2026-10-24T04:18:54.2145555Z 499 │ await refreshSelectedSection(); 2026-10-24T04:18:54.2145627Z 500 │ setIsPullRefreshing(false); 2026-10-24T04:18:54.2145678Z 501 │ }; 2026-10-24T04:18:54.2145814Z 502 │ const reviewFileNavigatorRef = useRef(null); 2026-10-24T04:18:54.2145951Z 503 │ const reviewFiles = parsedDiff.kind === "files" ? parsedDiff.files : []; 2026-10-24T04:18:54.2146052Z 504 │ const fileVisibility = useReviewFileVisibility({ 2026-10-24T04:18:54.2146133Z 505 │ threadKey: reviewCache.threadKey, 2026-10-24T04:18:54.2146219Z 506 │ sectionId: selectedSection?.id ?? null, 2026-10-24T04:18:54.2146283Z 507 │ files: reviewFiles, 2026-10-24T04:18:54.2146381Z 508 │ cachedExpandedFileIds: selectedSection?.id 2026-10-24T04:18:54.2146511Z 509 │ ? reviewCache.expandedFileIdsBySection[selectedSection.id] 2026-10-24T04:18:54.2146571Z 510 │ : undefined, 2026-10-24T04:18:54.2146663Z 511 │ cachedViewedFileIds: selectedSection?.id 2026-10-24T04:18:54.2146779Z 512 │ ? reviewCache.viewedFileIdsBySection[selectedSection.id] 2026-10-24T04:18:54.2146838Z 513 │ : undefined, 2026-10-24T04:18:54.2146890Z 514 │ }); 2026-10-24T04:18:54.2147071Z 515 │ const { collapsedFileIds, toggleExpandedFile, toggleViewedFile, viewedFileIds } = fileVisibility; 2026-10-24T04:18:54.2147195Z 516 │ const commentSelection = useReviewCommentSelectionController({ 2026-10-24T04:18:54.2147254Z 517 │ environmentId, 2026-10-24T04:18:54.2147312Z 518 │ threadId, 2026-10-24T04:18:54.2147373Z 519 │ selectedSection, 2026-10-24T04:18:54.2147439Z 520 │ nativeReviewDiffData, 2026-10-24T04:18:54.2147544Z 521 │ }); 2026-10-24T04:18:54.2147706Z 522 │ const nativeBridge = useNativeReviewDiffBridge({ 2026-10-24T04:18:54.2147788Z 523 │ threadKey: reviewCache.threadKey, 2026-10-24T04:18:54.2147873Z 524 │ sectionId: selectedSection?.id ?? null, 2026-10-24T04:18:54.2147945Z 525 │ diff: selectedSection?.diff, 2026-10-24T04:18:54.2148018Z 526 │ data: nativeReviewDiffData, 2026-10-24T04:18:54.2148081Z 527 │ collapsedFileIds, 2026-10-24T04:18:54.2148141Z 528 │ viewedFileIds, 2026-10-24T04:18:54.2148245Z 529 │ selectedRowIds: commentSelection.selectedRowIds, 2026-10-24T04:18:54.2148344Z 530 │ canHighlight: parsedDiff.kind === "files", 2026-10-24T04:18:54.2148410Z 531 │ }); 2026-10-24T04:18:54.2148524Z 532 │ const showcaseReviewKey = 2026-10-24T04:18:54.2148661Z 533 │ SHOWCASE_ENABLED && parsedDiff.kind === "files" && selectedSection 2026-10-24T04:18:54.2148863Z 534 │ ? `${reviewCache.threadKey}:${selectedSection.id}:${nativeBridge.tokensResetKey}:${nativeBridge.themeId}` 2026-10-24T04:18:54.2148924Z 535 │ : null; 2026-10-24T04:18:54.2149084Z 536 │ const handleNativeDebug = (event: NativeSyntheticEvent>) => { 2026-10-24T04:18:54.2149158Z 537 │ nativeBridge.onDebug(event); 2026-10-24T04:18:54.2149211Z 538 │ if ( 2026-10-24T04:18:54.2149286Z 539 │ showcaseReviewKey === null || 2026-10-24T04:18:54.2149401Z 540 │ showcasedReviewDrawRef.current === showcaseReviewKey || 2026-10-24T04:18:54.2149505Z 541 │ !isNativeReviewDiffDrawEvent(event.nativeEvent) 2026-10-24T04:18:54.2149557Z 542 │ ) { 2026-10-24T04:18:54.2149613Z 543 │ return; 2026-10-24T04:18:54.2149664Z 544 │ } 2026-10-24T04:18:54.2149770Z 545 │ showcasedReviewDrawRef.current = showcaseReviewKey; 2026-10-24T04:18:54.2149929Z 546 │ reportShowcaseSceneRendered({ scene: "review", themeId: nativeBridge.themeId }); 2026-10-24T04:18:54.2149982Z 547 │ }; 2026-10-24T04:18:54.2150031Z 548 │ 2026-10-24T04:18:54.2150142Z 549 │ const handleSelectFile = async (fileId: string | null) => { 2026-10-24T04:18:54.2150217Z 550 │ loadVisibleFile(fileId, true); 2026-10-24T04:18:54.2150302Z 551 │ commentSelection.clearSelection(); 2026-10-24T04:18:54.2150418Z 552 │ if (fileId !== null && collapsedFileIds.includes(fileId)) { 2026-10-24T04:18:54.2150493Z 553 │ toggleExpandedFile(fileId); 2026-10-24T04:18:54.2150543Z 554 │ } 2026-10-24T04:18:54.2150649Z 555 │ const nativeView = nativeReviewDiffViewRef.current; 2026-10-24T04:18:54.2150717Z 556 │ if (!nativeView) return; 2026-10-24T04:18:54.2150807Z 557 │ const result = await settlePromise(() => 2026-10-24T04:18:54.2150977Z 558 │ fileId === null ? nativeView.scrollToTop(true) : nativeView.scrollToFile(fileId, true), 2026-10-24T04:18:54.2151033Z 559 │ ); 2026-10-24T04:18:54.2151116Z 560 │ if (AsyncResult.isFailure(result)) { 2026-10-24T04:18:54.2151288Z 561 │ console.error("[review] Failed to navigate to diff file", squashAtomCommandFailure(result)); 2026-10-24T04:18:54.2151338Z 562 │ } 2026-10-24T04:18:54.2151388Z 563 │ }; 2026-10-24T04:18:54.2151466Z 564 │ const handleVisibleFileChange = ( 2026-10-24T04:18:54.2151591Z 565 │ event: NativeSyntheticEvent<{ readonly fileId?: string | null }>, 2026-10-24T04:18:54.2151643Z 566 │ ) => { 2026-10-24T04:18:54.2151747Z 567 │ loadVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-24T04:18:54.2151908Z 568 │ reviewFileNavigatorRef.current?.setVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-24T04:18:54.2151958Z 569 │ }; 2026-10-24T04:18:54.2152086Z 570 │ const renderInspector = () => ( 2026-10-24T04:18:54.2152209Z 571 │ void handleSelectFile(fileId)} 2026-10-24T04:18:54.2152697Z 577 │ /> 2026-10-24T04:18:54.2152745Z 578 │ ); 2026-10-24T04:18:54.2152795Z 579 │ 2026-10-24T04:18:54.2153027Z 580 │ const handleNativeToggleFile = (event: NativeSyntheticEvent<{ readonly fileId?: string }>) => { 2026-10-24T04:18:54.2153128Z 581 │ const { fileId } = event.nativeEvent; 2026-10-24T04:18:54.2153188Z 582 │ if (fileId) { 2026-10-24T04:18:54.2153271Z 583 │ loadVisibleFile(fileId, true); 2026-10-24T04:18:54.2153348Z 584 │ toggleExpandedFile(fileId); 2026-10-24T04:18:54.2153397Z 585 │ } 2026-10-24T04:18:54.2153449Z 586 │ }; 2026-10-24T04:18:54.2153498Z 587 │ 2026-10-24T04:18:54.2153583Z 588 │ const handleNativeToggleViewedFile = ( 2026-10-24T04:18:54.2153695Z 589 │ event: NativeSyntheticEvent<{ readonly fileId?: string }>, 2026-10-24T04:18:54.2153748Z 590 │ ) => { 2026-10-24T04:18:54.2153829Z 591 │ const { fileId } = event.nativeEvent; 2026-10-24T04:18:54.2153889Z 592 │ if (fileId) { 2026-10-24T04:18:54.2153962Z 593 │ toggleViewedFile(fileId); 2026-10-24T04:18:54.2154012Z 594 │ } 2026-10-24T04:18:54.2154094Z 595 │ }; 2026-10-24T04:18:54.2154150Z 596 │ 2026-10-24T04:18:54.2154220Z 597 │ const parsedDiffNotice = 2026-10-24T04:18:54.2154381Z 598 │ parsedDiff.kind === "files" || parsedDiff.kind === "raw" ? parsedDiff.notice : null; 2026-10-24T04:18:54.2154499Z 599 │ const hasCachedSelectedDiff = selectedSection?.diff != null; 2026-10-24T04:18:54.2154648Z 600 │ const hasAnyCachedDiff = reviewSections.some((section) => section.diff != null); 2026-10-24T04:18:54.2154763Z 601 │ const sectionMenu = buildReviewSectionMenu(reviewSections); 2026-10-24T04:18:54.2154914Z 602 │ const { showConnectionNotice, showSectionToolbar } = resolveReviewAvailability({ 2026-10-24T04:18:54.2155019Z 603 │ hasEnvironmentPresentation: environment.isReady, 2026-10-24T04:18:54.2155115Z 604 │ isEnvironmentConnected: isEnvironmentReady, 2026-10-24T04:18:54.2155182Z 605 │ hasCachedSelectedDiff, 2026-10-24T04:18:54.2155245Z 606 │ hasAnyCachedDiff, 2026-10-24T04:18:54.2155296Z 607 │ }); 2026-10-24T04:18:54.2155378Z 608 │ const handleRetryEnvironment = () => { 2026-10-24T04:18:54.2155467Z 609 │ void retryEnvironment(environmentId); 2026-10-24T04:18:54.2155521Z 610 │ }; 2026-10-24T04:18:54.2155601Z 611 │ const handleReturnToThread = () => { 2026-10-24T04:18:54.2155675Z 612 │ if (navigation.canGoBack()) { 2026-10-24T04:18:54.2155741Z 613 │ navigation.goBack(); 2026-10-24T04:18:54.2155799Z 614 │ return; 2026-10-24T04:18:54.2155851Z 615 │ } 2026-10-24T04:18:54.2155927Z 616 │ navigation.navigate("Thread", { 2026-10-24T04:18:54.2156013Z 617 │ environmentId: String(environmentId), 2026-10-24T04:18:54.2156087Z 618 │ threadId: String(threadId), 2026-10-24T04:18:54.2156140Z 619 │ }); 2026-10-24T04:18:54.2156190Z 620 │ }; 2026-10-24T04:18:54.2156265Z 621 │ const androidHeaderSubtitle = [ 2026-10-24T04:18:54.2156333Z 622 │ selectedSection?.title, 2026-10-24T04:18:54.2156408Z 623 │ headerDiffSummary.additions, 2026-10-24T04:18:54.2156536Z 624 │ headerDiffSummary.deletions, 2026-10-24T04:18:54.2156647Z 625 │ ] 2026-10-24T04:18:54.2156749Z 626 │ .filter((part): part is string => Boolean(part)) 2026-10-24T04:18:54.2156808Z 627 │ .join(" · "); 2026-10-24T04:18:54.2156857Z 628 │ 2026-10-24T04:18:54.2156932Z 629 │ const showChangedFilesPane = 2026-10-24T04:18:54.2157000Z 630 │ !showConnectionNotice && 2026-10-24T04:18:54.2157070Z 631 │ selectedSection !== null && 2026-10-24T04:18:54.2157147Z 632 │ parsedDiff.kind === "files" && 2026-10-24T04:18:54.2157222Z 633 │ NativeReviewDiffView !== null; 2026-10-24T04:18:54.2157408Z 634 │ useRegisterWorkspaceInspector(showChangedFilesPane ? renderInspector : undefined); 2026-10-24T04:18:54.2157623Z 635 │ const showChangedFilesToggle = panes.supportsAuxiliaryPane && showChangedFilesPane; 2026-10-24T04:18:54.2157673Z 636 │ 2026-10-24T04:18:54.2157749Z 637 │ const listHeader = (() => { 2026-10-24T04:18:54.2157834Z 638 │ const children: ReactElement[] = []; 2026-10-24T04:18:54.2157882Z 639 │ 2026-10-24T04:18:54.2157941Z 640 │ if (error) { 2026-10-24T04:18:54.2158006Z 641 │ children.push( 2026-10-24T04:18:54.2158063Z 642 │ 2026-10-24T04:18:54.2158684Z 649 │ Review unavailable 2026-10-24T04:18:54.2158840Z 650 │ {error} 2026-10-24T04:18:54.2158901Z 651 │ , 2026-10-24T04:18:54.2158954Z 652 │ ); 2026-10-24T04:18:54.2159005Z 653 │ } 2026-10-24T04:18:54.2159053Z 654 │ 2026-10-24T04:18:54.2159122Z 655 │ if (parsedDiffNotice) { 2026-10-24T04:18:54.2159274Z 656 │ children.push(); 2026-10-24T04:18:54.2159324Z 657 │ } 2026-10-24T04:18:54.2159372Z 658 │ 2026-10-24T04:18:54.2159444Z 659 │ if (children.length === 0) { 2026-10-24T04:18:54.2159505Z 660 │ return null; 2026-10-24T04:18:54.2159556Z 661 │ } 2026-10-24T04:18:54.2159604Z 662 │ 2026-10-24T04:18:54.2159670Z 663 │ return <>{children}; 2026-10-24T04:18:54.2159721Z 664 │ })(); 2026-10-24T04:18:54.2159786Z 665 │ const headerSubtitle = [ 2026-10-24T04:18:54.2159867Z 666 │ headerDiffSummary.additions, 2026-10-24T04:18:54.2159944Z 667 │ headerDiffSummary.deletions, 2026-10-24T04:18:54.2160021Z 668 │ pendingReviewCommentCount > 0 2026-10-24T04:18:54.2160184Z 669 │ ? `${pendingReviewCommentCount} comment${pendingReviewCommentCount === 1 ? "" : "s"}` 2026-10-24T04:18:54.2160241Z 670 │ : null, 2026-10-24T04:18:54.2160291Z 671 │ ] 2026-10-24T04:18:54.2160352Z 672 │ .filter(Boolean) 2026-10-24T04:18:54.2160410Z 673 │ .join(" · "); 2026-10-24T04:18:54.2160538Z 674 │ const headerTitleText = selectedSection?.title ?? "Review changes"; 2026-10-24T04:18:54.2160587Z 675 │ 2026-10-24T04:18:54.2160644Z 676 │ return ( 2026-10-24T04:18:54.2160694Z 677 │ <> 2026-10-24T04:18:54.2160754Z 678 │ 2026-10-24T04:18:54.2162191Z 694 │ 2026-10-24T04:18:54.2162253Z 695 │ 2026-10-24T04:18:54.2162367Z 696 │ 2026-10-24T04:18:54.2162443Z 697 │ {showConnectionNotice ? ( 2026-10-24T04:18:54.2162582Z 698 │ 2026-10-24T04:18:54.2162669Z 699 │ 2026-10-24T04:18:54.2163626Z 711 │ 2026-10-24T04:18:54.2163776Z 712 │ ) : selectedSection && parsedDiff.kind === "files" && NativeReviewDiffView ? ( 2026-10-24T04:18:54.2163834Z 713 │ 2026-10-24T04:18:54.2164300Z 719 │ 2026-10-24T04:18:54.2164636Z 723 │ {listHeader} 2026-10-24T04:18:54.2164753Z 724 │ 2026-10-24T04:18:54.2164832Z 725 │ = 2) { 2026-10-24T04:18:54.2168859Z 1682 │ │ break; 2026-10-24T04:18:54.2168936Z 1683 │ │ } 2026-10-24T04:18:54.2169037Z 1684 │ │ yield* Effect.yieldNow; 2026-10-24T04:18:54.2169163Z 1685 │ ╰─▶ } 2026-10-24T04:18:54.2169234Z 1686 │ yield* Queue.offer( 2026-10-24T04:18:54.2169284Z ╰──── 2026-10-24T04:18:54.2169286Z 2026-10-24T04:18:54.2169728Z ⚠ 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-24T04:18:54.2169876Z ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1789:7] 2026-10-24T04:18:54.2169961Z 1788 │ yield* harness.replaceSession; 2026-10-24T04:18:54.2170206Z 1789 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T04:18:54.2170417Z 1790 │ │ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) break; 2026-10-24T04:18:54.2170518Z 1791 │ │ yield* Effect.yieldNow; 2026-10-24T04:18:54.2170644Z 1792 │ ╰─▶ } 2026-10-24T04:18:54.2170767Z 1793 │ expect(yield* Ref.get(harness.subscriptionCount)).toBe(2); 2026-10-24T04:18:54.2170816Z ╰──── 2026-10-24T04:18:54.2170820Z 2026-10-24T04:18:54.2171344Z ⚠ 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-24T04:18:54.2171479Z ╭─[packages/contracts/src/composerContext.test.ts:181:18] 2026-10-24T04:18:54.2171607Z 180 │ it("sends a message without the records the wire cannot carry", () => { 2026-10-24T04:18:54.2171782Z 181 │ const wire = Schema.encodeUnknownSync(Schema.toCodecJson(OrchestrationMessageContext))({ 2026-10-24T04:18:54.2171884Z ·  ──────────────────────── 2026-10-24T04:18:54.2171945Z 182 │ version: 1, 2026-10-24T04:18:54.2171993Z ╰──── 2026-10-24T04:18:54.2171996Z 2026-10-24T04:18:54.2172155Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T04:18:54.2172269Z ╭─[apps/server/src/processRunner.test.ts:266:14] 2026-10-24T04:18:54.2172319Z 265 │ 2026-10-24T04:18:54.2172422Z 266 │ for (const {} of ["timeout", "success"] as const) { 2026-10-24T04:18:54.2172498Z ·  ── 2026-10-24T04:18:54.2172551Z 267 │ } 2026-10-24T04:18:54.2172600Z ╰──── 2026-10-24T04:18:54.2172822Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T04:18:54.2172825Z 2026-10-24T04:18:54.2173008Z ⚠ eslint(no-unused-vars): Identifier 'Fiber' is imported but never used. 2026-10-24T04:18:54.2173098Z ╭─[apps/server/src/ws.ts:10:13] 2026-10-24T04:18:54.2173182Z  9 │ import * as Effect from "effect/Effect"; 2026-10-24T04:18:54.2173264Z 10 │ import * as Fiber from "effect/Fiber"; 2026-10-24T04:18:54.2173335Z ·  ──┬── 2026-10-24T04:18:54.2173458Z · ╰── 'Fiber' is imported here 2026-10-24T04:18:54.2173563Z 11 │ import * as FileSystem from "effect/FileSystem"; 2026-10-24T04:18:54.2173615Z ╰──── 2026-10-24T04:18:54.2173708Z  help: Consider removing this import. 2026-10-24T04:18:54.2173711Z 2026-10-24T04:18:54.2173899Z ⚠ eslint(no-unused-vars): Identifier 'Schedule' is imported but never used. 2026-10-24T04:18:54.2173989Z ╭─[apps/server/src/ws.ts:17:13] 2026-10-24T04:18:54.2174086Z 16 │ import * as Ref from "effect/Ref"; 2026-10-24T04:18:54.2174200Z 17 │ import * as Schedule from "effect/Schedule"; 2026-10-24T04:18:54.2174273Z ·  ────┬─── 2026-10-24T04:18:54.2174402Z · ╰── 'Schedule' is imported here 2026-10-24T04:18:54.2174484Z 18 │ import * as Schema from "effect/Schema"; 2026-10-24T04:18:54.2174532Z ╰──── 2026-10-24T04:18:54.2174622Z  help: Consider removing this import. 2026-10-24T04:18:54.2174673Z 2026-10-24T04:18:54.2175033Z ⚠ eslint(no-unused-vars): Variable 'projectSetupScriptRunner' is declared but never used. Unused variables should start with a '_'. 2026-10-24T04:18:54.2175129Z ╭─[apps/server/src/ws.ts:1285:13] 2026-10-24T04:18:54.2175277Z 1284 │ const usageLimitSources = yield* UsageLimitSources.UsageLimitSources; 2026-10-24T04:18:54.2175474Z 1285 │ const projectSetupScriptRunner = yield* ProjectSetupScriptRunner.ProjectSetupScriptRunner; 2026-10-24T04:18:54.2175616Z ·  ────────────┬─────────── 2026-10-24T04:18:54.2175806Z · ╰── 'projectSetupScriptRunner' is declared here 2026-10-24T04:18:54.2175968Z 1286 │ const worktreeSetupTracker = yield* WorktreeSetupTracker.WorktreeSetupTracker; 2026-10-24T04:18:54.2176018Z ╰──── 2026-10-24T04:18:54.2176122Z  help: Consider removing this declaration. 2026-10-24T04:18:54.2176128Z 2026-10-24T04:18:54.2176781Z ⚠ 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-24T04:18:54.2176976Z ╭─[packages/contracts/src/baseSchemas.test.ts:39:9] 2026-10-24T04:18:54.2177041Z 38 │ JSON.stringify( 2026-10-24T04:18:54.2177154Z 39 │ Schema.encodeUnknownSync(Schema.toCodecJson(Named))([ 2026-10-24T04:18:54.2177246Z ·  ──────────────────────── 2026-10-24T04:18:54.2177311Z 40 │ { name: "a" }, 2026-10-24T04:18:54.2177359Z ╰──── 2026-10-24T04:18:54.2177361Z 2026-10-24T04:18:54.2177582Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-24T04:18:54.2177724Z ╭─[packages/client-runtime/src/operations/projects.ts:228:51] 2026-10-24T04:18:54.2177783Z 227 │ ): string { 2026-10-24T04:18:54.2177933Z 228 │ const folderName = workspaceRoot.split(/[\\/]/).filter(Boolean).at(-1) ?? ""; 2026-10-24T04:18:54.2178039Z ·  ────── 2026-10-24T04:18:54.2178166Z 229 │ return target.owner ? `${target.owner}/${folderName}` : folderName; 2026-10-24T04:18:54.2178215Z ╰──── 2026-10-24T04:18:54.2178378Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T04:18:54.2178381Z 2026-10-24T04:18:54.2178566Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T04:18:54.2178780Z ╭─[apps/mobile/modules/t3-source-text/src/SourceText.tsx:36:9] 2026-10-24T04:18:54.2178932Z 35 │ file.path === path)!; 2026-10-24T04:18:54.2181857Z 1786 │ const request = yield* Schema.decodeEffect(ReviewDiffPreviewInput)({ 2026-10-24T04:18:54.2181968Z ·  ─────────────────── 2026-10-24T04:18:54.2182028Z 1787 │ cwd, 2026-10-24T04:18:54.2182078Z ╰──── 2026-10-24T04:18:54.2182080Z 2026-10-24T04:18:54.2182529Z ⚠ 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-24T04:18:54.2182683Z ╭─[apps/server/src/project/ProjectEnrichmentService.test.ts:28:3] 2026-10-24T04:18:54.2182737Z 27 │ ) { 2026-10-24T04:18:54.2182927Z 28 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T04:18:54.2183063Z 29 │ │ const available = yield* service.peek(workspaceRoot); 2026-10-24T04:18:54.2183183Z 30 │ │ if (predicate(available)) return available; 2026-10-24T04:18:54.2183281Z 31 │ │ yield* Effect.yieldNow; 2026-10-24T04:18:54.2183396Z 32 │ ╰─▶ } 2026-10-24T04:18:54.2183622Z 33 │ return yield* Effect.die(`Project metadata for ${workspaceRoot} was not resolved in time.`); 2026-10-24T04:18:54.2183721Z ╰──── 2026-10-24T04:18:54.2183724Z 2026-10-24T04:18:54.2183884Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T04:18:54.2184000Z ╭─[apps/web/src/hooks/useThreadActions.ts:821:56] 2026-10-24T04:18:54.2184138Z 820 │ const resolved = resolveThreadTarget(target); 2026-10-24T04:18:54.2184292Z 821 │ if (resolved && !canSnooze(resolved.thread, { now: new Date().toISOString() })) { 2026-10-24T04:18:54.2184457Z ·  ─────┬──── 2026-10-24T04:18:54.2184641Z · ╰── Cannot call impure function 2026-10-24T04:18:54.2184718Z 822 │ return AsyncResult.failure( 2026-10-24T04:18:54.2184767Z ╰──── 2026-10-24T04:18:54.2185043Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T04:18:54.2185330Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T04:18:54.2185333Z 2026-10-24T04:18:54.2185492Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T04:18:54.2185608Z ╭─[apps/web/src/hooks/useThreadActions.ts:709:46] 2026-10-24T04:18:54.2185677Z 708 │ const wokeAt = resolved 2026-10-24T04:18:54.2185806Z 709 │ ? threadWokeAt(resolved.thread, { now: new Date().toISOString() }) 2026-10-24T04:18:54.2185913Z ·  ─────┬──── 2026-10-24T04:18:54.2186069Z · ╰── Cannot call impure function 2026-10-24T04:18:54.2186130Z 710 │ : null; 2026-10-24T04:18:54.2186179Z ╰──── 2026-10-24T04:18:54.2186441Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T04:18:54.2186723Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T04:18:54.2186725Z 2026-10-24T04:18:54.2186952Z ⚠ unicorn(prefer-string-starts-ends-with): Prefer String#startsWith over a regex with a caret. 2026-10-24T04:18:54.2187071Z ╭─[apps/server/src/vcs/GitVcsDriverCore.ts:509:11] 2026-10-24T04:18:54.2187172Z 508 │ GIT_DIAGNOSTIC_LINE_PATTERN.test(line) || 2026-10-24T04:18:54.2187305Z 509 │ (!/^remote:/.test(line) && SSH_TRANSPORT_REFUSAL_PATTERN.test(line)), 2026-10-24T04:18:54.2187387Z ·  ─────────────── 2026-10-24T04:18:54.2187441Z 510 │ ) 2026-10-24T04:18:54.2187489Z ╰──── 2026-10-24T04:18:54.2187636Z  help: Replace `/^remote:/.test(line)` with `line.startsWith('remote:')`. 2026-10-24T04:18:54.2187639Z 2026-10-24T04:18:54.2187894Z ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'. 2026-10-24T04:18:54.2188005Z ╭─[apps/server/src/usage/UsageService.ts:169:7] 2026-10-24T04:18:54.2188055Z 168 │ 2026-10-24T04:18:54.2188129Z 169 │ const layerTest = Layer.succeed( 2026-10-24T04:18:54.2188200Z ·  ────┬──── 2026-10-24T04:18:54.2188376Z · ╰── 'layerTest' is declared here 2026-10-24T04:18:54.2188493Z 170 │ UsageService, 2026-10-24T04:18:54.2188541Z ╰──── 2026-10-24T04:18:54.2188643Z  help: Consider removing this declaration. 2026-10-24T04:18:54.2188646Z 2026-10-24T04:18:54.2189093Z ⚠ 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-24T04:18:54.2189289Z ╭─[apps/server/src/project/ProjectService.test.ts:94:3] 2026-10-24T04:18:54.2189343Z 93 │ ) { 2026-10-24T04:18:54.2189534Z 94 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T04:18:54.2189704Z 95 │ │ const project = Option.getOrThrow(yield* service.getById(projectId)); 2026-10-24T04:18:54.2189822Z 96 │ │ if (predicate(project)) return project; 2026-10-24T04:18:54.2189918Z 97 │ │ yield* Effect.yieldNow; 2026-10-24T04:18:54.2190034Z 98 │ ╰─▶ } 2026-10-24T04:18:54.2190178Z 99 │ return yield* Effect.die(`Project ${projectId} was not enriched in time.`); 2026-10-24T04:18:54.2190226Z ╰──── 2026-10-24T04:18:54.2190228Z 2026-10-24T04:18:54.2190669Z ⚠ 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-24T04:18:54.2190790Z ╭─[apps/server/src/usage/UsageService.test.ts:2383:7] 2026-10-24T04:18:54.2190887Z 2382 │ let orphanedAt: number | undefined; 2026-10-24T04:18:54.2191109Z 2383 │ ╭─▶ for (let interruptAt = 1; interruptAt <= 31; interruptAt += 1) { 2026-10-24T04:18:54.2191226Z 2384 │ │ const tasks: Array<() => void> = []; 2026-10-24T04:18:54.2191370Z 2385 │ │ const dispatcher: Scheduler.SchedulerDispatcher = { 2026-10-24T04:18:54.2191494Z 2386 │ │ scheduleTask: (task) => tasks.push(task), 2026-10-24T04:18:54.2191589Z 2387 │ │ flush: () => { 2026-10-24T04:18:54.2191708Z 2388 │ │ let task: (() => void) | undefined; 2026-10-24T04:18:54.2191848Z 2389 │ │ while ((task = tasks.shift()) !== undefined) task(); 2026-10-24T04:18:54.2191931Z 2390 │ │ }, 2026-10-24T04:18:54.2192014Z 2391 │ │ }; 2026-10-24T04:18:54.2192082Z 2392 │ │ 2026-10-24T04:18:54.2192236Z 2393 │ │ let requestFiber: Fiber.Fiber | undefined; 2026-10-24T04:18:54.2192335Z 2394 │ │ let requestChecks = 0; 2026-10-24T04:18:54.2192459Z 2395 │ │ const scheduler: Scheduler.Scheduler = { 2026-10-24T04:18:54.2192565Z 2396 │ │ executionMode: "async", 2026-10-24T04:18:54.2192682Z 2397 │ │ makeDispatcher: () => dispatcher, 2026-10-24T04:18:54.2192788Z 2398 │ │ shouldYield: (fiber) => { 2026-10-24T04:18:54.2192917Z 2399 │ │ if (fiber !== requestFiber) return false; 2026-10-24T04:18:54.2193067Z 2400 │ │ requestChecks += 1; 2026-10-24T04:18:54.2193264Z 2401 │ │ if (requestChecks !== interruptAt) return false; 2026-10-24T04:18:54.2193374Z 2402 │ │ fiber.interruptUnsafe(); 2026-10-24T04:18:54.2193467Z 2403 │ │ return true; 2026-10-24T04:18:54.2193545Z 2404 │ │ }, 2026-10-24T04:18:54.2193624Z 2405 │ │ }; 2026-10-24T04:18:54.2193690Z 2406 │ │ 2026-10-24T04:18:54.2193813Z 2407 │ │ const input: UsageSummaryInput = { 2026-10-24T04:18:54.2193916Z 2408 │ │ ...WINDOW, 2026-10-24T04:18:54.2194102Z 2409 │ │ sinceDay: UsageDay.make("2026-09-01"), 2026-10-24T04:18:54.2194331Z 2410 │ │ untilDay: UsageDay.make(`2026-08-${String(interruptAt).padStart(2, "0")}`), 2026-10-24T04:18:54.2194412Z 2411 │ │ }; 2026-10-24T04:18:54.2194521Z 2412 │ │ const first = yield* service 2026-10-24T04:18:54.2194623Z 2413 │ │ .readSummary(input) 2026-10-24T04:18:54.2194706Z 2414 │ │ .pipe( 2026-10-24T04:18:54.2194800Z 2415 │ │ Effect.exit, 2026-10-24T04:18:54.2194952Z 2416 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-24T04:18:54.2195052Z 2417 │ │ Effect.forkChild, 2026-10-24T04:18:54.2195128Z 2418 │ │ ); 2026-10-24T04:18:54.2195226Z 2419 │ │ requestFiber = first; 2026-10-24T04:18:54.2195331Z 2420 │ │ yield* Effect.yieldNow; 2026-10-24T04:18:54.2195433Z 2421 │ │ dispatcher.flush(); 2026-10-24T04:18:54.2195499Z 2422 │ │ 2026-10-24T04:18:54.2195645Z 2423 │ │ const second = yield* service.readSummary(input).pipe( 2026-10-24T04:18:54.2195739Z 2424 │ │ Effect.match({ 2026-10-24T04:18:54.2195857Z 2425 │ │ onFailure: (error) => error.reason, 2026-10-24T04:18:54.2195974Z 2426 │ │ onSuccess: () => "success" as const, 2026-10-24T04:18:54.2196055Z 2427 │ │ }), 2026-10-24T04:18:54.2196203Z 2428 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-24T04:18:54.2196305Z 2429 │ │ Effect.forkChild, 2026-10-24T04:18:54.2196385Z 2430 │ │ ); 2026-10-24T04:18:54.2196487Z 2431 │ │ yield* Effect.yieldNow; 2026-10-24T04:18:54.2196584Z 2432 │ │ dispatcher.flush(); 2026-10-24T04:18:54.2196707Z 2433 │ │ const secondExit = second.pollUnsafe(); 2026-10-24T04:18:54.2196820Z 2434 │ │ if (secondExit === undefined) { 2026-10-24T04:18:54.2196930Z 2435 │ │ second.interruptUnsafe(); 2026-10-24T04:18:54.2197037Z 2436 │ │ orphanedAt = interruptAt; 2026-10-24T04:18:54.2197121Z 2437 │ │ break; 2026-10-24T04:18:54.2197197Z 2438 │ │ } 2026-10-24T04:18:54.2197360Z 2439 │ │ if (Exit.isFailure(secondExit)) { 2026-10-24T04:18:54.2197573Z 2440 │ │ assert.fail("the matching request fiber was interrupted"); 2026-10-24T04:18:54.2197648Z 2441 │ │ } 2026-10-24T04:18:54.2197792Z 2442 │ │ assert.strictEqual(secondExit.value, "invalidWindow"); 2026-10-24T04:18:54.2197921Z 2443 │ ╰─▶ } 2026-10-24T04:18:54.2197974Z 2444 │ 2026-10-24T04:18:54.2198023Z ╰──── 2026-10-24T04:18:54.2198026Z 2026-10-24T04:18:54.2198345Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T04:18:54.2198511Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:79:5] 2026-10-24T04:18:54.2198561Z 76 │ 2026-10-24T04:18:54.2198628Z 77 │ useEffect(() => { 2026-10-24T04:18:54.2198701Z ·  ────┬──── 2026-10-24T04:18:54.2198823Z · ╰── This is the containing effect 2026-10-24T04:18:54.2198945Z 78 │ const { host, code } = parsePairingUrl(connectionPairingUrl); 2026-10-24T04:18:54.2199010Z 79 │ setHostInput(host); 2026-10-24T04:18:54.2199080Z ·  ──────┬───── 2026-10-24T04:18:54.2199239Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T04:18:54.2199303Z 80 │ setCodeInput(code); 2026-10-24T04:18:54.2199351Z ╰──── 2026-10-24T04:18:54.2199943Z  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-24T04:18:54.2200259Z  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-24T04:18:54.2200261Z 2026-10-24T04:18:54.2200510Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T04:18:54.2200674Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:89:5] 2026-10-24T04:18:54.2200723Z 82 │ 2026-10-24T04:18:54.2200784Z 83 │ useEffect(() => { 2026-10-24T04:18:54.2200850Z ·  ────┬──── 2026-10-24T04:18:54.2200972Z · ╰── This is the containing effect 2026-10-24T04:18:54.2201058Z 84 │ if (routePairingUrl.length === 0) { 2026-10-24T04:18:54.2201163Z 85 │ return; 2026-10-24T04:18:54.2201268Z 86 │ } 2026-10-24T04:18:54.2201317Z 87 │ 2026-10-24T04:18:54.2201428Z 88 │ const { host, code } = parsePairingUrl(routePairingUrl); 2026-10-24T04:18:54.2201490Z 89 │ setHostInput(host); 2026-10-24T04:18:54.2201562Z ·  ──────┬───── 2026-10-24T04:18:54.2201721Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T04:18:54.2201783Z 90 │ setCodeInput(code); 2026-10-24T04:18:54.2201831Z ╰──── 2026-10-24T04:18:54.2202499Z  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-24T04:18:54.2202819Z  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-24T04:18:54.2202821Z 2026-10-24T04:18:54.2203071Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T04:18:54.2203233Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:95:7] 2026-10-24T04:18:54.2203281Z 92 │ 2026-10-24T04:18:54.2203342Z 93 │ useEffect(() => { 2026-10-24T04:18:54.2203408Z ·  ────┬──── 2026-10-24T04:18:54.2203531Z · ╰── This is the containing effect 2026-10-24T04:18:54.2203609Z 94 │ if (pairingConnectionError) { 2026-10-24T04:18:54.2203678Z 95 │ setIsSubmitting(false); 2026-10-24T04:18:54.2203759Z ·  ───────┬─────── 2026-10-24T04:18:54.2203924Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T04:18:54.2203976Z 96 │ } 2026-10-24T04:18:54.2204041Z ╰──── 2026-10-24T04:18:54.2204639Z  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-24T04:18:54.2204948Z  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-24T04:18:54.2204951Z 2026-10-24T04:18:54.2205204Z ⚠ unicorn(prefer-add-event-listener): Prefer `addEventListener()` over their `on`-function counterparts. 2026-10-24T04:18:54.2205342Z ╭─[apps/web/src/components/device/deviceHubApi.test.ts:12:14] 2026-10-24T04:18:54.2205490Z 11 │ addEventListener(_type: string, listener: (event: { data: string }) => void) { 2026-10-24T04:18:54.2205566Z 12 │ this.onmessage = listener; 2026-10-24T04:18:54.2205641Z ·  ───────── 2026-10-24T04:18:54.2205694Z 13 │ } 2026-10-24T04:18:54.2205743Z ╰──── 2026-10-24T04:18:54.2206049Z  help: `addEventListener()` can register multiple handlers and accepts options such as `{ once: true }`; assigning to `on` replaces any previously registered handler. 2026-10-24T04:18:54.2206051Z 2026-10-24T04:18:54.2206249Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable. 2026-10-24T04:18:54.2206430Z ╭─[apps/web/src/components/device/deviceHubApi.test.ts:16:9] 2026-10-24T04:18:54.2206609Z 15 │ constructor() { 2026-10-24T04:18:54.2206672Z 16 │ source = this; 2026-10-24T04:18:54.2206741Z ·  ────── 2026-10-24T04:18:54.2206792Z 17 │ } 2026-10-24T04:18:54.2206840Z ╰──── 2026-10-24T04:18:54.2207102Z  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-24T04:18:54.2207105Z 2026-10-24T04:18:54.2207268Z ⚠ react(immutability): This value cannot be modified 2026-10-24T04:18:54.2207486Z ╭─[apps/mobile/src/features/connection/ConnectionStatusDot.tsx:58:7] 2026-10-24T04:18:54.2207580Z 53 │ function usePulseAnimation(pulse: boolean) { 2026-10-24T04:18:54.2207674Z 54 │ const pulseProgress = useSharedValue(0); 2026-10-24T04:18:54.2207754Z ·  ──────┬────── 2026-10-24T04:18:54.2207887Z · ╰── `pulseProgress` originates here 2026-10-24T04:18:54.2207938Z 55 │ 2026-10-24T04:18:54.2208000Z 56 │ useEffect(() => { 2026-10-24T04:18:54.2208061Z 57 │ if (pulse) { 2026-10-24T04:18:54.2208143Z 58 │ pulseProgress.value = withRepeat( 2026-10-24T04:18:54.2208219Z ·  ──────┬────── 2026-10-24T04:18:54.2208356Z · ╰── `pulseProgress` cannot be modified 2026-10-24T04:18:54.2208419Z 59 │ withTiming(1, { 2026-10-24T04:18:54.2208467Z ╰──── 2026-10-24T04:18:54.2208727Z  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-24T04:18:54.2209028Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T04:18:54.2209033Z 2026-10-24T04:18:54.2209467Z ⚠ 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-24T04:18:54.2209589Z ╭─[apps/server/src/serverSettings.test.ts:1741:32] 2026-10-24T04:18:54.2209752Z 1740 │ const model = createModelSelection(ProviderInstanceId.make("codex"), "gpt-5.5"); 2026-10-24T04:18:54.2209929Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-24T04:18:54.2210044Z ·  ─────────────────── 2026-10-24T04:18:54.2210151Z 1742 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-24T04:18:54.2210200Z ╰──── 2026-10-24T04:18:54.2210202Z 2026-10-24T04:18:54.2210630Z ⚠ 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-24T04:18:54.2210747Z ╭─[apps/server/src/serverSettings.test.ts:1742:34] 2026-10-24T04:18:54.2210924Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-24T04:18:54.2211027Z 1742 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-24T04:18:54.2211137Z ·  ─────────────────── 2026-10-24T04:18:54.2211306Z 1743 │ Schema.fromJsonString(Schema.Array(ProjectScript)), 2026-10-24T04:18:54.2211408Z ╰──── 2026-10-24T04:18:54.2211411Z 2026-10-24T04:18:54.2211862Z ⚠ 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-24T04:18:54.2212043Z ╭─[apps/server/src/scheduledTasks/ScheduledTaskService.webhook.test.ts:521:13] 2026-10-24T04:18:54.2212114Z 520 │ })).delivery; 2026-10-24T04:18:54.2212371Z 521 │ ╭─▶ while (delivery.outcome === "accepted") { 2026-10-24T04:18:54.2212480Z 522 │ │ yield* Effect.yieldNow; 2026-10-24T04:18:54.2212619Z 523 │ │ delivery = (yield* service.getWebhookDelivery({ 2026-10-24T04:18:54.2212719Z 524 │ │ id: task.id, 2026-10-24T04:18:54.2212833Z 525 │ │ deliveryId: deliveryId!, 2026-10-24T04:18:54.2212926Z 526 │ │ })).delivery; 2026-10-24T04:18:54.2213058Z 527 │ ╰─▶ } 2026-10-24T04:18:54.2213168Z 528 │ assert.equal(delivery.outcome, "dispatch_failed"); 2026-10-24T04:18:54.2213218Z ╰──── 2026-10-24T04:18:54.2213220Z 2026-10-24T04:18:54.2213471Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T04:18:54.2213625Z ╭─[apps/mobile/src/features/terminal/terminalLaunchContext.ts:117:5] 2026-10-24T04:18:54.2213793Z 112 │ const [entry, setEntry] = useState(() => ({ key: input.targetKey, location: candidate })); 2026-10-24T04:18:54.2213859Z 113 │ useEffect(() => { 2026-10-24T04:18:54.2213928Z ·  ────┬──── 2026-10-24T04:18:54.2214086Z · ╰── This is the containing effect 2026-10-24T04:18:54.2214241Z 114 │ if (entry.key === input.targetKey && (entry.location !== null || candidate === null)) { 2026-10-24T04:18:54.2214300Z 115 │ return; 2026-10-24T04:18:54.2214353Z 116 │ } 2026-10-24T04:18:54.2214468Z 117 │ setEntry({ key: input.targetKey, location: candidate }); 2026-10-24T04:18:54.2214535Z ·  ────┬─── 2026-10-24T04:18:54.2214697Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T04:18:54.2214814Z 118 │ }, [candidate, entry.key, entry.location, input.targetKey]); 2026-10-24T04:18:54.2214863Z ╰──── 2026-10-24T04:18:54.2215444Z  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-24T04:18:54.2215761Z  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-24T04:18:54.2215764Z 2026-10-24T04:18:54.2215965Z ⚠ eslint(no-unused-vars): Function 'describeSchedule' is declared but never used. 2026-10-24T04:18:54.2216084Z ╭─[apps/server/src/scheduledTasks/Schedule.ts:79:10] 2026-10-24T04:18:54.2216134Z 78 │ 2026-10-24T04:18:54.2216311Z 79 │ function describeSchedule(schedule: ScheduledTaskSchedule): string { 2026-10-24T04:18:54.2216450Z ·  ────────┬─────── 2026-10-24T04:18:54.2216752Z · ╰── 'describeSchedule' is declared here 2026-10-24T04:18:54.2216855Z 80 │ if (schedule.type === "webhook") return "On webhook"; 2026-10-24T04:18:54.2216902Z ╰──── 2026-10-24T04:18:54.2217001Z  help: Consider removing this declaration. 2026-10-24T04:18:54.2217004Z 2026-10-24T04:18:54.2217304Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T04:18:54.2217468Z ╭─[apps/web/src/components/settings/ProviderSettingsPanel.logic.ts:4:8] 2026-10-24T04:18:54.2217537Z 3 │ AuthProvidersManageScope, 2026-10-24T04:18:54.2217604Z 4 │ type AuthSessionState, 2026-10-24T04:18:54.2217684Z ·  ────────┬─────── 2026-10-24T04:18:54.2217830Z · ╰── 'AuthSessionState' is imported here 2026-10-24T04:18:54.2217897Z 5 │ type EnvironmentId, 2026-10-24T04:18:54.2217946Z ╰──── 2026-10-24T04:18:54.2218041Z  help: Consider removing this import. 2026-10-24T04:18:54.2218043Z 2026-10-24T04:18:54.2218204Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T04:18:54.2218337Z ╭─[apps/server/src/process/externalLauncher.test.ts:186:12] 2026-10-24T04:18:54.2218388Z 185 │ 2026-10-24T04:18:54.2218487Z 186 │ for (const {} of ["darwin", "linux"] as const) { 2026-10-24T04:18:54.2218556Z ·  ── 2026-10-24T04:18:54.2218605Z 187 │ } 2026-10-24T04:18:54.2218654Z ╰──── 2026-10-24T04:18:54.2218881Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T04:18:54.2218885Z 2026-10-24T04:18:54.2219044Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T04:18:54.2219175Z ╭─[apps/server/src/process/externalLauncher.test.ts:189:12] 2026-10-24T04:18:54.2219225Z 188 │ 2026-10-24T04:18:54.2219287Z 189 │ for (const {} of [ 2026-10-24T04:18:54.2219353Z ·  ── 2026-10-24T04:18:54.2219439Z 190 │ { kind: "browser", folderVerb: "none" }, 2026-10-24T04:18:54.2219489Z ╰──── 2026-10-24T04:18:54.2219706Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T04:18:54.2219709Z 2026-10-24T04:18:54.2219865Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T04:18:54.2220000Z ╭─[apps/server/src/process/externalLauncher.test.ts:311:12] 2026-10-24T04:18:54.2220054Z 310 │ 2026-10-24T04:18:54.2220178Z 311 │ for (const {} of ["rejected", "spawn-error", "stalled"] as const) { 2026-10-24T04:18:54.2220243Z ·  ── 2026-10-24T04:18:54.2220293Z 312 │ } 2026-10-24T04:18:54.2220341Z ╰──── 2026-10-24T04:18:54.2220559Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T04:18:54.2220561Z 2026-10-24T04:18:54.2220718Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T04:18:54.2220847Z ╭─[apps/server/src/process/externalLauncher.test.ts:314:12] 2026-10-24T04:18:54.2220897Z 313 │ 2026-10-24T04:18:54.2220958Z 314 │ for (const {} of [ 2026-10-24T04:18:54.2221094Z ·  ── 2026-10-24T04:18:54.2221212Z 315 │ { 2026-10-24T04:18:54.2221261Z ╰──── 2026-10-24T04:18:54.2221478Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T04:18:54.2221480Z 2026-10-24T04:18:54.2221753Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T04:18:54.2221907Z ╭─[apps/web/src/components/settings/SettingInheritance.tsx:163:24] 2026-10-24T04:18:54.2221990Z 162 │ keys, 2026-10-24T04:18:54.2222099Z 163 │ overridingProjects = [], 2026-10-24T04:18:54.2222179Z ·  ── 2026-10-24T04:18:54.2222242Z 164 │ onClearOverrides, 2026-10-24T04:18:54.2222290Z ╰──── 2026-10-24T04:18:54.2222602Z  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-24T04:18:54.2222607Z 2026-10-24T04:18:54.2222857Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T04:18:54.2223011Z ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:40:5] 2026-10-24T04:18:54.2223118Z 37 │ const [initialized, setInitialized] = useState(false); 2026-10-24T04:18:54.2223184Z 38 │ useLayoutEffect(() => { 2026-10-24T04:18:54.2223259Z ·  ───────┬─────── 2026-10-24T04:18:54.2223385Z · ╰── This is the containing effect 2026-10-24T04:18:54.2223441Z 39 │ reset(); 2026-10-24T04:18:54.2223506Z 40 │ setInitialized(true); 2026-10-24T04:18:54.2223586Z ·  ───────┬────── 2026-10-24T04:18:54.2223749Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T04:18:54.2223808Z 41 │ }, [reset]); 2026-10-24T04:18:54.2223856Z ╰──── 2026-10-24T04:18:54.2224471Z  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-24T04:18:54.2224784Z  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-24T04:18:54.2224787Z 2026-10-24T04:18:54.2225039Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T04:18:54.2225194Z ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:93:5] 2026-10-24T04:18:54.2225244Z 88 │ 2026-10-24T04:18:54.2225305Z 89 │ useEffect(() => { 2026-10-24T04:18:54.2225371Z ·  ────┬──── 2026-10-24T04:18:54.2225494Z · ╰── This is the containing effect 2026-10-24T04:18:54.2225648Z 90 │ if (!needsPreparation || !initialProjectRef.branch || waitingForProject) return; 2026-10-24T04:18:54.2225747Z 91 │ const branchName = initialProjectRef.branch; 2026-10-24T04:18:54.2225810Z 92 │ let active = true; 2026-10-24T04:18:54.2225903Z 93 │ setPendingCheckouts((count) => count + 1); 2026-10-24T04:18:54.2225983Z ·  ─────────┬───────── 2026-10-24T04:18:54.2226204Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T04:18:54.2226411Z 94 │ // Serialize replacements: ignoring a stale result cannot undo its Git mutation. 2026-10-24T04:18:54.2226460Z ╰──── 2026-10-24T04:18:54.2227052Z  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-24T04:18:54.2227422Z  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-24T04:18:54.2227425Z 2026-10-24T04:18:54.2227675Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T04:18:54.2227825Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:57:5] 2026-10-24T04:18:54.2227876Z 55 │ 2026-10-24T04:18:54.2227936Z 56 │ useEffect(() => { 2026-10-24T04:18:54.2228004Z ·  ────┬──── 2026-10-24T04:18:54.2228125Z · ╰── This is the containing effect 2026-10-24T04:18:54.2228191Z 57 │ setDecodedSize(null); 2026-10-24T04:18:54.2228264Z ·  ───────┬────── 2026-10-24T04:18:54.2228424Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T04:18:54.2228489Z 58 │ }, [props.sourceKey]); 2026-10-24T04:18:54.2228538Z ╰──── 2026-10-24T04:18:54.2229121Z  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-24T04:18:54.2229434Z  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-24T04:18:54.2229436Z 2026-10-24T04:18:54.2229684Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T04:18:54.2229829Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:61:5] 2026-10-24T04:18:54.2229879Z 59 │ 2026-10-24T04:18:54.2229940Z 60 │ useEffect(() => { 2026-10-24T04:18:54.2230006Z ·  ────┬──── 2026-10-24T04:18:54.2230179Z · ╰── This is the containing effect 2026-10-24T04:18:54.2230299Z 61 │ setFailedUri(null); 2026-10-24T04:18:54.2230372Z ·  ──────┬───── 2026-10-24T04:18:54.2230531Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T04:18:54.2230592Z 62 │ }, [props.uri]); 2026-10-24T04:18:54.2230640Z ╰──── 2026-10-24T04:18:54.2231292Z  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-24T04:18:54.2231607Z  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-24T04:18:54.2231612Z 2026-10-24T04:18:54.2231818Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-24T04:18:54.2231961Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:7:10] 2026-10-24T04:18:54.2232081Z 6 │ import { parse, SvgAst, type JsxAST } from "react-native-svg"; 2026-10-24T04:18:54.2232253Z 7 │ import { ActivityIndicator, Pressable, StyleSheet, View, type ViewStyle } from "react-native"; 2026-10-24T04:18:54.2232338Z ·  ────────┬──────── 2026-10-24T04:18:54.2232479Z · ╰── 'ActivityIndicator' is imported here 2026-10-24T04:18:54.2232530Z 8 │ 2026-10-24T04:18:54.2232579Z ╰──── 2026-10-24T04:18:54.2232674Z  help: Consider removing this import. 2026-10-24T04:18:54.2232676Z 2026-10-24T04:18:54.2232873Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T04:18:54.2233022Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:58:7] 2026-10-24T04:18:54.2233088Z 57 │ setDecodedSize(null); 2026-10-24T04:18:54.2233154Z 58 │ }, [props.sourceKey]); 2026-10-24T04:18:54.2233230Z ·  ───────┬─────── 2026-10-24T04:18:54.2233378Z · ╰── Unnecessary dependency `props.sourceKey` 2026-10-24T04:18:54.2233427Z 59 │ 2026-10-24T04:18:54.2233475Z ╰──── 2026-10-24T04:18:54.2233758Z  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-24T04:18:54.2234080Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.2234085Z 2026-10-24T04:18:54.2234310Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T04:18:54.2234455Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:62:7] 2026-10-24T04:18:54.2234520Z 61 │ setFailedUri(null); 2026-10-24T04:18:54.2234580Z 62 │ }, [props.uri]); 2026-10-24T04:18:54.2234650Z ·  ────┬──── 2026-10-24T04:18:54.2234785Z · ╰── Unnecessary dependency `props.uri` 2026-10-24T04:18:54.2234834Z 63 │ 2026-10-24T04:18:54.2234881Z ╰──── 2026-10-24T04:18:54.2235162Z  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-24T04:18:54.2235509Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T04:18:54.2235551Z 2026-10-24T04:18:54.2235651Z Found 0 errors and 362 warnings in 5408 files (4.9s, 8 threads) 2026-10-24T04:18:54.2676882Z Post job cleanup. 2026-10-24T04:18:54.3291584Z Cache hit occurred on the primary key electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309, not saving cache. 2026-10-24T04:18:54.3353354Z Post job cleanup. 2026-10-24T04:18:54.3374245Z ##[start-action display=Cache full pnpm store;id=__00596d12-3713-4e5a-9881-655c91b4006e.__actions_cache] 2026-10-24T04:18:54.3665325Z Post job cleanup. 2026-10-24T04:18:54.4282748Z Cache hit occurred on the primary key pnpm-full-v1-Linux-X64-3cb0b4d7cff93dc8fe33f2ea73cac71ca25a36270fcb648b9b4a9320151012ef, not saving cache. 2026-10-24T04:18:54.4310548Z ##[end-action id=__00596d12-3713-4e5a-9881-655c91b4006e.__actions_cache;outcome=success;conclusion=success;duration_ms=93] 2026-10-24T04:18:54.4312195Z ##[start-action display=Cache Vite+;id=__00596d12-3713-4e5a-9881-655c91b4006e.vp_cache] 2026-10-24T04:18:54.4331280Z Post job cleanup. 2026-10-24T04:18:54.4889178Z Cache hit occurred on the primary key vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0, not saving cache. 2026-10-24T04:18:54.4918058Z ##[end-action id=__00596d12-3713-4e5a-9881-655c91b4006e.vp_cache;outcome=success;conclusion=success;duration_ms=60] 2026-10-24T04:18:54.4952969Z Post job cleanup. 2026-10-24T04:18:54.5320019Z [command]/usr/local/bin/git version 2026-10-24T04:18:54.5346912Z git version 2.55.0 2026-10-24T04:18:54.5362381Z Temporarily overriding HOME='/home/runner/_work/_temp/3bb558c1-f77e-40c2-9d0d-70fd4e244d3f' before making global git config changes 2026-10-24T04:18:54.5362727Z Adding repository directory to the temporary git global config as a safe directory 2026-10-24T04:18:54.5365108Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code 2026-10-24T04:18:54.5385185Z Removing SSH command configuration 2026-10-24T04:18:54.5387886Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand 2026-10-24T04:18:54.5408493Z [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-24T04:18:54.5519326Z fatal: No url found for submodule path '.repos/alchemy-effect/submodules/distilled' in .gitmodules 2026-10-24T04:18:54.5539131Z ##[warning]The process '/usr/local/bin/git' failed with exit code 128 2026-10-24T04:18:54.5569662Z A job completed hook has been configured by the self-hosted runner administrator 2026-10-24T04:18:54.5585577Z ##[group]Run '/job_completed.sh' 2026-10-24T04:18:54.5592403Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T04:18:54.5592596Z env: 2026-10-24T04:18:54.5592710Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 156 2026-10-24T04:18:54.5592871Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 354 2026-10-24T04:18:54.5593010Z BLACKSMITH_CHECK_RUN_ID: 120776724055 2026-10-24T04:18:54.5593144Z BLACKSMITH_JOB_DISPLAY_NAME: Lint 2026-10-24T04:18:54.5593280Z GITHUB_ACTIONS_CACHE_MODE: write 2026-10-24T04:18:54.5593406Z ##[endgroup] 2026-10-24T04:18:54.5663111Z Docker container cache not activated, skipping hash computation. 2026-10-24T04:18:54.5901570Z No active SSH sessions detected. Proceeding with shutdown immediately. 2026-10-24T04:18:54.5940310Z Cleaning up orphan processes