2026-10-24T05:19:30.2240595Z Current runner version: '2.338.1' 2026-10-24T05:19:30.2243441Z Runner name: 'blacksmith-8vcpu-ubuntu-2404-5ysdqml2lpeivjfz' 2026-10-24T05:19:30.2244012Z Runner group name: 'blacksmith scale sets - blacksmith-8vcpu-ubuntu-2404' 2026-10-24T05:19:30.2244587Z Machine name: 'ip-172-31-73-130' 2026-10-24T05:19:30.2245748Z ##[group]GITHUB_TOKEN Permissions 2026-10-24T05:19:30.2247004Z Contents: read 2026-10-24T05:19:30.2247422Z Metadata: read 2026-10-24T05:19:30.2247813Z ##[endgroup] 2026-10-24T05:19:30.2249142Z Secret source: Actions 2026-10-24T05:19:30.2249717Z Cache mode: write 2026-10-24T05:19:30.2250070Z Prepare workflow directory 2026-10-24T05:19:30.2419790Z Prepare all required actions 2026-10-24T05:19:30.2444930Z Getting action download info 2026-10-24T05:19:30.3606088Z Download action repository 'actions/checkout@v6' (SHA:d23441a48e516b6c34aea4fa41551a30e30af803) 2026-10-24T05:19:30.3865120Z Download action repository 'actions/cache@v6' (SHA:55cc8345863c7cc4c66a329aec7e433d2d1c52a9) 2026-10-24T05:19:30.4929635Z Setting BLACKSMITH_ACTIONS_RESULTS_URL to https://results-receiver.actions.githubusercontent.com/ 2026-10-24T05:19:30.4965617Z Complete job name: Lint 2026-10-24T05:19:30.5316102Z A job started hook has been configured by the self-hosted runner administrator 2026-10-24T05:19:30.5386292Z ##[group]Run '/setup.sh' 2026-10-24T05:19:30.5394393Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T05:19:30.5394791Z env: 2026-10-24T05:19:30.5395007Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 135 2026-10-24T05:19:30.5395282Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 395 2026-10-24T05:19:30.5395552Z BLACKSMITH_CHECK_RUN_ID: 120788669600 2026-10-24T05:19:30.5395818Z BLACKSMITH_JOB_DISPLAY_NAME: Lint 2026-10-24T05:19:30.5396075Z GITHUB_ACTIONS_CACHE_MODE: write 2026-10-24T05:19:30.5396326Z ##[endgroup] 2026-10-24T05:19:30.5596154Z Logging daemon started (blacksmithd for logs) 2026-10-24T05:19:30.5702798Z Results daemon started (blacksmithd for results) 2026-10-24T05:19:30.5815240Z Background adoption and SSH setup started (PID: 3174) 2026-10-24T05:19:30.5817765Z 2026-10-24T05:19:30.5817956Z ---------------------------------------- 2026-10-24T05:19:30.5818697Z View this job: https://app.blacksmith.sh/pingdotgg/runs/40065798166/jobs/120788669600 2026-10-24T05:19:30.5819438Z SSH Access (using your GitHub SSH key): 2026-10-24T05:19:30.5820105Z ssh -p 64000 runner@blacksmith-8vcpu-ubuntu-2404-5ysdqml2lpeivjfz.vm.blacksmith.sh 2026-10-24T05:19:30.5820533Z 2026-10-24T05:19:30.5820640Z No GitHub SSH key? Add one at: 2026-10-24T05:19:30.5821119Z https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account 2026-10-24T05:19:30.5821513Z 2026-10-24T05:19:30.5821617Z ---------------------------------------- 2026-10-24T05:19:30.5821788Z 2026-10-24T05:19:30.5821923Z VM ID: blacksmith-8vcpu-ubuntu-2404-5ysdqml2lpeivjfz 2026-10-24T05:19:30.5822258Z Host: production-152.236.31.187-x8664 2026-10-24T05:19:30.5822679Z Host Agent PID: 3858682 2026-10-24T05:19:30.5823064Z Host Agent Git SHA: 1637818df 2026-10-24T05:19:30.5823463Z Host CPU Manufacturer: AuthenticAMD 2026-10-24T05:19:30.5823899Z Blacksmith Host Generation: gen 2 2026-10-24T05:19:30.5824339Z Petname: production-whole-garfish-88ae6659 2026-10-24T05:19:30.5824795Z Region: us-east 2026-10-24T05:19:30.5825155Z Rootfs Version: ubuntu24-full-x64-081926 2026-10-24T05:19:30.5828577Z OS Version: Ubuntu 24.04.4 LTS 2026-10-24T05:19:30.5828925Z 2026-10-24T05:19:30.5829049Z Enabling Blacksmith transparent cache 2026-10-24T05:19:30.6038064Z ##[group]Run actions/checkout@v6 2026-10-24T05:19:30.6038353Z with: 2026-10-24T05:19:30.6038669Z sparse-checkout: /* !/.repos/ !/apps/mobile/modules/t3-terminal/Vendor/**/*.a 2026-10-24T05:19:30.6039099Z sparse-checkout-cone-mode: false 2026-10-24T05:19:30.6039371Z repository: pingdotgg/t3code 2026-10-24T05:19:30.6041110Z token: *** 2026-10-24T05:19:30.6041316Z ssh-strict: true 2026-10-24T05:19:30.6041532Z ssh-user: git 2026-10-24T05:19:30.6041748Z persist-credentials: true 2026-10-24T05:19:30.6042132Z clean: true 2026-10-24T05:19:30.6042337Z fetch-depth: 1 2026-10-24T05:19:30.6042547Z fetch-tags: false 2026-10-24T05:19:30.6042765Z show-progress: true 2026-10-24T05:19:30.6042981Z lfs: false 2026-10-24T05:19:30.6043182Z submodules: false 2026-10-24T05:19:30.6043399Z set-safe-directory: true 2026-10-24T05:19:30.6043645Z allow-unsafe-pr-checkout: false 2026-10-24T05:19:30.6043893Z env: 2026-10-24T05:19:30.6044124Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 135 2026-10-24T05:19:30.6044402Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 395 2026-10-24T05:19:30.6044675Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T05:19:30.6044928Z ##[endgroup] 2026-10-24T05:19:30.7286902Z Syncing repository: pingdotgg/t3code 2026-10-24T05:19:30.7287759Z ##[group]Getting Git version info 2026-10-24T05:19:30.7288081Z Working directory is '/home/runner/_work/t3code/t3code' 2026-10-24T05:19:30.7293219Z [command]/usr/local/bin/git version 2026-10-24T05:19:30.7378468Z git version 2.55.0 2026-10-24T05:19:30.7389286Z ##[endgroup] 2026-10-24T05:19:30.7396129Z Temporarily overriding HOME='/home/runner/_work/_temp/27dd4e48-6380-4775-92a1-2a01ceca5492' before making global git config changes 2026-10-24T05:19:30.7396764Z Adding repository directory to the temporary git global config as a safe directory 2026-10-24T05:19:30.7399671Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code 2026-10-24T05:19:30.7426229Z Deleting the contents of '/home/runner/_work/t3code/t3code' 2026-10-24T05:19:30.7427692Z ##[group]Determining repository object format 2026-10-24T05:19:30.7428977Z ##[endgroup] 2026-10-24T05:19:30.7429327Z ##[group]Initializing the repository 2026-10-24T05:19:30.7431350Z [command]/usr/local/bin/git init /home/runner/_work/t3code/t3code 2026-10-24T05:19:30.7463197Z hint: Using 'master' as the name for the initial branch. This default branch name 2026-10-24T05:19:30.7463985Z hint: will change to "main" in Git 3.0. To configure the initial branch name 2026-10-24T05:19:30.7464562Z hint: to use in all of your new repositories, which will suppress this warning, 2026-10-24T05:19:30.7464915Z hint: call: 2026-10-24T05:19:30.7465109Z hint: 2026-10-24T05:19:30.7465364Z hint: git config --global init.defaultBranch 2026-10-24T05:19:30.7465658Z hint: 2026-10-24T05:19:30.7465936Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and 2026-10-24T05:19:30.7466381Z hint: 'development'. The just-created branch can be renamed via this command: 2026-10-24T05:19:30.7466730Z hint: 2026-10-24T05:19:30.7466935Z hint: git branch -m 2026-10-24T05:19:30.7467164Z hint: 2026-10-24T05:19:30.7467464Z hint: Disable this message with "git config set advice.defaultBranchName false" 2026-10-24T05:19:30.7467989Z Initialized empty Git repository in /home/runner/_work/t3code/t3code/.git/ 2026-10-24T05:19:30.7469026Z [command]/usr/local/bin/git remote add origin https://github.com/pingdotgg/t3code 2026-10-24T05:19:30.7492919Z ##[endgroup] 2026-10-24T05:19:30.7495333Z ##[group]Disabling automatic garbage collection 2026-10-24T05:19:30.7495691Z [command]/usr/local/bin/git config --local gc.auto 0 2026-10-24T05:19:30.7513603Z ##[endgroup] 2026-10-24T05:19:30.7513953Z ##[group]Setting up auth 2026-10-24T05:19:30.7514246Z Removing SSH command configuration 2026-10-24T05:19:30.7518580Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand 2026-10-24T05:19:30.7541793Z [command]/usr/local/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :" 2026-10-24T05:19:30.7654812Z Removing HTTP extra header 2026-10-24T05:19:30.7657301Z [command]/usr/local/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader 2026-10-24T05:19:30.7677728Z [command]/usr/local/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :" 2026-10-24T05:19:30.7761906Z Removing includeIf entries pointing to credentials config files 2026-10-24T05:19:30.7764821Z [command]/usr/local/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir: 2026-10-24T05:19:30.7786002Z [command]/usr/local/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url 2026-10-24T05:19:30.7879336Z [command]/usr/local/bin/git config --file /home/runner/_work/_temp/git-credentials-c29410e6-9231-4ac4-8234-d52d297074b0.config http.https://github.com/.extraheader AUTHORIZATION: basic *** 2026-10-24T05:19:30.7901655Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git.path /home/runner/_work/_temp/git-credentials-c29410e6-9231-4ac4-8234-d52d297074b0.config 2026-10-24T05:19:30.7921118Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git/worktrees/*.path /home/runner/_work/_temp/git-credentials-c29410e6-9231-4ac4-8234-d52d297074b0.config 2026-10-24T05:19:30.7940267Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git.path /github/runner_temp/git-credentials-c29410e6-9231-4ac4-8234-d52d297074b0.config 2026-10-24T05:19:30.7960080Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git/worktrees/*.path /github/runner_temp/git-credentials-c29410e6-9231-4ac4-8234-d52d297074b0.config 2026-10-24T05:19:30.7977439Z ##[endgroup] 2026-10-24T05:19:30.7978011Z ##[group]Fetching the repository 2026-10-24T05:19:30.7982258Z [command]/usr/local/bin/git -c protocol.version=2 fetch --no-tags --prune --no-recurse-submodules --filter=blob:none --depth=1 origin +b24e8ce2df0f09bf01883c6b0010f75497e212b3:refs/remotes/origin/main 2026-10-24T05:19:31.0540574Z From https://github.com/pingdotgg/t3code 2026-10-24T05:19:31.0541501Z * [new ref] b24e8ce2df0f09bf01883c6b0010f75497e212b3 -> origin/main 2026-10-24T05:19:31.0563937Z [command]/usr/local/bin/git branch --list --remote origin/main 2026-10-24T05:19:31.0583969Z origin/main 2026-10-24T05:19:31.0588039Z [command]/usr/local/bin/git rev-parse refs/remotes/origin/main 2026-10-24T05:19:31.0604944Z b24e8ce2df0f09bf01883c6b0010f75497e212b3 2026-10-24T05:19:31.0606754Z ##[endgroup] 2026-10-24T05:19:31.0607464Z ##[group]Determining the checkout info 2026-10-24T05:19:31.0608290Z ##[endgroup] 2026-10-24T05:19:31.0609078Z ##[group]Setting up sparse checkout 2026-10-24T05:19:31.0610176Z [command]/usr/local/bin/git config core.sparseCheckout true 2026-10-24T05:19:31.0630445Z [command]/usr/local/bin/git rev-parse --git-path info/sparse-checkout 2026-10-24T05:19:31.0644724Z .git/info/sparse-checkout 2026-10-24T05:19:31.0648302Z ##[endgroup] 2026-10-24T05:19:31.0649312Z ##[group]Checking out the ref 2026-10-24T05:19:31.0650709Z [command]/usr/local/bin/git checkout --progress --force -B main refs/remotes/origin/main 2026-10-24T05:19:37.6334182Z Updating files: 0% (1/6336) 2026-10-24T05:19:37.6360295Z Updating files: 1% (64/6336) 2026-10-24T05:19:37.6378145Z Updating files: 2% (127/6336) 2026-10-24T05:19:37.6397825Z Updating files: 3% (191/6336) 2026-10-24T05:19:37.6416555Z Updating files: 4% (254/6336) 2026-10-24T05:19:37.6445686Z Updating files: 5% (317/6336) 2026-10-24T05:19:37.6465856Z Updating files: 6% (381/6336) 2026-10-24T05:19:37.6519349Z Updating files: 7% (444/6336) 2026-10-24T05:19:37.6546400Z Updating files: 8% (507/6336) 2026-10-24T05:19:37.6567011Z Updating files: 9% (571/6336) 2026-10-24T05:19:37.6835086Z Updating files: 10% (634/6336) 2026-10-24T05:19:37.6850589Z Updating files: 11% (697/6336) 2026-10-24T05:19:37.6861769Z Updating files: 12% (761/6336) 2026-10-24T05:19:37.6874704Z Updating files: 13% (824/6336) 2026-10-24T05:19:37.6889923Z Updating files: 14% (888/6336) 2026-10-24T05:19:37.6906783Z Updating files: 15% (951/6336) 2026-10-24T05:19:37.6925411Z Updating files: 16% (1014/6336) 2026-10-24T05:19:37.6939599Z Updating files: 17% (1078/6336) 2026-10-24T05:19:37.6958199Z Updating files: 18% (1141/6336) 2026-10-24T05:19:37.6972771Z Updating files: 19% (1204/6336) 2026-10-24T05:19:37.6994330Z Updating files: 20% (1268/6336) 2026-10-24T05:19:37.7012891Z Updating files: 21% (1331/6336) 2026-10-24T05:19:37.7030790Z Updating files: 22% (1394/6336) 2026-10-24T05:19:37.7044511Z Updating files: 23% (1458/6336) 2026-10-24T05:19:37.7057142Z Updating files: 24% (1521/6336) 2026-10-24T05:19:37.7071814Z Updating files: 25% (1584/6336) 2026-10-24T05:19:37.7085141Z Updating files: 26% (1648/6336) 2026-10-24T05:19:37.7097861Z Updating files: 27% (1711/6336) 2026-10-24T05:19:37.7118098Z Updating files: 28% (1775/6336) 2026-10-24T05:19:37.7148578Z Updating files: 29% (1838/6336) 2026-10-24T05:19:37.7168751Z Updating files: 30% (1901/6336) 2026-10-24T05:19:37.7191319Z Updating files: 31% (1965/6336) 2026-10-24T05:19:37.7221720Z Updating files: 32% (2028/6336) 2026-10-24T05:19:37.7251707Z Updating files: 33% (2091/6336) 2026-10-24T05:19:37.7316610Z Updating files: 34% (2155/6336) 2026-10-24T05:19:37.7375022Z Updating files: 35% (2218/6336) 2026-10-24T05:19:37.7415484Z Updating files: 36% (2281/6336) 2026-10-24T05:19:37.7448728Z Updating files: 37% (2345/6336) 2026-10-24T05:19:37.7493531Z Updating files: 38% (2408/6336) 2026-10-24T05:19:37.7520329Z Updating files: 39% (2472/6336) 2026-10-24T05:19:37.7549643Z Updating files: 40% (2535/6336) 2026-10-24T05:19:37.7578187Z Updating files: 41% (2598/6336) 2026-10-24T05:19:37.7595943Z Updating files: 42% (2662/6336) 2026-10-24T05:19:37.7605905Z Updating files: 43% (2725/6336) 2026-10-24T05:19:37.7626812Z Updating files: 44% (2788/6336) 2026-10-24T05:19:37.7660532Z Updating files: 45% (2852/6336) 2026-10-24T05:19:37.7683070Z Updating files: 46% (2915/6336) 2026-10-24T05:19:37.7710999Z Updating files: 47% (2978/6336) 2026-10-24T05:19:37.7738983Z Updating files: 48% (3042/6336) 2026-10-24T05:19:37.7768857Z Updating files: 49% (3105/6336) 2026-10-24T05:19:37.7805509Z Updating files: 50% (3168/6336) 2026-10-24T05:19:37.7820692Z Updating files: 51% (3232/6336) 2026-10-24T05:19:37.7853797Z Updating files: 52% (3295/6336) 2026-10-24T05:19:37.7879307Z Updating files: 53% (3359/6336) 2026-10-24T05:19:37.7898989Z Updating files: 54% (3422/6336) 2026-10-24T05:19:37.7922185Z Updating files: 55% (3485/6336) 2026-10-24T05:19:37.7939145Z Updating files: 56% (3549/6336) 2026-10-24T05:19:37.7955518Z Updating files: 57% (3612/6336) 2026-10-24T05:19:37.7973594Z Updating files: 58% (3675/6336) 2026-10-24T05:19:37.8327967Z Updating files: 59% (3739/6336) 2026-10-24T05:19:37.8341719Z Updating files: 60% (3802/6336) 2026-10-24T05:19:37.8357547Z Updating files: 61% (3865/6336) 2026-10-24T05:19:37.8374835Z Updating files: 62% (3929/6336) 2026-10-24T05:19:37.8395585Z Updating files: 63% (3992/6336) 2026-10-24T05:19:37.8422753Z Updating files: 64% (4056/6336) 2026-10-24T05:19:37.8443190Z Updating files: 65% (4119/6336) 2026-10-24T05:19:37.8458544Z Updating files: 66% (4182/6336) 2026-10-24T05:19:37.8483493Z Updating files: 67% (4246/6336) 2026-10-24T05:19:37.8495873Z Updating files: 68% (4309/6336) 2026-10-24T05:19:37.8514390Z Updating files: 69% (4372/6336) 2026-10-24T05:19:37.8526291Z Updating files: 70% (4436/6336) 2026-10-24T05:19:37.8541858Z Updating files: 71% (4499/6336) 2026-10-24T05:19:37.8557763Z Updating files: 72% (4562/6336) 2026-10-24T05:19:37.8581752Z Updating files: 73% (4626/6336) 2026-10-24T05:19:37.8829302Z Updating files: 74% (4689/6336) 2026-10-24T05:19:37.9010353Z Updating files: 75% (4752/6336) 2026-10-24T05:19:37.9030872Z Updating files: 76% (4816/6336) 2026-10-24T05:19:37.9054333Z Updating files: 77% (4879/6336) 2026-10-24T05:19:37.9078550Z Updating files: 78% (4943/6336) 2026-10-24T05:19:37.9096404Z Updating files: 79% (5006/6336) 2026-10-24T05:19:37.9115111Z Updating files: 80% (5069/6336) 2026-10-24T05:19:37.9131477Z Updating files: 81% (5133/6336) 2026-10-24T05:19:37.9149747Z Updating files: 82% (5196/6336) 2026-10-24T05:19:37.9169062Z Updating files: 83% (5259/6336) 2026-10-24T05:19:37.9189485Z Updating files: 84% (5323/6336) 2026-10-24T05:19:37.9211172Z Updating files: 85% (5386/6336) 2026-10-24T05:19:37.9234003Z Updating files: 86% (5449/6336) 2026-10-24T05:19:37.9298542Z Updating files: 87% (5513/6336) 2026-10-24T05:19:37.9331175Z Updating files: 88% (5576/6336) 2026-10-24T05:19:37.9354497Z Updating files: 89% (5640/6336) 2026-10-24T05:19:37.9378600Z Updating files: 90% (5703/6336) 2026-10-24T05:19:37.9411422Z Updating files: 91% (5766/6336) 2026-10-24T05:19:37.9426220Z Updating files: 92% (5830/6336) 2026-10-24T05:19:37.9441804Z Updating files: 93% (5893/6336) 2026-10-24T05:19:37.9461868Z Updating files: 94% (5956/6336) 2026-10-24T05:19:37.9485241Z Updating files: 95% (6020/6336) 2026-10-24T05:19:37.9538023Z Updating files: 96% (6083/6336) 2026-10-24T05:19:37.9564287Z Updating files: 97% (6146/6336) 2026-10-24T05:19:37.9608262Z Updating files: 98% (6210/6336) 2026-10-24T05:19:37.9626721Z Updating files: 99% (6273/6336) 2026-10-24T05:19:37.9626939Z Updating files: 100% (6336/6336) 2026-10-24T05:19:37.9627169Z Updating files: 100% (6336/6336), done. 2026-10-24T05:19:37.9795875Z Switched to a new branch 'main' 2026-10-24T05:19:37.9796273Z branch 'main' set up to track 'origin/main'. 2026-10-24T05:19:37.9808793Z ##[endgroup] 2026-10-24T05:19:37.9842314Z [command]/usr/local/bin/git log -1 --format=%H 2026-10-24T05:19:37.9863378Z b24e8ce2df0f09bf01883c6b0010f75497e212b3 2026-10-24T05:19:37.9933404Z ##[group]Run files="$(git ls-files .github/pr-assets)" 2026-10-24T05:19:37.9933655Z files="$(git ls-files .github/pr-assets)" 2026-10-24T05:19:37.9933876Z if test -n "$files"; then 2026-10-24T05:19:37.9934248Z  printf 'PR evidence must be uploaded to GitHub, not committed:\n%s\n' "$files" >&2 2026-10-24T05:19:37.9934628Z  exit 1 2026-10-24T05:19:37.9934833Z fi 2026-10-24T05:19:37.9944480Z shell: /usr/bin/bash -e {0} 2026-10-24T05:19:37.9944663Z env: 2026-10-24T05:19:37.9944799Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 135 2026-10-24T05:19:37.9944979Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 395 2026-10-24T05:19:37.9945141Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T05:19:37.9945298Z ##[endgroup] 2026-10-24T05:19:38.0080471Z Prepare all required actions 2026-10-24T05:19:38.0080857Z Getting action download info 2026-10-24T05:19:38.1075498Z Download action repository 'voidzero-dev/setup-vp@v1' (SHA:250f29ce396baf5e8f24498e17c0dfdebabc26eb) 2026-10-24T05:19:38.2017742Z ##[group]Run ./.github/actions/setup-ci-deps 2026-10-24T05:19:38.2017923Z env: 2026-10-24T05:19:38.2018060Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 135 2026-10-24T05:19:38.2018232Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 395 2026-10-24T05:19:38.2018398Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T05:19:38.2018557Z ##[endgroup] 2026-10-24T05:19:38.2093906Z ##[start-action display=Resolve Vite+ version;id=__self.vp] 2026-10-24T05:19:38.2106496Z ##[group]Run echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-24T05:19:38.2106864Z echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-24T05:19:38.2107174Z echo "node=$(jq -r '.engines.node' package.json)" >> "$GITHUB_OUTPUT" 2026-10-24T05:19:38.2107432Z echo "pnpm=$(jq -r '.packageManager' package.json)" >> "$GITHUB_OUTPUT" 2026-10-24T05:19:38.2115425Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T05:19:38.2115609Z env: 2026-10-24T05:19:38.2115746Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 135 2026-10-24T05:19:38.2115911Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 395 2026-10-24T05:19:38.2116078Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T05:19:38.2116231Z ##[endgroup] 2026-10-24T05:19:38.2185838Z ##[end-action id=__self.vp;outcome=success;conclusion=success;duration_ms=9] 2026-10-24T05:19:38.2187211Z ##[start-action display=Cache Vite+;id=__self.vp_cache] 2026-10-24T05:19:38.2227170Z ##[group]Run actions/cache@v6 2026-10-24T05:19:38.2227327Z with: 2026-10-24T05:19:38.2227631Z path: ~/.vite-plus 2026-10-24T05:19:38.2227816Z key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T05:19:38.2228037Z enableCrossOsArchive: false 2026-10-24T05:19:38.2228190Z fail-on-cache-miss: false 2026-10-24T05:19:38.2228338Z lookup-only: false 2026-10-24T05:19:38.2228468Z save-always: false 2026-10-24T05:19:38.2228600Z env: 2026-10-24T05:19:38.2228733Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 135 2026-10-24T05:19:38.2228903Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 395 2026-10-24T05:19:38.2229066Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T05:19:38.2229222Z ##[endgroup] 2026-10-24T05:19:38.7298328Z Cache hit for: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T05:19:39.0999284Z Received 170349591 of 170349591 (100.0%), 466.8 MBs/sec 2026-10-24T05:19:39.0999834Z Cache Size: ~162 MB (170349591 B) 2026-10-24T05:19:39.1022645Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/bdd1a543-beff-4a64-9a4c-2739db2b1f02/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T05:19:39.7241130Z Cache restored successfully 2026-10-24T05:19:39.7378489Z Cache restored from key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T05:19:39.7455824Z ##[end-action id=__self.vp_cache;outcome=success;conclusion=success;duration_ms=1526] 2026-10-24T05:19:39.7457929Z ##[start-action display=Use cached Vite+;id=__self.__run] 2026-10-24T05:19:39.7474869Z ##[group]Run echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-24T05:19:39.7475085Z echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-24T05:19:39.7475261Z "$HOME/.vite-plus/bin/vp" env use "26.12.1" 2026-10-24T05:19:39.7484144Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T05:19:39.7484306Z env: 2026-10-24T05:19:39.7484423Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 135 2026-10-24T05:19:39.7484573Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 395 2026-10-24T05:19:39.7484717Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T05:19:39.7484849Z ##[endgroup] 2026-10-24T05:19:39.7518244Z Using Node.js v26.12.1 (resolved from 26.12.1) 2026-10-24T05:19:39.7524704Z ##[end-action id=__self.__run;outcome=success;conclusion=success;duration_ms=6] 2026-10-24T05:19:39.7525949Z ##[start-action display=Setup Vite+;id=__self.__voidzero-dev_setup-vp] 2026-10-24T05:19:39.7529413Z ##[end-action id=__self.__voidzero-dev_setup-vp;outcome=skipped;conclusion=skipped;duration_ms=0] 2026-10-24T05:19:39.7530470Z ##[start-action display=Resolve pnpm store path;id=__self.pnpm_store] 2026-10-24T05:19:39.7538972Z ##[group]Run store_path="$(vp pm cache dir)" 2026-10-24T05:19:39.7539145Z store_path="$(vp pm cache dir)" 2026-10-24T05:19:39.7539308Z echo "path=$store_path" >> "$GITHUB_OUTPUT" 2026-10-24T05:19:39.7547850Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T05:19:39.7548028Z env: 2026-10-24T05:19:39.7548141Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 135 2026-10-24T05:19:39.7548286Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 395 2026-10-24T05:19:39.7548443Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T05:19:39.7548603Z ##[endgroup] 2026-10-24T05:19:39.7686688Z ##[end-action id=__self.pnpm_store;outcome=success;conclusion=success;duration_ms=15] 2026-10-24T05:19:39.7688041Z ##[start-action display=Cache full pnpm store;id=__self.__actions_cache] 2026-10-24T05:19:39.8000758Z ##[group]Run actions/cache@v6 2026-10-24T05:19:39.8000971Z with: 2026-10-24T05:19:39.8001152Z path: /home/runner/.local/share/pnpm/store/v11 2026-10-24T05:19:39.8001413Z key: pnpm-full-v1-Linux-X64-8600a8d4a7fcc9519d421cef0c77201c793c5d8afbbef2897636b5b9305a9b7d 2026-10-24T05:19:39.8001664Z restore-keys: pnpm-full-v1-Linux-X64- 2026-10-24T05:19:39.8001811Z enableCrossOsArchive: false 2026-10-24T05:19:39.8001945Z fail-on-cache-miss: false 2026-10-24T05:19:39.8002067Z lookup-only: false 2026-10-24T05:19:39.8002177Z save-always: false 2026-10-24T05:19:39.8002288Z env: 2026-10-24T05:19:39.8002415Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 135 2026-10-24T05:19:39.8002905Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 395 2026-10-24T05:19:39.8003130Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T05:19:39.8003362Z ##[endgroup] 2026-10-24T05:19:39.9907914Z Cache hit for restore-key: pnpm-full-v1-Linux-X64-3cb0b4d7cff93dc8fe33f2ea73cac71ca25a36270fcb648b9b4a9320151012ef 2026-10-24T05:19:41.0111149Z Received 536870912 of 995020926 (54.0%), 512.0 MBs/sec 2026-10-24T05:19:41.5937551Z Received 995020926 of 995020926 (100.0%), 599.4 MBs/sec 2026-10-24T05:19:41.5937979Z Cache Size: ~949 MB (995020926 B) 2026-10-24T05:19:41.5968139Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/d11d8bb7-da9e-488b-8dcd-6073ed304a3d/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T05:19:46.6708424Z Cache restored successfully 2026-10-24T05:19:46.7153418Z Cache restored from key: pnpm-full-v1-Linux-X64-3cb0b4d7cff93dc8fe33f2ea73cac71ca25a36270fcb648b9b4a9320151012ef 2026-10-24T05:19:46.7227654Z ##[end-action id=__self.__actions_cache;outcome=success;conclusion=success;duration_ms=6953] 2026-10-24T05:19:46.7230310Z ##[start-action display=Install dependencies;id=__self.__run_2] 2026-10-24T05:19:46.7241570Z ##[group]Run vp install 2026-10-24T05:19:46.7241776Z vp install 2026-10-24T05:19:46.7250207Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T05:19:46.7250400Z env: 2026-10-24T05:19:46.7250527Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 135 2026-10-24T05:19:46.7250670Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 395 2026-10-24T05:19:46.7250812Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T05:19:46.7250942Z ##[endgroup] 2026-10-24T05:19:46.7543049Z Scope: all 33 workspace projects 2026-10-24T05:19:46.8498315Z ? Verifying lockfile against supply-chain policies (2088 entries)... 2026-10-24T05:19:47.0810795Z Packages are hard linked from the content-addressable store to the virtual store. 2026-10-24T05:19:47.0811119Z Content-addressable store is at: /home/runner/.local/share/pnpm/store/v11 2026-10-24T05:19:47.0811333Z Virtual store is at: node_modules/.pnpm 2026-10-24T05:19:49.1211095Z ✓ Lockfile passes supply-chain policies (2088 entries in 2.3s) 2026-10-24T05:19:49.1211359Z Lockfile is up to date, resolution step is skipped 2026-10-24T05:19:49.1367270Z Packages: +1721 2026-10-24T05:19:49.1367491Z ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2026-10-24T05:19:49.1651559Z Progress: resolved 1721, reused 1717, downloaded 1, added 1721, done 2026-10-24T05:19:49.9423318Z . prepare$ vp config --no-agent 2026-10-24T05:19:50.0327473Z . prepare: Done 2026-10-24T05:19:50.0340823Z 2026-10-24T05:19:50.0340987Z devDependencies: 2026-10-24T05:19:50.0341112Z + @coderabbitai/config 1.1.0 2026-10-24T05:19:50.0341255Z + @shadcn/lint 0.1.5 2026-10-24T05:19:50.0341398Z + @types/node 24.12.4 2026-10-24T05:19:50.0341524Z + knip 6.34.0 2026-10-24T05:19:50.0341655Z + typescript <- @tsc-rs/typescript 0.8.0 2026-10-24T05:19:50.0341799Z + vite-plus 1.3.0 2026-10-24T05:19:50.0341862Z 2026-10-24T05:19:50.0365988Z Done in 3.3s using pnpm v12.14.0 2026-10-24T05:19:50.0516735Z ##[end-action id=__self.__run_2;outcome=success;conclusion=success;duration_ms=3328] 2026-10-24T05:19:50.0968961Z ##[group]Run actions/cache@v6 2026-10-24T05:19:50.0969126Z with: 2026-10-24T05:19:50.0969247Z path: ~/.cache/electron 2026-10-24T05:19:50.0969481Z key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T05:19:50.0969710Z enableCrossOsArchive: false 2026-10-24T05:19:50.0969843Z fail-on-cache-miss: false 2026-10-24T05:19:50.0969961Z lookup-only: false 2026-10-24T05:19:50.0970074Z save-always: false 2026-10-24T05:19:50.0970179Z env: 2026-10-24T05:19:50.0970341Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 135 2026-10-24T05:19:50.0970483Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 395 2026-10-24T05:19:50.0970633Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T05:19:50.0970764Z ##[endgroup] 2026-10-24T05:19:50.2761214Z Cache hit for: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T05:19:50.4215516Z Received 122906203 of 122906203 (100.0%), 894.8 MBs/sec 2026-10-24T05:19:50.4215940Z Cache Size: ~117 MB (122906203 B) 2026-10-24T05:19:50.4229559Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/cb57d783-3c22-4373-b085-e0e06b663813/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T05:19:50.4762618Z Cache restored successfully 2026-10-24T05:19:50.4908575Z Cache restored from key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T05:19:50.5040122Z ##[group]Run vp run --filter @t3tools/desktop ensure:electron 2026-10-24T05:19:50.5040425Z vp run --filter @t3tools/desktop ensure:electron 2026-10-24T05:19:50.5051572Z shell: /usr/bin/bash -e {0} 2026-10-24T05:19:50.5051705Z env: 2026-10-24T05:19:50.5052008Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 135 2026-10-24T05:19:50.5052161Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 395 2026-10-24T05:19:50.5052326Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T05:19:50.5052465Z ##[endgroup] 2026-10-24T05:19:50.6667408Z ~/apps/desktop$ node scripts/ensure-electron-runtime.mjs ⊘ cache disabled 2026-10-24T05:19:51.2156328Z /home/runner/_work/t3code/t3code/node_modules/.pnpm/electron@44.9.3_supports-color@8.1.1/node_modules/electron/dist/electron 2026-10-24T05:19:51.2172123Z 2026-10-24T05:19:51.2246043Z ##[group]Run vp run knip:check 2026-10-24T05:19:51.2246252Z vp run knip:check 2026-10-24T05:19:51.2255136Z shell: /usr/bin/bash -e {0} 2026-10-24T05:19:51.2255267Z env: 2026-10-24T05:19:51.2255380Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 135 2026-10-24T05:19:51.2255529Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 395 2026-10-24T05:19:51.2255676Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T05:19:51.2255814Z ##[endgroup] 2026-10-24T05:19:51.3681026Z $ knip --include files,dependencies --no-config-hints ⊘ cache disabled 2026-10-24T05:19:54.9299021Z 2026-10-24T05:19:54.9302171Z $ knip --workspace apps/server --workspace apps/desktop --workspace apps/web --workspace packages/client-runtime --workspace packages/contracts --workspace packages/effect-acp --workspace packages/effect-codex-app-server --workspace packages/shared --workspace packages/ssh --workspace packages/tailscale --workspace packages/provider-core --workspace packages/provider-acp --workspace packages/provider-acp-registry --workspace packages/provider-testing --workspace packages/provider-pi --workspace packages/provider-muse --workspace packages/provider-opencode --workspace packages/provider-cursor --workspace packages/provider-grok --workspace packages/source-control-core --workspace packages/source-control-azure-devops --workspace packages/source-control-bitbucket --workspace packages/source-control-forgejo --workspace packages/source-control-gitcafe --workspace packages/source-control-github --workspace packages/source-control-gitlab --workspace packages/source-control-testing --exports --preprocessor ./scripts/knip-schemas.ts --no-config-hints ⊘ cache disabled 2026-10-24T05:20:02.7399151Z 2026-10-24T05:20:02.7400111Z --- 2026-10-24T05:20:02.7400391Z vp run: 2/2 successful. (Run `vp run --last-details` for full details) 2026-10-24T05:20:02.7479606Z ##[group]Run vp run --filter @t3tools/source-control-github generate --check 2026-10-24T05:20:02.7479956Z vp run --filter @t3tools/source-control-github generate --check 2026-10-24T05:20:02.7488773Z shell: /usr/bin/bash -e {0} 2026-10-24T05:20:02.7488900Z env: 2026-10-24T05:20:02.7489012Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 135 2026-10-24T05:20:02.7489162Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 395 2026-10-24T05:20:02.7489304Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T05:20:02.7489437Z ##[endgroup] 2026-10-24T05:20:02.8886222Z ~/packages/source-control-github$ graphqlgen --check ⊘ cache disabled 2026-10-24T05:20:03.0653741Z 2026-10-24T05:20:03.0726323Z ##[group]Run vp run --filter t3 generate --check 2026-10-24T05:20:03.0726571Z vp run --filter t3 generate --check 2026-10-24T05:20:03.0735203Z shell: /usr/bin/bash -e {0} 2026-10-24T05:20:03.0735330Z env: 2026-10-24T05:20:03.0735455Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 135 2026-10-24T05:20:03.0735598Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 395 2026-10-24T05:20:03.0735740Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T05:20:03.0735870Z ##[endgroup] 2026-10-24T05:20:03.2112306Z ~/apps/server$ graphqlgen --check ⊘ cache disabled 2026-10-24T05:20:03.3539587Z 2026-10-24T05:20:03.3619555Z ##[group]Run vp check 2026-10-24T05:20:03.3619782Z vp check 2026-10-24T05:20:03.3628850Z shell: /usr/bin/bash -e {0} 2026-10-24T05:20:03.3628985Z env: 2026-10-24T05:20:03.3629096Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 135 2026-10-24T05:20:03.3629247Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 395 2026-10-24T05:20:03.3629390Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T05:20:03.3629524Z ##[endgroup] 2026-10-24T05:20:03.9149203Z pass: All 5690 files are correctly formatted (417ms, 8 threads) 2026-10-24T05:20:08.8139930Z warn: Lint warnings found 2026-10-24T05:20:08.8141295Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:20:08.8141840Z ╭─[apps/mobile/src/features/home/thread-swipe-actions.tsx:494:27] 2026-10-24T05:20:08.8142199Z 493 │ > 2026-10-24T05:20:08.8142448Z 494 │ {props.children(close)} 2026-10-24T05:20:08.8142767Z ·  ──┬── 2026-10-24T05:20:08.8143189Z · ╰── Cannot access ref value during render 2026-10-24T05:20:08.8143561Z 495 │ 2026-10-24T05:20:08.8143802Z ╰──── 2026-10-24T05:20:08.8144583Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T05:20:08.8145753Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:20:08.8146196Z 2026-10-24T05:20:08.8146617Z ⚠ eslint(no-unused-vars): Function 'promptResponseHasMissingXAiStopReason' is declared but never used. 2026-10-24T05:20:08.8147238Z ╭─[packages/provider-grok/src/server/xaiAcpExtension.ts:1620:10] 2026-10-24T05:20:08.8147583Z 1619 │ 2026-10-24T05:20:08.8148022Z 1620 │ function promptResponseHasMissingXAiStopReason(response: EffectAcpSchema.PromptResponse): boolean { 2026-10-24T05:20:08.8148548Z ·  ──────────────────┬────────────────── 2026-10-24T05:20:08.8149640Z · ╰── 'promptResponseHasMissingXAiStopReason' is declared here 2026-10-24T05:20:08.8149954Z 1621 │ const meta = response._meta; 2026-10-24T05:20:08.8150109Z ╰──── 2026-10-24T05:20:08.8150278Z  help: Consider removing this declaration. 2026-10-24T05:20:08.8150399Z 2026-10-24T05:20:08.8150660Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T05:20:08.8151153Z ╭─[packages/provider-grok/src/server/adapter.ts:408:7] 2026-10-24T05:20:08.8151344Z 407 │ 2026-10-24T05:20:08.8151479Z 408 │ const layer: Layer.Layer< 2026-10-24T05:20:08.8151638Z ·  ──┬── 2026-10-24T05:20:08.8151848Z · ╰── 'layer' is declared here 2026-10-24T05:20:08.8152069Z 409 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T05:20:08.8152232Z ╰──── 2026-10-24T05:20:08.8152395Z  help: Consider removing this declaration. 2026-10-24T05:20:08.8152516Z 2026-10-24T05:20:08.8152791Z ⚠ eslint(no-unused-vars): Variable 'legacyCredentials' is declared but never used. Unused variables should start with a '_'. 2026-10-24T05:20:08.8153199Z ╭─[packages/provider-cursor/src/server/credentialStore.test.ts:15:7] 2026-10-24T05:20:08.8153414Z 14 │ 2026-10-24T05:20:08.8153543Z 15 │ const legacyCredentials = { 2026-10-24T05:20:08.8153719Z ·  ────────┬──────── 2026-10-24T05:20:08.8153956Z · ╰── 'legacyCredentials' is declared here 2026-10-24T05:20:08.8154171Z 16 │ version: 1 as const, 2026-10-24T05:20:08.8154302Z ╰──── 2026-10-24T05:20:08.8154459Z  help: Consider removing this declaration. 2026-10-24T05:20:08.8154575Z 2026-10-24T05:20:08.8154991Z ⚠ eslint(no-unused-vars): Function 'summarizePayload' is declared but never used. 2026-10-24T05:20:08.8155380Z ╭─[packages/provider-acp/src/server/nativeLogging.ts:22:10] 2026-10-24T05:20:08.8155580Z 21 │ 2026-10-24T05:20:08.8155795Z 22 │ function summarizePayload(payload: unknown): Readonly> { 2026-10-24T05:20:08.8156049Z ·  ────────┬─────── 2026-10-24T05:20:08.8156286Z · ╰── 'summarizePayload' is declared here 2026-10-24T05:20:08.8156557Z 23 │ if (payload === null) return { valueType: "null" }; 2026-10-24T05:20:08.8156722Z ╰──── 2026-10-24T05:20:08.8156878Z  help: Consider removing this declaration. 2026-10-24T05:20:08.8156992Z 2026-10-24T05:20:08.8157184Z ⚠ eslint(require-yield): This generator function does not have `yield` 2026-10-24T05:20:08.8157514Z ╭─[packages/provider-acp/src/server/mcpOverAcpBridge.ts:81:78] 2026-10-24T05:20:08.8157722Z  80 │ 2026-10-24T05:20:08.8158056Z  81 │ ╭─▶ export const makeAcpMcpOverAcpBridge = Effect.fn("AcpMcpOverAcpBridge.make")(function* ( 2026-10-24T05:20:08.8158418Z  82 │ │ options: AcpMcpOverAcpBridgeOptions, 2026-10-24T05:20:08.8158664Z  83 │ │ ): Effect.fn.Return { 2026-10-24T05:20:08.8158954Z  84 │ │ const fetchImplementation = options.fetchImplementation ?? fetch; 2026-10-24T05:20:08.8159252Z  85 │ │ const connections = new Map(); 2026-10-24T05:20:08.8159460Z  86 │ │ 2026-10-24T05:20:08.8159807Z  87 │ │ const connectionFor = (connectionId: string): Effect.Effect => 2026-10-24T05:20:08.8160112Z  88 │ │ Effect.suspend(() => { 2026-10-24T05:20:08.8160352Z  89 │ │ const connection = connections.get(connectionId); 2026-10-24T05:20:08.8160606Z  90 │ │ return connection === undefined 2026-10-24T05:20:08.8160930Z  91 │ │ ? Effect.fail(new AcpMcpOverAcpError(`Unknown MCP-over-ACP connection "${connectionId}".`)) 2026-10-24T05:20:08.8161239Z  92 │ │ : Effect.succeed(connection); 2026-10-24T05:20:08.8161433Z  93 │ │ }); 2026-10-24T05:20:08.8161593Z  94 │ │ 2026-10-24T05:20:08.8161760Z  95 │ │ const send = ( 2026-10-24T05:20:08.8161967Z  96 │ │ connection: Connection, 2026-10-24T05:20:08.8162176Z  97 │ │ message: unknown, 2026-10-24T05:20:08.8162441Z  98 │ │ ): Effect.Effect, AcpMcpOverAcpError> => 2026-10-24T05:20:08.8162711Z  99 │ │ connection.mutex.withPermits(1)( 2026-10-24T05:20:08.8162946Z 100 │ │ Effect.gen(function* () { 2026-10-24T05:20:08.8163183Z 101 │ │ const body = JSON.stringify(message); 2026-10-24T05:20:08.8163449Z 102 │ │ if (Buffer.byteLength(body) > MAX_MESSAGE_BYTES) { 2026-10-24T05:20:08.8163801Z 103 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("MCP-over-ACP message exceeds 8 MiB.")); 2026-10-24T05:20:08.8164080Z 104 │ │ } 2026-10-24T05:20:08.8164372Z 105 │ │ const response = yield* Effect.tryPromise({ 2026-10-24T05:20:08.8164640Z 106 │ │ try: (signal) => 2026-10-24T05:20:08.8164882Z 107 │ │ fetchImplementation(options.endpoint, { 2026-10-24T05:20:08.8165117Z 108 │ │ method: "POST", 2026-10-24T05:20:08.8165345Z 109 │ │ signal, 2026-10-24T05:20:08.8165551Z 110 │ │ headers: { 2026-10-24T05:20:08.8165783Z 111 │ │ "content-type": "application/json", 2026-10-24T05:20:08.8166056Z 112 │ │ accept: "application/json, text/event-stream", 2026-10-24T05:20:08.8166327Z 113 │ │ authorization: options.authorization, 2026-10-24T05:20:08.8166593Z 114 │ │ ...(connection.sessionId === null 2026-10-24T05:20:08.8166819Z 115 │ │ ? {} 2026-10-24T05:20:08.8167067Z 116 │ │ : { "mcp-session-id": connection.sessionId }), 2026-10-24T05:20:08.8167344Z 117 │ │ ...(connection.protocolVersion === null 2026-10-24T05:20:08.8167579Z 118 │ │ ? {} 2026-10-24T05:20:08.8167845Z 119 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-24T05:20:08.8168094Z 120 │ │ }, 2026-10-24T05:20:08.8168283Z 121 │ │ body, 2026-10-24T05:20:08.8168467Z 122 │ │ }), 2026-10-24T05:20:08.8168667Z 123 │ │ catch: bridgeError, 2026-10-24T05:20:08.8168865Z 124 │ │ }); 2026-10-24T05:20:08.8169169Z 125 │ │ connection.sessionId = response.headers.get("mcp-session-id") ?? connection.sessionId; 2026-10-24T05:20:08.8169464Z 126 │ │ if (!response.ok) { 2026-10-24T05:20:08.8169753Z 127 │ │ yield* Effect.promise( 2026-10-24T05:20:08.8170071Z 128 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-24T05:20:08.8170331Z 129 │ │ ); 2026-10-24T05:20:08.8170536Z 130 │ │ return yield* Effect.fail( 2026-10-24T05:20:08.8170862Z 131 │ │ new AcpMcpOverAcpError(`T3 Code MCP endpoint responded with HTTP ${response.status}.`), 2026-10-24T05:20:08.8171137Z 132 │ │ ); 2026-10-24T05:20:08.8171318Z 133 │ │ } 2026-10-24T05:20:08.8171620Z 134 │ │ const payloads = [...(yield* Stream.runCollect(responsePayloads(response, bridgeError)))]; 2026-10-24T05:20:08.8171941Z 135 │ │ for (const payload of payloads) { 2026-10-24T05:20:08.8172280Z 136 │ │ connection.protocolVersion = protocolVersionOf(payload) ?? connection.protocolVersion; 2026-10-24T05:20:08.8172566Z 137 │ │ } 2026-10-24T05:20:08.8172756Z 138 │ │ return payloads; 2026-10-24T05:20:08.8172993Z 139 │ │ }).pipe(Effect.mapError(bridgeError)), 2026-10-24T05:20:08.8173197Z 140 │ │ ); 2026-10-24T05:20:08.8173359Z 141 │ │ 2026-10-24T05:20:08.8173679Z 142 │ │ const disconnect = Effect.fn("mcpOverAcpBridge.disconnect")(function* ( 2026-10-24T05:20:08.8174020Z 143 │ │ request: AcpSchema.DisconnectMcpRequest, 2026-10-24T05:20:08.8174341Z 144 │ │ ): Effect.fn.Return { 2026-10-24T05:20:08.8174675Z 145 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T05:20:08.8174963Z 146 │ │ connections.delete(request.connectionId); 2026-10-24T05:20:08.8175217Z 147 │ │ const sessionId = connection.sessionId; 2026-10-24T05:20:08.8175452Z 148 │ │ if (sessionId !== null) { 2026-10-24T05:20:08.8175698Z 149 │ │ const response = yield* Effect.tryPromise({ 2026-10-24T05:20:08.8175936Z 150 │ │ try: (signal) => 2026-10-24T05:20:08.8176179Z 151 │ │ fetchImplementation(options.endpoint, { 2026-10-24T05:20:08.8176419Z 152 │ │ method: "DELETE", 2026-10-24T05:20:08.8176621Z 153 │ │ signal, 2026-10-24T05:20:08.8176823Z 154 │ │ headers: { 2026-10-24T05:20:08.8177066Z 155 │ │ authorization: options.authorization, 2026-10-24T05:20:08.8177320Z 156 │ │ "mcp-session-id": sessionId, 2026-10-24T05:20:08.8177578Z 157 │ │ ...(connection.protocolVersion === null 2026-10-24T05:20:08.8177805Z 158 │ │ ? {} 2026-10-24T05:20:08.8178073Z 159 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-24T05:20:08.8178428Z 160 │ │ }, 2026-10-24T05:20:08.8178632Z 161 │ │ }), 2026-10-24T05:20:08.8178831Z 162 │ │ catch: bridgeError, 2026-10-24T05:20:08.8179020Z 163 │ │ }); 2026-10-24T05:20:08.8179251Z 164 │ │ if (!response.ok && response.status !== 404) { 2026-10-24T05:20:08.8179495Z 165 │ │ return yield* Effect.fail( 2026-10-24T05:20:08.8179789Z 166 │ │ new AcpMcpOverAcpError( 2026-10-24T05:20:08.8180089Z 167 │ │ `T3 Code MCP endpoint rejected disconnect with HTTP ${response.status}.`, 2026-10-24T05:20:08.8180349Z 168 │ │ ), 2026-10-24T05:20:08.8180524Z 169 │ │ ); 2026-10-24T05:20:08.8180705Z 170 │ │ } 2026-10-24T05:20:08.8180902Z 171 │ │ yield* Effect.promise( 2026-10-24T05:20:08.8181192Z 172 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-24T05:20:08.8181441Z 173 │ │ ); 2026-10-24T05:20:08.8181611Z 174 │ │ } 2026-10-24T05:20:08.8181800Z 175 │ │ return {}; 2026-10-24T05:20:08.8181970Z 176 │ │ }); 2026-10-24T05:20:08.8182129Z 177 │ │ 2026-10-24T05:20:08.8182290Z 178 │ │ return { 2026-10-24T05:20:08.8182553Z 179 │ │ connect: Effect.fn("mcpOverAcpBridge.connect")(function* (request) { 2026-10-24T05:20:08.8182842Z 180 │ │ if (request.serverId !== "t3-code") { 2026-10-24T05:20:08.8183146Z 181 │ │ return yield* Effect.fail( 2026-10-24T05:20:08.8183480Z 182 │ │ new AcpMcpOverAcpError(`Unknown ACP MCP server "${request.serverId}".`), 2026-10-24T05:20:08.8183741Z 183 │ │ ); 2026-10-24T05:20:08.8183910Z 184 │ │ } 2026-10-24T05:20:08.8184132Z 185 │ │ if (connections.size >= MAX_CONNECTIONS) { 2026-10-24T05:20:08.8184472Z 186 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("Too many MCP-over-ACP connections.")); 2026-10-24T05:20:08.8184748Z 187 │ │ } 2026-10-24T05:20:08.8184997Z 188 │ │ const connectionId = yield* options.allocateConnectionId; 2026-10-24T05:20:08.8185264Z 189 │ │ connections.set(connectionId, { 2026-10-24T05:20:08.8185515Z 190 │ │ mutex: yield* Semaphore.make(1), 2026-10-24T05:20:08.8185736Z 191 │ │ sessionId: null, 2026-10-24T05:20:08.8185953Z 192 │ │ protocolVersion: null, 2026-10-24T05:20:08.8186169Z 193 │ │ nextRequestId: 0, 2026-10-24T05:20:08.8186361Z 194 │ │ }); 2026-10-24T05:20:08.8186560Z 195 │ │ return { connectionId }; 2026-10-24T05:20:08.8186754Z 196 │ │ }), 2026-10-24T05:20:08.8187012Z 197 │ │ message: Effect.fn("mcpOverAcpBridge.message")(function* (request) { 2026-10-24T05:20:08.8187342Z 198 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T05:20:08.8187624Z 199 │ │ const id = ++connection.nextRequestId; 2026-10-24T05:20:08.8187884Z 200 │ │ const payloads = yield* send(connection, { 2026-10-24T05:20:08.8188116Z 201 │ │ jsonrpc: "2.0", 2026-10-24T05:20:08.8188329Z 202 │ │ id, 2026-10-24T05:20:08.8188559Z 203 │ │ method: request.method, 2026-10-24T05:20:08.8188834Z 204 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-24T05:20:08.8189068Z 205 │ │ }); 2026-10-24T05:20:08.8189347Z 206 │ │ const response = payloads.find((payload) => asEnvelope(payload)?.id === id); 2026-10-24T05:20:08.8189677Z 207 │ │ const envelope = asEnvelope(response); 2026-10-24T05:20:08.8189929Z 208 │ │ if (envelope === null) { 2026-10-24T05:20:08.8190158Z 209 │ │ return yield* Effect.fail( 2026-10-24T05:20:08.8190461Z 210 │ │ new AcpMcpOverAcpError("MCP server did not return a matching response."), 2026-10-24T05:20:08.8190722Z 211 │ │ ); 2026-10-24T05:20:08.8190963Z 212 │ │ } 2026-10-24T05:20:08.8191174Z 213 │ │ if (envelope.error !== undefined) { 2026-10-24T05:20:08.8191493Z 214 │ │ return yield* Effect.fail(new AcpMcpOverAcpError(errorMessage(envelope.error))); 2026-10-24T05:20:08.8191759Z 215 │ │ } 2026-10-24T05:20:08.8192015Z 216 │ │ return (envelope.result ?? null) as AcpSchema.MessageMcpResponse; 2026-10-24T05:20:08.8192262Z 217 │ │ }), 2026-10-24T05:20:08.8192619Z 218 │ │ notification: Effect.fn("mcpOverAcpBridge.notification")(function* (request) { 2026-10-24T05:20:08.8193008Z 219 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T05:20:08.8193273Z 220 │ │ yield* send(connection, { 2026-10-24T05:20:08.8193489Z 221 │ │ jsonrpc: "2.0", 2026-10-24T05:20:08.8193700Z 222 │ │ method: request.method, 2026-10-24T05:20:08.8193972Z 223 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-24T05:20:08.8194207Z 224 │ │ }); 2026-10-24T05:20:08.8194377Z 225 │ │ }), 2026-10-24T05:20:08.8194555Z 226 │ │ disconnect, 2026-10-24T05:20:08.8194761Z 227 │ │ dispose: Effect.suspend(() => 2026-10-24T05:20:08.8194985Z 228 │ │ Effect.forEach( 2026-10-24T05:20:08.8195202Z 229 │ │ [...connections.keys()], 2026-10-24T05:20:08.8195489Z 230 │ │ (connectionId) => disconnect({ connectionId }).pipe(Effect.ignore), 2026-10-24T05:20:08.8195754Z 231 │ │ { discard: true }, 2026-10-24T05:20:08.8195946Z 232 │ │ ), 2026-10-24T05:20:08.8196112Z 233 │ │ ), 2026-10-24T05:20:08.8196281Z 234 │ │ }; 2026-10-24T05:20:08.8196497Z 235 │ ╰─▶ }); 2026-10-24T05:20:08.8196682Z ╰──── 2026-10-24T05:20:08.8196984Z  help: Add a `yield` expression inside the generator body, or convert it to a regular function if iteration behavior is not needed. 2026-10-24T05:20:08.8197221Z 2026-10-24T05:20:08.8197428Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T05:20:08.8197753Z ╭─[packages/client-runtime/src/state/usageAccess.ts:3:8] 2026-10-24T05:20:08.8197966Z 2 │ AuthDiagnosticsReadScope, 2026-10-24T05:20:08.8198128Z 3 │ type AuthSessionState, 2026-10-24T05:20:08.8198299Z ·  ────────┬─────── 2026-10-24T05:20:08.8198540Z · ╰── 'AuthSessionState' is imported here 2026-10-24T05:20:08.8198749Z 4 │ sessionGrantsScope, 2026-10-24T05:20:08.8198886Z ╰──── 2026-10-24T05:20:08.8199037Z  help: Consider removing this import. 2026-10-24T05:20:08.8199151Z 2026-10-24T05:20:08.8199337Z ⚠ eslint(no-unused-vars): Identifier 'Arr' is imported but never used. 2026-10-24T05:20:08.8199670Z ╭─[packages/client-runtime/src/state/threadSort.ts:4:13] 2026-10-24T05:20:08.8199928Z 3 │ import type { EnvironmentThreadShell } from "./models.ts"; 2026-10-24T05:20:08.8200133Z 4 │ import * as Arr from "effect/Array"; 2026-10-24T05:20:08.8200305Z ·  ─┬─ 2026-10-24T05:20:08.8200511Z · ╰── 'Arr' is imported here 2026-10-24T05:20:08.8200721Z 5 │ import * as Order from "effect/Order"; 2026-10-24T05:20:08.8200869Z ╰──── 2026-10-24T05:20:08.8201026Z  help: Consider removing this import. 2026-10-24T05:20:08.8201142Z 2026-10-24T05:20:08.8201333Z ⚠ eslint(no-unused-vars): Identifier 'Order' is imported but never used. 2026-10-24T05:20:08.8201640Z ╭─[packages/client-runtime/src/state/threadSort.ts:5:13] 2026-10-24T05:20:08.8201915Z 4 │ import * as Arr from "effect/Array"; 2026-10-24T05:20:08.8202148Z 5 │ import * as Order from "effect/Order"; 2026-10-24T05:20:08.8202322Z ·  ──┬── 2026-10-24T05:20:08.8202538Z · ╰── 'Order' is imported here 2026-10-24T05:20:08.8202725Z 6 │ 2026-10-24T05:20:08.8202834Z ╰──── 2026-10-24T05:20:08.8202985Z  help: Consider removing this import. 2026-10-24T05:20:08.8203095Z 2026-10-24T05:20:08.8203372Z ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'. 2026-10-24T05:20:08.8203759Z ╭─[packages/provider-cursor/src/server/auth.ts:249:20] 2026-10-24T05:20:08.8203953Z 248 │ }, 2026-10-24T05:20:08.8204099Z 249 │ (effect, flow, stopSessions) => 2026-10-24T05:20:08.8204295Z ·  ──────┬───── 2026-10-24T05:20:08.8204545Z · ╰── 'stopSessions' is declared here 2026-10-24T05:20:08.8204760Z 250 │ effect.pipe( 2026-10-24T05:20:08.8204894Z ╰──── 2026-10-24T05:20:08.8205052Z  help: Consider removing this parameter. 2026-10-24T05:20:08.8205170Z 2026-10-24T05:20:08.8205359Z ⚠ eslint(no-unused-vars): Type 'EnvironmentId' is imported but never used. 2026-10-24T05:20:08.8205691Z ╭─[packages/client-runtime/src/state/sharedSettings.ts:2:3] 2026-10-24T05:20:08.8205896Z 1 │ import type { 2026-10-24T05:20:08.8206035Z 2 │ EnvironmentId, 2026-10-24T05:20:08.8206184Z ·  ──────┬────── 2026-10-24T05:20:08.8206402Z · ╰── 'EnvironmentId' is imported here 2026-10-24T05:20:08.8206627Z 3 │ ExecutionEnvironmentCapabilities, 2026-10-24T05:20:08.8206782Z ╰──── 2026-10-24T05:20:08.8206934Z  help: Consider removing this import. 2026-10-24T05:20:08.8207046Z 2026-10-24T05:20:08.8207507Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T05:20:08.8208088Z ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1680:7] 2026-10-24T05:20:08.8208339Z 1679 │ yield* harness.replaceSession; 2026-10-24T05:20:08.8208657Z 1680 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T05:20:08.8208998Z 1681 │ │ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) { 2026-10-24T05:20:08.8209299Z 1682 │ │ break; 2026-10-24T05:20:08.8209516Z 1683 │ │ } 2026-10-24T05:20:08.8209776Z 1684 │ │ yield* Effect.yieldNow; 2026-10-24T05:20:08.8210023Z 1685 │ ╰─▶ } 2026-10-24T05:20:08.8210236Z 1686 │ yield* Queue.offer( 2026-10-24T05:20:08.8210384Z ╰──── 2026-10-24T05:20:08.8210443Z 2026-10-24T05:20:08.8210895Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T05:20:08.8211453Z ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1789:7] 2026-10-24T05:20:08.8211708Z 1788 │ yield* harness.replaceSession; 2026-10-24T05:20:08.8212028Z 1789 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T05:20:08.8212387Z 1790 │ │ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) break; 2026-10-24T05:20:08.8212656Z 1791 │ │ yield* Effect.yieldNow; 2026-10-24T05:20:08.8212909Z 1792 │ ╰─▶ } 2026-10-24T05:20:08.8213171Z 1793 │ expect(yield* Ref.get(harness.subscriptionCount)).toBe(2); 2026-10-24T05:20:08.8213365Z ╰──── 2026-10-24T05:20:08.8213421Z 2026-10-24T05:20:08.8213625Z ⚠ eslint(no-unused-vars): Identifier 'Duration' is imported but never used. 2026-10-24T05:20:08.8213959Z ╭─[packages/provider-pi/src/server/adapter.test.ts:24:13] 2026-10-24T05:20:08.8214203Z 23 │ import * as Deferred from "effect/Deferred"; 2026-10-24T05:20:08.8214409Z 24 │ import * as Duration from "effect/Duration"; 2026-10-24T05:20:08.8214596Z ·  ────┬─── 2026-10-24T05:20:08.8214826Z · ╰── 'Duration' is imported here 2026-10-24T05:20:08.8215054Z 25 │ import * as Effect from "effect/Effect"; 2026-10-24T05:20:08.8215210Z ╰──── 2026-10-24T05:20:08.8215365Z  help: Consider removing this import. 2026-10-24T05:20:08.8215477Z 2026-10-24T05:20:08.8215733Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T05:20:08.8216104Z ╭─[packages/provider-pi/src/server/adapter.ts:3405:7] 2026-10-24T05:20:08.8216298Z 3404 │ 2026-10-24T05:20:08.8216553Z 3405 │ const layer: Layer.Layer = 2026-10-24T05:20:08.8216815Z ·  ──┬── 2026-10-24T05:20:08.8217028Z · ╰── 'layer' is declared here 2026-10-24T05:20:08.8217226Z 3406 │ Layer.effect( 2026-10-24T05:20:08.8217362Z ╰──── 2026-10-24T05:20:08.8217524Z  help: Consider removing this declaration. 2026-10-24T05:20:08.8217646Z 2026-10-24T05:20:08.8217847Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:20:08.8218181Z ╭─[apps/mobile/src/state/use-thread-outbox-drain.ts:1315:5] 2026-10-24T05:20:08.8218409Z 1314 │ queuedMessagesByThreadKey, 2026-10-24T05:20:08.8218572Z 1315 │ retryTick, 2026-10-24T05:20:08.8218721Z ·  ────┬──── 2026-10-24T05:20:08.8219015Z · ╰── Unnecessary dependency `retryTick` 2026-10-24T05:20:08.8219260Z 1316 │ restoreQueuedMessage, 2026-10-24T05:20:08.8219403Z ╰──── 2026-10-24T05:20:08.8219803Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T05:20:08.8220395Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8220690Z 2026-10-24T05:20:08.8220890Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T05:20:08.8221221Z ╭─[packages/client-runtime/src/state/filesystem.ts:3:8] 2026-10-24T05:20:08.8221432Z 2 │ AuthFilesystemReadScope, 2026-10-24T05:20:08.8221601Z 3 │ type AuthSessionState, 2026-10-24T05:20:08.8221774Z ·  ────────┬─────── 2026-10-24T05:20:08.8222020Z · ╰── 'AuthSessionState' is imported here 2026-10-24T05:20:08.8222240Z 4 │ type FilesystemBrowseEntry, 2026-10-24T05:20:08.8222385Z ╰──── 2026-10-24T05:20:08.8222536Z  help: Consider removing this import. 2026-10-24T05:20:08.8222651Z 2026-10-24T05:20:08.8222867Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T05:20:08.8223213Z ╭─[apps/mobile/src/state/use-model-option-memory.ts:21:7] 2026-10-24T05:20:08.8223421Z 20 │ [instanceId]: { 2026-10-24T05:20:08.8223585Z 21 │ ...(state[instanceId] ?? {}), 2026-10-24T05:20:08.8223789Z ·  ──────────────────────────── 2026-10-24T05:20:08.8223973Z 22 │ [model]: options, 2026-10-24T05:20:08.8224110Z ╰──── 2026-10-24T05:20:08.8224429Z  help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback. 2026-10-24T05:20:08.8224681Z 2026-10-24T05:20:08.8224878Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:20:08.8225189Z ╭─[apps/mobile/src/state/thread-order.ts:29:7] 2026-10-24T05:20:08.8225386Z 28 │ getPendingThreadOrder(); 2026-10-24T05:20:08.8225560Z 29 │ }, [nowMinute, snoozeWakeTick]); 2026-10-24T05:20:08.8225785Z ·  ────┬──── ───────┬────── 2026-10-24T05:20:08.8226109Z · │ ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T05:20:08.8226436Z · ╰── Unnecessary dependency `nowMinute` 2026-10-24T05:20:08.8226651Z 30 │ return pending; 2026-10-24T05:20:08.8226785Z ╰──── 2026-10-24T05:20:08.8227127Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T05:20:08.8227706Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8227999Z 2026-10-24T05:20:08.8228166Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T05:20:08.8228481Z ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:372:47] 2026-10-24T05:20:08.8228770Z 371 │ const { open, onOpenChange, onSnooze, timestampFormat } = props; 2026-10-24T05:20:08.8229125Z 372 │ const presets = open ? resolveSnoozePresets(new Date(), timestampFormat) : []; 2026-10-24T05:20:08.8229448Z ·  ─────┬──── 2026-10-24T05:20:08.8229764Z · ╰── Cannot call impure function 2026-10-24T05:20:08.8229983Z 373 │ return ( 2026-10-24T05:20:08.8230108Z ╰──── 2026-10-24T05:20:08.8230435Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T05:20:08.8231050Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T05:20:08.8231326Z 2026-10-24T05:20:08.8231497Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T05:20:08.8231819Z ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:853:39] 2026-10-24T05:20:08.8232064Z 852 │ if (snoozeGateClock.thread !== thread) { 2026-10-24T05:20:08.8232309Z 853 │ setSnoozeGateClock({ thread, now: new Date().toISOString() }); 2026-10-24T05:20:08.8232559Z ·  ─────┬──── 2026-10-24T05:20:08.8232838Z · ╰── Cannot call impure function 2026-10-24T05:20:08.8233041Z 854 │ } 2026-10-24T05:20:08.8233158Z ╰──── 2026-10-24T05:20:08.8233490Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T05:20:08.8234047Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T05:20:08.8234330Z 2026-10-24T05:20:08.8234660Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T05:20:08.8235110Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:50:18] 2026-10-24T05:20:08.8235425Z 49 │ for (const tool of ["sendMessage", "followupTask", "interruptAgent", "listAgents"]) { 2026-10-24T05:20:08.8235761Z 50 │ assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true); 2026-10-24T05:20:08.8236019Z ·  ───────── 2026-10-24T05:20:08.8236300Z 51 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true); 2026-10-24T05:20:08.8236532Z ╰──── 2026-10-24T05:20:08.8236593Z 2026-10-24T05:20:08.8236921Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T05:20:08.8237363Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:51:18] 2026-10-24T05:20:08.8237681Z 50 │ assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true); 2026-10-24T05:20:08.8238030Z 51 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true); 2026-10-24T05:20:08.8238300Z ·  ───────── 2026-10-24T05:20:08.8238450Z 52 │ } 2026-10-24T05:20:08.8238565Z ╰──── 2026-10-24T05:20:08.8238619Z 2026-10-24T05:20:08.8239018Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T05:20:08.8239499Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:55:5] 2026-10-24T05:20:08.8239740Z 54 │ assert.equal( 2026-10-24T05:20:08.8239991Z 55 │ Schema.is(CodexSchema.ServerNotification__CollabAgentToolCallStatus)("interrupted"), 2026-10-24T05:20:08.8240245Z ·  ───────── 2026-10-24T05:20:08.8240389Z 56 │ true, 2026-10-24T05:20:08.8240511Z ╰──── 2026-10-24T05:20:08.8240566Z 2026-10-24T05:20:08.8240888Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T05:20:08.8241335Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:59:5] 2026-10-24T05:20:08.8241555Z 58 │ assert.equal( 2026-10-24T05:20:08.8241824Z 59 │ Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentToolCallStatus)("interrupted"), 2026-10-24T05:20:08.8242084Z ·  ───────── 2026-10-24T05:20:08.8242232Z 60 │ true, 2026-10-24T05:20:08.8242351Z ╰──── 2026-10-24T05:20:08.8242408Z 2026-10-24T05:20:08.8242737Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T05:20:08.8243184Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:103:16] 2026-10-24T05:20:08.8243397Z 102 │ 2026-10-24T05:20:08.8243628Z 103 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse)(resumeResponse), true); 2026-10-24T05:20:08.8243893Z ·  ───────── 2026-10-24T05:20:08.8244047Z 104 │ }); 2026-10-24T05:20:08.8244163Z ╰──── 2026-10-24T05:20:08.8244225Z 2026-10-24T05:20:08.8244401Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T05:20:08.8244759Z ╭─[packages/provider-opencode/src/server/OpenCodeRuntime.environment.test.ts:53:14] 2026-10-24T05:20:08.8245045Z 52 │ 2026-10-24T05:20:08.8245171Z 53 │ for (const {} of [ 2026-10-24T05:20:08.8245332Z ·  ── 2026-10-24T05:20:08.8245492Z 54 │ { healthy: true }, 2026-10-24T05:20:08.8245630Z ╰──── 2026-10-24T05:20:08.8245913Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T05:20:08.8246137Z 2026-10-24T05:20:08.8246324Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-24T05:20:08.8260761Z ╭─[packages/client-runtime/src/state/shell.ts:189:5] 2026-10-24T05:20:08.8261031Z 186 │ let waiting = yield* Ref.get(awaitingCompletion); 2026-10-24T05:20:08.8261229Z 187 │ let next = initial; 2026-10-24T05:20:08.8261393Z ·  ──┬─ 2026-10-24T05:20:08.8261611Z · ╰── From this accumulator 2026-10-24T05:20:08.8261823Z 188 │ let receivedSnapshot = false; 2026-10-24T05:20:08.8261994Z 189 │ for (const item of items) { 2026-10-24T05:20:08.8262156Z ·  ─┬─ 2026-10-24T05:20:08.8262339Z · ╰── For this loop 2026-10-24T05:20:08.8262543Z 190 │ if (item.kind === "synchronized") { 2026-10-24T05:20:08.8262712Z 191 │ waiting = false; 2026-10-24T05:20:08.8262887Z 192 │ if (Option.isSome(next.snapshot)) { 2026-10-24T05:20:08.8263113Z 193 │ next = { ...next, status: "live", error: Option.none() }; 2026-10-24T05:20:08.8263425Z ·  ───┬─── 2026-10-24T05:20:08.8263686Z · ╰── From this spread 2026-10-24T05:20:08.8263873Z 194 │ } 2026-10-24T05:20:08.8263995Z ╰──── 2026-10-24T05:20:08.8264205Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-24T05:20:08.8264524Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T05:20:08.8264690Z 2026-10-24T05:20:08.8264913Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T05:20:08.8265264Z ╭─[apps/mobile/src/state/use-composer-drafts.ts:1022:15] 2026-10-24T05:20:08.8265477Z 1021 │ instanceId, 2026-10-24T05:20:08.8265714Z 1022 │ { ...(persisted.modelOptionMemory[instanceId] ?? {}), ...models }, 2026-10-24T05:20:08.8266014Z ·  ────────────────────────────────────────────────── 2026-10-24T05:20:08.8266221Z 1023 │ ]), 2026-10-24T05:20:08.8266351Z ╰──── 2026-10-24T05:20:08.8266670Z  help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback. 2026-10-24T05:20:08.8266923Z 2026-10-24T05:20:08.8267388Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T05:20:08.8267946Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:169:7] 2026-10-24T05:20:08.8268162Z 168 │ }); 2026-10-24T05:20:08.8268444Z 169 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T05:20:08.8268827Z 170 │ │ if ((yield* SubscriptionRef.get(shellState)).status === "synchronizing") break; 2026-10-24T05:20:08.8269123Z 171 │ │ yield* Effect.yieldNow; 2026-10-24T05:20:08.8269373Z 172 │ ╰─▶ } 2026-10-24T05:20:08.8269574Z 173 │ 2026-10-24T05:20:08.8269722Z ╰──── 2026-10-24T05:20:08.8269781Z 2026-10-24T05:20:08.8270231Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T05:20:08.8270923Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:178:7] 2026-10-24T05:20:08.8271240Z 177 │ yield* Deferred.succeed(releaseSave, undefined); 2026-10-24T05:20:08.8271561Z 178 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T05:20:08.8271875Z 179 │ │ if ((yield* Ref.get(saved)).length > 0) break; 2026-10-24T05:20:08.8272125Z 180 │ │ yield* Effect.yieldNow; 2026-10-24T05:20:08.8272372Z 181 │ ╰─▶ } 2026-10-24T05:20:08.8272564Z 182 │ 2026-10-24T05:20:08.8272680Z ╰──── 2026-10-24T05:20:08.8272738Z 2026-10-24T05:20:08.8273194Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T05:20:08.8273754Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:307:7] 2026-10-24T05:20:08.8274036Z 306 │ yield* Deferred.succeed(releaseUnenrichedSave, undefined); 2026-10-24T05:20:08.8274366Z 307 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T05:20:08.8274677Z 308 │ │ const values = yield* Ref.get(saved); 2026-10-24T05:20:08.8275010Z 309 │ │ if (values.length > 0 && values.at(-1)?.projects[0]?.repositoryIdentity != null) { 2026-10-24T05:20:08.8275288Z 310 │ │ break; 2026-10-24T05:20:08.8275470Z 311 │ │ } 2026-10-24T05:20:08.8275675Z 312 │ │ yield* Effect.yieldNow; 2026-10-24T05:20:08.8275932Z 313 │ ╰─▶ } 2026-10-24T05:20:08.8276125Z 314 │ 2026-10-24T05:20:08.8276240Z ╰──── 2026-10-24T05:20:08.8276297Z 2026-10-24T05:20:08.8276557Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T05:20:08.8276940Z ╭─[packages/provider-opencode/src/server/adapter.ts:3755:7] 2026-10-24T05:20:08.8277142Z 3754 │ 2026-10-24T05:20:08.8277401Z 3755 │ const layer: Layer.Layer = 2026-10-24T05:20:08.8277674Z ·  ──┬── 2026-10-24T05:20:08.8277892Z · ╰── 'layer' is declared here 2026-10-24T05:20:08.8278089Z 3756 │ Layer.effect( 2026-10-24T05:20:08.8278225Z ╰──── 2026-10-24T05:20:08.8278392Z  help: Consider removing this declaration. 2026-10-24T05:20:08.8278514Z 2026-10-24T05:20:08.8278970Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const. 2026-10-24T05:20:08.8279496Z ╭─[packages/effect-acp/src/protocol.test.ts:500:31] 2026-10-24T05:20:08.8279718Z 499 │ 2026-10-24T05:20:08.8279893Z 500 │ const response = yield* Schema.decodeUnknownEffect( 2026-10-24T05:20:08.8280150Z ·  ────────────────────────── 2026-10-24T05:20:08.8280386Z 501 │ Schema.fromJsonString(JsonRpcErrorResponse), 2026-10-24T05:20:08.8280564Z ╰──── 2026-10-24T05:20:08.8280619Z 2026-10-24T05:20:08.8281027Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T05:20:08.8281486Z ╭─[packages/effect-acp/src/schema.test.ts:18:12] 2026-10-24T05:20:08.8281778Z 17 │ const command = { name: "plan", description: "Make a plan", input: { hint: "Task" } }; 2026-10-24T05:20:08.8282067Z 18 │ expect(Schema.is(V1.AvailableCommand)(command)).toBe(true); 2026-10-24T05:20:08.8282283Z ·  ───────── 2026-10-24T05:20:08.8282443Z 19 │ expect( 2026-10-24T05:20:08.8282570Z ╰──── 2026-10-24T05:20:08.8282628Z 2026-10-24T05:20:08.8282956Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T05:20:08.8283382Z ╭─[packages/effect-acp/src/schema.test.ts:20:7] 2026-10-24T05:20:08.8283572Z 19 │ expect( 2026-10-24T05:20:08.8283817Z 20 │ Schema.is(V2.AvailableCommand)({ ...command, input: { type: "text", hint: "Task" } }), 2026-10-24T05:20:08.8284056Z ·  ───────── 2026-10-24T05:20:08.8284211Z 21 │ ).toBe(true); 2026-10-24T05:20:08.8284342Z ╰──── 2026-10-24T05:20:08.8284400Z 2026-10-24T05:20:08.8284606Z ⚠ typescript(no-extraneous-class): Unexpected class with only a constructor. 2026-10-24T05:20:08.8284927Z ╭─[apps/desktop/src/preview/Manager.test.ts:158:18] 2026-10-24T05:20:08.8285171Z 157 │ BrowserWindow: browserWindowConstructor, 2026-10-24T05:20:08.8285450Z 158 │ ╭─▶ ClipboardItem: class { 2026-10-24T05:20:08.8285747Z 159 │ │ constructor(data: Record) { 2026-10-24T05:20:08.8286006Z 160 │ │ clipboardItemConstructor(data); 2026-10-24T05:20:08.8286212Z 161 │ │ } 2026-10-24T05:20:08.8286431Z 162 │ ╰─▶ }, 2026-10-24T05:20:08.8286632Z 163 │ clipboard: { 2026-10-24T05:20:08.8286767Z ╰──── 2026-10-24T05:20:08.8286991Z  help: Try replacing this class with a standalone function or deleting it entirely 2026-10-24T05:20:08.8287165Z 2026-10-24T05:20:08.8287426Z ⚠ unicorn(prefer-add-event-listener): Prefer `addEventListener()` over their `on`-function counterparts. 2026-10-24T05:20:08.8287811Z ╭─[apps/web/src/components/device/deviceHubApi.test.ts:12:14] 2026-10-24T05:20:08.8288121Z 11 │ addEventListener(_type: string, listener: (event: { data: string }) => void) { 2026-10-24T05:20:08.8288363Z 12 │ this.onmessage = listener; 2026-10-24T05:20:08.8288544Z ·  ───────── 2026-10-24T05:20:08.8288697Z 13 │ } 2026-10-24T05:20:08.8288820Z ╰──── 2026-10-24T05:20:08.8289189Z  help: `addEventListener()` can register multiple handlers and accepts options such as `{ once: true }`; assigning to `on` replaces any previously registered handler. 2026-10-24T05:20:08.8289479Z 2026-10-24T05:20:08.8289712Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable. 2026-10-24T05:20:08.8290046Z ╭─[apps/web/src/components/device/deviceHubApi.test.ts:16:9] 2026-10-24T05:20:08.8290264Z 15 │ constructor() { 2026-10-24T05:20:08.8290416Z 16 │ source = this; 2026-10-24T05:20:08.8290576Z ·  ────── 2026-10-24T05:20:08.8290778Z 17 │ } 2026-10-24T05:20:08.8290934Z ╰──── 2026-10-24T05:20:08.8291261Z  help: Assigning a variable to this instead of properly using arrow lambdas may be a symptom of pre-ES2015 practices or not managing scope well. 2026-10-24T05:20:08.8291518Z 2026-10-24T05:20:08.8291892Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownEffect(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T05:20:08.8292344Z ╭─[packages/effect-acp/src/client.ts:1269:11] 2026-10-24T05:20:08.8292631Z 1268 │ extNotificationHandlers.set(CLIENT_METHODS.mcp_message, (params) => 2026-10-24T05:20:08.8292964Z 1269 │ Schema.decodeUnknownEffect(AcpSchemaV2.MessageMcpNotification)(params).pipe( 2026-10-24T05:20:08.8293252Z ·  ────────────────────────── 2026-10-24T05:20:08.8293516Z 1270 │ Effect.mapError(() => AcpError.AcpRequestError.invalidParams()), 2026-10-24T05:20:08.8293723Z ╰──── 2026-10-24T05:20:08.8293783Z 2026-10-24T05:20:08.8294234Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const. 2026-10-24T05:20:08.8294759Z ╭─[packages/effect-acp/src/errors.test.ts:129:28] 2026-10-24T05:20:08.8294985Z 128 │ const secret = "acp-summary-secret"; 2026-10-24T05:20:08.8295205Z 129 │ const cause = yield* Schema.decodeUnknownEffect( 2026-10-24T05:20:08.8295455Z ·  ────────────────────────── 2026-10-24T05:20:08.8295648Z 130 │ Schema.Struct({ 2026-10-24T05:20:08.8295789Z ╰──── 2026-10-24T05:20:08.8295848Z 2026-10-24T05:20:08.8296115Z ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'. 2026-10-24T05:20:08.8296486Z ╭─[apps/server/src/usage/UsageService.ts:169:7] 2026-10-24T05:20:08.8296665Z 168 │ 2026-10-24T05:20:08.8296805Z 169 │ const layerTest = Layer.succeed( 2026-10-24T05:20:08.8296982Z ·  ────┬──── 2026-10-24T05:20:08.8297206Z · ╰── 'layerTest' is declared here 2026-10-24T05:20:08.8297408Z 170 │ UsageService, 2026-10-24T05:20:08.8297543Z ╰──── 2026-10-24T05:20:08.8297702Z  help: Consider removing this declaration. 2026-10-24T05:20:08.8297820Z 2026-10-24T05:20:08.8298283Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T05:20:08.8298872Z ╭─[apps/mobile/src/features/agent-awareness/remoteRegistration.test.ts:223:5] 2026-10-24T05:20:08.8299123Z 222 │ let idlePasses = 0; 2026-10-24T05:20:08.8299361Z 223 │ ╭─▶ for (;;) { 2026-10-24T05:20:08.8299679Z 224 │ │ yield* Effect.promise(() => Promise.resolve()); 2026-10-24T05:20:08.8299971Z 225 │ │ const pending = backgroundRuntime.pending.shift(); 2026-10-24T05:20:08.8300219Z 226 │ │ if (!pending) { 2026-10-24T05:20:08.8300428Z 227 │ │ idlePasses++; 2026-10-24T05:20:08.8300644Z 228 │ │ if (idlePasses >= 3) { 2026-10-24T05:20:08.8300921Z 229 │ │ return; 2026-10-24T05:20:08.8301135Z 230 │ │ } 2026-10-24T05:20:08.8301321Z 231 │ │ continue; 2026-10-24T05:20:08.8301500Z 232 │ │ } 2026-10-24T05:20:08.8301689Z 233 │ │ idlePasses = 0; 2026-10-24T05:20:08.8301916Z 234 │ │ const exit = yield* Effect.exit( 2026-10-24T05:20:08.8302256Z 235 │ │ pending.operation as Effect.Effect, 2026-10-24T05:20:08.8302538Z 236 │ │ ); 2026-10-24T05:20:08.8302740Z 237 │ │ yield* Effect.sync(() => { 2026-10-24T05:20:08.8302966Z 238 │ │ pending.resolve(exit); 2026-10-24T05:20:08.8303173Z 239 │ │ }); 2026-10-24T05:20:08.8303400Z 240 │ ╰─▶ } 2026-10-24T05:20:08.8303590Z 241 │ }, 2026-10-24T05:20:08.8303712Z ╰──── 2026-10-24T05:20:08.8303770Z 2026-10-24T05:20:08.8304218Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.encodeUnknownSync(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const. 2026-10-24T05:20:08.8304751Z ╭─[packages/contracts/src/composerContext.test.ts:181:18] 2026-10-24T05:20:08.8305025Z 180 │ it("sends a message without the records the wire cannot carry", () => { 2026-10-24T05:20:08.8305348Z 181 │ const wire = Schema.encodeUnknownSync(Schema.toCodecJson(OrchestrationMessageContext))({ 2026-10-24T05:20:08.8305646Z ·  ──────────────────────── 2026-10-24T05:20:08.8305830Z 182 │ version: 1, 2026-10-24T05:20:08.8305960Z ╰──── 2026-10-24T05:20:08.8306016Z 2026-10-24T05:20:08.8306471Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T05:20:08.8307007Z ╭─[apps/server/src/usage/UsageService.test.ts:2615:7] 2026-10-24T05:20:08.8307243Z 2614 │ let orphanedAt: number | undefined; 2026-10-24T05:20:08.8307585Z 2615 │ ╭─▶ for (let interruptAt = 1; interruptAt <= 31; interruptAt += 1) { 2026-10-24T05:20:08.8307919Z 2616 │ │ const tasks: Array<() => void> = []; 2026-10-24T05:20:08.8308204Z 2617 │ │ const dispatcher: Scheduler.SchedulerDispatcher = { 2026-10-24T05:20:08.8308498Z 2618 │ │ scheduleTask: (task) => tasks.push(task), 2026-10-24T05:20:08.8308737Z 2619 │ │ flush: () => { 2026-10-24T05:20:08.8308972Z 2620 │ │ let task: (() => void) | undefined; 2026-10-24T05:20:08.8309249Z 2621 │ │ while ((task = tasks.shift()) !== undefined) task(); 2026-10-24T05:20:08.8309484Z 2622 │ │ }, 2026-10-24T05:20:08.8309703Z 2623 │ │ }; 2026-10-24T05:20:08.8309874Z 2624 │ │ 2026-10-24T05:20:08.8310118Z 2625 │ │ let requestFiber: Fiber.Fiber | undefined; 2026-10-24T05:20:08.8310445Z 2626 │ │ let requestChecks = 0; 2026-10-24T05:20:08.8310719Z 2627 │ │ const scheduler: Scheduler.Scheduler = { 2026-10-24T05:20:08.8311018Z 2628 │ │ executionMode: "async", 2026-10-24T05:20:08.8311260Z 2629 │ │ makeDispatcher: () => dispatcher, 2026-10-24T05:20:08.8311503Z 2630 │ │ shouldYield: (fiber) => { 2026-10-24T05:20:08.8311761Z 2631 │ │ if (fiber !== requestFiber) return false; 2026-10-24T05:20:08.8312006Z 2632 │ │ requestChecks += 1; 2026-10-24T05:20:08.8312269Z 2633 │ │ if (requestChecks !== interruptAt) return false; 2026-10-24T05:20:08.8312530Z 2634 │ │ fiber.interruptUnsafe(); 2026-10-24T05:20:08.8312758Z 2635 │ │ return true; 2026-10-24T05:20:08.8312954Z 2636 │ │ }, 2026-10-24T05:20:08.8313134Z 2637 │ │ }; 2026-10-24T05:20:08.8313299Z 2638 │ │ 2026-10-24T05:20:08.8313506Z 2639 │ │ const input: UsageSummaryInput = { 2026-10-24T05:20:08.8313731Z 2640 │ │ ...WINDOW, 2026-10-24T05:20:08.8313968Z 2641 │ │ sinceDay: UsageDay.make("2026-09-01"), 2026-10-24T05:20:08.8314297Z 2642 │ │ untilDay: UsageDay.make(`2026-08-${String(interruptAt).padStart(2, "0")}`), 2026-10-24T05:20:08.8314566Z 2643 │ │ }; 2026-10-24T05:20:08.8314774Z 2644 │ │ const first = yield* service 2026-10-24T05:20:08.8314998Z 2645 │ │ .readSummary(input) 2026-10-24T05:20:08.8315209Z 2646 │ │ .pipe( 2026-10-24T05:20:08.8315413Z 2647 │ │ Effect.exit, 2026-10-24T05:20:08.8315686Z 2648 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-24T05:20:08.8315949Z 2649 │ │ Effect.forkChild, 2026-10-24T05:20:08.8316147Z 2650 │ │ ); 2026-10-24T05:20:08.8316343Z 2651 │ │ requestFiber = first; 2026-10-24T05:20:08.8316565Z 2652 │ │ yield* Effect.yieldNow; 2026-10-24T05:20:08.8316786Z 2653 │ │ dispatcher.flush(); 2026-10-24T05:20:08.8316976Z 2654 │ │ 2026-10-24T05:20:08.8317211Z 2655 │ │ const second = yield* service.readSummary(input).pipe( 2026-10-24T05:20:08.8317531Z 2656 │ │ Effect.match({ 2026-10-24T05:20:08.8317803Z 2657 │ │ onFailure: (error) => error.reason, 2026-10-24T05:20:08.8318061Z 2658 │ │ onSuccess: () => "success" as const, 2026-10-24T05:20:08.8318278Z 2659 │ │ }), 2026-10-24T05:20:08.8318529Z 2660 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-24T05:20:08.8318789Z 2661 │ │ Effect.forkChild, 2026-10-24T05:20:08.8318981Z 2662 │ │ ); 2026-10-24T05:20:08.8319184Z 2663 │ │ yield* Effect.yieldNow; 2026-10-24T05:20:08.8319403Z 2664 │ │ dispatcher.flush(); 2026-10-24T05:20:08.8319686Z 2665 │ │ const secondExit = second.pollUnsafe(); 2026-10-24T05:20:08.8319939Z 2666 │ │ if (secondExit === undefined) { 2026-10-24T05:20:08.8320176Z 2667 │ │ second.interruptUnsafe(); 2026-10-24T05:20:08.8320409Z 2668 │ │ orphanedAt = interruptAt; 2026-10-24T05:20:08.8320622Z 2669 │ │ break; 2026-10-24T05:20:08.8320805Z 2670 │ │ } 2026-10-24T05:20:08.8321023Z 2671 │ │ if (Exit.isFailure(secondExit)) { 2026-10-24T05:20:08.8321305Z 2672 │ │ assert.fail("the matching request fiber was interrupted"); 2026-10-24T05:20:08.8321542Z 2673 │ │ } 2026-10-24T05:20:08.8321785Z 2674 │ │ assert.strictEqual(secondExit.value, "invalidWindow"); 2026-10-24T05:20:08.8322078Z 2675 │ ╰─▶ } 2026-10-24T05:20:08.8322271Z 2676 │ 2026-10-24T05:20:08.8322392Z ╰──── 2026-10-24T05:20:08.8322451Z 2026-10-24T05:20:08.8322659Z ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed 2026-10-24T05:20:08.8322962Z ╭─[packages/contracts/src/rpc.ts:297:8] 2026-10-24T05:20:08.8323146Z 296 │ } from "./device.ts"; 2026-10-24T05:20:08.8323321Z 297 │ import {} from "./previewAutomation.ts"; 2026-10-24T05:20:08.8323500Z ·  ── 2026-10-24T05:20:08.8323642Z 298 │ import { 2026-10-24T05:20:08.8323761Z ╰──── 2026-10-24T05:20:08.8323897Z  help: Remove empty braces 2026-10-24T05:20:08.8323998Z 2026-10-24T05:20:08.8324265Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:20:08.8324650Z ╭─[apps/mobile/src/features/files/FileTreeBrowser.tsx:155:5] 2026-10-24T05:20:08.8324853Z 150 │ 2026-10-24T05:20:08.8324976Z 151 │ useEffect(() => { 2026-10-24T05:20:08.8325129Z ·  ────┬──── 2026-10-24T05:20:08.8325346Z · ╰── This is the containing effect 2026-10-24T05:20:08.8325563Z 152 │ if (!controlledSelectedPath) { 2026-10-24T05:20:08.8325727Z 153 │ return; 2026-10-24T05:20:08.8325857Z 154 │ } 2026-10-24T05:20:08.8326004Z 155 │ setExpandedPaths((current) => { 2026-10-24T05:20:08.8326186Z ·  ────────┬─────── 2026-10-24T05:20:08.8326453Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:20:08.8326800Z 156 │ const ancestors = ancestorPaths(controlledSelectedPath); 2026-10-24T05:20:08.8327022Z ╰──── 2026-10-24T05:20:08.8327672Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T05:20:08.8328526Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T05:20:08.8328828Z 2026-10-24T05:20:08.8329087Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T05:20:08.8329453Z ╭─[apps/server/src/serverRuntimeStartup.ts:728:7] 2026-10-24T05:20:08.8329678Z 727 │ 2026-10-24T05:20:08.8329822Z 728 │ const layer = layerWithOptions(); 2026-10-24T05:20:08.8329994Z ·  ──┬── 2026-10-24T05:20:08.8330202Z · ╰── 'layer' is declared here 2026-10-24T05:20:08.8330385Z ╰──── 2026-10-24T05:20:08.8330544Z  help: Consider removing this declaration. 2026-10-24T05:20:08.8330666Z 2026-10-24T05:20:08.8330868Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:20:08.8331212Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:257:7] 2026-10-24T05:20:08.8331465Z 256 │ return () => cancelAnimationFrame(frame); 2026-10-24T05:20:08.8331657Z 257 │ }, [props.path, targetIndex]); 2026-10-24T05:20:08.8331837Z ·  ─────┬──── 2026-10-24T05:20:08.8332081Z · ╰── Unnecessary dependency `props.path` 2026-10-24T05:20:08.8332285Z 258 │ 2026-10-24T05:20:08.8332395Z ╰──── 2026-10-24T05:20:08.8332740Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T05:20:08.8333318Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8333607Z 2026-10-24T05:20:08.8333798Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T05:20:08.8334134Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:293:23] 2026-10-24T05:20:08.8334365Z 292 │ 2026-10-24T05:20:08.8336593Z ·  ─────────── 2026-10-24T05:20:08.8336767Z 310 │ {body} 2026-10-24T05:20:08.8336957Z ╰──── 2026-10-24T05:20:08.8337190Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T05:20:08.8337340Z 2026-10-24T05:20:08.8337797Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.encodeUnknownSync(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const. 2026-10-24T05:20:08.8338330Z ╭─[packages/contracts/src/baseSchemas.test.ts:39:9] 2026-10-24T05:20:08.8338536Z 38 │ JSON.stringify( 2026-10-24T05:20:08.8338744Z 39 │ Schema.encodeUnknownSync(Schema.toCodecJson(Named))([ 2026-10-24T05:20:08.8338975Z ·  ──────────────────────── 2026-10-24T05:20:08.8339148Z 40 │ { name: "a" }, 2026-10-24T05:20:08.8339285Z ╰──── 2026-10-24T05:20:08.8339343Z 2026-10-24T05:20:08.8339649Z ⚠ eslint(no-unused-vars): Variable 'useDragRegion' is declared but never used. Unused variables should start with a '_'. 2026-10-24T05:20:08.8340052Z ╭─[apps/web/src/components/preview/PreviewPanelShell.tsx:61:9] 2026-10-24T05:20:08.8340260Z 60 │ ) { 2026-10-24T05:20:08.8340494Z 61 │ const useDragRegion = isElectron && props.mode !== "sheet" && props.mode !== "embedded"; 2026-10-24T05:20:08.8340745Z ·  ──────┬────── 2026-10-24T05:20:08.8340986Z · ╰── 'useDragRegion' is declared here 2026-10-24T05:20:08.8341219Z 62 │ const isInline = props.mode === "inline"; 2026-10-24T05:20:08.8341383Z ╰──── 2026-10-24T05:20:08.8341542Z  help: Consider removing this declaration. 2026-10-24T05:20:08.8341661Z 2026-10-24T05:20:08.8341924Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:20:08.8342340Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:79:5] 2026-10-24T05:20:08.8342569Z 76 │ 2026-10-24T05:20:08.8342693Z 77 │ useEffect(() => { 2026-10-24T05:20:08.8342850Z ·  ────┬──── 2026-10-24T05:20:08.8343069Z · ╰── This is the containing effect 2026-10-24T05:20:08.8343333Z 78 │ const { host, code } = parsePairingUrl(connectionPairingUrl); 2026-10-24T05:20:08.8343537Z 79 │ setHostInput(host); 2026-10-24T05:20:08.8343699Z ·  ──────┬───── 2026-10-24T05:20:08.8343962Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:20:08.8344194Z 80 │ setCodeInput(code); 2026-10-24T05:20:08.8344333Z ╰──── 2026-10-24T05:20:08.8344980Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T05:20:08.8345822Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T05:20:08.8346127Z 2026-10-24T05:20:08.8346384Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:20:08.8346799Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:89:5] 2026-10-24T05:20:08.8347027Z 82 │ 2026-10-24T05:20:08.8347205Z 83 │ useEffect(() => { 2026-10-24T05:20:08.8347388Z ·  ────┬──── 2026-10-24T05:20:08.8347607Z · ╰── This is the containing effect 2026-10-24T05:20:08.8347827Z 84 │ if (routePairingUrl.length === 0) { 2026-10-24T05:20:08.8347996Z 85 │ return; 2026-10-24T05:20:08.8348127Z 86 │ } 2026-10-24T05:20:08.8348244Z 87 │ 2026-10-24T05:20:08.8348421Z 88 │ const { host, code } = parsePairingUrl(routePairingUrl); 2026-10-24T05:20:08.8348619Z 89 │ setHostInput(host); 2026-10-24T05:20:08.8348785Z ·  ──────┬───── 2026-10-24T05:20:08.8349039Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:20:08.8349273Z 90 │ setCodeInput(code); 2026-10-24T05:20:08.8349412Z ╰──── 2026-10-24T05:20:08.8350110Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T05:20:08.8351198Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T05:20:08.8351497Z 2026-10-24T05:20:08.8351754Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:20:08.8352167Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:95:7] 2026-10-24T05:20:08.8352392Z 92 │ 2026-10-24T05:20:08.8352514Z 93 │ useEffect(() => { 2026-10-24T05:20:08.8352672Z ·  ────┬──── 2026-10-24T05:20:08.8352885Z · ╰── This is the containing effect 2026-10-24T05:20:08.8353104Z 94 │ if (pairingConnectionError) { 2026-10-24T05:20:08.8353277Z 95 │ setIsSubmitting(false); 2026-10-24T05:20:08.8353450Z ·  ───────┬─────── 2026-10-24T05:20:08.8353712Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:20:08.8353934Z 96 │ } 2026-10-24T05:20:08.8354048Z ╰──── 2026-10-24T05:20:08.8354686Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T05:20:08.8355532Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T05:20:08.8355834Z 2026-10-24T05:20:08.8355993Z ⚠ react(immutability): This value cannot be modified 2026-10-24T05:20:08.8356305Z ╭─[apps/mobile/src/features/connection/ConnectionStatusDot.tsx:58:7] 2026-10-24T05:20:08.8356566Z 53 │ function usePulseAnimation(pulse: boolean) { 2026-10-24T05:20:08.8356773Z 54 │ const pulseProgress = useSharedValue(0); 2026-10-24T05:20:08.8356964Z ·  ──────┬────── 2026-10-24T05:20:08.8357197Z · ╰── `pulseProgress` originates here 2026-10-24T05:20:08.8357397Z 55 │ 2026-10-24T05:20:08.8357518Z 56 │ useEffect(() => { 2026-10-24T05:20:08.8357735Z 57 │ if (pulse) { 2026-10-24T05:20:08.8357946Z 58 │ pulseProgress.value = withRepeat( 2026-10-24T05:20:08.8358129Z ·  ──────┬────── 2026-10-24T05:20:08.8358366Z · ╰── `pulseProgress` cannot be modified 2026-10-24T05:20:08.8358574Z 59 │ withTiming(1, { 2026-10-24T05:20:08.8358709Z ╰──── 2026-10-24T05:20:08.8359027Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T05:20:08.8359586Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:20:08.8359902Z 2026-10-24T05:20:08.8360273Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownSync(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T05:20:08.8360717Z ╭─[packages/contracts/src/auth.test.ts:17:12] 2026-10-24T05:20:08.8361000Z 16 │ it("decodes legacy review credentials without offering them in new grants", () => { 2026-10-24T05:20:08.8361332Z 17 │ expect(Schema.decodeUnknownSync(AuthEnvironmentScopes)(["review:write"])).toEqual([ 2026-10-24T05:20:08.8361602Z ·  ──────────────────────── 2026-10-24T05:20:08.8361783Z 18 │ "review:write", 2026-10-24T05:20:08.8361919Z ╰──── 2026-10-24T05:20:08.8361975Z 2026-10-24T05:20:08.8362336Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownSync(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T05:20:08.8362779Z ╭─[packages/contracts/src/auth.test.ts:20:18] 2026-10-24T05:20:08.8362964Z 19 │ ]); 2026-10-24T05:20:08.8363187Z 20 │ expect(() => Schema.decodeUnknownSync(AuthGrantScopes)(["review:write"])).toThrow(); 2026-10-24T05:20:08.8363460Z ·  ──────────────────────── 2026-10-24T05:20:08.8363703Z 21 │ expect(AuthStandardClientScopes).not.toContain("review:write"); 2026-10-24T05:20:08.8363895Z ╰──── 2026-10-24T05:20:08.8363951Z 2026-10-24T05:20:08.8364306Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownSync(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T05:20:08.8364744Z ╭─[packages/contracts/src/auth.test.ts:58:21] 2026-10-24T05:20:08.8365034Z 57 │ it("ignores unknown response permissions without falling back to broader scopes", () => { 2026-10-24T05:20:08.8365417Z 58 │ const session = Schema.decodeUnknownSync(AuthSessionState)({ 2026-10-24T05:20:08.8365704Z ·  ──────────────────────── 2026-10-24T05:20:08.8365886Z 59 │ authenticated: true, 2026-10-24T05:20:08.8366026Z ╰──── 2026-10-24T05:20:08.8366081Z 2026-10-24T05:20:08.8366292Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T05:20:08.8366628Z ╭─[apps/web/src/lib/composerContextReferences.ts:90:40] 2026-10-24T05:20:08.8366843Z 89 │ let cursor = prompt.length; 2026-10-24T05:20:08.8367045Z 90 │ for (const occurrence of occurrences.reverse()) { 2026-10-24T05:20:08.8367265Z ·  ─────── 2026-10-24T05:20:08.8367459Z 91 │ let { start, end } = occurrence; 2026-10-24T05:20:08.8367610Z ╰──── 2026-10-24T05:20:08.8367937Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T05:20:08.8368190Z 2026-10-24T05:20:08.8368414Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-24T05:20:08.8368776Z ╭─[packages/client-runtime/src/operations/projects.ts:228:51] 2026-10-24T05:20:08.8368987Z 227 │ ): string { 2026-10-24T05:20:08.8369217Z 228 │ const folderName = workspaceRoot.split(/[\\/]/).filter(Boolean).at(-1) ?? ""; 2026-10-24T05:20:08.8369491Z ·  ────── 2026-10-24T05:20:08.8369774Z 229 │ return target.owner ? `${target.owner}/${folderName}` : folderName; 2026-10-24T05:20:08.8369971Z ╰──── 2026-10-24T05:20:08.8370203Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T05:20:08.8370384Z 2026-10-24T05:20:08.8370643Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:20:08.8371057Z ╭─[apps/mobile/src/features/threads/thread-inspector-content-stack.tsx:60:5] 2026-10-24T05:20:08.8371287Z 58 │ 2026-10-24T05:20:08.8371409Z 59 │ useEffect(() => { 2026-10-24T05:20:08.8371565Z ·  ────┬──── 2026-10-24T05:20:08.8371780Z · ╰── This is the containing effect 2026-10-24T05:20:08.8371999Z 60 │ setMountedModes((current) => { 2026-10-24T05:20:08.8372178Z ·  ───────┬─────── 2026-10-24T05:20:08.8372441Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:20:08.8372695Z 61 │ if (current.has(props.mode)) { 2026-10-24T05:20:08.8372850Z ╰──── 2026-10-24T05:20:08.8373487Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T05:20:08.8374331Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T05:20:08.8374635Z 2026-10-24T05:20:08.8374900Z ⚠ eslint(no-unused-vars): Variable 'claudeCaps' is declared but never used. Unused variables should start with a '_'. 2026-10-24T05:20:08.8375258Z ╭─[packages/shared/src/model.test.ts:36:7] 2026-10-24T05:20:08.8375431Z 35 │ 2026-10-24T05:20:08.8375677Z 36 │ const claudeCaps: ModelCapabilities = createModelCapabilities({ 2026-10-24T05:20:08.8375930Z ·  ─────┬──── 2026-10-24T05:20:08.8376154Z · ╰── 'claudeCaps' is declared here 2026-10-24T05:20:08.8376365Z 37 │ optionDescriptors: [ 2026-10-24T05:20:08.8376507Z ╰──── 2026-10-24T05:20:08.8376663Z  help: Consider removing this declaration. 2026-10-24T05:20:08.8376780Z 2026-10-24T05:20:08.8376978Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T05:20:08.8377336Z ╭─[apps/web/src/components/settings/ProviderSettingsPanel.logic.ts:4:8] 2026-10-24T05:20:08.8377575Z 3 │ AuthProvidersManageScope, 2026-10-24T05:20:08.8377739Z 4 │ type AuthSessionState, 2026-10-24T05:20:08.8377914Z ·  ────────┬─────── 2026-10-24T05:20:08.8378162Z · ╰── 'AuthSessionState' is imported here 2026-10-24T05:20:08.8378377Z 5 │ type EnvironmentId, 2026-10-24T05:20:08.8378511Z ╰──── 2026-10-24T05:20:08.8378662Z  help: Consider removing this import. 2026-10-24T05:20:08.8378776Z 2026-10-24T05:20:08.8379032Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:20:08.8379429Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:444:5] 2026-10-24T05:20:08.8379687Z 434 │ : null; 2026-10-24T05:20:08.8379830Z 435 │ useEffect(() => { 2026-10-24T05:20:08.8379984Z ·  ────┬──── 2026-10-24T05:20:08.8380205Z · ╰── This is the containing effect 2026-10-24T05:20:08.8380407Z 436 │ if ( 2026-10-24T05:20:08.8380560Z 437 │ props.active === false || 2026-10-24T05:20:08.8380734Z 438 │ activeDraftKey !== null || 2026-10-24T05:20:08.8380917Z 439 │ editingPendingTask !== null || 2026-10-24T05:20:08.8381097Z 440 │ selectedProject === null 2026-10-24T05:20:08.8381251Z 441 │ ) { 2026-10-24T05:20:08.8381381Z 442 │ return; 2026-10-24T05:20:08.8381511Z 443 │ } 2026-10-24T05:20:08.8381652Z 444 │ setActiveDraftKey( 2026-10-24T05:20:08.8381821Z ·  ────────┬──────── 2026-10-24T05:20:08.8382080Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:20:08.8382316Z 445 │ createNewTaskDraft({ 2026-10-24T05:20:08.8382453Z ╰──── 2026-10-24T05:20:08.8383094Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T05:20:08.8383928Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T05:20:08.8384225Z 2026-10-24T05:20:08.8384462Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T05:20:08.8384849Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:1244:36] 2026-10-24T05:20:08.8385116Z 1243 │ 2026-10-24T05:20:08.8385475Z 1244 │ {props.children} 2026-10-24T05:20:08.8385801Z ·  ───────────── 2026-10-24T05:20:08.8385991Z 1245 │ 2026-10-24T05:20:08.8386135Z ╰──── 2026-10-24T05:20:08.8386408Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T05:20:08.8386755Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T05:20:08.8386930Z 2026-10-24T05:20:08.8387171Z ⚠ eslint(no-unused-vars): Function 'normalizeTerminalContextSelection' is declared but never used. 2026-10-24T05:20:08.8387509Z ╭─[apps/web/src/lib/terminalContext.ts:56:10] 2026-10-24T05:20:08.8387683Z 55 │ 2026-10-24T05:20:08.8387837Z 56 │ function normalizeTerminalContextSelection( 2026-10-24T05:20:08.8388069Z ·  ────────────────┬──────────────── 2026-10-24T05:20:08.8388371Z · ╰── 'normalizeTerminalContextSelection' is declared here 2026-10-24T05:20:08.8388637Z 57 │ selection: TerminalContextSelection, 2026-10-24T05:20:08.8388791Z ╰──── 2026-10-24T05:20:08.8388942Z  help: Consider removing this declaration. 2026-10-24T05:20:08.8389058Z 2026-10-24T05:20:08.8389256Z ⚠ eslint(no-unused-vars): Type 'ThreadRunSummary' is imported but never used. 2026-10-24T05:20:08.8389534Z ╭─[apps/web/src/types.ts:22:3] 2026-10-24T05:20:08.8389744Z 21 │ EnvironmentThreadShell, 2026-10-24T05:20:08.8389898Z 22 │ ThreadRunSummary, 2026-10-24T05:20:08.8390063Z ·  ────────┬─────── 2026-10-24T05:20:08.8390296Z · ╰── 'ThreadRunSummary' is imported here 2026-10-24T05:20:08.8390514Z 23 │ ThreadRuntimeSummary, 2026-10-24T05:20:08.8390647Z ╰──── 2026-10-24T05:20:08.8390796Z  help: Consider removing this import. 2026-10-24T05:20:08.8391029Z 2026-10-24T05:20:08.8391229Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable. 2026-10-24T05:20:08.8391540Z ╭─[apps/web/src/contextMenuFallback.test.ts:38:9] 2026-10-24T05:20:08.8391737Z 37 │ get isConnected() { 2026-10-24T05:20:08.8391911Z 38 │ let current: FakeElement | null = this; 2026-10-24T05:20:08.8392087Z ·  ─────── 2026-10-24T05:20:08.8392240Z 39 │ while (current?.parent) { 2026-10-24T05:20:08.8392381Z ╰──── 2026-10-24T05:20:08.8392709Z  help: Assigning a variable to this instead of properly using arrow lambdas may be a symptom of pre-ES2015 practices or not managing scope well. 2026-10-24T05:20:08.8392966Z 2026-10-24T05:20:08.8393409Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.encodeEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const. 2026-10-24T05:20:08.8393932Z ╭─[apps/server/src/assets/AssetAccess.test.ts:1043:32] 2026-10-24T05:20:08.8394207Z 1042 │ expect(error._tag).toBe("AssetGitHubMediaUrlValidationError"); 2026-10-24T05:20:08.8394539Z 1043 │ const encoded = yield* Schema.encodeEffect(Schema.fromJsonString(AssetAccessError))(error); 2026-10-24T05:20:08.8394846Z ·  ─────────────────── 2026-10-24T05:20:08.8395058Z 1044 │ expect(encoded).not.toContain(url); 2026-10-24T05:20:08.8395223Z ╰──── 2026-10-24T05:20:08.8395351Z 2026-10-24T05:20:08.8395644Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:20:08.8396036Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:361:7] 2026-10-24T05:20:08.8396326Z 355 │ }, [cancelledIncomingShareId, navigation, props.incomingShareId]); 2026-10-24T05:20:08.8396538Z 356 │ useEffect(() => { 2026-10-24T05:20:08.8396690Z ·  ────┬──── 2026-10-24T05:20:08.8396979Z · ╰── This is the containing effect 2026-10-24T05:20:08.8397209Z 357 │ if (!isReturningToProjectPicker) { 2026-10-24T05:20:08.8397377Z 358 │ return; 2026-10-24T05:20:08.8397503Z 359 │ } 2026-10-24T05:20:08.8397663Z 360 │ if (requestedInitialProjectAvailable) { 2026-10-24T05:20:08.8397872Z 361 │ setIsReturningToProjectPicker(false); 2026-10-24T05:20:08.8398086Z ·  ──────────────┬────────────── 2026-10-24T05:20:08.8398375Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:20:08.8398604Z 362 │ return; 2026-10-24T05:20:08.8398735Z ╰──── 2026-10-24T05:20:08.8399383Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T05:20:08.8400272Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T05:20:08.8400577Z 2026-10-24T05:20:08.8400837Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:20:08.8401236Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:504:9] 2026-10-24T05:20:08.8401443Z 447 │ 2026-10-24T05:20:08.8401570Z 448 │ useEffect(() => { 2026-10-24T05:20:08.8401724Z ·  ────┬──── 2026-10-24T05:20:08.8401936Z · ╰── This is the containing effect 2026-10-24T05:20:08.8402169Z 449 │ if (props.pendingTaskId || props.draftId) { 2026-10-24T05:20:08.8402347Z 450 │ return; 2026-10-24T05:20:08.8402474Z 451 │ } 2026-10-24T05:20:08.8402682Z 452 │ if (lastInitialProjectRefRef.current !== props.initialProjectRef) { 2026-10-24T05:20:08.8403025Z 453 │ lastInitialProjectRefRef.current = props.initialProjectRef; 2026-10-24T05:20:08.8403310Z 454 │ appliedInitialProjectKeyRef.current = null; 2026-10-24T05:20:08.8403486Z 455 │ } 2026-10-24T05:20:08.8403690Z 456 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-24T05:20:08.8403976Z 457 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-24T05:20:08.8404220Z 458 │ if (initialEnvironmentId && initialProjectId) { 2026-10-24T05:20:08.8404415Z 459 │ const directProject = 2026-10-24T05:20:08.8404574Z 460 │ projects.find( 2026-10-24T05:20:08.8404728Z 461 │ (project) => 2026-10-24T05:20:08.8404984Z 462 │ project.environmentId === initialEnvironmentId && project.id === initialProjectId, 2026-10-24T05:20:08.8405226Z 463 │ ) ?? null; 2026-10-24T05:20:08.8405359Z 464 │ 2026-10-24T05:20:08.8405490Z 465 │ if (directProject) { 2026-10-24T05:20:08.8405723Z 466 │ // Apply the route's project once. Re-applying on every change would 2026-10-24T05:20:08.8406010Z 467 │ // instantly revert environment/project switches made in the picker. 2026-10-24T05:20:08.8406321Z 468 │ const directProjectKey = `${directProject.environmentId}:${directProject.id}`; 2026-10-24T05:20:08.8406624Z 469 │ if (appliedInitialProjectKeyRef.current === directProjectKey) { 2026-10-24T05:20:08.8406837Z 470 │ return; 2026-10-24T05:20:08.8406973Z 471 │ } 2026-10-24T05:20:08.8407144Z 472 │ if (props.initialProjectRef?.branch) { 2026-10-24T05:20:08.8407320Z 473 │ if ( 2026-10-24T05:20:08.8407541Z 474 │ selectedProject?.environmentId !== directProject.environmentId || 2026-10-24T05:20:08.8407797Z 475 │ selectedProject.id !== directProject.id 2026-10-24T05:20:08.8407975Z 476 │ ) { 2026-10-24T05:20:08.8408138Z 477 │ setProject(directProject); 2026-10-24T05:20:08.8408305Z 478 │ return; 2026-10-24T05:20:08.8408451Z 479 │ } 2026-10-24T05:20:08.8408602Z 480 │ if (!flow.draftKey) return; 2026-10-24T05:20:08.8408845Z 481 │ // The route completes checkout before mounting this composer. Local 2026-10-24T05:20:08.8409137Z 482 │ // mode reuses an existing worktree; worktree mode would create another. 2026-10-24T05:20:08.8409405Z 483 │ updateComposerDraftSettings(flow.draftKey, { 2026-10-24T05:20:08.8409639Z 484 │ workspaceSelection: { 2026-10-24T05:20:08.8409813Z 485 │ mode: "local", 2026-10-24T05:20:08.8410009Z 486 │ branch: props.initialProjectRef.branch, 2026-10-24T05:20:08.8410268Z 487 │ worktreePath: props.initialProjectRef.worktreePath ?? null, 2026-10-24T05:20:08.8410502Z 488 │ startFromOrigin: false, 2026-10-24T05:20:08.8410666Z 489 │ }, 2026-10-24T05:20:08.8410806Z 490 │ }); 2026-10-24T05:20:08.8410937Z 491 │ } 2026-10-24T05:20:08.8411137Z 492 │ appliedInitialProjectKeyRef.current = directProjectKey; 2026-10-24T05:20:08.8411338Z 493 │ if ( 2026-10-24T05:20:08.8411554Z 494 │ selectedProject?.environmentId === directProject.environmentId && 2026-10-24T05:20:08.8411804Z 495 │ selectedProject.id === directProject.id 2026-10-24T05:20:08.8411981Z 496 │ ) { 2026-10-24T05:20:08.8412114Z 497 │ return; 2026-10-24T05:20:08.8412249Z 498 │ } 2026-10-24T05:20:08.8412401Z 499 │ setProject(directProject); 2026-10-24T05:20:08.8412569Z 500 │ return; 2026-10-24T05:20:08.8412705Z 501 │ } 2026-10-24T05:20:08.8412823Z 502 │ 2026-10-24T05:20:08.8413019Z 503 │ if (projects.length > 0) { 2026-10-24T05:20:08.8413253Z 504 │ setIsReturningToProjectPicker(true); 2026-10-24T05:20:08.8413479Z ·  ──────────────┬────────────── 2026-10-24T05:20:08.8413772Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:20:08.8414003Z 505 │ } 2026-10-24T05:20:08.8414125Z ╰──── 2026-10-24T05:20:08.8414775Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T05:20:08.8415625Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T05:20:08.8415931Z 2026-10-24T05:20:08.8416190Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:20:08.8422529Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:604:5] 2026-10-24T05:20:08.8422786Z 545 │ 2026-10-24T05:20:08.8422910Z 546 │ useEffect(() => { 2026-10-24T05:20:08.8423063Z ·  ────┬──── 2026-10-24T05:20:08.8423282Z · ╰── This is the containing effect 2026-10-24T05:20:08.8423514Z 547 │ const shareId = props.incomingShareId; 2026-10-24T05:20:08.8423706Z 548 │ const draftKey = flow.draftKey; 2026-10-24T05:20:08.8423901Z 549 │ const destinationProject = selectedProject; 2026-10-24T05:20:08.8424166Z 550 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-24T05:20:08.8424449Z 551 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-24T05:20:08.8424676Z 552 │ const selectedProjectMatchesRoute = 2026-10-24T05:20:08.8424855Z 553 │ !initialEnvironmentId || 2026-10-24T05:20:08.8425019Z 554 │ !initialProjectId || 2026-10-24T05:20:08.8425234Z 555 │ (destinationProject?.environmentId === initialEnvironmentId && 2026-10-24T05:20:08.8425478Z 556 │ destinationProject.id === initialProjectId); 2026-10-24T05:20:08.8425654Z 557 │ if ( 2026-10-24T05:20:08.8425784Z 558 │ !shareId || 2026-10-24T05:20:08.8425925Z 559 │ !draftKey || 2026-10-24T05:20:08.8426078Z 560 │ !destinationProject || 2026-10-24T05:20:08.8426256Z 561 │ !selectedProjectMatchesRoute || 2026-10-24T05:20:08.8426455Z 562 │ cancelledIncomingShareId === shareId 2026-10-24T05:20:08.8426621Z 563 │ ) { 2026-10-24T05:20:08.8426747Z 564 │ return; 2026-10-24T05:20:08.8426875Z 565 │ } 2026-10-24T05:20:08.8427036Z 566 │ const importKey = `${shareId}:${draftKey}`; 2026-10-24T05:20:08.8427204Z 567 │ if ( 2026-10-24T05:20:08.8427388Z 568 │ startedShareImportKeyRef.current === importKey || 2026-10-24T05:20:08.8427625Z 569 │ cancellingShareImportKeyRef.current === importKey 2026-10-24T05:20:08.8427809Z 570 │ ) { 2026-10-24T05:20:08.8427932Z 571 │ return; 2026-10-24T05:20:08.8428060Z 572 │ } 2026-10-24T05:20:08.8428174Z 573 │ 2026-10-24T05:20:08.8428300Z 574 │ if (!incomingShare) { 2026-10-24T05:20:08.8428585Z 575 │ if (isIncomingShareUnavailable && alertedUnavailableIncomingShareIdRef.current !== shareId) { 2026-10-24T05:20:08.8428983Z 576 │ alertedUnavailableIncomingShareIdRef.current = shareId; 2026-10-24T05:20:08.8429223Z 577 │ Dialog.alert( 2026-10-24T05:20:08.8429391Z 578 │ "Shared content unavailable", 2026-10-24T05:20:08.8429710Z 579 │ "The shared content is no longer in the inbox. You can continue editing this task draft.", 2026-10-24T05:20:08.8429944Z 580 │ ); 2026-10-24T05:20:08.8430069Z 581 │ } 2026-10-24T05:20:08.8430194Z 582 │ return; 2026-10-24T05:20:08.8430321Z 583 │ } 2026-10-24T05:20:08.8430435Z 584 │ 2026-10-24T05:20:08.8430548Z 585 │ if ( 2026-10-24T05:20:08.8430777Z 586 │ incomingShare.attachments.some((attachment) => attachment.type === "file") && 2026-10-24T05:20:08.8431103Z 587 │ selectedEnvironmentServerConfig === null 2026-10-24T05:20:08.8431277Z 588 │ ) { 2026-10-24T05:20:08.8431335Z 589 │ return; 2026-10-24T05:20:08.8431391Z 590 │ } 2026-10-24T05:20:08.8431449Z 591 │ 2026-10-24T05:20:08.8431589Z 592 │ if (alertedUnavailableIncomingShareIdRef.current === shareId) { 2026-10-24T05:20:08.8431712Z 593 │ alertedUnavailableIncomingShareIdRef.current = null; 2026-10-24T05:20:08.8431768Z 594 │ } 2026-10-24T05:20:08.8431878Z 595 │ startedShareImportKeyRef.current = importKey; 2026-10-24T05:20:08.8431947Z 596 │ const draftBackup = 2026-10-24T05:20:08.8432131Z 597 │ shareImportDraftBackupRef.current.get(importKey) ?? getComposerDraftSnapshot(draftKey); 2026-10-24T05:20:08.8432268Z 598 │ shareImportDraftBackupRef.current.set(importKey, draftBackup); 2026-10-24T05:20:08.8432358Z 599 │ const importToken = Symbol(importKey); 2026-10-24T05:20:08.8432436Z 600 │ let didReserveShare = false; 2026-10-24T05:20:08.8432511Z 601 │ let didConsumeShare = false; 2026-10-24T05:20:08.8432591Z 602 │ let needsDraftRestore = false; 2026-10-24T05:20:08.8432707Z 603 │ activeShareImportTokenRef.current = importToken; 2026-10-24T05:20:08.8432793Z 604 │ setImportingShareKey(importKey); 2026-10-24T05:20:08.8432880Z ·  ──────────┬───────── 2026-10-24T05:20:08.8433056Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:20:08.8433123Z 605 │ void (async () => { 2026-10-24T05:20:08.8433179Z ╰──── 2026-10-24T05:20:08.8433773Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T05:20:08.8434100Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T05:20:08.8434105Z 2026-10-24T05:20:08.8434309Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:20:08.8434462Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:524:5] 2026-10-24T05:20:08.8434538Z 523 │ props.initialProjectRef, 2026-10-24T05:20:08.8434610Z 524 │ props.incomingShareId, 2026-10-24T05:20:08.8434700Z ·  ──────────┬────────── 2026-10-24T05:20:08.8434870Z · ╰── Unnecessary dependency `props.incomingShareId` 2026-10-24T05:20:08.8434944Z 525 │ props.pendingTaskId, 2026-10-24T05:20:08.8434995Z ╰──── 2026-10-24T05:20:08.8435364Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T05:20:08.8435712Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8435715Z 2026-10-24T05:20:08.8435926Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T05:20:08.8436074Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:543:5] 2026-10-24T05:20:08.8436187Z 542 │ loadedBranchesProjectKeyRef.current = projectKey; 2026-10-24T05:20:08.8436257Z 543 │ flow.loadBranches(); 2026-10-24T05:20:08.8436328Z ·  ──┬─ 2026-10-24T05:20:08.8436454Z · ╰── Missing dependency `flow` 2026-10-24T05:20:08.8436549Z 544 │ }, [flow.loadBranches, selectedProject]); 2026-10-24T05:20:08.8436638Z ·  ────────┬──────── 2026-10-24T05:20:08.8436837Z · ╰── Overly precise dependency `flow.loadBranches`, use `flow` instead 2026-10-24T05:20:08.8436892Z 545 │ 2026-10-24T05:20:08.8436943Z ╰──── 2026-10-24T05:20:08.8437356Z  help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T05:20:08.8437660Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8437663Z 2026-10-24T05:20:08.8437865Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:20:08.8438014Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:766:5] 2026-10-24T05:20:08.8438079Z 765 │ flow.draftKey, 2026-10-24T05:20:08.8438156Z 766 │ hasImportedIncomingShare, 2026-10-24T05:20:08.8438247Z ·  ────────────┬─────────── 2026-10-24T05:20:08.8438419Z · ╰── Unnecessary dependency `hasImportedIncomingShare` 2026-10-24T05:20:08.8438485Z 767 │ incomingShare, 2026-10-24T05:20:08.8438565Z 768 │ isIncomingShareInboxLoading, 2026-10-24T05:20:08.8438661Z ·  ─────────────┬───────────── 2026-10-24T05:20:08.8438839Z · ╰── Unnecessary dependency `isIncomingShareInboxLoading` 2026-10-24T05:20:08.8438920Z 769 │ isIncomingShareUnavailable, 2026-10-24T05:20:08.8438998Z 770 │ props.incomingShareId, 2026-10-24T05:20:08.8439094Z 771 │ props.initialProjectRef?.environmentId, 2026-10-24T05:20:08.8439180Z 772 │ props.initialProjectRef?.projectId, 2026-10-24T05:20:08.8439255Z 773 │ releaseShareReservation, 2026-10-24T05:20:08.8439324Z 774 │ reserveShare, 2026-10-24T05:20:08.8439409Z 775 │ selectedEnvironmentServerConfig, 2026-10-24T05:20:08.8439474Z 776 │ selectedProject, 2026-10-24T05:20:08.8439544Z 777 │ shareImportAttempt, 2026-10-24T05:20:08.8439664Z ·  ─────────┬──────── 2026-10-24T05:20:08.8439828Z · ╰── Unnecessary dependency `shareImportAttempt` 2026-10-24T05:20:08.8439882Z 778 │ ]); 2026-10-24T05:20:08.8439936Z ╰──── 2026-10-24T05:20:08.8440284Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T05:20:08.8440618Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8440620Z 2026-10-24T05:20:08.8440878Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:20:08.8441028Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:400:5] 2026-10-24T05:20:08.8441084Z 398 │ 2026-10-24T05:20:08.8441150Z 399 │ useEffect(() => { 2026-10-24T05:20:08.8441220Z ·  ────┬──── 2026-10-24T05:20:08.8441352Z · ╰── This is the containing effect 2026-10-24T05:20:08.8441443Z 400 │ setInspectorSelection((current) => { 2026-10-24T05:20:08.8441534Z ·  ──────────┬────────── 2026-10-24T05:20:08.8441703Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:20:08.8441807Z 401 │ if (props.renderInspector === undefined) { 2026-10-24T05:20:08.8441861Z ╰──── 2026-10-24T05:20:08.8442443Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T05:20:08.8442760Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T05:20:08.8442763Z 2026-10-24T05:20:08.8442976Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T05:20:08.8443129Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:528:24] 2026-10-24T05:20:08.8443286Z 527 │ const inspectorHeaderInset = Platform.OS === "ios" ? 0 : safeAreaInsets.top; 2026-10-24T05:20:08.8443454Z 528 │ ╭─▶ const GitInspector = () => ( 2026-10-24T05:20:08.8443553Z 529 │ │ 2026-10-24T05:20:08.8444166Z 534 │ ╰─▶ ); 2026-10-24T05:20:08.8444253Z 535 │ const FilesInspector = () => 2026-10-24T05:20:08.8444307Z ╰──── 2026-10-24T05:20:08.8444526Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-24T05:20:08.8444528Z 2026-10-24T05:20:08.8444735Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T05:20:08.8444883Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:535:26] 2026-10-24T05:20:08.8444944Z 534 │ ); 2026-10-24T05:20:08.8445109Z 535 │ ╭─▶ const FilesInspector = () => 2026-10-24T05:20:08.8445308Z 536 │ │ selectedThread !== null && selectedThreadCwd !== null ? ( 2026-10-24T05:20:08.8445445Z 537 │ │ 2026-10-24T05:20:08.8446411Z 545 │ ╰─▶ ) : null; 2026-10-24T05:20:08.8446569Z 546 │ const RouteInspector = () => props.renderInspector?.(inspectorHeaderInset); 2026-10-24T05:20:08.8446626Z ╰──── 2026-10-24T05:20:08.8446840Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-24T05:20:08.8446844Z 2026-10-24T05:20:08.8447043Z ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed 2026-10-24T05:20:08.8447212Z ╭─[apps/server/src/sourceControl/SourceControlProviderRegistry.ts:15:13] 2026-10-24T05:20:08.8447287Z 14 │ } from "@t3tools/contracts"; 2026-10-24T05:20:08.8447380Z 15 │ import type {} from "@t3tools/contracts"; 2026-10-24T05:20:08.8447449Z ·  ── 2026-10-24T05:20:08.8447626Z 16 │ import { detectSourceControlProviderFromRemoteUrl } from "@t3tools/shared/sourceControl"; 2026-10-24T05:20:08.8447685Z ╰──── 2026-10-24T05:20:08.8447773Z  help: Remove empty braces 2026-10-24T05:20:08.8447775Z 2026-10-24T05:20:08.8447978Z ⚠ eslint(no-unused-vars): Identifier 'HookForwarder' is imported but never used. 2026-10-24T05:20:08.8448083Z ╭─[infra/relay/src/http/Api.ts:69:13] 2026-10-24T05:20:08.8448220Z 68 │ import * as EnvironmentLinks from "../environments/EnvironmentLinks.ts"; 2026-10-24T05:20:08.8448335Z 69 │ import * as HookForwarder from "../hooks/HookForwarder.ts"; 2026-10-24T05:20:08.8448418Z ·  ──────┬────── 2026-10-24T05:20:08.8448563Z · ╰── 'HookForwarder' is imported here 2026-10-24T05:20:08.8448667Z 70 │ import * as HeldHooks from "../hooks/HeldHooks.ts"; 2026-10-24T05:20:08.8448721Z ╰──── 2026-10-24T05:20:08.8448867Z  help: Consider removing this import. 2026-10-24T05:20:08.8448899Z 2026-10-24T05:20:08.8449095Z ⚠ eslint(no-unused-vars): Identifier 'Fiber' is imported but never used. 2026-10-24T05:20:08.8449190Z ╭─[apps/server/src/ws.ts:10:13] 2026-10-24T05:20:08.8449276Z  9 │ import * as Effect from "effect/Effect"; 2026-10-24T05:20:08.8449360Z 10 │ import * as Fiber from "effect/Fiber"; 2026-10-24T05:20:08.8449434Z ·  ──┬── 2026-10-24T05:20:08.8449578Z · ╰── 'Fiber' is imported here 2026-10-24T05:20:08.8449707Z 11 │ import * as FileSystem from "effect/FileSystem"; 2026-10-24T05:20:08.8449758Z ╰──── 2026-10-24T05:20:08.8449854Z  help: Consider removing this import. 2026-10-24T05:20:08.8449856Z 2026-10-24T05:20:08.8450058Z ⚠ eslint(no-unused-vars): Identifier 'Schedule' is imported but never used. 2026-10-24T05:20:08.8450152Z ╭─[apps/server/src/ws.ts:17:13] 2026-10-24T05:20:08.8450230Z 16 │ import * as Ref from "effect/Ref"; 2026-10-24T05:20:08.8450322Z 17 │ import * as Schedule from "effect/Schedule"; 2026-10-24T05:20:08.8450399Z ·  ────┬─── 2026-10-24T05:20:08.8450535Z · ╰── 'Schedule' is imported here 2026-10-24T05:20:08.8450619Z 18 │ import * as Schema from "effect/Schema"; 2026-10-24T05:20:08.8450670Z ╰──── 2026-10-24T05:20:08.8450765Z  help: Consider removing this import. 2026-10-24T05:20:08.8450767Z 2026-10-24T05:20:08.8451059Z ⚠ eslint(no-unused-vars): Variable 'projectSetupScriptRunner' is declared but never used. Unused variables should start with a '_'. 2026-10-24T05:20:08.8451163Z ╭─[apps/server/src/ws.ts:1285:13] 2026-10-24T05:20:08.8451320Z 1284 │ const usageLimitSources = yield* UsageLimitSources.UsageLimitSources; 2026-10-24T05:20:08.8451519Z 1285 │ const projectSetupScriptRunner = yield* ProjectSetupScriptRunner.ProjectSetupScriptRunner; 2026-10-24T05:20:08.8451625Z ·  ────────────┬─────────── 2026-10-24T05:20:08.8451794Z · ╰── 'projectSetupScriptRunner' is declared here 2026-10-24T05:20:08.8451962Z 1286 │ const worktreeSetupTracker = yield* WorktreeSetupTracker.WorktreeSetupTracker; 2026-10-24T05:20:08.8452017Z ╰──── 2026-10-24T05:20:08.8452119Z  help: Consider removing this declaration. 2026-10-24T05:20:08.8452122Z 2026-10-24T05:20:08.8452346Z ⚠ eslint(no-unused-vars): Function 'resolveThreadWorkspaceCwd' is declared but never used. 2026-10-24T05:20:08.8452467Z ╭─[apps/server/src/checkpointing/Utils.ts:12:10] 2026-10-24T05:20:08.8452524Z 11 │ 2026-10-24T05:20:08.8452622Z 12 │ function resolveThreadWorkspaceCwd(input: { 2026-10-24T05:20:08.8452726Z ·  ────────────┬──────────── 2026-10-24T05:20:08.8452894Z · ╰── 'resolveThreadWorkspaceCwd' is declared here 2026-10-24T05:20:08.8452963Z 13 │ readonly thread: { 2026-10-24T05:20:08.8453015Z ╰──── 2026-10-24T05:20:08.8453116Z  help: Consider removing this declaration. 2026-10-24T05:20:08.8453118Z 2026-10-24T05:20:08.8453576Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T05:20:08.8453765Z ╭─[packages/client-runtime/src/rpc/client.test.ts:131:9] 2026-10-24T05:20:08.8453863Z 130 │ ) { 2026-10-24T05:20:08.8454074Z 131 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T05:20:08.8454196Z 132 │ │ if (subscriptions.length >= count) { 2026-10-24T05:20:08.8454288Z 133 │ │ return; 2026-10-24T05:20:08.8454369Z 134 │ │ } 2026-10-24T05:20:08.8454477Z 135 │ │ yield* Effect.yieldNow; 2026-10-24T05:20:08.8454609Z 136 │ ╰─▶ } 2026-10-24T05:20:08.8454774Z 137 │ return yield* Effect.die(new Error(`Expected ${count} durable subscriptions.`)); 2026-10-24T05:20:08.8454828Z ╰──── 2026-10-24T05:20:08.8454837Z 2026-10-24T05:20:08.8455292Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T05:20:08.8455425Z ╭─[packages/client-runtime/src/rpc/client.test.ts:252:7] 2026-10-24T05:20:08.8455585Z 251 │ yield* SubscriptionRef.set(activeSession, Option.some(session(firstClient))); 2026-10-24T05:20:08.8455838Z 252 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 1; attempt += 1) { 2026-10-24T05:20:08.8455943Z 253 │ │ yield* Effect.yieldNow; 2026-10-24T05:20:08.8456075Z 254 │ ╰─▶ } 2026-10-24T05:20:08.8456202Z 255 │ yield* SubscriptionRef.set(activeSession, Option.none()); 2026-10-24T05:20:08.8456257Z ╰──── 2026-10-24T05:20:08.8456260Z 2026-10-24T05:20:08.8456708Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T05:20:08.8456837Z ╭─[packages/client-runtime/src/rpc/client.test.ts:258:7] 2026-10-24T05:20:08.8456894Z 257 │ 2026-10-24T05:20:08.8457137Z 258 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-24T05:20:08.8457242Z 259 │ │ yield* Effect.yieldNow; 2026-10-24T05:20:08.8457376Z 260 │ ╰─▶ } 2026-10-24T05:20:08.8457483Z 261 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-24T05:20:08.8457534Z ╰──── 2026-10-24T05:20:08.8457536Z 2026-10-24T05:20:08.8457983Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T05:20:08.8458113Z ╭─[packages/client-runtime/src/rpc/client.test.ts:322:7] 2026-10-24T05:20:08.8458176Z 321 │ ); 2026-10-24T05:20:08.8458428Z 322 │ ╭─▶ for (let attempt = 0; attempt < 100 && observedFailures.length < 1; attempt += 1) { 2026-10-24T05:20:08.8458530Z 323 │ │ yield* Effect.yieldNow; 2026-10-24T05:20:08.8458710Z 324 │ ╰─▶ } 2026-10-24T05:20:08.8458797Z 325 │ 2026-10-24T05:20:08.8458851Z ╰──── 2026-10-24T05:20:08.8458853Z 2026-10-24T05:20:08.8459296Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T05:20:08.8459424Z ╭─[packages/client-runtime/src/rpc/client.test.ts:330:7] 2026-10-24T05:20:08.8459617Z 329 │ yield* SubscriptionRef.set(activeSession, Option.some(session(secondClient))); 2026-10-24T05:20:08.8459982Z 330 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-24T05:20:08.8460089Z 331 │ │ yield* Effect.yieldNow; 2026-10-24T05:20:08.8460217Z 332 │ ╰─▶ } 2026-10-24T05:20:08.8460320Z 333 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-24T05:20:08.8460373Z ╰──── 2026-10-24T05:20:08.8460376Z 2026-10-24T05:20:08.8460821Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T05:20:08.8460952Z ╭─[packages/client-runtime/src/rpc/session.test.ts:226:3] 2026-10-24T05:20:08.8461008Z 225 │ ) { 2026-10-24T05:20:08.8461209Z 226 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T05:20:08.8461325Z 227 │ │ const socket = sockets[index]; 2026-10-24T05:20:08.8461413Z 228 │ │ if (socket) { 2026-10-24T05:20:08.8461508Z 229 │ │ return socket; 2026-10-24T05:20:08.8461585Z 230 │ │ } 2026-10-24T05:20:08.8461687Z 231 │ │ yield* Effect.yieldNow; 2026-10-24T05:20:08.8461808Z 232 │ ╰─▶ } 2026-10-24T05:20:08.8461982Z 233 │ return yield* Effect.die(new Error("Expected the RPC protocol to create a websocket.")); 2026-10-24T05:20:08.8462033Z ╰──── 2026-10-24T05:20:08.8462036Z 2026-10-24T05:20:08.8462488Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T05:20:08.8462621Z ╭─[packages/client-runtime/src/rpc/session.test.ts:240:3] 2026-10-24T05:20:08.8462674Z 239 │ ) { 2026-10-24T05:20:08.8462871Z 240 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T05:20:08.8463081Z 241 │ │ const request = socket.sent.map((message) => decodeJson(message)).filter(isRpcRequest)[index]; 2026-10-24T05:20:08.8463171Z 242 │ │ if (request) { 2026-10-24T05:20:08.8463262Z 243 │ │ return request; 2026-10-24T05:20:08.8463334Z 244 │ │ } 2026-10-24T05:20:08.8463432Z 245 │ │ yield* Effect.yieldNow; 2026-10-24T05:20:08.8463610Z 246 │ ╰─▶ } 2026-10-24T05:20:08.8463803Z 247 │ return yield* Effect.die(new Error("Expected the RPC protocol to send a request.")); 2026-10-24T05:20:08.8463854Z ╰──── 2026-10-24T05:20:08.8463856Z 2026-10-24T05:20:08.8464066Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T05:20:08.8464201Z ╭─[packages/shared/src/composerContextLegacySend.ts:19:45] 2026-10-24T05:20:08.8464321Z 18 │ const occurrences = collectComposerContextReferences(text); 2026-10-24T05:20:08.8464426Z 19 │ for (const occurrence of [...occurrences].reverse()) { 2026-10-24T05:20:08.8464536Z ·  ─────── 2026-10-24T05:20:08.8464643Z 20 │ const record = recordsById.get(occurrence.contextId); 2026-10-24T05:20:08.8464692Z ╰──── 2026-10-24T05:20:08.8464955Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T05:20:08.8464959Z 2026-10-24T05:20:08.8465185Z ⚠ eslint(no-unneeded-ternary): Unnecessary use of boolean literals in conditional expression 2026-10-24T05:20:08.8465308Z ╭─[packages/shared/src/serverSettings.test.ts:35:7] 2026-10-24T05:20:08.8465486Z 34 │ const fallback = fallbackTextGenerationModelSelection(providerInstances, (instanceId) => 2026-10-24T05:20:08.8465578Z 35 │ instanceId === configured ? true : false, 2026-10-24T05:20:08.8465694Z ·  ──────────────────────────────────────── 2026-10-24T05:20:08.8465748Z 36 │ ); 2026-10-24T05:20:08.8465798Z ╰──── 2026-10-24T05:20:08.8465890Z  help: Remove this ternary operator 2026-10-24T05:20:08.8465893Z 2026-10-24T05:20:08.8466152Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:20:08.8466282Z ╭─[apps/mobile/src/state/use-vcs-action-state.ts:86:5] 2026-10-24T05:20:08.8466385Z 83 │ const [nowMs, setNowMs] = useState(() => Date.now()); 2026-10-24T05:20:08.8466449Z 84 │ useEffect(() => { 2026-10-24T05:20:08.8466520Z ·  ────┬──── 2026-10-24T05:20:08.8466647Z · ╰── This is the containing effect 2026-10-24T05:20:08.8466734Z 85 │ if (!actionState.isRunning) return; 2026-10-24T05:20:08.8466799Z 86 │ setNowMs(Date.now()); 2026-10-24T05:20:08.8466870Z ·  ────┬─── 2026-10-24T05:20:08.8467034Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:20:08.8467163Z 87 │ const interval = setInterval(() => setNowMs(Date.now()), 1000); 2026-10-24T05:20:08.8467215Z ╰──── 2026-10-24T05:20:08.8467802Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T05:20:08.8468119Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T05:20:08.8468122Z 2026-10-24T05:20:08.8468323Z ⚠ eslint(no-unused-vars): Function 'nonEmptyString' is declared but never used. 2026-10-24T05:20:08.8468467Z ╭─[packages/client-runtime/src/work-log/presentation.ts:234:10] 2026-10-24T05:20:08.8468567Z 233 │ 2026-10-24T05:20:08.8468710Z 234 │ function nonEmptyString(value: unknown): string | null { 2026-10-24T05:20:08.8468793Z ·  ───────┬────── 2026-10-24T05:20:08.8468936Z · ╰── 'nonEmptyString' is declared here 2026-10-24T05:20:08.8469073Z 235 │ return typeof value === "string" && value.trim().length > 0 ? value : null; 2026-10-24T05:20:08.8469123Z ╰──── 2026-10-24T05:20:08.8469225Z  help: Consider removing this declaration. 2026-10-24T05:20:08.8469227Z 2026-10-24T05:20:08.8469447Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-24T05:20:08.8469602Z ╭─[apps/server/src/terminal/Manager.test.ts:731:31] 2026-10-24T05:20:08.8469669Z 730 │ ); 2026-10-24T05:20:08.8469848Z 731 │ const snapshot = events.filter((event) => event.type === "snapshot").at(-1)?.snapshot; 2026-10-24T05:20:08.8469945Z ·  ────── 2026-10-24T05:20:08.8470053Z 732 │ expect(snapshot?.history).toBe("aa😀\rEND"); 2026-10-24T05:20:08.8470103Z ╰──── 2026-10-24T05:20:08.8470274Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T05:20:08.8470277Z 2026-10-24T05:20:08.8470532Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:20:08.8470691Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5] 2026-10-24T05:20:08.8470753Z 259 │ .join("|"); 2026-10-24T05:20:08.8470818Z 260 │ useEffect(() => { 2026-10-24T05:20:08.8470935Z ·  ────┬──── 2026-10-24T05:20:08.8471069Z · ╰── This is the containing effect 2026-10-24T05:20:08.8471133Z 261 │ stop(); 2026-10-24T05:20:08.8471200Z ·  ──┬─ 2026-10-24T05:20:08.8471364Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:20:08.8471428Z 262 │ }, [orderVersion]); 2026-10-24T05:20:08.8471480Z ╰──── 2026-10-24T05:20:08.8472063Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T05:20:08.8472442Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T05:20:08.8472518Z 2026-10-24T05:20:08.8472728Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T05:20:08.8472883Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5] 2026-10-24T05:20:08.8472947Z 260 │ useEffect(() => { 2026-10-24T05:20:08.8473007Z 261 │ stop(); 2026-10-24T05:20:08.8473074Z ·  ──┬─ 2026-10-24T05:20:08.8473195Z · ╰── Missing dependency `stop` 2026-10-24T05:20:08.8473260Z 262 │ }, [orderVersion]); 2026-10-24T05:20:08.8473339Z ·  ──────┬───── 2026-10-24T05:20:08.8473486Z · ╰── Unnecessary dependency `orderVersion` 2026-10-24T05:20:08.8473545Z 263 │ useEffect( 2026-10-24T05:20:08.8473602Z ╰──── 2026-10-24T05:20:08.8474017Z  help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T05:20:08.8474321Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8474323Z 2026-10-24T05:20:08.8474464Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:20:08.8474616Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:96:9] 2026-10-24T05:20:08.8474694Z 95 │ const latest = useRef(props); 2026-10-24T05:20:08.8474762Z 96 │ latest.current = props; 2026-10-24T05:20:08.8474870Z ·  ───┬──────┬─── 2026-10-24T05:20:08.8475047Z · │ ╰── Cannot update ref value during render 2026-10-24T05:20:08.8475159Z · ╰── This value is a ref 2026-10-24T05:20:08.8475226Z 97 │ const gesture = useMemo( 2026-10-24T05:20:08.8475277Z ╰──── 2026-10-24T05:20:08.8475731Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T05:20:08.8476018Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:20:08.8476020Z 2026-10-24T05:20:08.8476167Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:20:08.8476324Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:104:18] 2026-10-24T05:20:08.8476390Z 103 │ .runOnJS(true) 2026-10-24T05:20:08.8476487Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T05:20:08.8476604Z ·  ───────────────┬────────────── 2026-10-24T05:20:08.8476801Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T05:20:08.8476932Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T05:20:08.8476982Z ╰──── 2026-10-24T05:20:08.8477486Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T05:20:08.8477799Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:20:08.8477802Z 2026-10-24T05:20:08.8477943Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:20:08.8478098Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:105:19] 2026-10-24T05:20:08.8478194Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T05:20:08.8478323Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T05:20:08.8478469Z ·  ──────────────────────────┬───────────────────────── 2026-10-24T05:20:08.8478685Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T05:20:08.8478811Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T05:20:08.8478862Z ╰──── 2026-10-24T05:20:08.8479311Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T05:20:08.8479604Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:20:08.8479607Z 2026-10-24T05:20:08.8479782Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:20:08.8479936Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:106:16] 2026-10-24T05:20:08.8480066Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T05:20:08.8480189Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T05:20:08.8480333Z ·  ──────────────────────────┬───────────────────────── 2026-10-24T05:20:08.8480533Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T05:20:08.8480658Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T05:20:08.8480711Z ╰──── 2026-10-24T05:20:08.8481162Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T05:20:08.8481448Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:20:08.8481454Z 2026-10-24T05:20:08.8481592Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:20:08.8481749Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:107:21] 2026-10-24T05:20:08.8481871Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T05:20:08.8481992Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T05:20:08.8482131Z ·  ───────────────────────┬────────────────────── 2026-10-24T05:20:08.8482337Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T05:20:08.8482455Z 108 │ [props.disabled], 2026-10-24T05:20:08.8482536Z ╰──── 2026-10-24T05:20:08.8482986Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T05:20:08.8483273Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:20:08.8483275Z 2026-10-24T05:20:08.8483416Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:20:08.8483573Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:249:9] 2026-10-24T05:20:08.8483686Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-24T05:20:08.8483792Z 249 │ latest.current = { rows, planners, moveThread }; 2026-10-24T05:20:08.8483901Z ·  ───┬──────┬─── 2026-10-24T05:20:08.8484078Z · │ ╰── Cannot update ref value during render 2026-10-24T05:20:08.8484193Z · ╰── This value is a ref 2026-10-24T05:20:08.8484246Z 250 │ 2026-10-24T05:20:08.8484299Z ╰──── 2026-10-24T05:20:08.8484748Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T05:20:08.8485038Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:20:08.8485043Z 2026-10-24T05:20:08.8485184Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:20:08.8485340Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:247:22] 2026-10-24T05:20:08.8485459Z 246 │ const [preview, setPreview] = useState(null); 2026-10-24T05:20:08.8485572Z 247 │ const translateY = useRef(new Animated.Value(0)).current; 2026-10-24T05:20:08.8485699Z ·  ──────────────────┬────────────────── 2026-10-24T05:20:08.8485862Z · ╰── Cannot access ref value during render 2026-10-24T05:20:08.8485972Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-24T05:20:08.8486024Z ╰──── 2026-10-24T05:20:08.8486484Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T05:20:08.8486768Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:20:08.8486773Z 2026-10-24T05:20:08.8486937Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T05:20:08.8487094Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:324:16] 2026-10-24T05:20:08.8487159Z 323 │ update(0); 2026-10-24T05:20:08.8487240Z 324 │ let last = performance.now(); 2026-10-24T05:20:08.8487334Z ·  ────────┬──────── 2026-10-24T05:20:08.8487524Z · ╰── Cannot call impure function 2026-10-24T05:20:08.8487624Z 325 │ const tick = () => { 2026-10-24T05:20:08.8487677Z ╰──── 2026-10-24T05:20:08.8487969Z  help: `performance.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T05:20:08.8488257Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T05:20:08.8488259Z 2026-10-24T05:20:08.8488446Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T05:20:08.8488601Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:99:15] 2026-10-24T05:20:08.8488659Z  98 │ () => 2026-10-24T05:20:08.8488727Z  99 │ Gesture.Pan() 2026-10-24T05:20:08.8488808Z ·  ─┬─ 2026-10-24T05:20:08.8488941Z · ╰── `Pan` may be a component 2026-10-24T05:20:08.8489019Z 100 │ .enabled(!props.disabled) 2026-10-24T05:20:08.8489071Z ╰──── 2026-10-24T05:20:08.8489340Z  help: Render `Pan` with JSX if it is a component; otherwise rename it to start with a lowercase letter or allowlist it in the compiler configuration 2026-10-24T05:20:08.8489816Z  note: `Pan` is treated as a component because it begins with an uppercase letter; React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/static-components 2026-10-24T05:20:08.8489819Z 2026-10-24T05:20:08.8490002Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T05:20:08.8490161Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:108:5] 2026-10-24T05:20:08.8490232Z 103 │ .runOnJS(true) 2026-10-24T05:20:08.8490331Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T05:20:08.8490419Z ·  ───┬── 2026-10-24T05:20:08.8490842Z · ╰── Missing dependency `latest`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T05:20:08.8490974Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T05:20:08.8491096Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T05:20:08.8491217Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T05:20:08.8491288Z 108 │ [props.disabled], 2026-10-24T05:20:08.8491373Z ·  ────────┬─────── 2026-10-24T05:20:08.8491559Z · ╰── This dependency list is missing values used by the callback 2026-10-24T05:20:08.8491615Z 109 │ ); 2026-10-24T05:20:08.8491666Z ╰──── 2026-10-24T05:20:08.8491870Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T05:20:08.8492177Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8492180Z 2026-10-24T05:20:08.8492345Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T05:20:08.8492479Z ╭─[apps/web/src/components/CustomSnoozeDialog.tsx:140:58] 2026-10-24T05:20:08.8492666Z 139 │ {...(weekStartsOn === undefined ? {} : { weekStartsOn })} 2026-10-24T05:20:08.8492841Z 140 │ disabled={{ before: new Date(new Date().setHours(0, 0, 0, 0)) }} 2026-10-24T05:20:08.8492964Z ·  ─────┬──── 2026-10-24T05:20:08.8493133Z · ╰── Cannot call impure function 2026-10-24T05:20:08.8493229Z 141 │ onSelect={(selected) => { 2026-10-24T05:20:08.8493281Z ╰──── 2026-10-24T05:20:08.8493553Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T05:20:08.8493846Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T05:20:08.8493851Z 2026-10-24T05:20:08.8494109Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:20:08.8494268Z ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:40:5] 2026-10-24T05:20:08.8494380Z 37 │ const [initialized, setInitialized] = useState(false); 2026-10-24T05:20:08.8494450Z 38 │ useLayoutEffect(() => { 2026-10-24T05:20:08.8494529Z ·  ───────┬─────── 2026-10-24T05:20:08.8494658Z · ╰── This is the containing effect 2026-10-24T05:20:08.8494721Z 39 │ reset(); 2026-10-24T05:20:08.8494790Z 40 │ setInitialized(true); 2026-10-24T05:20:08.8494867Z ·  ───────┬────── 2026-10-24T05:20:08.8495037Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:20:08.8495103Z 41 │ }, [reset]); 2026-10-24T05:20:08.8495156Z ╰──── 2026-10-24T05:20:08.8495737Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T05:20:08.8496050Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T05:20:08.8496053Z 2026-10-24T05:20:08.8496353Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:20:08.8496541Z ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:93:5] 2026-10-24T05:20:08.8496597Z 88 │ 2026-10-24T05:20:08.8496661Z 89 │ useEffect(() => { 2026-10-24T05:20:08.8496730Z ·  ────┬──── 2026-10-24T05:20:08.8496858Z · ╰── This is the containing effect 2026-10-24T05:20:08.8497016Z 90 │ if (!needsPreparation || !initialProjectRef.branch || waitingForProject) return; 2026-10-24T05:20:08.8497116Z 91 │ const branchName = initialProjectRef.branch; 2026-10-24T05:20:08.8497182Z 92 │ let active = true; 2026-10-24T05:20:08.8497278Z 93 │ setPendingCheckouts((count) => count + 1); 2026-10-24T05:20:08.8497362Z ·  ─────────┬───────── 2026-10-24T05:20:08.8497533Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:20:08.8497689Z 94 │ // Serialize replacements: ignoring a stale result cannot undo its Git mutation. 2026-10-24T05:20:08.8497741Z ╰──── 2026-10-24T05:20:08.8498317Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T05:20:08.8498632Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T05:20:08.8498635Z 2026-10-24T05:20:08.8499098Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T05:20:08.8499254Z ╭─[packages/client-runtime/src/connection/supervisor.test.ts:135:3] 2026-10-24T05:20:08.8499368Z 134 │ let lastState = yield* SubscriptionRef.get(state); 2026-10-24T05:20:08.8499591Z 135 │ ╭─▶ for (let iteration = 0; iteration < 100; iteration += 1) { 2026-10-24T05:20:08.8499755Z 136 │ │ lastState = yield* SubscriptionRef.get(state); 2026-10-24T05:20:08.8499860Z 137 │ │ if (predicate(lastState)) { 2026-10-24T05:20:08.8499961Z 138 │ │ return lastState; 2026-10-24T05:20:08.8500036Z 139 │ │ } 2026-10-24T05:20:08.8500142Z 140 │ │ yield* Effect.yieldNow; 2026-10-24T05:20:08.8500271Z 141 │ ╰─▶ } 2026-10-24T05:20:08.8500349Z 142 │ return yield* Effect.die( 2026-10-24T05:20:08.8500402Z ╰──── 2026-10-24T05:20:08.8500405Z 2026-10-24T05:20:08.8500574Z ⚠ eslint(no-empty-pattern): Empty array binding pattern 2026-10-24T05:20:08.8500728Z ╭─[apps/server/src/pullRequest/PullRequestService.test.ts:1526:12] 2026-10-24T05:20:08.8500784Z 1525 │ 2026-10-24T05:20:08.8500852Z 1526 │ for (const [] of [ 2026-10-24T05:20:08.8500924Z ·  ── 2026-10-24T05:20:08.8500994Z 1527 │ ["github", "github.com"], 2026-10-24T05:20:08.8501048Z ╰──── 2026-10-24T05:20:08.8501323Z  help: Passing non-iterable values (null, undefined, numbers, booleans, etc.) will result in a runtime error because these values are not iterable. 2026-10-24T05:20:08.8501378Z 2026-10-24T05:20:08.8501617Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T05:20:08.8501785Z ╭─[apps/mobile/src/features/threads/NewTaskContextPickerScreens.tsx:249:7] 2026-10-24T05:20:08.8501866Z 248 │ mountedRef.current = false; 2026-10-24T05:20:08.8501943Z 249 │ flow.setBranchQuery(""); 2026-10-24T05:20:08.8502012Z ·  ──┬─ 2026-10-24T05:20:08.8502135Z · ╰── Missing dependency `flow` 2026-10-24T05:20:08.8502192Z 250 │ }; 2026-10-24T05:20:08.8502266Z 251 │ }, [flow.setBranchQuery]); 2026-10-24T05:20:08.8502353Z ·  ─────────┬───────── 2026-10-24T05:20:08.8502553Z · ╰── Overly precise dependency `flow.setBranchQuery`, use `flow` instead 2026-10-24T05:20:08.8502617Z 252 │ 2026-10-24T05:20:08.8502673Z ╰──── 2026-10-24T05:20:08.8503086Z  help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T05:20:08.8503391Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8503394Z 2026-10-24T05:20:08.8503547Z ⚠ react(immutability): This value cannot be modified 2026-10-24T05:20:08.8503709Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:111:5] 2026-10-24T05:20:08.8503765Z 107 │ ); 2026-10-24T05:20:08.8503921Z 108 │ const separationProgress = useSharedValue(props.showScrollToEnd ? 1 : 0); 2026-10-24T05:20:08.8504008Z ·  ─────────┬──────── 2026-10-24T05:20:08.8504159Z · ╰── `separationProgress` originates here 2026-10-24T05:20:08.8504213Z 109 │ 2026-10-24T05:20:08.8504278Z 110 │ useEffect(() => { 2026-10-24T05:20:08.8504448Z 111 │ separationProgress.value = withTiming(props.showScrollToEnd ? 1 : 0, CONTROL_TIMING); 2026-10-24T05:20:08.8504533Z ·  ─────────┬──────── 2026-10-24T05:20:08.8504684Z · ╰── `separationProgress` cannot be modified 2026-10-24T05:20:08.8504792Z 112 │ }, [props.showScrollToEnd, separationProgress]); 2026-10-24T05:20:08.8504843Z ╰──── 2026-10-24T05:20:08.8505110Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T05:20:08.8505416Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:20:08.8505418Z 2026-10-24T05:20:08.8505571Z ⚠ react(immutability): This value cannot be modified 2026-10-24T05:20:08.8505728Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5] 2026-10-24T05:20:08.8505839Z 128 │ // and repeatedly retargets the animation as it grows. 2026-10-24T05:20:08.8505954Z 129 │ const capsuleWidth = useSharedValue(null); 2026-10-24T05:20:08.8506035Z ·  ──────┬───── 2026-10-24T05:20:08.8506171Z · ╰── `capsuleWidth` originates here 2026-10-24T05:20:08.8506339Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T05:20:08.8506483Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T05:20:08.8506588Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T05:20:08.8506682Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T05:20:08.8506746Z 134 │ return; 2026-10-24T05:20:08.8506803Z 135 │ } 2026-10-24T05:20:08.8506910Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T05:20:08.8506993Z 137 │ measuredWidthRef.current = width; 2026-10-24T05:20:08.8507136Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T05:20:08.8507213Z ·  ──────┬───── 2026-10-24T05:20:08.8507351Z · ╰── `capsuleWidth` cannot be modified 2026-10-24T05:20:08.8507405Z 139 │ }; 2026-10-24T05:20:08.8507458Z ╰──── 2026-10-24T05:20:08.8507724Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T05:20:08.8508027Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:20:08.8508029Z 2026-10-24T05:20:08.8508182Z ⚠ react(immutability): This value cannot be modified 2026-10-24T05:20:08.8508338Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7] 2026-10-24T05:20:08.8508448Z 128 │ // and repeatedly retargets the animation as it grows. 2026-10-24T05:20:08.8508562Z 129 │ const capsuleWidth = useSharedValue(null); 2026-10-24T05:20:08.8508642Z ·  ──────┬───── 2026-10-24T05:20:08.8508779Z · ╰── `capsuleWidth` originates here 2026-10-24T05:20:08.8508891Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T05:20:08.8509005Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T05:20:08.8509108Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T05:20:08.8509201Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T05:20:08.8509263Z 134 │ return; 2026-10-24T05:20:08.8509321Z 135 │ } 2026-10-24T05:20:08.8509425Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T05:20:08.8509508Z 137 │ measuredWidthRef.current = width; 2026-10-24T05:20:08.8509676Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T05:20:08.8509731Z 139 │ }; 2026-10-24T05:20:08.8509821Z 140 │ const hasStatus = props.status !== null; 2026-10-24T05:20:08.8509954Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-24T05:20:08.8510023Z 142 │ useEffect(() => { 2026-10-24T05:20:08.8510094Z 143 │ if (!hasStatus) { 2026-10-24T05:20:08.8510181Z 144 │ measuredWidthRef.current = null; 2026-10-24T05:20:08.8510259Z 145 │ capsuleWidth.value = null; 2026-10-24T05:20:08.8510336Z ·  ──────┬───── 2026-10-24T05:20:08.8510475Z · ╰── `capsuleWidth` cannot be modified 2026-10-24T05:20:08.8510529Z 146 │ } 2026-10-24T05:20:08.8510581Z ╰──── 2026-10-24T05:20:08.8510840Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T05:20:08.8511260Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:20:08.8511300Z 2026-10-24T05:20:08.8511500Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T05:20:08.8511658Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7] 2026-10-24T05:20:08.8511791Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-24T05:20:08.8511858Z 142 │ useEffect(() => { 2026-10-24T05:20:08.8511937Z ·  ───┬─── 2026-10-24T05:20:08.8512153Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-24T05:20:08.8512220Z 143 │ if (!hasStatus) { 2026-10-24T05:20:08.8512307Z 144 │ measuredWidthRef.current = null; 2026-10-24T05:20:08.8512384Z 145 │ capsuleWidth.value = null; 2026-10-24T05:20:08.8512463Z ·  ──────┬───── 2026-10-24T05:20:08.8512600Z · ╰── This modifies `capsuleWidth` 2026-10-24T05:20:08.8512656Z 146 │ } 2026-10-24T05:20:08.8512710Z ╰──── 2026-10-24T05:20:08.8513042Z  help: This argument is a function which may reassign or mutate `capsuleWidth` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead 2026-10-24T05:20:08.8513340Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:20:08.8513343Z 2026-10-24T05:20:08.8513539Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T05:20:08.8513704Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5] 2026-10-24T05:20:08.8513818Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T05:20:08.8513930Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T05:20:08.8514055Z ·  ───────────────┬─────────────── 2026-10-24T05:20:08.8514291Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-24T05:20:08.8514397Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T05:20:08.8514495Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T05:20:08.8514557Z 134 │ return; 2026-10-24T05:20:08.8514611Z 135 │ } 2026-10-24T05:20:08.8514715Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T05:20:08.8514803Z 137 │ measuredWidthRef.current = width; 2026-10-24T05:20:08.8514945Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T05:20:08.8515022Z ·  ──────┬───── 2026-10-24T05:20:08.8515154Z · ╰── This modifies `capsuleWidth` 2026-10-24T05:20:08.8515207Z 139 │ }; 2026-10-24T05:20:08.8515261Z ╰──── 2026-10-24T05:20:08.8515593Z  help: This argument is a function which may reassign or mutate `capsuleWidth` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead 2026-10-24T05:20:08.8515889Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:20:08.8515891Z 2026-10-24T05:20:08.8516129Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T05:20:08.8516331Z ╭─[apps/web/src/components/pullRequest/PullRequestChecksPopover.tsx:88:15] 2026-10-24T05:20:08.8516395Z 87 │
  • ( 2026-10-24T05:20:08.8517487Z 223 │ 2026-10-24T05:20:08.8517591Z ·  ─────────────── 2026-10-24T05:20:08.8517683Z 224 │ {lineIndex > 0 ? "\n" : ""} 2026-10-24T05:20:08.8517736Z ╰──── 2026-10-24T05:20:08.8517881Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T05:20:08.8517883Z 2026-10-24T05:20:08.8518073Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T05:20:08.8518218Z ╭─[apps/mobile/src/features/review/ReviewCommentCard.tsx:227:25] 2026-10-24T05:20:08.8518293Z 226 │ { 2026-10-24T05:20:08.8519207Z 458 │ let result: Array = divisor.map((_) => 0); 2026-10-24T05:20:08.8519307Z ·  ┬ 2026-10-24T05:20:08.8519450Z · ╰── '_' is declared here 2026-10-24T05:20:08.8519577Z 459 │ for (const b of data) { 2026-10-24T05:20:08.8519688Z ╰──── 2026-10-24T05:20:08.8519838Z  help: Consider removing this parameter. 2026-10-24T05:20:08.8519840Z 2026-10-24T05:20:08.8520092Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:20:08.8520243Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:57:5] 2026-10-24T05:20:08.8520298Z 55 │ 2026-10-24T05:20:08.8520361Z 56 │ useEffect(() => { 2026-10-24T05:20:08.8520430Z ·  ────┬──── 2026-10-24T05:20:08.8520559Z · ╰── This is the containing effect 2026-10-24T05:20:08.8520627Z 57 │ setDecodedSize(null); 2026-10-24T05:20:08.8520704Z ·  ───────┬────── 2026-10-24T05:20:08.8520875Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:20:08.8520948Z 58 │ }, [props.sourceKey]); 2026-10-24T05:20:08.8521003Z ╰──── 2026-10-24T05:20:08.8521590Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T05:20:08.8521905Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T05:20:08.8521909Z 2026-10-24T05:20:08.8522157Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:20:08.8522309Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:61:5] 2026-10-24T05:20:08.8522366Z 59 │ 2026-10-24T05:20:08.8522431Z 60 │ useEffect(() => { 2026-10-24T05:20:08.8522499Z ·  ────┬──── 2026-10-24T05:20:08.8522627Z · ╰── This is the containing effect 2026-10-24T05:20:08.8522694Z 61 │ setFailedUri(null); 2026-10-24T05:20:08.8522770Z ·  ──────┬───── 2026-10-24T05:20:08.8522933Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:20:08.8522999Z 62 │ }, [props.uri]); 2026-10-24T05:20:08.8523049Z ╰──── 2026-10-24T05:20:08.8523638Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T05:20:08.8523955Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T05:20:08.8523960Z 2026-10-24T05:20:08.8524170Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-24T05:20:08.8524318Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:7:10] 2026-10-24T05:20:08.8524441Z 6 │ import { parse, SvgAst, type JsxAST } from "react-native-svg"; 2026-10-24T05:20:08.8524618Z 7 │ import { ActivityIndicator, Pressable, StyleSheet, View, type ViewStyle } from "react-native"; 2026-10-24T05:20:08.8524704Z ·  ────────┬──────── 2026-10-24T05:20:08.8524908Z · ╰── 'ActivityIndicator' is imported here 2026-10-24T05:20:08.8524995Z 8 │ 2026-10-24T05:20:08.8525047Z ╰──── 2026-10-24T05:20:08.8525143Z  help: Consider removing this import. 2026-10-24T05:20:08.8525146Z 2026-10-24T05:20:08.8525346Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:20:08.8525493Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:58:7] 2026-10-24T05:20:08.8525561Z 57 │ setDecodedSize(null); 2026-10-24T05:20:08.8525628Z 58 │ }, [props.sourceKey]); 2026-10-24T05:20:08.8525709Z ·  ───────┬─────── 2026-10-24T05:20:08.8525864Z · ╰── Unnecessary dependency `props.sourceKey` 2026-10-24T05:20:08.8525917Z 59 │ 2026-10-24T05:20:08.8525973Z ╰──── 2026-10-24T05:20:08.8526260Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T05:20:08.8526565Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8526567Z 2026-10-24T05:20:08.8526764Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:20:08.8526909Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:62:7] 2026-10-24T05:20:08.8526975Z 61 │ setFailedUri(null); 2026-10-24T05:20:08.8527042Z 62 │ }, [props.uri]); 2026-10-24T05:20:08.8527119Z ·  ────┬──── 2026-10-24T05:20:08.8527261Z · ╰── Unnecessary dependency `props.uri` 2026-10-24T05:20:08.8527317Z 63 │ 2026-10-24T05:20:08.8527369Z ╰──── 2026-10-24T05:20:08.8527653Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T05:20:08.8527957Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8527961Z 2026-10-24T05:20:08.8528212Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:20:08.8528397Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:107:5] 2026-10-24T05:20:08.8528452Z 104 │ 2026-10-24T05:20:08.8528523Z 105 │ useEffect(() => { 2026-10-24T05:20:08.8528595Z ·  ────┬──── 2026-10-24T05:20:08.8528724Z · ╰── This is the containing effect 2026-10-24T05:20:08.8528803Z 106 │ clearReviewCommentTarget(); 2026-10-24T05:20:08.8528900Z 107 │ setPendingNativeCommentSelection(null); 2026-10-24T05:20:08.8529005Z ·  ────────────────┬─────────────── 2026-10-24T05:20:08.8529178Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:20:08.8529252Z 108 │ }, [selectedSection?.id]); 2026-10-24T05:20:08.8529305Z ╰──── 2026-10-24T05:20:08.8529980Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T05:20:08.8530323Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T05:20:08.8530325Z 2026-10-24T05:20:08.8530577Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:20:08.8530760Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:112:7] 2026-10-24T05:20:08.8530814Z 109 │ 2026-10-24T05:20:08.8530878Z 110 │ useEffect(() => { 2026-10-24T05:20:08.8530949Z ·  ────┬──── 2026-10-24T05:20:08.8531077Z · ╰── This is the containing effect 2026-10-24T05:20:08.8531168Z 111 │ if (activeCommentTarget === null) { 2026-10-24T05:20:08.8531269Z 112 │ setPendingNativeCommentSelection(null); 2026-10-24T05:20:08.8531377Z ·  ────────────────┬─────────────── 2026-10-24T05:20:08.8531554Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:20:08.8531610Z 113 │ } 2026-10-24T05:20:08.8531660Z ╰──── 2026-10-24T05:20:08.8532247Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T05:20:08.8532566Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T05:20:08.8532571Z 2026-10-24T05:20:08.8532767Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:20:08.8532946Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:108:7] 2026-10-24T05:20:08.8533041Z 107 │ setPendingNativeCommentSelection(null); 2026-10-24T05:20:08.8533114Z 108 │ }, [selectedSection?.id]); 2026-10-24T05:20:08.8533202Z ·  ─────────┬───────── 2026-10-24T05:20:08.8533361Z · ╰── Unnecessary dependency `selectedSection?.id` 2026-10-24T05:20:08.8533412Z 109 │ 2026-10-24T05:20:08.8533464Z ╰──── 2026-10-24T05:20:08.8533754Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T05:20:08.8534064Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8534066Z 2026-10-24T05:20:08.8534519Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T05:20:08.8534673Z ╭─[apps/server/src/project/ProjectEnrichmentService.test.ts:28:3] 2026-10-24T05:20:08.8534731Z 27 │ ) { 2026-10-24T05:20:08.8534933Z 28 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T05:20:08.8535131Z 29 │ │ const available = yield* service.peek(workspaceRoot); 2026-10-24T05:20:08.8535283Z 30 │ │ if (predicate(available)) return available; 2026-10-24T05:20:08.8535385Z 31 │ │ yield* Effect.yieldNow; 2026-10-24T05:20:08.8535508Z 32 │ ╰─▶ } 2026-10-24T05:20:08.8535684Z 33 │ return yield* Effect.die(`Project metadata for ${workspaceRoot} was not resolved in time.`); 2026-10-24T05:20:08.8535734Z ╰──── 2026-10-24T05:20:08.8535736Z 2026-10-24T05:20:08.8536102Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownOption(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T05:20:08.8536227Z ╭─[packages/shared/src/otelEnvironment.ts:146:14] 2026-10-24T05:20:08.8536288Z 145 │ name, 2026-10-24T05:20:08.8536431Z 146 │ (raw) => Schema.decodeUnknownOption(OtlpProtocol)(raw.toLowerCase()), 2026-10-24T05:20:08.8536540Z ·  ────────────────────────── 2026-10-24T05:20:08.8536661Z 147 │ `${name} is not http/protobuf or http/json, ${NOT_EXPORTED}`, 2026-10-24T05:20:08.8536713Z ╰──── 2026-10-24T05:20:08.8536716Z 2026-10-24T05:20:08.8537167Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T05:20:08.8537300Z ╭─[apps/server/src/project/ProjectService.test.ts:94:3] 2026-10-24T05:20:08.8537358Z 93 │ ) { 2026-10-24T05:20:08.8537553Z 94 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T05:20:08.8537729Z 95 │ │ const project = Option.getOrThrow(yield* service.getById(projectId)); 2026-10-24T05:20:08.8537849Z 96 │ │ if (predicate(project)) return project; 2026-10-24T05:20:08.8537948Z 97 │ │ yield* Effect.yieldNow; 2026-10-24T05:20:08.8538068Z 98 │ ╰─▶ } 2026-10-24T05:20:08.8538215Z 99 │ return yield* Effect.die(`Project ${projectId} was not enriched in time.`); 2026-10-24T05:20:08.8538265Z ╰──── 2026-10-24T05:20:08.8538267Z 2026-10-24T05:20:08.8538422Z ⚠ eslint(no-new): Do not use 'new' for side effects. 2026-10-24T05:20:08.8538546Z ╭─[apps/server/src/mcp/McpToolAccess.test.ts:168:3] 2026-10-24T05:20:08.8538658Z 167 │ // @ts-expect-error a declaration constructed directly 2026-10-24T05:20:08.8538757Z 168 │ new McpToolAccess.Declaration(unchecked); 2026-10-24T05:20:08.8538857Z ·  ───────────────────────────── 2026-10-24T05:20:08.8538983Z 169 │ // @ts-expect-error a handlers layer built outside McpToolAccess 2026-10-24T05:20:08.8539037Z ╰──── 2026-10-24T05:20:08.8539194Z  help: Assign the result of 'new' to a variable or compare it to a reference. 2026-10-24T05:20:08.8539196Z 2026-10-24T05:20:08.8539432Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T05:20:08.8539598Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:290:50] 2026-10-24T05:20:08.8539692Z 289 │ return ( 2026-10-24T05:20:08.8539823Z 290 │ 2026-10-24T05:20:08.8539991Z ·  ───────────── 2026-10-24T05:20:08.8540088Z 291 │ {props.children} 2026-10-24T05:20:08.8540141Z ╰──── 2026-10-24T05:20:08.8540361Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T05:20:08.8540500Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T05:20:08.8540502Z 2026-10-24T05:20:08.8540738Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T05:20:08.8540890Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:654:44] 2026-10-24T05:20:08.8540950Z 653 │ return ( 2026-10-24T05:20:08.8541065Z 654 │ 2026-10-24T05:20:08.8541183Z ·  ───────────── 2026-10-24T05:20:08.8541252Z 655 │ {props.children} 2026-10-24T05:20:08.8541304Z ╰──── 2026-10-24T05:20:08.8541518Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T05:20:08.8541654Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T05:20:08.8541656Z 2026-10-24T05:20:08.8541887Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T05:20:08.8542044Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:1462:55] 2026-10-24T05:20:08.8542104Z 1461 │ return ( 2026-10-24T05:20:08.8542266Z 1462 │ 2026-10-24T05:20:08.8542400Z ·  ──────────────────── 2026-10-24T05:20:08.8542501Z 1463 │ (null); 2026-10-24T05:20:08.8545776Z 495 │ const showcasedReviewDrawRef = useRef(null); 2026-10-24T05:20:08.8545902Z 496 │ const [isPullRefreshing, setIsPullRefreshing] = useState(false); 2026-10-24T05:20:08.8546003Z 497 │ const handlePullToRefresh = async () => { 2026-10-24T05:20:08.8546085Z 498 │ setIsPullRefreshing(true); 2026-10-24T05:20:08.8546169Z 499 │ await refreshSelectedSection(); 2026-10-24T05:20:08.8546244Z 500 │ setIsPullRefreshing(false); 2026-10-24T05:20:08.8546299Z 501 │ }; 2026-10-24T05:20:08.8546440Z 502 │ const reviewFileNavigatorRef = useRef(null); 2026-10-24T05:20:08.8546582Z 503 │ const reviewFiles = parsedDiff.kind === "files" ? parsedDiff.files : []; 2026-10-24T05:20:08.8546686Z 504 │ const fileVisibility = useReviewFileVisibility({ 2026-10-24T05:20:08.8546773Z 505 │ threadKey: reviewCache.threadKey, 2026-10-24T05:20:08.8546862Z 506 │ sectionId: selectedSection?.id ?? null, 2026-10-24T05:20:08.8546932Z 507 │ files: reviewFiles, 2026-10-24T05:20:08.8547031Z 508 │ cachedExpandedFileIds: selectedSection?.id 2026-10-24T05:20:08.8547168Z 509 │ ? reviewCache.expandedFileIdsBySection[selectedSection.id] 2026-10-24T05:20:08.8547235Z 510 │ : undefined, 2026-10-24T05:20:08.8547326Z 511 │ cachedViewedFileIds: selectedSection?.id 2026-10-24T05:20:08.8547450Z 512 │ ? reviewCache.viewedFileIdsBySection[selectedSection.id] 2026-10-24T05:20:08.8547512Z 513 │ : undefined, 2026-10-24T05:20:08.8547566Z 514 │ }); 2026-10-24T05:20:08.8547750Z 515 │ const { collapsedFileIds, toggleExpandedFile, toggleViewedFile, viewedFileIds } = fileVisibility; 2026-10-24T05:20:08.8547881Z 516 │ const commentSelection = useReviewCommentSelectionController({ 2026-10-24T05:20:08.8547945Z 517 │ environmentId, 2026-10-24T05:20:08.8548008Z 518 │ threadId, 2026-10-24T05:20:08.8548072Z 519 │ selectedSection, 2026-10-24T05:20:08.8548143Z 520 │ nativeReviewDiffData, 2026-10-24T05:20:08.8548197Z 521 │ }); 2026-10-24T05:20:08.8548356Z 522 │ const nativeBridge = useNativeReviewDiffBridge({ 2026-10-24T05:20:08.8548500Z 523 │ threadKey: reviewCache.threadKey, 2026-10-24T05:20:08.8548591Z 524 │ sectionId: selectedSection?.id ?? null, 2026-10-24T05:20:08.8548667Z 525 │ diff: selectedSection?.diff, 2026-10-24T05:20:08.8548742Z 526 │ data: nativeReviewDiffData, 2026-10-24T05:20:08.8548808Z 527 │ collapsedFileIds, 2026-10-24T05:20:08.8548871Z 528 │ viewedFileIds, 2026-10-24T05:20:08.8548979Z 529 │ selectedRowIds: commentSelection.selectedRowIds, 2026-10-24T05:20:08.8549076Z 530 │ canHighlight: parsedDiff.kind === "files", 2026-10-24T05:20:08.8549129Z 531 │ }); 2026-10-24T05:20:08.8549204Z 532 │ const showcaseReviewKey = 2026-10-24T05:20:08.8549333Z 533 │ SHOWCASE_ENABLED && parsedDiff.kind === "files" && selectedSection 2026-10-24T05:20:08.8549544Z 534 │ ? `${reviewCache.threadKey}:${selectedSection.id}:${nativeBridge.tokensResetKey}:${nativeBridge.themeId}` 2026-10-24T05:20:08.8549636Z 535 │ : null; 2026-10-24T05:20:08.8549800Z 536 │ const handleNativeDebug = (event: NativeSyntheticEvent>) => { 2026-10-24T05:20:08.8549879Z 537 │ nativeBridge.onDebug(event); 2026-10-24T05:20:08.8549936Z 538 │ if ( 2026-10-24T05:20:08.8550016Z 539 │ showcaseReviewKey === null || 2026-10-24T05:20:08.8550137Z 540 │ showcasedReviewDrawRef.current === showcaseReviewKey || 2026-10-24T05:20:08.8550244Z 541 │ !isNativeReviewDiffDrawEvent(event.nativeEvent) 2026-10-24T05:20:08.8550298Z 542 │ ) { 2026-10-24T05:20:08.8550358Z 543 │ return; 2026-10-24T05:20:08.8550413Z 544 │ } 2026-10-24T05:20:08.8550524Z 545 │ showcasedReviewDrawRef.current = showcaseReviewKey; 2026-10-24T05:20:08.8550687Z 546 │ reportShowcaseSceneRendered({ scene: "review", themeId: nativeBridge.themeId }); 2026-10-24T05:20:08.8550744Z 547 │ }; 2026-10-24T05:20:08.8550797Z 548 │ 2026-10-24T05:20:08.8551188Z 549 │ const handleSelectFile = async (fileId: string | null) => { 2026-10-24T05:20:08.8551267Z 550 │ loadVisibleFile(fileId, true); 2026-10-24T05:20:08.8551356Z 551 │ commentSelection.clearSelection(); 2026-10-24T05:20:08.8551476Z 552 │ if (fileId !== null && collapsedFileIds.includes(fileId)) { 2026-10-24T05:20:08.8551559Z 553 │ toggleExpandedFile(fileId); 2026-10-24T05:20:08.8551613Z 554 │ } 2026-10-24T05:20:08.8551726Z 555 │ const nativeView = nativeReviewDiffViewRef.current; 2026-10-24T05:20:08.8551797Z 556 │ if (!nativeView) return; 2026-10-24T05:20:08.8551891Z 557 │ const result = await settlePromise(() => 2026-10-24T05:20:08.8552067Z 558 │ fileId === null ? nativeView.scrollToTop(true) : nativeView.scrollToFile(fileId, true), 2026-10-24T05:20:08.8552126Z 559 │ ); 2026-10-24T05:20:08.8552215Z 560 │ if (AsyncResult.isFailure(result)) { 2026-10-24T05:20:08.8552395Z 561 │ console.error("[review] Failed to navigate to diff file", squashAtomCommandFailure(result)); 2026-10-24T05:20:08.8552448Z 562 │ } 2026-10-24T05:20:08.8552501Z 563 │ }; 2026-10-24T05:20:08.8552583Z 564 │ const handleVisibleFileChange = ( 2026-10-24T05:20:08.8552715Z 565 │ event: NativeSyntheticEvent<{ readonly fileId?: string | null }>, 2026-10-24T05:20:08.8552770Z 566 │ ) => { 2026-10-24T05:20:08.8552877Z 567 │ loadVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-24T05:20:08.8553045Z 568 │ reviewFileNavigatorRef.current?.setVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-24T05:20:08.8553099Z 569 │ }; 2026-10-24T05:20:08.8553175Z 570 │ const renderInspector = () => ( 2026-10-24T05:20:08.8553312Z 571 │ void handleSelectFile(fileId)} 2026-10-24T05:20:08.8553860Z 577 │ /> 2026-10-24T05:20:08.8553915Z 578 │ ); 2026-10-24T05:20:08.8553969Z 579 │ 2026-10-24T05:20:08.8554150Z 580 │ const handleNativeToggleFile = (event: NativeSyntheticEvent<{ readonly fileId?: string }>) => { 2026-10-24T05:20:08.8554236Z 581 │ const { fileId } = event.nativeEvent; 2026-10-24T05:20:08.8554301Z 582 │ if (fileId) { 2026-10-24T05:20:08.8554382Z 583 │ loadVisibleFile(fileId, true); 2026-10-24T05:20:08.8554465Z 584 │ toggleExpandedFile(fileId); 2026-10-24T05:20:08.8554519Z 585 │ } 2026-10-24T05:20:08.8554572Z 586 │ }; 2026-10-24T05:20:08.8554624Z 587 │ 2026-10-24T05:20:08.8554714Z 588 │ const handleNativeToggleViewedFile = ( 2026-10-24T05:20:08.8554829Z 589 │ event: NativeSyntheticEvent<{ readonly fileId?: string }>, 2026-10-24T05:20:08.8554885Z 590 │ ) => { 2026-10-24T05:20:08.8554972Z 591 │ const { fileId } = event.nativeEvent; 2026-10-24T05:20:08.8555035Z 592 │ if (fileId) { 2026-10-24T05:20:08.8555109Z 593 │ toggleViewedFile(fileId); 2026-10-24T05:20:08.8555163Z 594 │ } 2026-10-24T05:20:08.8555216Z 595 │ }; 2026-10-24T05:20:08.8555266Z 596 │ 2026-10-24T05:20:08.8555343Z 597 │ const parsedDiffNotice = 2026-10-24T05:20:08.8555505Z 598 │ parsedDiff.kind === "files" || parsedDiff.kind === "raw" ? parsedDiff.notice : null; 2026-10-24T05:20:08.8555629Z 599 │ const hasCachedSelectedDiff = selectedSection?.diff != null; 2026-10-24T05:20:08.8555784Z 600 │ const hasAnyCachedDiff = reviewSections.some((section) => section.diff != null); 2026-10-24T05:20:08.8555903Z 601 │ const sectionMenu = buildReviewSectionMenu(reviewSections); 2026-10-24T05:20:08.8556061Z 602 │ const { showConnectionNotice, showSectionToolbar } = resolveReviewAvailability({ 2026-10-24T05:20:08.8556170Z 603 │ hasEnvironmentPresentation: environment.isReady, 2026-10-24T05:20:08.8556268Z 604 │ isEnvironmentConnected: isEnvironmentReady, 2026-10-24T05:20:08.8556340Z 605 │ hasCachedSelectedDiff, 2026-10-24T05:20:08.8556406Z 606 │ hasAnyCachedDiff, 2026-10-24T05:20:08.8556462Z 607 │ }); 2026-10-24T05:20:08.8556547Z 608 │ const handleRetryEnvironment = () => { 2026-10-24T05:20:08.8556634Z 609 │ void retryEnvironment(environmentId); 2026-10-24T05:20:08.8556694Z 610 │ }; 2026-10-24T05:20:08.8556782Z 611 │ const handleReturnToThread = () => { 2026-10-24T05:20:08.8556858Z 612 │ if (navigation.canGoBack()) { 2026-10-24T05:20:08.8556928Z 613 │ navigation.goBack(); 2026-10-24T05:20:08.8556991Z 614 │ return; 2026-10-24T05:20:08.8557045Z 615 │ } 2026-10-24T05:20:08.8557123Z 616 │ navigation.navigate("Thread", { 2026-10-24T05:20:08.8557214Z 617 │ environmentId: String(environmentId), 2026-10-24T05:20:08.8557290Z 618 │ threadId: String(threadId), 2026-10-24T05:20:08.8557346Z 619 │ }); 2026-10-24T05:20:08.8557397Z 620 │ }; 2026-10-24T05:20:08.8557475Z 621 │ const androidHeaderSubtitle = [ 2026-10-24T05:20:08.8557547Z 622 │ selectedSection?.title, 2026-10-24T05:20:08.8557625Z 623 │ headerDiffSummary.additions, 2026-10-24T05:20:08.8557704Z 624 │ headerDiffSummary.deletions, 2026-10-24T05:20:08.8557811Z 625 │ ] 2026-10-24T05:20:08.8557946Z 626 │ .filter((part): part is string => Boolean(part)) 2026-10-24T05:20:08.8558008Z 627 │ .join(" · "); 2026-10-24T05:20:08.8558061Z 628 │ 2026-10-24T05:20:08.8558138Z 629 │ const showChangedFilesPane = 2026-10-24T05:20:08.8558209Z 630 │ !showConnectionNotice && 2026-10-24T05:20:08.8558282Z 631 │ selectedSection !== null && 2026-10-24T05:20:08.8558362Z 632 │ parsedDiff.kind === "files" && 2026-10-24T05:20:08.8558441Z 633 │ NativeReviewDiffView !== null; 2026-10-24T05:20:08.8558610Z 634 │ useRegisterWorkspaceInspector(showChangedFilesPane ? renderInspector : undefined); 2026-10-24T05:20:08.8558775Z 635 │ const showChangedFilesToggle = panes.supportsAuxiliaryPane && showChangedFilesPane; 2026-10-24T05:20:08.8558828Z 636 │ 2026-10-24T05:20:08.8558901Z 637 │ const listHeader = (() => { 2026-10-24T05:20:08.8558991Z 638 │ const children: ReactElement[] = []; 2026-10-24T05:20:08.8559043Z 639 │ 2026-10-24T05:20:08.8559108Z 640 │ if (error) { 2026-10-24T05:20:08.8559177Z 641 │ children.push( 2026-10-24T05:20:08.8559236Z 642 │ 2026-10-24T05:20:08.8559927Z 649 │ Review unavailable 2026-10-24T05:20:08.8560085Z 650 │ {error} 2026-10-24T05:20:08.8560149Z 651 │ , 2026-10-24T05:20:08.8560206Z 652 │ ); 2026-10-24T05:20:08.8560259Z 653 │ } 2026-10-24T05:20:08.8560309Z 654 │ 2026-10-24T05:20:08.8560381Z 655 │ if (parsedDiffNotice) { 2026-10-24T05:20:08.8560541Z 656 │ children.push(); 2026-10-24T05:20:08.8560595Z 657 │ } 2026-10-24T05:20:08.8560651Z 658 │ 2026-10-24T05:20:08.8560727Z 659 │ if (children.length === 0) { 2026-10-24T05:20:08.8560790Z 660 │ return null; 2026-10-24T05:20:08.8560846Z 661 │ } 2026-10-24T05:20:08.8560897Z 662 │ 2026-10-24T05:20:08.8560966Z 663 │ return <>{children}; 2026-10-24T05:20:08.8561022Z 664 │ })(); 2026-10-24T05:20:08.8561089Z 665 │ const headerSubtitle = [ 2026-10-24T05:20:08.8561168Z 666 │ headerDiffSummary.additions, 2026-10-24T05:20:08.8561250Z 667 │ headerDiffSummary.deletions, 2026-10-24T05:20:08.8561332Z 668 │ pendingReviewCommentCount > 0 2026-10-24T05:20:08.8561499Z 669 │ ? `${pendingReviewCommentCount} comment${pendingReviewCommentCount === 1 ? "" : "s"}` 2026-10-24T05:20:08.8561561Z 670 │ : null, 2026-10-24T05:20:08.8561613Z 671 │ ] 2026-10-24T05:20:08.8561679Z 672 │ .filter(Boolean) 2026-10-24T05:20:08.8561740Z 673 │ .join(" · "); 2026-10-24T05:20:08.8561874Z 674 │ const headerTitleText = selectedSection?.title ?? "Review changes"; 2026-10-24T05:20:08.8561926Z 675 │ 2026-10-24T05:20:08.8561985Z 676 │ return ( 2026-10-24T05:20:08.8562039Z 677 │ <> 2026-10-24T05:20:08.8562103Z 678 │ 2026-10-24T05:20:08.8563514Z 694 │ 2026-10-24T05:20:08.8563582Z 695 │ 2026-10-24T05:20:08.8563702Z 696 │ 2026-10-24T05:20:08.8563784Z 697 │ {showConnectionNotice ? ( 2026-10-24T05:20:08.8563923Z 698 │ 2026-10-24T05:20:08.8564012Z 699 │ 2026-10-24T05:20:08.8565019Z 711 │ 2026-10-24T05:20:08.8565171Z 712 │ ) : selectedSection && parsedDiff.kind === "files" && NativeReviewDiffView ? ( 2026-10-24T05:20:08.8565234Z 713 │ 2026-10-24T05:20:08.8565675Z 719 │ 2026-10-24T05:20:08.8566027Z 723 │ {listHeader} 2026-10-24T05:20:08.8566147Z 724 │ 2026-10-24T05:20:08.8566231Z 725 │ { 2026-10-24T05:20:08.8567977Z ·  ────┬──── 2026-10-24T05:20:08.8568114Z · ╰── This is the containing effect 2026-10-24T05:20:08.8568201Z 285 │ setNow(new Date().toISOString()); 2026-10-24T05:20:08.8568272Z ·  ───┬── 2026-10-24T05:20:08.8568433Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:20:08.8568569Z 286 │ const id = setInterval(() => setNow(new Date().toISOString()), 60_000); 2026-10-24T05:20:08.8568623Z ╰──── 2026-10-24T05:20:08.8569214Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T05:20:08.8569535Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T05:20:08.8569541Z 2026-10-24T05:20:08.8569764Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:20:08.8569929Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:365:25] 2026-10-24T05:20:08.8570058Z 364 │ // range) the boundary string is identical and the chain would die. 2026-10-24T05:20:08.8570147Z 365 │ }, [nextSnoozeWakeAt, snoozeWakeTick]); 2026-10-24T05:20:08.8570247Z ·  ───────┬────── 2026-10-24T05:20:08.8570412Z · ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T05:20:08.8570523Z 366 │ const listItems = ((): readonly SidebarListItem[] => { 2026-10-24T05:20:08.8570623Z ╰──── 2026-10-24T05:20:08.8570940Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T05:20:08.8571246Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8571249Z 2026-10-24T05:20:08.8571414Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T05:20:08.8571576Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:356:53] 2026-10-24T05:20:08.8571661Z 355 │ if (Number.isNaN(wakeAtMs)) return; 2026-10-24T05:20:08.8571815Z 356 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647); 2026-10-24T05:20:08.8571938Z ·  ─────┬──── 2026-10-24T05:20:08.8572107Z · ╰── Cannot call impure function 2026-10-24T05:20:08.8572188Z 357 │ const id = setTimeout(() => { 2026-10-24T05:20:08.8572239Z ╰──── 2026-10-24T05:20:08.8572522Z  help: `Date.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T05:20:08.8572811Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T05:20:08.8572813Z 2026-10-24T05:20:08.8573068Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:20:08.8573238Z ╭─[apps/mobile/src/features/review/ReviewCommentComposerSheet.tsx:103:7] 2026-10-24T05:20:08.8573292Z 100 │ 2026-10-24T05:20:08.8573358Z 101 │ useEffect(() => { 2026-10-24T05:20:08.8573433Z ·  ────┬──── 2026-10-24T05:20:08.8573560Z · ╰── This is the containing effect 2026-10-24T05:20:08.8573662Z 102 │ if (!target || selectedLines.length === 0) { 2026-10-24T05:20:08.8576010Z 103 │ setHighlightedLinesById({}); 2026-10-24T05:20:08.8576124Z ·  ───────────┬─────────── 2026-10-24T05:20:08.8576299Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:20:08.8576361Z 104 │ return; 2026-10-24T05:20:08.8576412Z ╰──── 2026-10-24T05:20:08.8577010Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T05:20:08.8577329Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T05:20:08.8577332Z 2026-10-24T05:20:08.8577548Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T05:20:08.8577665Z ╭─[packages/shared/src/serverSettings.ts:346:9] 2026-10-24T05:20:08.8577765Z 345 │ const entry: ProjectSettingsOverrides = { 2026-10-24T05:20:08.8577893Z 346 │ ...(entries.get(projectId) ?? currentEntries[projectId] ?? {}), 2026-10-24T05:20:08.8578122Z ·  ────────────────────────────────────────────────────────────── 2026-10-24T05:20:08.8578222Z 347 │ }; 2026-10-24T05:20:08.8578273Z ╰──── 2026-10-24T05:20:08.8578533Z  help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback. 2026-10-24T05:20:08.8578536Z 2026-10-24T05:20:08.8578751Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in Array.prototype.reduce() 2026-10-24T05:20:08.8578868Z ╭─[packages/shared/src/serverSettings.ts:448:24] 2026-10-24T05:20:08.8578934Z 447 │ const favorites = 2026-10-24T05:20:08.8579040Z 448 │ setModelFavorites?.reduce((current, change) => { 2026-10-24T05:20:08.8579124Z ·  ───┬── 2026-10-24T05:20:08.8579254Z · ╰── For this reduce 2026-10-24T05:20:08.8579336Z 449 │ const exists = current.some( 2026-10-24T05:20:08.8579505Z 450 │ (favorite) => favorite.provider === change.provider && favorite.model === change.model, 2026-10-24T05:20:08.8579594Z 451 │ ); 2026-10-24T05:20:08.8579666Z 452 │ return change.favorite 2026-10-24T05:20:08.8579727Z 453 │ ? exists 2026-10-24T05:20:08.8579787Z 454 │ ? current 2026-10-24T05:20:08.8579919Z 455 │ : [...current, { provider: change.provider, model: change.model }] 2026-10-24T05:20:08.8580001Z ·  ─────┬──── 2026-10-24T05:20:08.8580117Z · ╰── From this spread 2026-10-24T05:20:08.8580186Z 456 │ : current.filter( 2026-10-24T05:20:08.8580236Z ╰──── 2026-10-24T05:20:08.8580440Z  help: Consider using `Object.assign()` or `Array.prototype.push()` to mutate the accumulator instead. 2026-10-24T05:20:08.8580597Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T05:20:08.8580600Z 2026-10-24T05:20:08.8580784Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-24T05:20:08.8580898Z ╭─[packages/shared/src/serverSettings.ts:466:3] 2026-10-24T05:20:08.8580957Z 464 │ null; 2026-10-24T05:20:08.8581069Z 465 │ let nextModelPreferences = initialModelPreferences; 2026-10-24T05:20:08.8581156Z ·  ──────────┬───────── 2026-10-24T05:20:08.8581281Z · ╰── From this accumulator 2026-10-24T05:20:08.8581381Z 466 │ for (const change of setModelsHidden ?? []) { 2026-10-24T05:20:08.8581448Z ·  ─┬─ 2026-10-24T05:20:08.8581558Z · ╰── For this loop 2026-10-24T05:20:08.8581691Z 467 │ const preferences = nextModelPreferences?.[change.provider] ?? { 2026-10-24T05:20:08.8581760Z 468 │ hiddenModels: [], 2026-10-24T05:20:08.8581828Z 469 │ modelOrder: [], 2026-10-24T05:20:08.8581883Z 470 │ }; 2026-10-24T05:20:08.8582056Z 471 │ const hiddenModels = preferences.hiddenModels.filter((model) => model !== change.model); 2026-10-24T05:20:08.8582164Z 472 │ if (change.hidden) hiddenModels.push(change.model); 2026-10-24T05:20:08.8582238Z 473 │ nextModelPreferences = { 2026-10-24T05:20:08.8582313Z 474 │ ...nextModelPreferences, 2026-10-24T05:20:08.8582406Z ·  ───────────┬─────────── 2026-10-24T05:20:08.8582527Z · ╰── From this spread 2026-10-24T05:20:08.8582697Z 475 │ [change.provider]: { ...preferences, hiddenModels }, 2026-10-24T05:20:08.8582780Z ╰──── 2026-10-24T05:20:08.8582930Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-24T05:20:08.8583084Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T05:20:08.8583086Z 2026-10-24T05:20:08.8583550Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T05:20:08.8583672Z ╭─[packages/shared/src/atomicWrite.test.ts:139:5] 2026-10-24T05:20:08.8583746Z 138 │ Effect.gen(function* () { 2026-10-24T05:20:08.8583937Z 139 │ ╭─▶ while (fiber.pollUnsafe() === undefined) { 2026-10-24T05:20:08.8584066Z 140 │ │ yield* TestClock.adjust("100 millis"); 2026-10-24T05:20:08.8584383Z 141 │ │ // oxlint-disable-next-line t3code/no-real-time-wait-in-tests -- a macrotask boundary so the real stat I/O can finish; time moves only via TestClock 2026-10-24T05:20:08.8584566Z 142 │ │ yield* Effect.promise(() => new Promise((resolve) => setImmediate(resolve))); 2026-10-24T05:20:08.8584691Z 143 │ ╰─▶ } 2026-10-24T05:20:08.8584776Z 144 │ return yield* Fiber.join(fiber); 2026-10-24T05:20:08.8584827Z ╰──── 2026-10-24T05:20:08.8584829Z 2026-10-24T05:20:08.8585088Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:20:08.8585264Z ╭─[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:60:5] 2026-10-24T05:20:08.8585321Z 55 │ 2026-10-24T05:20:08.8585387Z 56 │ useEffect(() => { 2026-10-24T05:20:08.8585458Z ·  ────┬──── 2026-10-24T05:20:08.8585586Z · ╰── This is the containing effect 2026-10-24T05:20:08.8585654Z 57 │ scheduler.reset(); 2026-10-24T05:20:08.8585753Z 58 │ highlightedRowIdsRef.current = new Set(); 2026-10-24T05:20:08.8585841Z 59 │ visibleChunkIndexRef.current = 0; 2026-10-24T05:20:08.8585957Z 60 │ setVisibleRange({ firstRowIndex: 0, lastRowIndex: 80 }); 2026-10-24T05:20:08.8586037Z ·  ───────┬─────── 2026-10-24T05:20:08.8586206Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:20:08.8586317Z 61 │ setTokensPatchJson(createEmptyTokenPatch(resetKey)); 2026-10-24T05:20:08.8586374Z ╰──── 2026-10-24T05:20:08.8586967Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T05:20:08.8587285Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T05:20:08.8587287Z 2026-10-24T05:20:08.8587485Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:20:08.8587657Z ╭─[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:63:7] 2026-10-24T05:20:08.8587786Z 62 │ return () => scheduler.cancel(); 2026-10-24T05:20:08.8587918Z 63 │ }, [enabled, resetKey, rows.length, scheduler]); 2026-10-24T05:20:08.8588045Z ·  ───┬─── ─────┬───── 2026-10-24T05:20:08.8588233Z · │ ╰── Unnecessary dependency `rows.length` 2026-10-24T05:20:08.8588368Z · ╰── Unnecessary dependency `enabled` 2026-10-24T05:20:08.8588421Z 64 │ 2026-10-24T05:20:08.8588473Z ╰──── 2026-10-24T05:20:08.8588758Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T05:20:08.8589059Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8589070Z 2026-10-24T05:20:08.8589325Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:20:08.8589475Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:523:5] 2026-10-24T05:20:08.8589534Z 521 │ }, []); 2026-10-24T05:20:08.8589610Z 522 │ useEffect(() => { 2026-10-24T05:20:08.8589707Z ·  ────┬──── 2026-10-24T05:20:08.8589835Z · ╰── This is the containing effect 2026-10-24T05:20:08.8589919Z 523 │ setKeyboardStateSuspect(false); 2026-10-24T05:20:08.8590009Z ·  ───────────┬─────────── 2026-10-24T05:20:08.8590175Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:20:08.8590281Z 524 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-24T05:20:08.8590336Z ╰──── 2026-10-24T05:20:08.8590972Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T05:20:08.8591283Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T05:20:08.8591288Z 2026-10-24T05:20:08.8591540Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:20:08.8591691Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:888:7] 2026-10-24T05:20:08.8591847Z 885 │ const [lastKnownKeyboardHeight, setLastKnownKeyboardHeight] = useState(0); 2026-10-24T05:20:08.8591914Z 886 │ useEffect(() => { 2026-10-24T05:20:08.8591983Z ·  ────┬──── 2026-10-24T05:20:08.8592111Z · ╰── This is the containing effect 2026-10-24T05:20:08.8592269Z 887 │ if (liveKeyboardHeight > 0 && liveKeyboardHeight !== lastKnownKeyboardHeight) { 2026-10-24T05:20:08.8592381Z 888 │ setLastKnownKeyboardHeight(liveKeyboardHeight); 2026-10-24T05:20:08.8592477Z ·  ─────────────┬──────────── 2026-10-24T05:20:08.8592651Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:20:08.8592708Z 889 │ } 2026-10-24T05:20:08.8592760Z ╰──── 2026-10-24T05:20:08.8593406Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T05:20:08.8593761Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T05:20:08.8593764Z 2026-10-24T05:20:08.8594014Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:20:08.8594164Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1135:5] 2026-10-24T05:20:08.8594218Z 1133 │ 2026-10-24T05:20:08.8594285Z 1134 │ useEffect(() => { 2026-10-24T05:20:08.8594360Z ·  ────┬──── 2026-10-24T05:20:08.8594491Z · ╰── This is the containing effect 2026-10-24T05:20:08.8594568Z 1135 │ setAnchorMessageId(null); 2026-10-24T05:20:08.8594650Z ·  ─────────┬──────── 2026-10-24T05:20:08.8594820Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:20:08.8594901Z 1136 │ setSubmittedMessageId(null); 2026-10-24T05:20:08.8594953Z ╰──── 2026-10-24T05:20:08.8595536Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T05:20:08.8595853Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T05:20:08.8595857Z 2026-10-24T05:20:08.8596054Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:20:08.8596202Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:524:7] 2026-10-24T05:20:08.8596286Z 523 │ setKeyboardStateSuspect(false); 2026-10-24T05:20:08.8596383Z 524 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-24T05:20:08.8596524Z ·  ────────┬──────── ─────────┬──────── 2026-10-24T05:20:08.8596729Z · │ ╰── Unnecessary dependency `liveKeyboardHeight` 2026-10-24T05:20:08.8596934Z · ╰── Unnecessary dependency `isKeyboardVisible` 2026-10-24T05:20:08.8597092Z 525 │ const handleOwnedInputFocusChange = (focused: boolean) => { 2026-10-24T05:20:08.8597148Z ╰──── 2026-10-24T05:20:08.8597435Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T05:20:08.8597736Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8597739Z 2026-10-24T05:20:08.8597936Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:20:08.8598087Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1083:7] 2026-10-24T05:20:08.8598173Z 1082 │ userInputInsetProgress.set(1); 2026-10-24T05:20:08.8598338Z 1083 │ }, [activeUserInputRequestId, userInputCardProgress, userInputInsetProgress]); 2026-10-24T05:20:08.8598435Z ·  ────────────┬─────────── 2026-10-24T05:20:08.8598611Z · ╰── Unnecessary dependency `activeUserInputRequestId` 2026-10-24T05:20:08.8598715Z 1084 │ const showContent = props.showContent ?? true; 2026-10-24T05:20:08.8598770Z ╰──── 2026-10-24T05:20:08.8599055Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T05:20:08.8599357Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8599359Z 2026-10-24T05:20:08.8599593Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:20:08.8599794Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1141:15] 2026-10-24T05:20:08.8599865Z 1140 │ freeze.set(false); 2026-10-24T05:20:08.8599945Z 1141 │ }, [freeze, selectedThreadKey]); 2026-10-24T05:20:08.8600038Z ·  ────────┬──────── 2026-10-24T05:20:08.8600200Z · ╰── Unnecessary dependency `selectedThreadKey` 2026-10-24T05:20:08.8600254Z 1142 │ 2026-10-24T05:20:08.8600305Z ╰──── 2026-10-24T05:20:08.8600590Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T05:20:08.8600898Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8600904Z 2026-10-24T05:20:08.8601059Z ⚠ react(immutability): This value cannot be modified 2026-10-24T05:20:08.8601207Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:971:5] 2026-10-24T05:20:08.8601314Z 966 │ const composerPopoverHeight = useSharedValue(0); 2026-10-24T05:20:08.8601417Z 967 │ const floatingControlCoverage = useSharedValue( 2026-10-24T05:20:08.8601512Z ·  ───────────┬─────────── 2026-10-24T05:20:08.8601673Z · ╰── `floatingControlCoverage` originates here 2026-10-24T05:20:08.8601795Z 968 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-24T05:20:08.8601850Z 969 │ ); 2026-10-24T05:20:08.8601915Z 970 │ useEffect(() => { 2026-10-24T05:20:08.8602078Z 971 │ floatingControlCoverage.value = withTiming( 2026-10-24T05:20:08.8602197Z ·  ───────────┬─────────── 2026-10-24T05:20:08.8602359Z · ╰── `floatingControlCoverage` cannot be modified 2026-10-24T05:20:08.8602484Z 972 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-24T05:20:08.8602536Z ╰──── 2026-10-24T05:20:08.8602797Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T05:20:08.8603094Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:20:08.8603097Z 2026-10-24T05:20:08.8603254Z ⚠ react(immutability): This value cannot be modified 2026-10-24T05:20:08.8603404Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:989:7] 2026-10-24T05:20:08.8603591Z 979 │ const userInputCoverageApplies = Platform.OS === "ios" && activeUserInputRequestId !== null; 2026-10-24T05:20:08.8603709Z 980 │ const combinedContentInsetEndAdjustment = useSharedValue( 2026-10-24T05:20:08.8603819Z ·  ────────────────┬──────────────── 2026-10-24T05:20:08.8604004Z · ╰── `combinedContentInsetEndAdjustment` originates here 2026-10-24T05:20:08.8604128Z 981 │ Math.max(0, estimatedOverlayHeight - nativeInsetOvercount), 2026-10-24T05:20:08.8604182Z 982 │ ); 2026-10-24T05:20:08.8604252Z 983 │ useAnimatedReaction( 2026-10-24T05:20:08.8604311Z 984 │ () => 2026-10-24T05:20:08.8604401Z 985 │ contentInsetEndAdjustment.value + 2026-10-24T05:20:08.8604492Z 986 │ floatingControlCoverage.value + 2026-10-24T05:20:08.8604687Z 987 │ (userInputCoverageApplies ? userInputInsetProgress.value * userInputCardCoverage.value : 0), 2026-10-24T05:20:08.8604751Z 988 │ (value) => { 2026-10-24T05:20:08.8604861Z 989 │ combinedContentInsetEndAdjustment.value = value; 2026-10-24T05:20:08.8604970Z ·  ────────────────┬──────────────── 2026-10-24T05:20:08.8605160Z · ╰── `combinedContentInsetEndAdjustment` cannot be modified 2026-10-24T05:20:08.8605215Z 990 │ }, 2026-10-24T05:20:08.8605265Z ╰──── 2026-10-24T05:20:08.8605527Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T05:20:08.8605833Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:20:08.8605838Z 2026-10-24T05:20:08.8606073Z ⚠ unicorn(prefer-string-starts-ends-with): Prefer String#startsWith over a regex with a caret. 2026-10-24T05:20:08.8606195Z ╭─[apps/server/src/vcs/GitVcsDriverCore.ts:509:11] 2026-10-24T05:20:08.8606292Z 508 │ GIT_DIAGNOSTIC_LINE_PATTERN.test(line) || 2026-10-24T05:20:08.8606428Z 509 │ (!/^remote:/.test(line) && SSH_TRANSPORT_REFUSAL_PATTERN.test(line)), 2026-10-24T05:20:08.8606515Z ·  ─────────────── 2026-10-24T05:20:08.8606570Z 510 │ ) 2026-10-24T05:20:08.8606621Z ╰──── 2026-10-24T05:20:08.8606772Z  help: Replace `/^remote:/.test(line)` with `line.startsWith('remote:')`. 2026-10-24T05:20:08.8606774Z 2026-10-24T05:20:08.8607008Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T05:20:08.8607223Z ╭─[apps/mobile/src/features/keyboard/HardwareKeyboardCommandProvider.tsx:116:34] 2026-10-24T05:20:08.8607289Z 115 │ return [...commands]; 2026-10-24T05:20:08.8607421Z 116 │ }, [activeThreadRef, pathname, registrationVersion, navigation]); 2026-10-24T05:20:08.8607537Z ·  ─────────┬───────── 2026-10-24T05:20:08.8607720Z · ╰── Unnecessary dependency `registrationVersion` 2026-10-24T05:20:08.8607771Z 117 │ 2026-10-24T05:20:08.8607824Z ╰──── 2026-10-24T05:20:08.8608133Z  help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often 2026-10-24T05:20:08.8608441Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8608445Z 2026-10-24T05:20:08.8608702Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:20:08.8608834Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2139:5] 2026-10-24T05:20:08.8608890Z 2137 │ ); 2026-10-24T05:20:08.8608956Z 2138 │ useEffect(() => { 2026-10-24T05:20:08.8609028Z ·  ────┬──── 2026-10-24T05:20:08.8609156Z · ╰── This is the containing effect 2026-10-24T05:20:08.8609233Z 2139 │ setExpandedVideo(null); 2026-10-24T05:20:08.8609316Z ·  ────────┬─────── 2026-10-24T05:20:08.8609490Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:20:08.8609608Z 2140 │ setExpandedFile(null); 2026-10-24T05:20:08.8609674Z ╰──── 2026-10-24T05:20:08.8610259Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T05:20:08.8610573Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T05:20:08.8610576Z 2026-10-24T05:20:08.8610799Z ⚠ eslint(no-unused-vars): Identifier 'isMarkdownFileLinkLabel' is imported but never used. 2026-10-24T05:20:08.8610933Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:66:10] 2026-10-24T05:20:08.8611071Z 65 │ import { resolveAssetUrl } from "@t3tools/client-runtime/state/assets"; 2026-10-24T05:20:08.8611207Z 66 │ import { isMarkdownFileLinkLabel } from "@t3tools/shared/markdownLinks"; 2026-10-24T05:20:08.8611304Z ·  ───────────┬─────────── 2026-10-24T05:20:08.8611464Z · ╰── 'isMarkdownFileLinkLabel' is imported here 2026-10-24T05:20:08.8611620Z 67 │ import { formatAttachmentSize } from "@t3tools/client-runtime/state/attachments"; 2026-10-24T05:20:08.8611672Z ╰──── 2026-10-24T05:20:08.8611769Z  help: Consider removing this import. 2026-10-24T05:20:08.8611772Z 2026-10-24T05:20:08.8612024Z ⚠ eslint(no-unused-vars): Identifier 'createContext' is imported but never used. 2026-10-24T05:20:08.8612181Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:92:3] 2026-10-24T05:20:08.8612240Z 91 │ import { 2026-10-24T05:20:08.8612304Z 92 │ createContext, 2026-10-24T05:20:08.8612377Z ·  ──────┬────── 2026-10-24T05:20:08.8612509Z · ╰── 'createContext' is imported here 2026-10-24T05:20:08.8612565Z 93 │ memo, 2026-10-24T05:20:08.8612616Z ╰──── 2026-10-24T05:20:08.8612709Z  help: Consider removing this import. 2026-10-24T05:20:08.8612712Z 2026-10-24T05:20:08.8612920Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-24T05:20:08.8613053Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:108:3] 2026-10-24T05:20:08.8613112Z 107 │ import { 2026-10-24T05:20:08.8613183Z 108 │ ActivityIndicator, 2026-10-24T05:20:08.8613266Z ·  ────────┬──────── 2026-10-24T05:20:08.8613407Z · ╰── 'ActivityIndicator' is imported here 2026-10-24T05:20:08.8613464Z 109 │ Image, 2026-10-24T05:20:08.8613513Z ╰──── 2026-10-24T05:20:08.8613609Z  help: Consider removing this import. 2026-10-24T05:20:08.8613612Z 2026-10-24T05:20:08.8613808Z ⚠ eslint(no-unused-vars): Identifier 'ScrollView' is imported but never used. 2026-10-24T05:20:08.8613937Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:115:3] 2026-10-24T05:20:08.8613997Z 114 │ Pressable, 2026-10-24T05:20:08.8614061Z 115 │ ScrollView, 2026-10-24T05:20:08.8614133Z ·  ─────┬──── 2026-10-24T05:20:08.8614263Z · ╰── 'ScrollView' is imported here 2026-10-24T05:20:08.8614329Z 116 │ StyleSheet, 2026-10-24T05:20:08.8614385Z ╰──── 2026-10-24T05:20:08.8614480Z  help: Consider removing this import. 2026-10-24T05:20:08.8614482Z 2026-10-24T05:20:08.8614676Z ⚠ eslint(no-unused-vars): Identifier 'NativeText' is imported but never used. 2026-10-24T05:20:08.8614806Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:117:11] 2026-10-24T05:20:08.8614867Z 116 │ StyleSheet, 2026-10-24T05:20:08.8614934Z 117 │ Text as NativeText, 2026-10-24T05:20:08.8615014Z ·  ─────┬──── 2026-10-24T05:20:08.8615148Z · ╰── 'NativeText' is imported here 2026-10-24T05:20:08.8615215Z 118 │ type ColorValue, 2026-10-24T05:20:08.8615265Z ╰──── 2026-10-24T05:20:08.8615359Z  help: Consider removing this import. 2026-10-24T05:20:08.8615411Z 2026-10-24T05:20:08.8615655Z ⚠ eslint(no-unused-vars): Identifier 'tryOpenExternalUrl' is imported but never used. 2026-10-24T05:20:08.8615786Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:140:10] 2026-10-24T05:20:08.8615920Z 139 │ import { copyTextWithHaptic } from "../../lib/copyTextWithHaptic"; 2026-10-24T05:20:08.8616046Z 140 │ import { tryOpenExternalUrl } from "../../lib/openExternalUrl"; 2026-10-24T05:20:08.8616133Z ·  ─────────┬──────── 2026-10-24T05:20:08.8616285Z · ╰── 'tryOpenExternalUrl' is imported here 2026-10-24T05:20:08.8616431Z 141 │ import { downloadAndShareAttachment } from "../../lib/attachmentDownload"; 2026-10-24T05:20:08.8616485Z ╰──── 2026-10-24T05:20:08.8616579Z  help: Consider removing this import. 2026-10-24T05:20:08.8616587Z 2026-10-24T05:20:08.8616801Z ⚠ eslint(no-unused-vars): Identifier 'faviconUrlForOrigin' is imported but never used. 2026-10-24T05:20:08.8616930Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:143:10] 2026-10-24T05:20:08.8617060Z 142 │ import { hasWideMarkdownBlock } from "../../lib/wideMarkdownBlocks"; 2026-10-24T05:20:08.8617185Z 143 │ import { faviconUrlForOrigin } from "@t3tools/shared/favicon"; 2026-10-24T05:20:08.8617273Z ·  ─────────┬───────── 2026-10-24T05:20:08.8617424Z · ╰── 'faviconUrlForOrigin' is imported here 2026-10-24T05:20:08.8617480Z 144 │ import { 2026-10-24T05:20:08.8617532Z ╰──── 2026-10-24T05:20:08.8617625Z  help: Consider removing this import. 2026-10-24T05:20:08.8617628Z 2026-10-24T05:20:08.8617841Z ⚠ eslint(no-unused-vars): Identifier 'MediaVideoPlayer' is imported but never used. 2026-10-24T05:20:08.8617969Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:157:10] 2026-10-24T05:20:08.8618114Z 156 │ import { VideoAttachmentTile } from "../../components/VideoAttachmentTile"; 2026-10-24T05:20:08.8618246Z 157 │ import { MediaVideoPlayer } from "../../components/MediaVideoPlayer"; 2026-10-24T05:20:08.8618331Z ·  ────────┬─────── 2026-10-24T05:20:08.8618476Z · ╰── 'MediaVideoPlayer' is imported here 2026-10-24T05:20:08.8618614Z 158 │ import { resolveMarkdownMediaPreview } from "../../lib/markdownMedia"; 2026-10-24T05:20:08.8618665Z ╰──── 2026-10-24T05:20:08.8618758Z  help: Consider removing this import. 2026-10-24T05:20:08.8618760Z 2026-10-24T05:20:08.8618979Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoPreviewUri' is imported but never used. 2026-10-24T05:20:08.8619110Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:161:3] 2026-10-24T05:20:08.8619191Z 160 │ attachmentVideoPreviewSource, 2026-10-24T05:20:08.8619262Z 161 │ mediaVideoPreviewUri, 2026-10-24T05:20:08.8619344Z ·  ──────────┬───────── 2026-10-24T05:20:08.8619492Z · ╰── 'mediaVideoPreviewUri' is imported here 2026-10-24T05:20:08.8619573Z 162 │ mediaVideoThumbnailKey, 2026-10-24T05:20:08.8619624Z ╰──── 2026-10-24T05:20:08.8619745Z  help: Consider removing this import. 2026-10-24T05:20:08.8619748Z 2026-10-24T05:20:08.8619966Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoThumbnailKey' is imported but never used. 2026-10-24T05:20:08.8620143Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:162:3] 2026-10-24T05:20:08.8620245Z 161 │ mediaVideoPreviewUri, 2026-10-24T05:20:08.8620313Z 162 │ mediaVideoThumbnailKey, 2026-10-24T05:20:08.8620400Z ·  ───────────┬────────── 2026-10-24T05:20:08.8620553Z · ╰── 'mediaVideoThumbnailKey' is imported here 2026-10-24T05:20:08.8620633Z 163 │ type MediaVideoPreviewSource, 2026-10-24T05:20:08.8620682Z ╰──── 2026-10-24T05:20:08.8620776Z  help: Consider removing this import. 2026-10-24T05:20:08.8620778Z 2026-10-24T05:20:08.8620985Z ⚠ eslint(no-unused-vars): Type 'MediaVideoPreviewSource' is imported but never used. 2026-10-24T05:20:08.8621113Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:163:8] 2026-10-24T05:20:08.8621181Z 162 │ mediaVideoThumbnailKey, 2026-10-24T05:20:08.8621265Z 163 │ type MediaVideoPreviewSource, 2026-10-24T05:20:08.8621362Z ·  ───────────┬─────────── 2026-10-24T05:20:08.8621522Z · ╰── 'MediaVideoPreviewSource' is imported here 2026-10-24T05:20:08.8621606Z 164 │ } from "../../lib/videoPreviewSource"; 2026-10-24T05:20:08.8621659Z ╰──── 2026-10-24T05:20:08.8621754Z  help: Consider removing this import. 2026-10-24T05:20:08.8621756Z 2026-10-24T05:20:08.8621950Z ⚠ eslint(no-unused-vars): Type 'ReviewDiffTheme' is imported but never used. 2026-10-24T05:20:08.8622079Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:171:15] 2026-10-24T05:20:08.8622249Z 170 │ import { parseReviewCommentMessageSegments } from "../review/reviewCommentSelection"; 2026-10-24T05:20:08.8622390Z 171 │ import type { ReviewDiffTheme } from "../review/shikiReviewHighlighter"; 2026-10-24T05:20:08.8622482Z ·  ───────┬─────── 2026-10-24T05:20:08.8622628Z · ╰── 'ReviewDiffTheme' is imported here 2026-10-24T05:20:08.8622684Z 172 │ import { 2026-10-24T05:20:08.8622734Z ╰──── 2026-10-24T05:20:08.8622827Z  help: Consider removing this import. 2026-10-24T05:20:08.8622829Z 2026-10-24T05:20:08.8623050Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownFontSizes' is imported but never used. 2026-10-24T05:20:08.8623176Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:186:3] 2026-10-24T05:20:08.8623233Z 185 │ import { 2026-10-24T05:20:08.8623306Z 186 │ resolveMarkdownFontSizes, 2026-10-24T05:20:08.8623394Z ·  ────────────┬─────────── 2026-10-24T05:20:08.8623554Z · ╰── 'resolveMarkdownFontSizes' is imported here 2026-10-24T05:20:08.8623644Z 187 │ resolveNativeMarkdownTypography, 2026-10-24T05:20:08.8623695Z ╰──── 2026-10-24T05:20:08.8623788Z  help: Consider removing this import. 2026-10-24T05:20:08.8623790Z 2026-10-24T05:20:08.8624005Z ⚠ eslint(no-unused-vars): Identifier 'markdownLinkIconSource' is imported but never used. 2026-10-24T05:20:08.8624134Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:191:10] 2026-10-24T05:20:08.8624265Z 190 │ import { PierreEntryIcon } from "../../components/PierreEntryIcon"; 2026-10-24T05:20:08.8624397Z 191 │ import { markdownLinkIconSource } from "../../lib/markdownLinkIcons"; 2026-10-24T05:20:08.8624489Z ·  ───────────┬────────── 2026-10-24T05:20:08.8624734Z · ╰── 'markdownLinkIconSource' is imported here 2026-10-24T05:20:08.8624833Z 192 │ import { 2026-10-24T05:20:08.8624883Z ╰──── 2026-10-24T05:20:08.8624974Z  help: Consider removing this import. 2026-10-24T05:20:08.8624976Z 2026-10-24T05:20:08.8625231Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownInlineCodePresentation' is imported but never used. 2026-10-24T05:20:08.8625359Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:194:3] 2026-10-24T05:20:08.8625437Z 193 │ normalizeNativeMarkdownUrl, 2026-10-24T05:20:08.8625529Z 194 │ resolveMarkdownInlineCodePresentation, 2026-10-24T05:20:08.8625637Z ·  ──────────────────┬────────────────── 2026-10-24T05:20:08.8625829Z · ╰── 'resolveMarkdownInlineCodePresentation' is imported here 2026-10-24T05:20:08.8625908Z 195 │ resolveMarkdownLinkIcon, 2026-10-24T05:20:08.8625960Z ╰──── 2026-10-24T05:20:08.8626054Z  help: Consider removing this import. 2026-10-24T05:20:08.8626057Z 2026-10-24T05:20:08.8626275Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownLinkIcon' is imported but never used. 2026-10-24T05:20:08.8626403Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:195:3] 2026-10-24T05:20:08.8626495Z 194 │ resolveMarkdownInlineCodePresentation, 2026-10-24T05:20:08.8626567Z 195 │ resolveMarkdownLinkIcon, 2026-10-24T05:20:08.8626655Z ·  ───────────┬─────────── 2026-10-24T05:20:08.8626809Z · ╰── 'resolveMarkdownLinkIcon' is imported here 2026-10-24T05:20:08.8626894Z 196 │ resolveMarkdownLinkPresentation, 2026-10-24T05:20:08.8626945Z ╰──── 2026-10-24T05:20:08.8627044Z  help: Consider removing this import. 2026-10-24T05:20:08.8627049Z 2026-10-24T05:20:08.8627270Z ⚠ eslint(no-unused-vars): Identifier 'useMarkdownCodeHighlight' is imported but never used. 2026-10-24T05:20:08.8627398Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:234:10] 2026-10-24T05:20:08.8627497Z 233 │ import { ThreadMcpApp } from "./McpAppWebView"; 2026-10-24T05:20:08.8627639Z 234 │ import { useMarkdownCodeHighlight } from "./markdownCodeHighlightState"; 2026-10-24T05:20:08.8627737Z ·  ────────────┬─────────── 2026-10-24T05:20:08.8627900Z · ╰── 'useMarkdownCodeHighlight' is imported here 2026-10-24T05:20:08.8627955Z 235 │ import { 2026-10-24T05:20:08.8628006Z ╰──── 2026-10-24T05:20:08.8628099Z  help: Consider removing this import. 2026-10-24T05:20:08.8628107Z 2026-10-24T05:20:08.8628316Z ⚠ eslint(no-unused-vars): Identifier 'useAssetUrlState' is imported but never used. 2026-10-24T05:20:08.8628441Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:238:3] 2026-10-24T05:20:08.8628505Z 237 │ useAssetUrl, 2026-10-24T05:20:08.8628571Z 238 │ useAssetUrlState, 2026-10-24T05:20:08.8628650Z ·  ────────┬─────── 2026-10-24T05:20:08.8628788Z · ╰── 'useAssetUrlState' is imported here 2026-10-24T05:20:08.8628856Z 239 │ useRefreshAssetUrl, 2026-10-24T05:20:08.8628907Z ╰──── 2026-10-24T05:20:08.8629001Z  help: Consider removing this import. 2026-10-24T05:20:08.8629003Z 2026-10-24T05:20:08.8629198Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:20:08.8629387Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2141:7] 2026-10-24T05:20:08.8629491Z 2140 │ setExpandedFile(null); 2026-10-24T05:20:08.8629680Z 2141 │ }, [props.environmentId, props.threadId, props.contentPresentation.kind]); 2026-10-24T05:20:08.8629902Z ·  ─────────┬───────── ───────┬────── ───────────────┬────────────── 2026-10-24T05:20:08.8630192Z · │ │ ╰── Unnecessary dependency `props.contentPresentation.kind` 2026-10-24T05:20:08.8630390Z · │ ╰── Unnecessary dependency `props.threadId` 2026-10-24T05:20:08.8630557Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-24T05:20:08.8630699Z 2142 │ const horizontalPadding = props.layoutVariant === "split" ? 20 : 16; 2026-10-24T05:20:08.8630750Z ╰──── 2026-10-24T05:20:08.8631100Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T05:20:08.8631405Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8631408Z 2026-10-24T05:20:08.8631606Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:20:08.8631737Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2609:7] 2026-10-24T05:20:08.8631833Z 2608 │ reportHeaderMaterialVisibility(false); 2026-10-24T05:20:08.8631950Z 2609 │ }, [feedThreadKey, reportHeaderMaterialVisibility]); 2026-10-24T05:20:08.8632032Z ·  ──────┬────── 2026-10-24T05:20:08.8632180Z · ╰── Unnecessary dependency `feedThreadKey` 2026-10-24T05:20:08.8632233Z 2610 │ 2026-10-24T05:20:08.8632285Z ╰──── 2026-10-24T05:20:08.8632569Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T05:20:08.8632870Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8632873Z 2026-10-24T05:20:08.8633067Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:20:08.8633268Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2625:7] 2026-10-24T05:20:08.8633364Z 2624 │ } 2026-10-24T05:20:08.8633494Z 2625 │ }, [listMountKey, props.contentInsetEndAdjustment, listRef]); 2026-10-24T05:20:08.8633569Z ·  ──────┬───── 2026-10-24T05:20:08.8633715Z · ╰── Unnecessary dependency `listMountKey` 2026-10-24T05:20:08.8633767Z 2626 │ 2026-10-24T05:20:08.8633817Z ╰──── 2026-10-24T05:20:08.8634097Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T05:20:08.8634399Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8634402Z 2026-10-24T05:20:08.8634600Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:20:08.8634733Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2782:7] 2026-10-24T05:20:08.8634786Z 2781 │ } 2026-10-24T05:20:08.8634965Z 2782 │ }, [expandedTurnIds, expandedWorkGroups, expandedWorkRows, settleDisclosureAfterLayout]); 2026-10-24T05:20:08.8635164Z ·  ───────┬─────── ─────────┬──────── ────────┬─────── 2026-10-24T05:20:08.8635412Z · │ │ ╰── Unnecessary dependency `expandedWorkRows` 2026-10-24T05:20:08.8635610Z · │ ╰── Unnecessary dependency `expandedWorkGroups` 2026-10-24T05:20:08.8635768Z · ╰── Unnecessary dependency `expandedTurnIds` 2026-10-24T05:20:08.8635825Z 2783 │ 2026-10-24T05:20:08.8635879Z ╰──── 2026-10-24T05:20:08.8636163Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T05:20:08.8636464Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8636466Z 2026-10-24T05:20:08.8636646Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T05:20:08.8636777Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:613:9] 2026-10-24T05:20:08.8636835Z 612 │ }; 2026-10-24T05:20:08.8636952Z 613 │ }, [props.environmentId, attachment.id, httpBaseUrl]), 2026-10-24T05:20:08.8637140Z ·  ─────────┬───────── ──────┬────── ─────┬───── 2026-10-24T05:20:08.8637374Z · │ │ ╰── Unnecessary dependency `httpBaseUrl` 2026-10-24T05:20:08.8637567Z · │ ╰── Unnecessary dependency `attachment.id` 2026-10-24T05:20:08.8637729Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-24T05:20:08.8637782Z 614 │ ); 2026-10-24T05:20:08.8637835Z ╰──── 2026-10-24T05:20:08.8638189Z  help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often 2026-10-24T05:20:08.8638524Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8638527Z 2026-10-24T05:20:08.8638874Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeEffect(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T05:20:08.8639005Z ╭─[apps/server/src/vcs/GitVcsDriverCore.test.ts:1786:34] 2026-10-24T05:20:08.8639137Z 1785 │ const stat = branch.files!.find((file) => file.path === path)!; 2026-10-24T05:20:08.8639282Z 1786 │ const request = yield* Schema.decodeEffect(ReviewDiffPreviewInput)({ 2026-10-24T05:20:08.8639396Z ·  ─────────────────── 2026-10-24T05:20:08.8639462Z 1787 │ cwd, 2026-10-24T05:20:08.8639515Z ╰──── 2026-10-24T05:20:08.8639517Z 2026-10-24T05:20:08.8639702Z ⚠ react(immutability): This value cannot be modified 2026-10-24T05:20:08.8639845Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:174:5] 2026-10-24T05:20:08.8639983Z 170 │ const expandedAngle = props.collapsedDirection === "right" ? 90 : 180; 2026-10-24T05:20:08.8640120Z 171 │ const rotation = useSharedValue(props.expanded ? expandedAngle : 0); 2026-10-24T05:20:08.8640195Z ·  ────┬─── 2026-10-24T05:20:08.8640323Z · ╰── `rotation` originates here 2026-10-24T05:20:08.8640375Z 172 │ 2026-10-24T05:20:08.8640444Z 173 │ useLayoutEffect(() => { 2026-10-24T05:20:08.8640575Z 174 │ rotation.value = withTiming(props.expanded ? expandedAngle : 0, { 2026-10-24T05:20:08.8640650Z ·  ────┬─── 2026-10-24T05:20:08.8640781Z · ╰── `rotation` cannot be modified 2026-10-24T05:20:08.8640879Z 175 │ duration: THREAD_DISCLOSURE_TRANSITION_MS, 2026-10-24T05:20:08.8640930Z ╰──── 2026-10-24T05:20:08.8641190Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T05:20:08.8641484Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:20:08.8641486Z 2026-10-24T05:20:08.8641679Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T05:20:08.8641831Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:1246:23] 2026-10-24T05:20:08.8641898Z 1245 │ { 2026-10-24T05:20:08.8647221Z ·  ────┬──── 2026-10-24T05:20:08.8647347Z · ╰── This is the containing effect 2026-10-24T05:20:08.8647471Z 30 │ if (snapshot && snapshot !== live) setHeld({ key, snapshot }); 2026-10-24T05:20:08.8647574Z ·  ───┬─── 2026-10-24T05:20:08.8647762Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:20:08.8647837Z 31 │ }, [key, live, snapshot]); 2026-10-24T05:20:08.8647890Z ╰──── 2026-10-24T05:20:08.8648476Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T05:20:08.8648789Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T05:20:08.8648792Z 2026-10-24T05:20:08.8649001Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T05:20:08.8649139Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:773:7] 2026-10-24T05:20:08.8649245Z 772 │ if (settingsSheetPresentation.isActive) { 2026-10-24T05:20:08.8649376Z 773 │ settingsRoutePresentation.present(settingsRouteSession); 2026-10-24T05:20:08.8649469Z ·  ────────────┬──────────── 2026-10-24T05:20:08.8649649Z · ╰── Missing dependency `settingsRoutePresentation` 2026-10-24T05:20:08.8649730Z 774 │ } 2026-10-24T05:20:08.8649930Z 775 │ }, [settingsRoutePresentation.present, settingsRouteSession, settingsSheetPresentation.isActive]); 2026-10-24T05:20:08.8650036Z ·  ────────────────┬──────────────── 2026-10-24T05:20:08.8650310Z · ╰── Overly precise dependency `settingsRoutePresentation.present`, use `settingsRoutePresentation` instead 2026-10-24T05:20:08.8650364Z 776 │ 2026-10-24T05:20:08.8650416Z ╰──── 2026-10-24T05:20:08.8650835Z  help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T05:20:08.8651146Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8651149Z 2026-10-24T05:20:08.8651300Z ⚠ react(immutability): This value cannot be modified 2026-10-24T05:20:08.8651442Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:391:5] 2026-10-24T05:20:08.8651599Z 387 │ typeof props.style.borderRadius === "number" ? props.style.borderRadius : 0; 2026-10-24T05:20:08.8651732Z 388 │ const animatedBorderRadius = useSharedValue(targetBorderRadius); 2026-10-24T05:20:08.8651876Z ·  ──────────┬───────── 2026-10-24T05:20:08.8652063Z · ╰── `animatedBorderRadius` originates here 2026-10-24T05:20:08.8652217Z 389 │ const shouldAnimate = props.animateLayout !== false && Platform.OS !== "android"; 2026-10-24T05:20:08.8652286Z 390 │ useLayoutEffect(() => { 2026-10-24T05:20:08.8652384Z 391 │ animatedBorderRadius.value = shouldAnimate 2026-10-24T05:20:08.8652469Z ·  ──────────┬───────── 2026-10-24T05:20:08.8652624Z · ╰── `animatedBorderRadius` cannot be modified 2026-10-24T05:20:08.8652711Z 392 │ ? withTiming(targetBorderRadius, { 2026-10-24T05:20:08.8652762Z ╰──── 2026-10-24T05:20:08.8653028Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T05:20:08.8653328Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:20:08.8653331Z 2026-10-24T05:20:08.8653474Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:20:08.8653592Z ╭─[apps/mobile/src/native/StackHeader.tsx:185:9] 2026-10-24T05:20:08.8653654Z 184 │ "options", 2026-10-24T05:20:08.8653747Z 185 │ latestOptionFunctionsRef.current, 2026-10-24T05:20:08.8653854Z ·  ────────────────┬─────────────── 2026-10-24T05:20:08.8654044Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T05:20:08.8654136Z 186 │ optionFunctionWrappersRef.current, 2026-10-24T05:20:08.8654193Z ╰──── 2026-10-24T05:20:08.8654654Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T05:20:08.8654938Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:20:08.8654941Z 2026-10-24T05:20:08.8655081Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:20:08.8655196Z ╭─[apps/mobile/src/native/StackHeader.tsx:186:9] 2026-10-24T05:20:08.8655287Z 185 │ latestOptionFunctionsRef.current, 2026-10-24T05:20:08.8655378Z 186 │ optionFunctionWrappersRef.current, 2026-10-24T05:20:08.8655488Z ·  ────────────────┬──────────────── 2026-10-24T05:20:08.8655680Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T05:20:08.8655769Z 187 │ ) as NativeStackNavigationOptions) 2026-10-24T05:20:08.8655820Z ╰──── 2026-10-24T05:20:08.8656272Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T05:20:08.8656556Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:20:08.8656558Z 2026-10-24T05:20:08.8656798Z ⚠ eslint(no-unused-vars): Identifier 'Image' is imported but never used. 2026-10-24T05:20:08.8656969Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:17:10] 2026-10-24T05:20:08.8657102Z 16 │ import type { NativeSyntheticEvent, ViewProps } from "react-native"; 2026-10-24T05:20:08.8657214Z 17 │ import { Image, Platform, StyleSheet } from "react-native"; 2026-10-24T05:20:08.8657288Z ·  ──┬── 2026-10-24T05:20:08.8657413Z · ╰── 'Image' is imported here 2026-10-24T05:20:08.8657466Z 18 │ 2026-10-24T05:20:08.8657515Z ╰──── 2026-10-24T05:20:08.8657611Z  help: Consider removing this import. 2026-10-24T05:20:08.8657614Z 2026-10-24T05:20:08.8657814Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T05:20:08.8657954Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:229:6] 2026-10-24T05:20:08.8658120Z 225 │ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents( 2026-10-24T05:20:08.8658209Z 226 │ nativeEventSnapshotsRef.current, 2026-10-24T05:20:08.8658300Z ·  ───────────┬─────────── 2026-10-24T05:20:08.8658749Z · ╰── Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T05:20:08.8658823Z 227 │ mostRecentEventCount, 2026-10-24T05:20:08.8658879Z 228 │ ); 2026-10-24T05:20:08.8659002Z 229 │ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]); 2026-10-24T05:20:08.8659136Z ·  ──────────────────────────┬────────────────────────── 2026-10-24T05:20:08.8659341Z · ╰── This dependency list is missing values used by the callback 2026-10-24T05:20:08.8659424Z 230 │ const assumedValue = props.value; 2026-10-24T05:20:08.8659475Z ╰──── 2026-10-24T05:20:08.8659679Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T05:20:08.8659982Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8659985Z 2026-10-24T05:20:08.8660190Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T05:20:08.8660329Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:237:7] 2026-10-24T05:20:08.8660471Z 236 │ nativeEventSnapshotsRef.current = assumeComposerControlledState( 2026-10-24T05:20:08.8660563Z 237 │ nativeEventSnapshotsRef.current, 2026-10-24T05:20:08.8660652Z ·  ───────────┬─────────── 2026-10-24T05:20:08.8661097Z · ╰── Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T05:20:08.8661168Z 238 │ controlledEventCount, 2026-10-24T05:20:08.8661234Z 239 │ assumedValue, 2026-10-24T05:20:08.8661294Z 240 │ ); 2026-10-24T05:20:08.8661449Z 241 │ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]); 2026-10-24T05:20:08.8661585Z ·  ───────────┬────────── 2026-10-24T05:20:08.8661839Z · ╰── Unnecessary dependency `controlledDocumentJson` 2026-10-24T05:20:08.8661956Z 242 │ const acceptNativeEvent = useCallback( 2026-10-24T05:20:08.8662006Z ╰──── 2026-10-24T05:20:08.8662417Z  help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T05:20:08.8662722Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8662725Z 2026-10-24T05:20:08.8662869Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:20:08.8663010Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29] 2026-10-24T05:20:08.8663135Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T05:20:08.8663247Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T05:20:08.8663364Z ·  ─────────────┬──────────── 2026-10-24T05:20:08.8663527Z · ╰── Cannot access ref value during render 2026-10-24T05:20:08.8663582Z 163 │ }); 2026-10-24T05:20:08.8663634Z ╰──── 2026-10-24T05:20:08.8664089Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T05:20:08.8664375Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:20:08.8664380Z 2026-10-24T05:20:08.8664522Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:20:08.8664661Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29] 2026-10-24T05:20:08.8664783Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T05:20:08.8664892Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T05:20:08.8665005Z ·  ─────────────┬──────────── 2026-10-24T05:20:08.8665207Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T05:20:08.8665262Z 163 │ }); 2026-10-24T05:20:08.8665313Z ╰──── 2026-10-24T05:20:08.8665810Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T05:20:08.8666128Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:20:08.8666132Z 2026-10-24T05:20:08.8666273Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:20:08.8666413Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:164:23] 2026-10-24T05:20:08.8666469Z 163 │ }); 2026-10-24T05:20:08.8666556Z 164 │ confirmedTokensRef.current = tokens; 2026-10-24T05:20:08.8666680Z ·  ─────────┬────────────┬─── 2026-10-24T05:20:08.8666869Z · │ ╰── Cannot update ref value during render 2026-10-24T05:20:08.8666985Z · ╰── This value is a ref 2026-10-24T05:20:08.8667056Z 165 │ return JSON.stringify( 2026-10-24T05:20:08.8667107Z ╰──── 2026-10-24T05:20:08.8667559Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T05:20:08.8667843Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:20:08.8667846Z 2026-10-24T05:20:08.8667991Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:20:08.8668135Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:206:5] 2026-10-24T05:20:08.8668208Z 205 │ mostRecentEventCount, 2026-10-24T05:20:08.8668294Z 206 │ nativeEventSnapshotsRef.current, 2026-10-24T05:20:08.8668400Z ·  ───────────────┬─────────────── 2026-10-24T05:20:08.8668583Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T05:20:08.8668640Z 207 │ ); 2026-10-24T05:20:08.8668690Z ╰──── 2026-10-24T05:20:08.8669138Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T05:20:08.8669423Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:20:08.8669428Z 2026-10-24T05:20:08.8669596Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:20:08.8669734Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:212:5] 2026-10-24T05:20:08.8669804Z 211 │ mostRecentEventCount, 2026-10-24T05:20:08.8669890Z 212 │ nativeEventSnapshotsRef.current, 2026-10-24T05:20:08.8669990Z ·  ───────────────┬─────────────── 2026-10-24T05:20:08.8670174Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T05:20:08.8670230Z 213 │ ); 2026-10-24T05:20:08.8670283Z ╰──── 2026-10-24T05:20:08.8670777Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T05:20:08.8671148Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:20:08.8671151Z 2026-10-24T05:20:08.8671335Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T05:20:08.8671473Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:197:6] 2026-10-24T05:20:08.8671592Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T05:20:08.8671699Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T05:20:08.8671809Z ·  ─────────┬──────── 2026-10-24T05:20:08.8672270Z · ╰── Missing dependency `confirmedTokensRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T05:20:08.8672329Z 163 │ }); 2026-10-24T05:20:08.8672417Z 164 │ confirmedTokensRef.current = tokens; 2026-10-24T05:20:08.8672486Z 165 │ return JSON.stringify( 2026-10-24T05:20:08.8672648Z 166 │ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => { 2026-10-24T05:20:08.8672714Z 167 │ const record = 2026-10-24T05:20:08.8672791Z 168 │ token.type === "context" 2026-10-24T05:20:08.8672952Z 169 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-24T05:20:08.8673017Z 170 │ : undefined; 2026-10-24T05:20:08.8673130Z 171 │ const presentation = contextChipPresentation( 2026-10-24T05:20:08.8673240Z 172 │ token.type === "context" ? token.kind : token.type, 2026-10-24T05:20:08.8673304Z 173 │ record, 2026-10-24T05:20:08.8673362Z 174 │ ); 2026-10-24T05:20:08.8673444Z 175 │ const icon = contextChipIcon( 2026-10-24T05:20:08.8673510Z 176 │ presentation, 2026-10-24T05:20:08.8673651Z 177 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-24T05:20:08.8673708Z 178 │ ); 2026-10-24T05:20:08.8673770Z 179 │ return { 2026-10-24T05:20:08.8673839Z 180 │ type: token.type, 2026-10-24T05:20:08.8673912Z 181 │ source: token.source, 2026-10-24T05:20:08.8673984Z 182 │ start: token.start, 2026-10-24T05:20:08.8674049Z 183 │ end: token.end, 2026-10-24T05:20:08.8674199Z 184 │ accent: contextChipAccent(presentation.accent, theme, chipTextColor), 2026-10-24T05:20:08.8674264Z 185 │ label: 2026-10-24T05:20:08.8674340Z 186 │ token.type === "skill" 2026-10-24T05:20:08.8674447Z 187 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-24T05:20:08.8674527Z 188 │ : token.type === "context" 2026-10-24T05:20:08.8674762Z 189 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-24T05:20:08.8674848Z 190 │ : basename(token.value), 2026-10-24T05:20:08.8674990Z 191 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-24T05:20:08.8675080Z 192 │ iconUri: contextChipIconUri(icon), 2026-10-24T05:20:08.8675166Z 193 │ tintsIcon: icon.kind === "chip", 2026-10-24T05:20:08.8675224Z 194 │ }; 2026-10-24T05:20:08.8675348Z 195 │ }), 2026-10-24T05:20:08.8675441Z 196 │ ); 2026-10-24T05:20:08.8675571Z 197 │ }, [props.value, props.context, skillLabels, theme, chipTextColor]); 2026-10-24T05:20:08.8675724Z ·  ───────────────────────────────┬─────────────────────────────── 2026-10-24T05:20:08.8675928Z · ╰── This dependency list is missing values used by the callback 2026-10-24T05:20:08.8676063Z 198 │ // Every render resolves against the snapshot history, so a render whose 2026-10-24T05:20:08.8676115Z ╰──── 2026-10-24T05:20:08.8676317Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T05:20:08.8676624Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8676632Z 2026-10-24T05:20:08.8676817Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T05:20:08.8676956Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:259:5] 2026-10-24T05:20:08.8677085Z 251 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-24T05:20:08.8677185Z 252 │ nativeEventSnapshotsRef.current.push({ 2026-10-24T05:20:08.8677275Z ·  ───────────┬─────────── 2026-10-24T05:20:08.8677723Z · ╰── Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T05:20:08.8677812Z 253 │ eventCount: acknowledgedEventCount, 2026-10-24T05:20:08.8677878Z 254 │ value, 2026-10-24T05:20:08.8677959Z 255 │ selection: nextSelection, 2026-10-24T05:20:08.8678015Z 256 │ }); 2026-10-24T05:20:08.8678097Z 257 │ return acknowledgedEventCount; 2026-10-24T05:20:08.8678152Z 258 │ }, 2026-10-24T05:20:08.8678206Z 259 │ [], 2026-10-24T05:20:08.8678274Z ·  ─┬ 2026-10-24T05:20:08.8678452Z · ╰── This dependency list is missing values used by the callback 2026-10-24T05:20:08.8678506Z 260 │ ); 2026-10-24T05:20:08.8678556Z ╰──── 2026-10-24T05:20:08.8678758Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T05:20:08.8679062Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8679070Z 2026-10-24T05:20:08.8679326Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:20:08.8679489Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:215:7] 2026-10-24T05:20:08.8679542Z 211 │ }; 2026-10-24T05:20:08.8679644Z 212 │ useEffect(() => { 2026-10-24T05:20:08.8679715Z ·  ────┬──── 2026-10-24T05:20:08.8679844Z · ╰── This is the containing effect 2026-10-24T05:20:08.8680015Z 213 │ const inserted = ownerKey ? readComposerDraftSelection(ownerKey, draftMessage) : null; 2026-10-24T05:20:08.8680078Z 214 │ if (inserted) { 2026-10-24T05:20:08.8680153Z 215 │ setSelection((current) => 2026-10-24T05:20:08.8680232Z ·  ──────┬───── 2026-10-24T05:20:08.8680450Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:20:08.8680646Z 216 │ current.start === inserted.start && current.end === inserted.end ? current : inserted, 2026-10-24T05:20:08.8680696Z ╰──── 2026-10-24T05:20:08.8681281Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T05:20:08.8681595Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T05:20:08.8681599Z 2026-10-24T05:20:08.8681854Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:20:08.8682016Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:296:7] 2026-10-24T05:20:08.8682091Z 284 │ }, [hasWorkspaceSnapshot]); 2026-10-24T05:20:08.8682156Z 285 │ useEffect(() => { 2026-10-24T05:20:08.8682224Z ·  ────┬──── 2026-10-24T05:20:08.8682351Z · ╰── This is the containing effect 2026-10-24T05:20:08.8682496Z 286 │ if (!environmentId || !projectCwd || !selectedProviderInstanceId) return; 2026-10-24T05:20:08.8682642Z 287 │ const key = `${environmentId}:${selectedProviderInstanceId}:${projectCwd}`; 2026-10-24T05:20:08.8682711Z 288 │ const now = Date.now(); 2026-10-24T05:20:08.8682825Z 289 │ const lastRequest = workspaceRefreshKeyRef.current; 2026-10-24T05:20:08.8682887Z 290 │ if ( 2026-10-24T05:20:08.8682966Z 291 │ lastRequest?.key === key && 2026-10-24T05:20:08.8683101Z 292 │ now - lastRequest.requestedAt < PROVIDER_WORKSPACE_SNAPSHOT_TTL_MS 2026-10-24T05:20:08.8683155Z 293 │ ) 2026-10-24T05:20:08.8683215Z 294 │ return; 2026-10-24T05:20:08.8683388Z 295 │ if (hasCurrentProviderWorkspaceSnapshot(selectedProviderStatus, projectCwd, now)) { 2026-10-24T05:20:08.8683472Z 296 │ setWorkspaceRefreshRetry(null); 2026-10-24T05:20:08.8683566Z ·  ────────────┬─────────── 2026-10-24T05:20:08.8683739Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:20:08.8683799Z 297 │ return; 2026-10-24T05:20:08.8683849Z ╰──── 2026-10-24T05:20:08.8684438Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T05:20:08.8684753Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T05:20:08.8684756Z 2026-10-24T05:20:08.8684953Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:20:08.8685113Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:326:5] 2026-10-24T05:20:08.8685167Z 325 │ }, [ 2026-10-24T05:20:08.8685236Z 326 │ draftMessage, 2026-10-24T05:20:08.8685312Z ·  ──────┬───── 2026-10-24T05:20:08.8685503Z · ╰── Unnecessary dependency `draftMessage` 2026-10-24T05:20:08.8685602Z 327 │ environmentId, 2026-10-24T05:20:08.8685654Z ╰──── 2026-10-24T05:20:08.8685940Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T05:20:08.8686241Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8686244Z 2026-10-24T05:20:08.8686497Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:20:08.8686667Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:123:7] 2026-10-24T05:20:08.8686721Z 118 │ 2026-10-24T05:20:08.8686790Z 119 │ useEffect(() => { 2026-10-24T05:20:08.8686860Z ·  ────┬──── 2026-10-24T05:20:08.8686988Z · ╰── This is the containing effect 2026-10-24T05:20:08.8687070Z 120 │ if (orientationSettled) return; 2026-10-24T05:20:08.8687180Z 121 │ const orientation = getNativeShowcaseOrientation(); 2026-10-24T05:20:08.8687252Z 122 │ if (orientation === null) { 2026-10-24T05:20:08.8687333Z 123 │ setOrientationSettled(true); 2026-10-24T05:20:08.8687421Z ·  ──────────┬────────── 2026-10-24T05:20:08.8687590Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:20:08.8687647Z 124 │ return; 2026-10-24T05:20:08.8687700Z ╰──── 2026-10-24T05:20:08.8688296Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T05:20:08.8688612Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T05:20:08.8688615Z 2026-10-24T05:20:08.8688867Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:20:08.8689033Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:304:7] 2026-10-24T05:20:08.8689088Z 292 │ 2026-10-24T05:20:08.8689151Z 293 │ useEffect(() => { 2026-10-24T05:20:08.8689221Z ·  ────┬──── 2026-10-24T05:20:08.8689395Z · ╰── This is the containing effect 2026-10-24T05:20:08.8689482Z 294 │ if ( 2026-10-24T05:20:08.8689548Z 295 │ scene === null || 2026-10-24T05:20:08.8689636Z 296 │ requestedScene === null || 2026-10-24T05:20:08.8689739Z 297 │ scene !== requestedScene || 2026-10-24T05:20:08.8689803Z 298 │ !hasFixture || 2026-10-24T05:20:08.8689875Z 299 │ !orientationSettled || 2026-10-24T05:20:08.8689941Z 300 │ !themeApplied || 2026-10-24T05:20:08.8690055Z 301 │ (scene === "agent-activity" && !agentActivityStaged) || 2026-10-24T05:20:08.8690187Z 302 │ !isShowcaseNativeContentReady({ scene, themeId, renderSignal }) 2026-10-24T05:20:08.8690242Z 303 │ ) { 2026-10-24T05:20:08.8690309Z 304 │ setReadyScene(null); 2026-10-24T05:20:08.8690388Z ·  ──────┬────── 2026-10-24T05:20:08.8690561Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:20:08.8690623Z 305 │ return; 2026-10-24T05:20:08.8690673Z ╰──── 2026-10-24T05:20:08.8691252Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T05:20:08.8691568Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T05:20:08.8691570Z 2026-10-24T05:20:08.8691839Z ⚠ eslint(no-unused-vars): Variable 'lastOutcome' is declared but never used. Unused variables should start with a '_'. 2026-10-24T05:20:08.8692008Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:128:9] 2026-10-24T05:20:08.8692075Z 127 │ let cancelled = false; 2026-10-24T05:20:08.8692166Z 128 │ let lastOutcome: string | null = null; 2026-10-24T05:20:08.8692245Z ·  ─────┬───── 2026-10-24T05:20:08.8692378Z · ╰── 'lastOutcome' is declared here 2026-10-24T05:20:08.8692551Z 129 │ void retryShowcaseOperation(async () => applyNativeShowcaseOrientation(orientation), { 2026-10-24T05:20:08.8692601Z ╰──── 2026-10-24T05:20:08.8692705Z  help: Consider removing this declaration. 2026-10-24T05:20:08.8692708Z 2026-10-24T05:20:08.8692959Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:20:08.8693134Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:329:7] 2026-10-24T05:20:08.8693189Z 324 │ }; 2026-10-24T05:20:08.8693253Z 325 │ useEffect(() => { 2026-10-24T05:20:08.8693323Z ·  ────┬──── 2026-10-24T05:20:08.8693449Z · ╰── This is the containing effect 2026-10-24T05:20:08.8693545Z 326 │ if (!guidesEnabled && section === "guide") { 2026-10-24T05:20:08.8693638Z 327 │ requestedSection.current = "overview"; 2026-10-24T05:20:08.8693801Z 328 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-24T05:20:08.8693873Z 329 │ setSection("overview"); 2026-10-24T05:20:08.8693945Z ·  ─────┬──── 2026-10-24T05:20:08.8694162Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:20:08.8694249Z 330 │ } 2026-10-24T05:20:08.8694299Z ╰──── 2026-10-24T05:20:08.8694885Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T05:20:08.8695200Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T05:20:08.8695202Z 2026-10-24T05:20:08.8695402Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T05:20:08.8695570Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:331:6] 2026-10-24T05:20:08.8695670Z 326 │ if (!guidesEnabled && section === "guide") { 2026-10-24T05:20:08.8695765Z 327 │ requestedSection.current = "overview"; 2026-10-24T05:20:08.8695845Z ·  ────────┬─────── 2026-10-24T05:20:08.8696284Z · ╰── Missing dependency `requestedSection`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T05:20:08.8696445Z 328 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-24T05:20:08.8696591Z ·  ─────────┬───────── ──────┬────── 2026-10-24T05:20:08.8697080Z · │ ╰── Missing dependency `scrollOffsets`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T05:20:08.8697517Z · ╰── Missing dependency `currentScrollOffset`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T05:20:08.8697590Z 329 │ setSection("overview"); 2026-10-24T05:20:08.8697644Z 330 │ } 2026-10-24T05:20:08.8697738Z 331 │ }, [guidesEnabled, section, insets.top]); 2026-10-24T05:20:08.8697850Z ·  ──────────────────┬───────────────── 2026-10-24T05:20:08.8698038Z · ╰── This dependency list is missing values used by the callback 2026-10-24T05:20:08.8698128Z 332 │ const tabContent = activityContent; 2026-10-24T05:20:08.8698182Z ╰──── 2026-10-24T05:20:08.8698345Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T05:20:08.8698651Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8698653Z 2026-10-24T05:20:08.8698853Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T05:20:08.8699020Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:868:6] 2026-10-24T05:20:08.8699079Z 851 │ if ( 2026-10-24T05:20:08.8699195Z 852 │ lastSelection.current.path === route.params.path && 2026-10-24T05:20:08.8699273Z ·  ──────┬────── 2026-10-24T05:20:08.8699833Z · ╰── Missing dependency `lastSelection`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T05:20:08.8699987Z 853 │ lastSelection.current.id === route.params.fileSelectionId 2026-10-24T05:20:08.8700041Z 854 │ ) 2026-10-24T05:20:08.8700101Z 855 │ return; 2026-10-24T05:20:08.8700271Z 856 │ lastSelection.current = { path: route.params.path, id: route.params.fileSelectionId }; 2026-10-24T05:20:08.8700403Z 857 │ if (route.params.focus) navigation.setParams({ focus: undefined }); 2026-10-24T05:20:08.8700489Z 858 │ setJumpPath(route.params.path); 2026-10-24T05:20:08.8700559Z 859 │ setSelectedRowId(null); 2026-10-24T05:20:08.8700636Z 860 │ jumpStarted.current = false; 2026-10-24T05:20:08.8700783Z 861 │ const file = data.files.find((entry) => entry.path === route.params.path); 2026-10-24T05:20:08.8700880Z 862 │ if (!file || !nativeView.current) return; 2026-10-24T05:20:08.8700967Z ·  ─────┬──── 2026-10-24T05:20:08.8701393Z · ╰── Missing dependency `nativeView`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T05:20:08.8701515Z 863 │ setCollapsedIds((ids) => ids.filter((id) => id !== file.id)); 2026-10-24T05:20:08.8701593Z 864 │ jumpStarted.current = true; 2026-10-24T05:20:08.8701727Z 865 │ void nativeView.current.scrollToFile(file.id, false).catch(() => { 2026-10-24T05:20:08.8701807Z 866 │ jumpStarted.current = false; 2026-10-24T05:20:08.8701861Z 867 │ }); 2026-10-24T05:20:08.8702061Z 868 │ }, [route.params.path, route.params.fileSelectionId, route.params.focus, data.files, navigation]); 2026-10-24T05:20:08.8702268Z ·  ──────────────────────────────────────────────┬────────────────────────────────────────────── 2026-10-24T05:20:08.8702485Z · ╰── This dependency list is missing values used by the callback 2026-10-24T05:20:08.8702593Z 869 │ const appliedFilter = useRef(filter.hideTestFiles); 2026-10-24T05:20:08.8702645Z ╰──── 2026-10-24T05:20:08.8702809Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T05:20:08.8703112Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8703115Z 2026-10-24T05:20:08.8703318Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T05:20:08.8703454Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:231:6] 2026-10-24T05:20:08.8703614Z 227 │ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents( 2026-10-24T05:20:08.8703702Z 228 │ nativeEventSnapshotsRef.current, 2026-10-24T05:20:08.8703791Z ·  ───────────┬─────────── 2026-10-24T05:20:08.8704241Z · ╰── Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T05:20:08.8704314Z 229 │ mostRecentEventCount, 2026-10-24T05:20:08.8704369Z 230 │ ); 2026-10-24T05:20:08.8704548Z 231 │ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]); 2026-10-24T05:20:08.8704712Z ·  ──────────────────────────┬────────────────────────── 2026-10-24T05:20:08.8704907Z · ╰── This dependency list is missing values used by the callback 2026-10-24T05:20:08.8704988Z 232 │ const assumedValue = props.value; 2026-10-24T05:20:08.8705038Z ╰──── 2026-10-24T05:20:08.8705201Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T05:20:08.8705502Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8705505Z 2026-10-24T05:20:08.8705712Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T05:20:08.8705850Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:239:7] 2026-10-24T05:20:08.8705994Z 238 │ nativeEventSnapshotsRef.current = assumeComposerControlledState( 2026-10-24T05:20:08.8706080Z 239 │ nativeEventSnapshotsRef.current, 2026-10-24T05:20:08.8706170Z ·  ───────────┬─────────── 2026-10-24T05:20:08.8706617Z · ╰── Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T05:20:08.8706689Z 240 │ controlledEventCount, 2026-10-24T05:20:08.8706751Z 241 │ assumedValue, 2026-10-24T05:20:08.8706804Z 242 │ ); 2026-10-24T05:20:08.8706959Z 243 │ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]); 2026-10-24T05:20:08.8707100Z ·  ───────────┬────────── 2026-10-24T05:20:08.8707304Z · ╰── Unnecessary dependency `controlledDocumentJson` 2026-10-24T05:20:08.8707391Z 244 │ const acceptNativeEvent = useCallback( 2026-10-24T05:20:08.8707443Z ╰──── 2026-10-24T05:20:08.8707854Z  help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T05:20:08.8708161Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8708163Z 2026-10-24T05:20:08.8708353Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:20:08.8708518Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:29] 2026-10-24T05:20:08.8708640Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T05:20:08.8708749Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T05:20:08.8708863Z ·  ─────────────┬──────────── 2026-10-24T05:20:08.8709025Z · ╰── Cannot access ref value during render 2026-10-24T05:20:08.8709080Z 165 │ }); 2026-10-24T05:20:08.8709131Z ╰──── 2026-10-24T05:20:08.8709600Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T05:20:08.8709911Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:20:08.8709913Z 2026-10-24T05:20:08.8710057Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:20:08.8710190Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:29] 2026-10-24T05:20:08.8710309Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T05:20:08.8710417Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T05:20:08.8710531Z ·  ─────────────┬──────────── 2026-10-24T05:20:08.8710732Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T05:20:08.8710791Z 165 │ }); 2026-10-24T05:20:08.8710843Z ╰──── 2026-10-24T05:20:08.8711339Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T05:20:08.8711628Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:20:08.8711631Z 2026-10-24T05:20:08.8711773Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:20:08.8711904Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:166:23] 2026-10-24T05:20:08.8711957Z 165 │ }); 2026-10-24T05:20:08.8712045Z 166 │ confirmedTokensRef.current = tokens; 2026-10-24T05:20:08.8712171Z ·  ─────────┬────────────┬─── 2026-10-24T05:20:08.8712356Z · │ ╰── Cannot update ref value during render 2026-10-24T05:20:08.8712473Z · ╰── This value is a ref 2026-10-24T05:20:08.8712573Z 167 │ return JSON.stringify( 2026-10-24T05:20:08.8712633Z ╰──── 2026-10-24T05:20:08.8713088Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T05:20:08.8713368Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:20:08.8713439Z 2026-10-24T05:20:08.8713617Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:20:08.8713749Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:208:5] 2026-10-24T05:20:08.8713818Z 207 │ mostRecentEventCount, 2026-10-24T05:20:08.8713905Z 208 │ nativeEventSnapshotsRef.current, 2026-10-24T05:20:08.8714008Z ·  ───────────────┬─────────────── 2026-10-24T05:20:08.8714191Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T05:20:08.8714245Z 209 │ ); 2026-10-24T05:20:08.8714296Z ╰──── 2026-10-24T05:20:08.8714754Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T05:20:08.8715039Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:20:08.8715042Z 2026-10-24T05:20:08.8715180Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:20:08.8715311Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:214:5] 2026-10-24T05:20:08.8715379Z 213 │ mostRecentEventCount, 2026-10-24T05:20:08.8715464Z 214 │ nativeEventSnapshotsRef.current, 2026-10-24T05:20:08.8715568Z ·  ───────────────┬─────────────── 2026-10-24T05:20:08.8715750Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T05:20:08.8715803Z 215 │ ); 2026-10-24T05:20:08.8715858Z ╰──── 2026-10-24T05:20:08.8716310Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T05:20:08.8716592Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:20:08.8716594Z 2026-10-24T05:20:08.8716777Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T05:20:08.8716908Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:199:6] 2026-10-24T05:20:08.8717030Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T05:20:08.8717139Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T05:20:08.8717253Z ·  ─────────┬──────── 2026-10-24T05:20:08.8717705Z · ╰── Missing dependency `confirmedTokensRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T05:20:08.8717761Z 165 │ }); 2026-10-24T05:20:08.8717849Z 166 │ confirmedTokensRef.current = tokens; 2026-10-24T05:20:08.8717917Z 167 │ return JSON.stringify( 2026-10-24T05:20:08.8718076Z 168 │ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => { 2026-10-24T05:20:08.8718143Z 169 │ const record = 2026-10-24T05:20:08.8718223Z 170 │ token.type === "context" 2026-10-24T05:20:08.8718433Z 171 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-24T05:20:08.8718526Z 172 │ : undefined; 2026-10-24T05:20:08.8718632Z 173 │ const presentation = contextChipPresentation( 2026-10-24T05:20:08.8718741Z 174 │ token.type === "context" ? token.kind : token.type, 2026-10-24T05:20:08.8718804Z 175 │ record, 2026-10-24T05:20:08.8718862Z 176 │ ); 2026-10-24T05:20:08.8718943Z 177 │ const icon = contextChipIcon( 2026-10-24T05:20:08.8719009Z 178 │ presentation, 2026-10-24T05:20:08.8719149Z 179 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-24T05:20:08.8719206Z 180 │ ); 2026-10-24T05:20:08.8719267Z 181 │ return { 2026-10-24T05:20:08.8719336Z 182 │ type: token.type, 2026-10-24T05:20:08.8719409Z 183 │ source: token.source, 2026-10-24T05:20:08.8719486Z 184 │ start: token.start, 2026-10-24T05:20:08.8719599Z 185 │ end: token.end, 2026-10-24T05:20:08.8719759Z 186 │ accent: contextChipAccent(presentation.accent, theme, chipTextColor), 2026-10-24T05:20:08.8719819Z 187 │ label: 2026-10-24T05:20:08.8719894Z 188 │ token.type === "skill" 2026-10-24T05:20:08.8719999Z 189 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-24T05:20:08.8720080Z 190 │ : token.type === "context" 2026-10-24T05:20:08.8720309Z 191 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-24T05:20:08.8720389Z 192 │ : basename(token.value), 2026-10-24T05:20:08.8720529Z 193 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-24T05:20:08.8720620Z 194 │ iconUri: contextChipIconUri(icon), 2026-10-24T05:20:08.8720712Z 195 │ tintsIcon: icon.kind === "chip", 2026-10-24T05:20:08.8720771Z 196 │ }; 2026-10-24T05:20:08.8720829Z 197 │ }), 2026-10-24T05:20:08.8720884Z 198 │ ); 2026-10-24T05:20:08.8721014Z 199 │ }, [props.value, props.context, skillLabels, theme, chipTextColor]); 2026-10-24T05:20:08.8721165Z ·  ───────────────────────────────┬─────────────────────────────── 2026-10-24T05:20:08.8721366Z · ╰── This dependency list is missing values used by the callback 2026-10-24T05:20:08.8721504Z 200 │ // Every render resolves against the snapshot history, so a render whose 2026-10-24T05:20:08.8721555Z ╰──── 2026-10-24T05:20:08.8721756Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T05:20:08.8722068Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8722073Z 2026-10-24T05:20:08.8722256Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T05:20:08.8722390Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:261:5] 2026-10-24T05:20:08.8722520Z 253 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-24T05:20:08.8722619Z 254 │ nativeEventSnapshotsRef.current.push({ 2026-10-24T05:20:08.8722709Z ·  ───────────┬─────────── 2026-10-24T05:20:08.8723211Z · ╰── Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T05:20:08.8723331Z 255 │ eventCount: acknowledgedEventCount, 2026-10-24T05:20:08.8723391Z 256 │ value, 2026-10-24T05:20:08.8723468Z 257 │ selection: nextSelection, 2026-10-24T05:20:08.8723525Z 258 │ }); 2026-10-24T05:20:08.8723608Z 259 │ return acknowledgedEventCount; 2026-10-24T05:20:08.8723661Z 260 │ }, 2026-10-24T05:20:08.8723716Z 261 │ [], 2026-10-24T05:20:08.8723784Z ·  ─┬ 2026-10-24T05:20:08.8723961Z · ╰── This dependency list is missing values used by the callback 2026-10-24T05:20:08.8724015Z 262 │ ); 2026-10-24T05:20:08.8724067Z ╰──── 2026-10-24T05:20:08.8724271Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T05:20:08.8724582Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8724587Z 2026-10-24T05:20:08.8724781Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:20:08.8724911Z ╭─[apps/mobile/src/components/ComposerEditor.tsx:82:6] 2026-10-24T05:20:08.8724967Z 81 │ }, 2026-10-24T05:20:08.8725029Z 82 │ [draftKey], 2026-10-24T05:20:08.8725099Z ·  ────┬─── 2026-10-24T05:20:08.8725235Z · ╰── Unnecessary dependency `draftKey` 2026-10-24T05:20:08.8725290Z 83 │ ); 2026-10-24T05:20:08.8725342Z ╰──── 2026-10-24T05:20:08.8725634Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T05:20:08.8725937Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8725940Z 2026-10-24T05:20:08.8726120Z ⚠ react(static-components): Cannot create components during render 2026-10-24T05:20:08.8726280Z ╭─[apps/mobile/src/features/terminal/NativeTerminalSurface.tsx:234:10] 2026-10-24T05:20:08.8726366Z 196 │ const { onInput, onResize } = props; 2026-10-24T05:20:08.8726510Z 197 │ const NativeTerminalSurfaceView = resolveNativeTerminalSurfaceView(); 2026-10-24T05:20:08.8726640Z ·  ────────────────┬─────────────── 2026-10-24T05:20:08.8726872Z · ╰── The component is created during render here 2026-10-24T05:20:08.8727028Z 198 │ const hasNativeSurface = Boolean(NativeTerminalSurfaceView); 2026-10-24T05:20:08.8727081Z 199 │ 2026-10-24T05:20:08.8727147Z 200 │ useEffect(() => { 2026-10-24T05:20:08.8727232Z 201 │ terminalDebugLog("native:surface", { 2026-10-24T05:20:08.8727314Z 202 │ terminalKey: props.terminalKey, 2026-10-24T05:20:08.8727390Z 203 │ native: hasNativeSurface, 2026-10-24T05:20:08.8727522Z 204 │ hardwareKeyRevision: getNativeTerminalHardwareKeyRevision(), 2026-10-24T05:20:08.8727604Z 205 │ bufferLen: props.buffer.length, 2026-10-24T05:20:08.8727681Z 206 │ isRunning: props.isRunning, 2026-10-24T05:20:08.8727737Z 207 │ }); 2026-10-24T05:20:08.8727895Z 208 │ }, [hasNativeSurface, props.buffer.length, props.isRunning, props.terminalKey]); 2026-10-24T05:20:08.8727985Z 209 │ const handleNativeInput = useCallback( 2026-10-24T05:20:08.8728099Z 210 │ (event: NativeSyntheticEvent) => { 2026-10-24T05:20:08.8728196Z 211 │ if (!props.isRunning || props.readOnly) { 2026-10-24T05:20:08.8728258Z 212 │ return; 2026-10-24T05:20:08.8728313Z 213 │ } 2026-10-24T05:20:08.8728400Z 214 │ terminalDebugLog("native:onInput", { 2026-10-24T05:20:08.8728547Z 215 │ codes: Array.from(event.nativeEvent.data, (char) => char.codePointAt(0)), 2026-10-24T05:20:08.8728604Z 216 │ }); 2026-10-24T05:20:08.8728689Z 217 │ onInput(event.nativeEvent.data); 2026-10-24T05:20:08.8728742Z 218 │ }, 2026-10-24T05:20:08.8728840Z 219 │ [onInput, props.isRunning, props.readOnly], 2026-10-24T05:20:08.8728893Z 220 │ ); 2026-10-24T05:20:08.8728980Z 221 │ const handleNativeResize = useCallback( 2026-10-24T05:20:08.8729099Z 222 │ (event: NativeSyntheticEvent) => { 2026-10-24T05:20:08.8729162Z 223 │ onResize({ 2026-10-24T05:20:08.8729244Z 224 │ cols: event.nativeEvent.cols, 2026-10-24T05:20:08.8729325Z 225 │ rows: event.nativeEvent.rows, 2026-10-24T05:20:08.8729380Z 226 │ }); 2026-10-24T05:20:08.8729437Z 227 │ }, 2026-10-24T05:20:08.8729499Z 228 │ [onResize], 2026-10-24T05:20:08.8729562Z 229 │ ); 2026-10-24T05:20:08.8729613Z 230 │ 2026-10-24T05:20:08.8729723Z 231 │ if (NativeTerminalSurfaceView) { 2026-10-24T05:20:08.8729781Z 232 │ return ( 2026-10-24T05:20:08.8729856Z 233 │ 2026-10-24T05:20:08.8729937Z 234 │ ({ key: input.targetKey, location: candidate })); 2026-10-24T05:20:08.8731600Z 113 │ useEffect(() => { 2026-10-24T05:20:08.8731700Z ·  ────┬──── 2026-10-24T05:20:08.8731827Z · ╰── This is the containing effect 2026-10-24T05:20:08.8731988Z 114 │ if (entry.key === input.targetKey && (entry.location !== null || candidate === null)) { 2026-10-24T05:20:08.8732048Z 115 │ return; 2026-10-24T05:20:08.8732102Z 116 │ } 2026-10-24T05:20:08.8732216Z 117 │ setEntry({ key: input.targetKey, location: candidate }); 2026-10-24T05:20:08.8732291Z ·  ────┬─── 2026-10-24T05:20:08.8732457Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:20:08.8732578Z 118 │ }, [candidate, entry.key, entry.location, input.targetKey]); 2026-10-24T05:20:08.8732627Z ╰──── 2026-10-24T05:20:08.8733221Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T05:20:08.8733539Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T05:20:08.8733542Z 2026-10-24T05:20:08.8733733Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T05:20:08.8733889Z ╭─[apps/mobile/src/features/terminal/TerminalContextSheet.tsx:72:15] 2026-10-24T05:20:08.8733953Z 71 │ (null); 2026-10-24T05:20:08.8735026Z 168 │ useLayoutEffect(() => { 2026-10-24T05:20:08.8735103Z ·  ───────┬─────── 2026-10-24T05:20:08.8735239Z · ╰── This is the containing effect 2026-10-24T05:20:08.8735325Z 169 │ if (faviconRequest === null) return; 2026-10-24T05:20:08.8735378Z 170 │ 2026-10-24T05:20:08.8735509Z 171 │ const endRequest = beginProjectFaviconRequest(faviconRequest); 2026-10-24T05:20:08.8735605Z 172 │ setActiveFaviconRequest(faviconRequest); 2026-10-24T05:20:08.8735693Z ·  ───────────┬─────────── 2026-10-24T05:20:08.8735861Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:20:08.8735929Z 173 │ return endRequest; 2026-10-24T05:20:08.8735981Z ╰──── 2026-10-24T05:20:08.8736610Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T05:20:08.8736958Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T05:20:08.8736960Z 2026-10-24T05:20:08.8737211Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:20:08.8737343Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:60:5] 2026-10-24T05:20:08.8737396Z 57 │ 2026-10-24T05:20:08.8737458Z 58 │ useEffect(() => { 2026-10-24T05:20:08.8737529Z ·  ────┬──── 2026-10-24T05:20:08.8737657Z · ╰── This is the containing effect 2026-10-24T05:20:08.8737751Z 59 │ const controller = new AbortController(); 2026-10-24T05:20:08.8737826Z 60 │ setLoadState("pending"); 2026-10-24T05:20:08.8737903Z ·  ──────┬───── 2026-10-24T05:20:08.8738067Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:20:08.8738224Z 61 │ // A renewed signature is used on Retry, not as a reason to reset the native player. 2026-10-24T05:20:08.8738274Z ╰──── 2026-10-24T05:20:08.8738861Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T05:20:08.8739178Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T05:20:08.8739183Z 2026-10-24T05:20:08.8739383Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:20:08.8739517Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:71:7] 2026-10-24T05:20:08.8739606Z 70 │ return () => controller.abort(); 2026-10-24T05:20:08.8739727Z 71 │ }, [player, props.playRequested, attempt]); 2026-10-24T05:20:08.8739897Z ·  ───┬── ─────────┬───────── ───┬─── 2026-10-24T05:20:08.8742181Z · │ │ ╰── Unnecessary dependency `attempt` 2026-10-24T05:20:08.8742397Z · │ ╰── Unnecessary dependency `props.playRequested` 2026-10-24T05:20:08.8742544Z · ╰── Unnecessary dependency `player_0` 2026-10-24T05:20:08.8742597Z 72 │ 2026-10-24T05:20:08.8742647Z ╰──── 2026-10-24T05:20:08.8742935Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T05:20:08.8743240Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8743243Z 2026-10-24T05:20:08.8743497Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:20:08.8743642Z ╭─[apps/mobile/src/components/VideoPreviewModal.ios.tsx:63:55] 2026-10-24T05:20:08.8743700Z 61 │ }, []); 2026-10-24T05:20:08.8743831Z 62 │ useEffect(() => { 2026-10-24T05:20:08.8743937Z ·  ────┬──── 2026-10-24T05:20:08.8744062Z · ╰── This is the containing effect 2026-10-24T05:20:08.8744208Z 63 │ if (playbackUrl === null && resolvedUrl !== null) setPlaybackUrl(resolvedUrl); 2026-10-24T05:20:08.8744328Z ·  ───────┬────── 2026-10-24T05:20:08.8744529Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:20:08.8744608Z 64 │ }, [playbackUrl, resolvedUrl]); 2026-10-24T05:20:08.8744659Z ╰──── 2026-10-24T05:20:08.8745243Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T05:20:08.8745561Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T05:20:08.8745563Z 2026-10-24T05:20:08.8745778Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T05:20:08.8745906Z ╭─[scripts/lib/cli-external-packages.test.ts:114:11] 2026-10-24T05:20:08.8745975Z 113 │ const declared = { 2026-10-24T05:20:08.8746066Z 114 │ ...(manifest.dependencies ?? {}), 2026-10-24T05:20:08.8746176Z ·  ──────────────────────────────── 2026-10-24T05:20:08.8746283Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T05:20:08.8746337Z ╰──── 2026-10-24T05:20:08.8746595Z  help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback. 2026-10-24T05:20:08.8746597Z 2026-10-24T05:20:08.8746812Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T05:20:08.8746937Z ╭─[scripts/lib/cli-external-packages.test.ts:115:11] 2026-10-24T05:20:08.8747028Z 114 │ ...(manifest.dependencies ?? {}), 2026-10-24T05:20:08.8747129Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T05:20:08.8747249Z ·  ──────────────────────────────────────── 2026-10-24T05:20:08.8747343Z 116 │ ...(manifest.peerDependencies ?? {}), 2026-10-24T05:20:08.8747394Z ╰──── 2026-10-24T05:20:08.8747657Z  help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback. 2026-10-24T05:20:08.8747661Z 2026-10-24T05:20:08.8747872Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T05:20:08.8747997Z ╭─[scripts/lib/cli-external-packages.test.ts:116:11] 2026-10-24T05:20:08.8748096Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T05:20:08.8748190Z 116 │ ...(manifest.peerDependencies ?? {}), 2026-10-24T05:20:08.8748302Z ·  ──────────────────────────────────── 2026-10-24T05:20:08.8748363Z 117 │ }; 2026-10-24T05:20:08.8748413Z ╰──── 2026-10-24T05:20:08.8748718Z  help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback. 2026-10-24T05:20:08.8748753Z 2026-10-24T05:20:08.8748983Z ⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence. 2026-10-24T05:20:08.8749143Z ╭─[apps/web/src/components/pullRequest/pullRequestList.logic.ts:265:9] 2026-10-24T05:20:08.8749203Z 264 │ ): boolean { 2026-10-24T05:20:08.8749354Z 265 │ const labels = entry.labels.map((label) => label.name.trim().toLowerCase()); 2026-10-24T05:20:08.8749516Z ·  ───────────────────────────────────────────────────────────────────── 2026-10-24T05:20:08.8749728Z 266 │ const holds = (label: string) => labels.includes(label.trim().toLowerCase()); 2026-10-24T05:20:08.8749802Z ╰──── 2026-10-24T05:20:08.8749879Z  help: Switch to `Set` 2026-10-24T05:20:08.8749881Z 2026-10-24T05:20:08.8750086Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:20:08.8750219Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:533:25] 2026-10-24T05:20:08.8750347Z 532 │ // range) the boundary string is identical and the chain would die. 2026-10-24T05:20:08.8750437Z 533 │ }, [nextSnoozeWakeAt, snoozeWakeTick]); 2026-10-24T05:20:08.8750535Z ·  ───────┬────── 2026-10-24T05:20:08.8750699Z · ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T05:20:08.8750833Z 534 │ const v2SearchQuery = props.searchQuery.trim().toLocaleLowerCase(); 2026-10-24T05:20:08.8750937Z ╰──── 2026-10-24T05:20:08.8751225Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T05:20:08.8751534Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8751539Z 2026-10-24T05:20:08.8751703Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T05:20:08.8751828Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:524:53] 2026-10-24T05:20:08.8751914Z 523 │ if (Number.isNaN(wakeAtMs)) return; 2026-10-24T05:20:08.8752069Z 524 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647); 2026-10-24T05:20:08.8752187Z ·  ─────┬──── 2026-10-24T05:20:08.8752349Z · ╰── Cannot call impure function 2026-10-24T05:20:08.8752492Z 525 │ const id = setTimeout(() => { 2026-10-24T05:20:08.8752580Z ╰──── 2026-10-24T05:20:08.8752859Z  help: `Date.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T05:20:08.8753145Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T05:20:08.8753151Z 2026-10-24T05:20:08.8753426Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T05:20:08.8753582Z ╭─[apps/web/src/components/settings/SettingInheritance.tsx:163:24] 2026-10-24T05:20:08.8753639Z 162 │ keys, 2026-10-24T05:20:08.8753710Z 163 │ overridingProjects = [], 2026-10-24T05:20:08.8753793Z ·  ── 2026-10-24T05:20:08.8753863Z 164 │ onClearOverrides, 2026-10-24T05:20:08.8753914Z ╰──── 2026-10-24T05:20:08.8754225Z  help: Default values are re-created on every render and break referential equality, causing unnecessary re-renders. Move the value out of the component or memoize it. 2026-10-24T05:20:08.8754227Z 2026-10-24T05:20:08.8754478Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T05:20:08.8754648Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts:10578:7] 2026-10-24T05:20:08.8754702Z 10577 │ 2026-10-24T05:20:08.8754774Z 10578 │ const layer: Layer.Layer< 2026-10-24T05:20:08.8754844Z ·  ──┬── 2026-10-24T05:20:08.8754970Z · ╰── 'layer' is declared here 2026-10-24T05:20:08.8755069Z 10579 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T05:20:08.8755123Z ╰──── 2026-10-24T05:20:08.8755226Z  help: Consider removing this declaration. 2026-10-24T05:20:08.8755228Z 2026-10-24T05:20:08.8755451Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-24T05:20:08.8755620Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:1998:15] 2026-10-24T05:20:08.8755688Z 1997 │ assert.equal( 2026-10-24T05:20:08.8755832Z 1998 │ items.filter((item) => item.type === "assistant_message").at(-1)?.text, 2026-10-24T05:20:08.8755910Z ·  ────── 2026-10-24T05:20:08.8755986Z 1999 │ "authoritative answer", 2026-10-24T05:20:08.8756037Z ╰──── 2026-10-24T05:20:08.8756207Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T05:20:08.8756211Z 2026-10-24T05:20:08.8756671Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T05:20:08.8756837Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:3951:7] 2026-10-24T05:20:08.8757016Z 3950 │ const closeFiber = yield* Scope.close(sessionScope, Exit.void).pipe(Effect.forkScoped); 2026-10-24T05:20:08.8757221Z 3951 │ ╭─▶ while (!responseLifecycle.includes("failed")) { 2026-10-24T05:20:08.8757328Z 3952 │ │ yield* Effect.yieldNow; 2026-10-24T05:20:08.8757519Z 3953 │ ╰─▶ } 2026-10-24T05:20:08.8757677Z 3954 │ const responseExit = yield* Fiber.join(responseFiber); 2026-10-24T05:20:08.8757728Z ╰──── 2026-10-24T05:20:08.8757731Z 2026-10-24T05:20:08.8758183Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T05:20:08.8758348Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6062:9] 2026-10-24T05:20:08.8758435Z 6061 │ .pipe(Effect.forkScoped); 2026-10-24T05:20:08.8758613Z 6062 │ ╭─▶ while (promptGates.length < 1) { 2026-10-24T05:20:08.8758723Z 6063 │ │ yield* Effect.yieldNow; 2026-10-24T05:20:08.8758859Z 6064 │ ╰─▶ } 2026-10-24T05:20:08.8759028Z 6065 │ assert.isDefined(sessionUpdateHandler, "session update handler must be wired"); 2026-10-24T05:20:08.8759079Z ╰──── 2026-10-24T05:20:08.8759082Z 2026-10-24T05:20:08.8759528Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T05:20:08.8759746Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6197:9] 2026-10-24T05:20:08.8759835Z 6196 │ .pipe(Effect.forkScoped); 2026-10-24T05:20:08.8760013Z 6197 │ ╭─▶ while (promptGates.length < 2) { 2026-10-24T05:20:08.8760126Z 6198 │ │ yield* Effect.yieldNow; 2026-10-24T05:20:08.8760260Z 6199 │ ╰─▶ } 2026-10-24T05:20:08.8760422Z 6200 │ if (sessionUpdateHandler === undefined || capturedMutation.current === null) { 2026-10-24T05:20:08.8760471Z ╰──── 2026-10-24T05:20:08.8760473Z 2026-10-24T05:20:08.8760638Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T05:20:08.8760782Z ╭─[apps/server/src/provider/Drivers/CodexDriver.test.ts:466:14] 2026-10-24T05:20:08.8760833Z 465 │ 2026-10-24T05:20:08.8760937Z 466 │ for (const {} of ["direct", "wrapper"] as const) { 2026-10-24T05:20:08.8761008Z ·  ── 2026-10-24T05:20:08.8761062Z 467 │ } 2026-10-24T05:20:08.8761112Z ╰──── 2026-10-24T05:20:08.8761343Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T05:20:08.8761348Z 2026-10-24T05:20:08.8761595Z ⚠ eslint(no-unused-vars): Function 'layerClaudeAgentSdkReplayQueryRunner' is declared but never used. 2026-10-24T05:20:08.8761772Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.testkit.ts:960:10] 2026-10-24T05:20:08.8761823Z 959 │ 2026-10-24T05:20:08.8761931Z 960 │ function layerClaudeAgentSdkReplayQueryRunner( 2026-10-24T05:20:08.8762046Z ·  ──────────────────┬───────────────── 2026-10-24T05:20:08.8762241Z · ╰── 'layerClaudeAgentSdkReplayQueryRunner' is declared here 2026-10-24T05:20:08.8762342Z 961 │ transcript: ClaudeAgentSdkReplayTranscript, 2026-10-24T05:20:08.8762441Z ╰──── 2026-10-24T05:20:08.8762573Z  help: Consider removing this declaration. 2026-10-24T05:20:08.8762575Z 2026-10-24T05:20:08.8762757Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T05:20:08.8762922Z ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:555:70] 2026-10-24T05:20:08.8763002Z 554 │ assert.deepStrictEqual( 2026-10-24T05:20:08.8763162Z 555 │ (yield* Ref.get(fixture.syncCommands)).map(({ commandId: _, ...rest }) => rest), 2026-10-24T05:20:08.8763280Z ·  ┬ 2026-10-24T05:20:08.8763437Z · ╰── '_' is declared here 2026-10-24T05:20:08.8763501Z 556 │ [ 2026-10-24T05:20:08.8763557Z ╰──── 2026-10-24T05:20:08.8763660Z  help: Consider removing this parameter. 2026-10-24T05:20:08.8763662Z 2026-10-24T05:20:08.8763842Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T05:20:08.8764013Z ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:1155:70] 2026-10-24T05:20:08.8764096Z 1154 │ assert.deepStrictEqual( 2026-10-24T05:20:08.8764257Z 1155 │ (yield* Ref.get(fixture.linkCommands)).map(({ commandId: _, ...rest }) => rest), 2026-10-24T05:20:08.8764377Z ·  ┬ 2026-10-24T05:20:08.8764534Z · ╰── '_' is declared here 2026-10-24T05:20:08.8764596Z 1156 │ [ 2026-10-24T05:20:08.8764655Z ╰──── 2026-10-24T05:20:08.8764756Z  help: Consider removing this parameter. 2026-10-24T05:20:08.8764758Z 2026-10-24T05:20:08.8765083Z ⚠ eslint(no-unused-vars): Variable 'layerCodexAppServerClientFactoryCommand' is declared but never used. Unused variables should start with a '_'. 2026-10-24T05:20:08.8765241Z ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1444:7] 2026-10-24T05:20:08.8765294Z 1443 │ 2026-10-24T05:20:08.8765408Z 1444 │ const layerCodexAppServerClientFactoryCommand = ( 2026-10-24T05:20:08.8765523Z ·  ───────────────────┬─────────────────── 2026-10-24T05:20:08.8765726Z · ╰── 'layerCodexAppServerClientFactoryCommand' is declared here 2026-10-24T05:20:08.8765845Z 1445 │ options: CodexClient.CodexAppServerClientOptions & { 2026-10-24T05:20:08.8765901Z ╰──── 2026-10-24T05:20:08.8766002Z  help: Consider removing this declaration. 2026-10-24T05:20:08.8766005Z 2026-10-24T05:20:08.8766255Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T05:20:08.8766411Z ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1680:7] 2026-10-24T05:20:08.8766463Z 1679 │ 2026-10-24T05:20:08.8766531Z 1680 │ const layer: Layer.Layer< 2026-10-24T05:20:08.8766601Z ·  ──┬── 2026-10-24T05:20:08.8766724Z · ╰── 'layer' is declared here 2026-10-24T05:20:08.8766817Z 1681 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T05:20:08.8766867Z ╰──── 2026-10-24T05:20:08.8766965Z  help: Consider removing this declaration. 2026-10-24T05:20:08.8767017Z 2026-10-24T05:20:08.8767333Z ⚠ eslint(no-unused-vars): Variable 'layerFromProviderAdapter' is declared but never used. Unused variables should start with a '_'. 2026-10-24T05:20:08.8767492Z ╭─[apps/server/src/orchestration-v2/ProviderAdapterRegistry.ts:346:7] 2026-10-24T05:20:08.8767545Z 345 │ 2026-10-24T05:20:08.8767642Z 346 │ const layerFromProviderAdapter: Layer.Layer< 2026-10-24T05:20:08.8767735Z ·  ────────────┬─────────── 2026-10-24T05:20:08.8767899Z · ╰── 'layerFromProviderAdapter' is declared here 2026-10-24T05:20:08.8767974Z 347 │ ProviderAdapterRegistryV2, 2026-10-24T05:20:08.8768024Z ╰──── 2026-10-24T05:20:08.8768123Z  help: Consider removing this declaration. 2026-10-24T05:20:08.8768125Z 2026-10-24T05:20:08.8768326Z ⚠ eslint(no-unsafe-optional-chaining): Unsafe usage of optional chaining 2026-10-24T05:20:08.8768489Z ╭─[apps/server/src/orchestration-v2/ThreadLaunchService.test.ts:1783:8] 2026-10-24T05:20:08.8768552Z 1782 │ assert.equal( 2026-10-24T05:20:08.8768697Z 1783 │ (stored.context?.records[0] as { attachmentId: string }).attachmentId, 2026-10-24T05:20:08.8768797Z ·  ────────────────────────── 2026-10-24T05:20:08.8768877Z 1784 │ stored.attachments[0]?.id, 2026-10-24T05:20:08.8768926Z ╰──── 2026-10-24T05:20:08.8769092Z  help: If this short-circuits with 'undefined' the evaluation will throw TypeError 2026-10-24T05:20:08.8769095Z 2026-10-24T05:20:08.8769237Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:20:08.8769391Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:152:27] 2026-10-24T05:20:08.8769608Z 151 │ 2026-10-24T05:20:08.8769699Z 152 │ {props.children(open)} 2026-10-24T05:20:08.8769786Z ·  ──┬─ 2026-10-24T05:20:08.8769942Z · ╰── Cannot access ref value during render 2026-10-24T05:20:08.8770003Z 153 │ 2026-10-24T05:20:08.8770053Z ╰──── 2026-10-24T05:20:08.8770509Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T05:20:08.8770844Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:20:08.8770929Z 2026-10-24T05:20:08.8771123Z ⚠ react(memo-dependencies): Found missing/extra memoization dependencies 2026-10-24T05:20:08.8771266Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:140:9] 2026-10-24T05:20:08.8771346Z 139 │ if (action.id !== undefined) { 2026-10-24T05:20:08.8771423Z 140 │ props.onPressAction?.({ 2026-10-24T05:20:08.8771492Z ·  ──┬── 2026-10-24T05:20:08.8771618Z · ╰── Missing dependency `props` 2026-10-24T05:20:08.8771708Z 141 │ nativeEvent: { event: action.id }, 2026-10-24T05:20:08.8771852Z 142 │ } as Parameters>[0]); 2026-10-24T05:20:08.8771906Z 143 │ } 2026-10-24T05:20:08.8771966Z 144 │ }, 2026-10-24T05:20:08.8772047Z 145 │ [close, props.onPressAction], 2026-10-24T05:20:08.8772139Z ·  ─────────┬───────── 2026-10-24T05:20:08.8772347Z · ╰── Overly precise dependency `props.onPressAction`, use `props` instead 2026-10-24T05:20:08.8772400Z 146 │ ); 2026-10-24T05:20:08.8772456Z ╰──── 2026-10-24T05:20:08.8772922Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI. Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often 2026-10-24T05:20:08.8773228Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8773231Z 2026-10-24T05:20:08.8773414Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T05:20:08.8773552Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:121:27] 2026-10-24T05:20:08.8773712Z 120 │ const scope = makeScope(options.capabilities ?? new Set(["preview", "worktree"])); 2026-10-24T05:20:08.8773798Z 121 │ const dispatch = vi.fn((_: unknown) => 2026-10-24T05:20:08.8773880Z ·  ┬ 2026-10-24T05:20:08.8774006Z · ╰── '_' is declared here 2026-10-24T05:20:08.8774106Z 122 │ (options.dispatchGate ?? Effect.void).pipe( 2026-10-24T05:20:08.8774158Z ╰──── 2026-10-24T05:20:08.8774255Z  help: Consider removing this parameter. 2026-10-24T05:20:08.8774259Z 2026-10-24T05:20:08.8774442Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T05:20:08.8774577Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:134:39] 2026-10-24T05:20:08.8774630Z 133 │ ); 2026-10-24T05:20:08.8774734Z 134 │ const listLocalBranchNames = vi.fn((_: string) => 2026-10-24T05:20:08.8774828Z ·  ┬ 2026-10-24T05:20:08.8774966Z · ╰── '_' is declared here 2026-10-24T05:20:08.8775031Z 135 │ Effect.succeed( 2026-10-24T05:20:08.8775082Z ╰──── 2026-10-24T05:20:08.8775178Z  help: Consider removing this parameter. 2026-10-24T05:20:08.8775181Z 2026-10-24T05:20:08.8775357Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T05:20:08.8775545Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:178:31] 2026-10-24T05:20:08.8775627Z 177 │ }); 2026-10-24T05:20:08.8775723Z 178 │ const sendToThread = vi.fn((_: unknown) => { 2026-10-24T05:20:08.8775807Z ·  ┬ 2026-10-24T05:20:08.8775939Z · ╰── '_' is declared here 2026-10-24T05:20:08.8776036Z 179 │ switch (options.continuation ?? "queued") { 2026-10-24T05:20:08.8776084Z ╰──── 2026-10-24T05:20:08.8776182Z  help: Consider removing this parameter. 2026-10-24T05:20:08.8776185Z 2026-10-24T05:20:08.8776364Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T05:20:08.8776494Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:203:33] 2026-10-24T05:20:08.8776546Z 202 │ ); 2026-10-24T05:20:08.8776646Z 203 │ const removeWorktree = vi.fn((_: unknown) => 2026-10-24T05:20:08.8776737Z ·  ┬ 2026-10-24T05:20:08.8776870Z · ╰── '_' is declared here 2026-10-24T05:20:08.8776948Z 204 │ options.removeWorktreeFails 2026-10-24T05:20:08.8777000Z ╰──── 2026-10-24T05:20:08.8777098Z  help: Consider removing this parameter. 2026-10-24T05:20:08.8777100Z 2026-10-24T05:20:08.8777275Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T05:20:08.8777405Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:208:36] 2026-10-24T05:20:08.8777456Z 207 │ ); 2026-10-24T05:20:08.8777556Z 208 │ const deleteLocalBranch = vi.fn((_: unknown) => 2026-10-24T05:20:08.8777647Z ·  ┬ 2026-10-24T05:20:08.8777788Z · ╰── '_' is declared here 2026-10-24T05:20:08.8777873Z 209 │ options.deleteLocalBranchFails 2026-10-24T05:20:08.8777923Z ╰──── 2026-10-24T05:20:08.8778020Z  help: Consider removing this parameter. 2026-10-24T05:20:08.8778022Z 2026-10-24T05:20:08.8778197Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T05:20:08.8778328Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:213:42] 2026-10-24T05:20:08.8778381Z 212 │ ); 2026-10-24T05:20:08.8778493Z 213 │ const fetchWorktreeBaseCommit = vi.fn((_: unknown) => 2026-10-24T05:20:08.8778586Z ·  ┬ 2026-10-24T05:20:08.8778730Z · ╰── '_' is declared here 2026-10-24T05:20:08.8778816Z 214 │ options.fetchWorktreeBaseFails 2026-10-24T05:20:08.8778865Z ╰──── 2026-10-24T05:20:08.8778960Z  help: Consider removing this parameter. 2026-10-24T05:20:08.8778962Z 2026-10-24T05:20:08.8779138Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T05:20:08.8779269Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:254:30] 2026-10-24T05:20:08.8779321Z 253 │ ); 2026-10-24T05:20:08.8779408Z 254 │ const localStatus = vi.fn((_: unknown) => 2026-10-24T05:20:08.8779492Z ·  ┬ 2026-10-24T05:20:08.8779663Z · ╰── '_' is declared here 2026-10-24T05:20:08.8779732Z 255 │ Effect.succeed({ 2026-10-24T05:20:08.8779781Z ╰──── 2026-10-24T05:20:08.8779928Z  help: Consider removing this parameter. 2026-10-24T05:20:08.8779960Z 2026-10-24T05:20:08.8780139Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T05:20:08.8780269Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:264:32] 2026-10-24T05:20:08.8780320Z 263 │ ); 2026-10-24T05:20:08.8780469Z 264 │ const refreshStatus = vi.fn((_: string) => Effect.die("refreshStatus stub")); 2026-10-24T05:20:08.8780557Z ·  ┬ 2026-10-24T05:20:08.8780692Z · ╰── '_' is declared here 2026-10-24T05:20:08.8780834Z 265 │ const runForThread = vi.fn((input: { readonly worktreePath: string }) => { 2026-10-24T05:20:08.8780883Z ╰──── 2026-10-24T05:20:08.8780979Z  help: Consider removing this parameter. 2026-10-24T05:20:08.8780987Z 2026-10-24T05:20:08.8781444Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T05:20:08.8781609Z ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:566:7] 2026-10-24T05:20:08.8781707Z 565 │ let afterSequence = created[0]!.sequence; 2026-10-24T05:20:08.8781900Z 566 │ ╭─▶ for (let index = 1; index <= 32; index += 1) { 2026-10-24T05:20:08.8782002Z 567 │ │ const nextEvent = { 2026-10-24T05:20:08.8782158Z 568 │ │ id: EventId.make(`event:foundation-stream-race:${index}`), 2026-10-24T05:20:08.8782293Z 569 │ │ type: "thread.metadata-updated" as const, 2026-10-24T05:20:08.8782385Z 570 │ │ threadId, 2026-10-24T05:20:08.8782496Z 571 │ │ providerInstanceId, 2026-10-24T05:20:08.8782686Z 572 │ │ occurredAt: now, 2026-10-24T05:20:08.8782831Z 573 │ │ payload: { ...thread, title: `Race update ${index}` }, 2026-10-24T05:20:08.8782957Z 574 │ │ } satisfies OrchestrationV2DomainEvent; 2026-10-24T05:20:08.8783068Z 575 │ │ const reader = yield* eventSink 2026-10-24T05:20:08.8783187Z 576 │ │ .stream({ threadId, afterSequence }) 2026-10-24T05:20:08.8783316Z 577 │ │ .pipe(Stream.runHead, Effect.forkChild); 2026-10-24T05:20:08.8783426Z 578 │ │ yield* Effect.yieldNow; 2026-10-24T05:20:08.8783585Z 579 │ │ const written = yield* eventSink.write({ events: [nextEvent] }); 2026-10-24T05:20:08.8783715Z 580 │ │ const received = yield* Fiber.join(reader); 2026-10-24T05:20:08.8783829Z 581 │ │ if (Option.isNone(received)) { 2026-10-24T05:20:08.8784024Z 582 │ │ return yield* Effect.die("The event stream ended before delivering the live event."); 2026-10-24T05:20:08.8784101Z 583 │ │ } 2026-10-24T05:20:08.8784257Z 584 │ │ assert.equal(received.value.sequence, written[0]?.sequence); 2026-10-24T05:20:08.8784398Z 585 │ │ assert.equal(received.value.event.id, nextEvent.id); 2026-10-24T05:20:08.8784524Z 586 │ │ afterSequence = received.value.sequence; 2026-10-24T05:20:08.8784700Z 587 │ ╰─▶ } 2026-10-24T05:20:08.8784786Z 588 │ }), 2026-10-24T05:20:08.8784835Z ╰──── 2026-10-24T05:20:08.8784838Z 2026-10-24T05:20:08.8785289Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T05:20:08.8785459Z ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:2327:9] 2026-10-24T05:20:08.8785533Z 2326 │ let settled = false; 2026-10-24T05:20:08.8785690Z 2327 │ ╭─▶ while (!settled) { 2026-10-24T05:20:08.8785851Z 2328 │ │ settled = (yield* outbox.listByCommandId(commandId)).every( 2026-10-24T05:20:08.8785983Z 2329 │ │ (effect) => effect.status === "succeeded", 2026-10-24T05:20:08.8786063Z 2330 │ │ ); 2026-10-24T05:20:08.8786184Z 2331 │ │ if (!settled) yield* Effect.yieldNow; 2026-10-24T05:20:08.8786317Z 2332 │ ╰─▶ } 2026-10-24T05:20:08.8786432Z 2333 │ }).pipe(Effect.provide(layerWorker), Effect.scoped); 2026-10-24T05:20:08.8786483Z ╰──── 2026-10-24T05:20:08.8786486Z 2026-10-24T05:20:08.8786773Z ⚠ eslint(no-unused-vars): Variable 'revokeActiveMcpThread' is declared but never used. Unused variables should start with a '_'. 2026-10-24T05:20:08.8786895Z ╭─[apps/server/src/mcp/McpSessionRegistry.ts:218:7] 2026-10-24T05:20:08.8786951Z 217 │ 2026-10-24T05:20:08.8787096Z 218 │ const revokeActiveMcpThread = (threadId: ThreadId): Effect.Effect => 2026-10-24T05:20:08.8787183Z ·  ──────────┬────────── 2026-10-24T05:20:08.8787341Z · ╰── 'revokeActiveMcpThread' is declared here 2026-10-24T05:20:08.8787524Z 219 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeThread(threadId) : Effect.void; 2026-10-24T05:20:08.8787574Z ╰──── 2026-10-24T05:20:08.8787674Z  help: Consider removing this declaration. 2026-10-24T05:20:08.8787677Z 2026-10-24T05:20:08.8787978Z ⚠ eslint(no-unused-vars): Variable 'revokeAllActiveMcpCredentials' is declared but never used. Unused variables should start with a '_'. 2026-10-24T05:20:08.8788097Z ╭─[apps/server/src/mcp/McpSessionRegistry.ts:221:7] 2026-10-24T05:20:08.8788148Z 220 │ 2026-10-24T05:20:08.8788282Z 221 │ const revokeAllActiveMcpCredentials = (): Effect.Effect => 2026-10-24T05:20:08.8788385Z ·  ──────────────┬────────────── 2026-10-24T05:20:08.8788560Z · ╰── 'revokeAllActiveMcpCredentials' is declared here 2026-10-24T05:20:08.8788719Z 222 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeAll : Effect.void; 2026-10-24T05:20:08.8788768Z ╰──── 2026-10-24T05:20:08.8788869Z  help: Consider removing this declaration. 2026-10-24T05:20:08.8788871Z 2026-10-24T05:20:08.8789132Z ⚠ eslint(no-unused-vars): Variable 'layerDaemon' is declared but never used. Unused variables should start with a '_'. 2026-10-24T05:20:08.8789265Z ╭─[apps/server/src/orchestration-v2/EffectWorker.ts:914:7] 2026-10-24T05:20:08.8789315Z 913 │ 2026-10-24T05:20:08.8789548Z 914 │ const layerDaemon: Layer.Layer = Layer.effectDiscard( 2026-10-24T05:20:08.8789695Z ·  ─────┬───── 2026-10-24T05:20:08.8789902Z · ╰── 'layerDaemon' is declared here 2026-10-24T05:20:08.8789987Z 915 │ runDaemon.pipe(Effect.forkScoped), 2026-10-24T05:20:08.8790036Z ╰──── 2026-10-24T05:20:08.8790134Z  help: Consider removing this declaration. 2026-10-24T05:20:08.8790137Z 2026-10-24T05:20:08.8790407Z ⚠ eslint(no-unused-vars): Variable 'layerUnavailable' is declared but never used. Unused variables should start with a '_'. 2026-10-24T05:20:08.8790548Z ╭─[apps/server/src/orchestration-v2/Orchestrator.ts:12366:7] 2026-10-24T05:20:08.8790600Z 12365 │ 2026-10-24T05:20:08.8790743Z 12366 │ const layerUnavailable: Layer.Layer = Layer.succeed( 2026-10-24T05:20:08.8790829Z ·  ────────┬─────── 2026-10-24T05:20:08.8791015Z · ╰── 'layerUnavailable' is declared here 2026-10-24T05:20:08.8791080Z 12367 │ OrchestratorV2, 2026-10-24T05:20:08.8791131Z ╰──── 2026-10-24T05:20:08.8791229Z  help: Consider removing this declaration. 2026-10-24T05:20:08.8791232Z 2026-10-24T05:20:08.8791372Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:20:08.8791486Z ╭─[apps/mobile/src/components/ui/Menu.tsx:54:36] 2026-10-24T05:20:08.8791658Z 53 │ const child = children as ReactElement>; 2026-10-24T05:20:08.8791827Z 54 │ ╭─▶ children = cloneElement(child, { 2026-10-24T05:20:08.8791935Z 55 │ │ onTouchStart: (event) => { 2026-10-24T05:20:08.8792091Z 56 │ │ // Reset for a new touch, not onPressIn, which also fires when a 2026-10-24T05:20:08.8792244Z 57 │ │ // finger moves out of the row and back during the same gesture. 2026-10-24T05:20:08.8792368Z 58 │ │ menuPress.current.isPreparing = false; 2026-10-24T05:20:08.8792530Z 59 │ │ menuPress.current.suppressPress = menuPress.current.isOpen; 2026-10-24T05:20:08.8792638Z 60 │ │ pendingPress.current = null; 2026-10-24T05:20:08.8792755Z 61 │ │ child.props.onTouchStart?.(event); 2026-10-24T05:20:08.8792829Z 62 │ │ }, 2026-10-24T05:20:08.8792925Z 63 │ │ onPress: (event) => { 2026-10-24T05:20:08.8793095Z 64 │ │ // Accessibility clicks have no touch identifier and must not inherit 2026-10-24T05:20:08.8793230Z 65 │ │ // cancellation from a previous physical gesture. 2026-10-24T05:20:08.8793394Z 66 │ │ const isTouch = typeof event.nativeEvent.identifier === "number"; 2026-10-24T05:20:08.8793577Z 67 │ │ if (isTouch ? menuPress.current.suppressPress : menuPress.current.isOpen) { 2026-10-24T05:20:08.8793663Z 68 │ │ return; 2026-10-24T05:20:08.8793737Z 69 │ │ } 2026-10-24T05:20:08.8793873Z 70 │ │ if (isTouch && menuPress.current.isPreparing) { 2026-10-24T05:20:08.8794039Z 71 │ │ // A release can arrive between native menu preparation and display. 2026-10-24T05:20:08.8794272Z 72 │ │ // Let UIKit's display/cancel callback decide this press's outcome. 2026-10-24T05:20:08.8794409Z 73 │ │ event.persist(); 2026-10-24T05:20:08.8794565Z 74 │ │ pendingPress.current = () => child.props.onPress?.(event); 2026-10-24T05:20:08.8794649Z 75 │ │ return; 2026-10-24T05:20:08.8794723Z 76 │ │ } 2026-10-24T05:20:08.8794833Z 77 │ │ child.props.onPress?.(event); 2026-10-24T05:20:08.8794907Z 78 │ │ }, 2026-10-24T05:20:08.8795033Z 79 │ ├─▶ }); 2026-10-24T05:20:08.8795267Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T05:20:08.8795368Z 80 │ menuProps.onMenuInteractionStart = () => { 2026-10-24T05:20:08.8795418Z ╰──── 2026-10-24T05:20:08.8795874Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T05:20:08.8796163Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:20:08.8796165Z 2026-10-24T05:20:08.8796388Z ⚠ eslint(no-unused-vars): Function 'assertUserMessagesExclude' is declared but never used. 2026-10-24T05:20:08.8796547Z ╭─[apps/server/src/orchestration-v2/testkit/fixtures/shared.ts:1398:10] 2026-10-24T05:20:08.8796603Z 1397 │ 2026-10-24T05:20:08.8796691Z 1398 │ function assertUserMessagesExclude( 2026-10-24T05:20:08.8796792Z ·  ────────────┬──────────── 2026-10-24T05:20:08.8796956Z · ╰── 'assertUserMessagesExclude' is declared here 2026-10-24T05:20:08.8797062Z 1399 │ projection: OrchestrationV2ThreadProjection, 2026-10-24T05:20:08.8797113Z ╰──── 2026-10-24T05:20:08.8797213Z  help: Consider removing this declaration. 2026-10-24T05:20:08.8797215Z 2026-10-24T05:20:08.8797412Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:20:08.8797572Z ╭─[apps/mobile/src/features/workspace/WorkspaceToolbar.ios.tsx:114:33] 2026-10-24T05:20:08.8797667Z 113 │ return () => cancelAnimationFrame(frame); 2026-10-24T05:20:08.8797810Z 114 │ }, [restoreSearch, tabActive, bottomSearch]); 2026-10-24T05:20:08.8797952Z ·  ──────┬───── 2026-10-24T05:20:08.8798115Z · ╰── Unnecessary dependency `bottomSearch` 2026-10-24T05:20:08.8798217Z 115 │ const composeButton = nativeToolbarCompose ? ( 2026-10-24T05:20:08.8798267Z ╰──── 2026-10-24T05:20:08.8798552Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T05:20:08.8798857Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8798860Z 2026-10-24T05:20:08.8799031Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T05:20:08.8799161Z ╭─[apps/web/src/components/CommandPalette.tsx:1996:20] 2026-10-24T05:20:08.8799275Z 1995 │ title: inferProjectTitleFromPath(destinationPath), 2026-10-24T05:20:08.8799365Z 1996 │ createdAt: new Date().toISOString(), 2026-10-24T05:20:08.8799452Z ·  ─────┬──── 2026-10-24T05:20:08.8799626Z · ╰── Cannot call impure function 2026-10-24T05:20:08.8799731Z 1997 │ remoteUrl: addProjectCloneFlow.remoteUrl, 2026-10-24T05:20:08.8799781Z ╰──── 2026-10-24T05:20:08.8800052Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T05:20:08.8800343Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T05:20:08.8800348Z 2026-10-24T05:20:08.8800538Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T05:20:08.8800681Z ╭─[apps/mobile/src/components/ComposerContextSheet.tsx:267:25] 2026-10-24T05:20:08.8800786Z 266 │ {record.elements?.map((element, index) => ( 2026-10-24T05:20:08.8800949Z 267 │ 2026-10-24T05:20:08.8801102Z ·  ─────────────────────────────────────────────────────── 2026-10-24T05:20:08.8801176Z 268 │ 2026-10-24T05:20:08.8801995Z 220 │ {interaction.output.replace(/\x1b\[[0-?]*[ -/]*[@-~]/g, "")} 2026-10-24T05:20:08.8802101Z ·  ──┬─ 2026-10-24T05:20:08.8802262Z · ╰── 'U+001B' is a control character. 2026-10-24T05:20:08.8802325Z 221 │ 2026-10-24T05:20:08.8802376Z ╰──── 2026-10-24T05:20:08.8802652Z  help: Avoid matching control characters in regular expressions. If intentional, disable this rule for the expression. 2026-10-24T05:20:08.8802682Z 2026-10-24T05:20:08.8803136Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T05:20:08.8803280Z ╭─[apps/server/src/background/HostPowerMonitor.test.ts:133:11] 2026-10-24T05:20:08.8803405Z 132 │ const monitor = yield* HostPowerMonitor.HostPowerMonitor; 2026-10-24T05:20:08.8803544Z 133 │ ╭─▶ for ( 2026-10-24T05:20:08.8803644Z 134 │ │ let attempt = 0; 2026-10-24T05:20:08.8803807Z 135 │ │ attempt < 100 && (yield* monitor.snapshot).onBattery !== "true"; 2026-10-24T05:20:08.8803905Z 136 │ │ attempt += 1 2026-10-24T05:20:08.8803987Z 137 │ │ ) { 2026-10-24T05:20:08.8804097Z 138 │ │ yield* Effect.yieldNow; 2026-10-24T05:20:08.8804228Z 139 │ ╰─▶ } 2026-10-24T05:20:08.8804348Z 140 │ expect((yield* monitor.snapshot).onBattery).toBe("true"); 2026-10-24T05:20:08.8804399Z ╰──── 2026-10-24T05:20:08.8804402Z 2026-10-24T05:20:08.8804658Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:20:08.8804789Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:68:5] 2026-10-24T05:20:08.8804886Z 66 │ const { id: attachmentId, fileUri } = attachment; 2026-10-24T05:20:08.8804955Z 67 │ useEffect(() => { 2026-10-24T05:20:08.8805034Z ·  ────┬──── 2026-10-24T05:20:08.8805161Z · ╰── This is the containing effect 2026-10-24T05:20:08.8805223Z 68 │ setUri(null); 2026-10-24T05:20:08.8805291Z ·  ───┬── 2026-10-24T05:20:08.8805453Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:20:08.8805515Z 69 │ setError(null); 2026-10-24T05:20:08.8805563Z ╰──── 2026-10-24T05:20:08.8806151Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T05:20:08.8806472Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T05:20:08.8806477Z 2026-10-24T05:20:08.8806673Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:20:08.8806803Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:91:7] 2026-10-24T05:20:08.8806856Z 90 │ }; 2026-10-24T05:20:08.8806930Z 91 │ }, [attachmentId, fileUri]); 2026-10-24T05:20:08.8807053Z ·  ──────┬───── ───┬─── 2026-10-24T05:20:08.8807229Z · │ ╰── Unnecessary dependency `fileUri` 2026-10-24T05:20:08.8807373Z · ╰── Unnecessary dependency `attachmentId` 2026-10-24T05:20:08.8807558Z 92 │ const mimeType = videoMimeType(attachment) ?? attachment.mimeType; 2026-10-24T05:20:08.8807644Z ╰──── 2026-10-24T05:20:08.8807929Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T05:20:08.8808229Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8808234Z 2026-10-24T05:20:08.8808440Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T05:20:08.8808575Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:213:34] 2026-10-24T05:20:08.8808640Z 212 │ useEffect(() => { 2026-10-24T05:20:08.8808751Z 213 │ if (!isFocused && hasSource) props.onRequestClose(); 2026-10-24T05:20:08.8808850Z ·  ──┬── 2026-10-24T05:20:08.8808998Z · ╰── Missing dependency `props` 2026-10-24T05:20:08.8809102Z 214 │ }, [isFocused, hasSource, props.onRequestClose]); 2026-10-24T05:20:08.8809214Z ·  ──────────┬───────── 2026-10-24T05:20:08.8809435Z · ╰── Overly precise dependency `props.onRequestClose`, use `props` instead 2026-10-24T05:20:08.8809506Z 215 │ const { source } = props; 2026-10-24T05:20:08.8809567Z ╰──── 2026-10-24T05:20:08.8810010Z  help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T05:20:08.8810316Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8810323Z 2026-10-24T05:20:08.8810529Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T05:20:08.8810630Z ╭─[apps/mobile/src/Stack.tsx:1079:21] 2026-10-24T05:20:08.8810693Z 1078 │ } 2026-10-24T05:20:08.8810957Z ·  ───────────────────────────────────────────── 2026-10-24T05:20:08.8811039Z 1080 │ screenOptions={({ route }) => 2026-10-24T05:20:08.8811088Z ╰──── 2026-10-24T05:20:08.8811446Z  help: Move this component definition out of the parent component `AdaptiveRootStack` and pass data as props. If you want to allow component creation in props, set `allowAsProps` option to true. 2026-10-24T05:20:08.8811450Z 2026-10-24T05:20:08.8811613Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T05:20:08.8811749Z ╭─[apps/server/src/process/externalLauncher.test.ts:186:12] 2026-10-24T05:20:08.8811801Z 185 │ 2026-10-24T05:20:08.8811900Z 186 │ for (const {} of ["darwin", "linux"] as const) { 2026-10-24T05:20:08.8811969Z ·  ── 2026-10-24T05:20:08.8812023Z 187 │ } 2026-10-24T05:20:08.8812073Z ╰──── 2026-10-24T05:20:08.8812295Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T05:20:08.8812298Z 2026-10-24T05:20:08.8812504Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T05:20:08.8812666Z ╭─[apps/server/src/process/externalLauncher.test.ts:189:12] 2026-10-24T05:20:08.8812718Z 188 │ 2026-10-24T05:20:08.8812781Z 189 │ for (const {} of [ 2026-10-24T05:20:08.8812847Z ·  ── 2026-10-24T05:20:08.8812937Z 190 │ { kind: "browser", folderVerb: "none" }, 2026-10-24T05:20:08.8812986Z ╰──── 2026-10-24T05:20:08.8813205Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T05:20:08.8813207Z 2026-10-24T05:20:08.8813366Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T05:20:08.8813501Z ╭─[apps/server/src/process/externalLauncher.test.ts:311:12] 2026-10-24T05:20:08.8813552Z 310 │ 2026-10-24T05:20:08.8813682Z 311 │ for (const {} of ["rejected", "spawn-error", "stalled"] as const) { 2026-10-24T05:20:08.8813749Z ·  ── 2026-10-24T05:20:08.8813801Z 312 │ } 2026-10-24T05:20:08.8813851Z ╰──── 2026-10-24T05:20:08.8814069Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T05:20:08.8814071Z 2026-10-24T05:20:08.8814231Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T05:20:08.8814364Z ╭─[apps/server/src/process/externalLauncher.test.ts:314:12] 2026-10-24T05:20:08.8814415Z 313 │ 2026-10-24T05:20:08.8814477Z 314 │ for (const {} of [ 2026-10-24T05:20:08.8814542Z ·  ── 2026-10-24T05:20:08.8814595Z 315 │ { 2026-10-24T05:20:08.8814644Z ╰──── 2026-10-24T05:20:08.8814867Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T05:20:08.8814872Z 2026-10-24T05:20:08.8815031Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T05:20:08.8815146Z ╭─[apps/server/src/processRunner.test.ts:266:14] 2026-10-24T05:20:08.8815198Z 265 │ 2026-10-24T05:20:08.8815300Z 266 │ for (const {} of ["timeout", "success"] as const) { 2026-10-24T05:20:08.8815369Z ·  ── 2026-10-24T05:20:08.8815422Z 267 │ } 2026-10-24T05:20:08.8815470Z ╰──── 2026-10-24T05:20:08.8815690Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T05:20:08.8815692Z 2026-10-24T05:20:08.8815950Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:20:08.8816134Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:119:10] 2026-10-24T05:20:08.8816185Z 117 │ 2026-10-24T05:20:08.8816250Z 118 │ useEffect(() => { 2026-10-24T05:20:08.8816317Z ·  ────┬──── 2026-10-24T05:20:08.8816447Z · ╰── This is the containing effect 2026-10-24T05:20:08.8816525Z 119 │ void refreshNotifications(); 2026-10-24T05:20:08.8816615Z ·  ──────────┬───────── 2026-10-24T05:20:08.8816784Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:20:08.8816922Z 120 │ const subscription = AppState.addEventListener("change", (state) => { 2026-10-24T05:20:08.8816971Z ╰──── 2026-10-24T05:20:08.8817607Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T05:20:08.8817959Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T05:20:08.8817962Z 2026-10-24T05:20:08.8818211Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:20:08.8818390Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:128:7] 2026-10-24T05:20:08.8818441Z 125 │ 2026-10-24T05:20:08.8818504Z 126 │ useEffect(() => { 2026-10-24T05:20:08.8818577Z ·  ────┬──── 2026-10-24T05:20:08.8818706Z · ╰── This is the containing effect 2026-10-24T05:20:08.8818771Z 127 │ if (!isLoaded) { 2026-10-24T05:20:08.8818859Z 128 │ setLiveActivityStatus("checking"); 2026-10-24T05:20:08.8818945Z ·  ──────────┬────────── 2026-10-24T05:20:08.8819114Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:20:08.8819175Z 129 │ return; 2026-10-24T05:20:08.8819225Z ╰──── 2026-10-24T05:20:08.8819866Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T05:20:08.8820183Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T05:20:08.8820186Z 2026-10-24T05:20:08.8820642Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T05:20:08.8820821Z ╭─[apps/server/src/scheduledTasks/ScheduledTaskService.webhook.test.ts:521:13] 2026-10-24T05:20:08.8820891Z 520 │ })).delivery; 2026-10-24T05:20:08.8821083Z 521 │ ╭─▶ while (delivery.outcome === "accepted") { 2026-10-24T05:20:08.8821242Z 522 │ │ yield* Effect.yieldNow; 2026-10-24T05:20:08.8821412Z 523 │ │ delivery = (yield* service.getWebhookDelivery({ 2026-10-24T05:20:08.8821509Z 524 │ │ id: task.id, 2026-10-24T05:20:08.8821624Z 525 │ │ deliveryId: deliveryId!, 2026-10-24T05:20:08.8821718Z 526 │ │ })).delivery; 2026-10-24T05:20:08.8821853Z 527 │ ╰─▶ } 2026-10-24T05:20:08.8821968Z 528 │ assert.equal(delivery.outcome, "dispatch_failed"); 2026-10-24T05:20:08.8822018Z ╰──── 2026-10-24T05:20:08.8822020Z 2026-10-24T05:20:08.8822223Z ⚠ eslint(no-unused-vars): Function 'describeSchedule' is declared but never used. 2026-10-24T05:20:08.8822351Z ╭─[apps/server/src/scheduledTasks/Schedule.ts:79:10] 2026-10-24T05:20:08.8822405Z 78 │ 2026-10-24T05:20:08.8822538Z 79 │ function describeSchedule(schedule: ScheduledTaskSchedule): string { 2026-10-24T05:20:08.8822622Z ·  ────────┬─────── 2026-10-24T05:20:08.8822766Z · ╰── 'describeSchedule' is declared here 2026-10-24T05:20:08.8822870Z 80 │ if (schedule.type === "webhook") return "On webhook"; 2026-10-24T05:20:08.8822921Z ╰──── 2026-10-24T05:20:08.8823021Z  help: Consider removing this declaration. 2026-10-24T05:20:08.8823024Z 2026-10-24T05:20:08.8823275Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T05:20:08.8823434Z ╭─[apps/server/src/orchestration-v2/ThreadPullRequestService.ts:413:7] 2026-10-24T05:20:08.8823492Z 412 │ 2026-10-24T05:20:08.8823616Z 413 │ const layer = Layer.effect(ThreadPullRequestServiceV2, make); 2026-10-24T05:20:08.8823687Z ·  ──┬── 2026-10-24T05:20:08.8823808Z · ╰── 'layer' is declared here 2026-10-24T05:20:08.8823858Z ╰──── 2026-10-24T05:20:08.8823956Z  help: Consider removing this declaration. 2026-10-24T05:20:08.8823960Z 2026-10-24T05:20:08.8824317Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownSync(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T05:20:08.8824439Z ╭─[apps/server/src/auth/RpcAuthorization.ts:237:17] 2026-10-24T05:20:08.8824570Z 236 │ const requiredScopesForSettingsUpdate = (payload: unknown) => { 2026-10-24T05:20:08.8824703Z 237 │ const input = Schema.decodeUnknownSync(SettingsUpdate)(payload); 2026-10-24T05:20:08.8824807Z ·  ──────────────────────── 2026-10-24T05:20:08.8824942Z 238 │ const scopes = requiredScopesForServerSettingsPatch(input.patch); 2026-10-24T05:20:08.8824994Z ╰──── 2026-10-24T05:20:08.8824997Z 2026-10-24T05:20:08.8825348Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownSync(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T05:20:08.8825468Z ╭─[apps/server/src/auth/RpcAuthorization.ts:256:26] 2026-10-24T05:20:08.8825566Z 255 │ if (method === WS_METHODS.assetsCreateUrl) { 2026-10-24T05:20:08.8825718Z 256 │ const { resource } = Schema.decodeUnknownSync(AssetCreateUrlInput)(payload); 2026-10-24T05:20:08.8825829Z ·  ──────────────────────── 2026-10-24T05:20:08.8825939Z 257 │ return [ 2026-10-24T05:20:08.8826024Z ╰──── 2026-10-24T05:20:08.8826027Z 2026-10-24T05:20:08.8826210Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T05:20:08.8826324Z ╭─[apps/mobile/src/lib/useHoverGesture.ts:8:15] 2026-10-24T05:20:08.8826380Z 7 │ () => 2026-10-24T05:20:08.8826445Z 8 │ Gesture.Hover() 2026-10-24T05:20:08.8826520Z ·  ──┬── 2026-10-24T05:20:08.8826650Z · ╰── `Hover` may be a component 2026-10-24T05:20:08.8826723Z 9 │ .manualActivation(true) 2026-10-24T05:20:08.8826773Z ╰──── 2026-10-24T05:20:08.8827050Z  help: Render `Hover` with JSX if it is a component; otherwise rename it to start with a lowercase letter or allowlist it in the compiler configuration 2026-10-24T05:20:08.8827495Z  note: `Hover` is treated as a component because it begins with an uppercase letter; React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/static-components 2026-10-24T05:20:08.8827500Z 2026-10-24T05:20:08.8827763Z ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'. 2026-10-24T05:20:08.8827892Z ╭─[apps/server/src/telemetry/AnalyticsService.ts:340:7] 2026-10-24T05:20:08.8827944Z 339 │ 2026-10-24T05:20:08.8828045Z 340 │ const layerTest = AnalyticsService.layerTest; 2026-10-24T05:20:08.8828117Z ·  ────┬──── 2026-10-24T05:20:08.8828246Z · ╰── 'layerTest' is declared here 2026-10-24T05:20:08.8828296Z ╰──── 2026-10-24T05:20:08.8828403Z  help: Consider removing this declaration. 2026-10-24T05:20:08.8828408Z 2026-10-24T05:20:08.8828601Z ⚠ eslint(no-unused-vars): Identifier 'identity' is imported but never used. 2026-10-24T05:20:08.8828700Z ╭─[apps/server/src/auth/http.ts:28:10] 2026-10-24T05:20:08.8828786Z 27 │ import * as Schema from "effect/Schema"; 2026-10-24T05:20:08.8828877Z 28 │ import { identity } from "effect/Function"; 2026-10-24T05:20:08.8828950Z ·  ────┬─── 2026-10-24T05:20:08.8829080Z · ╰── 'identity' is imported here 2026-10-24T05:20:08.8829163Z 29 │ import * as Layer from "effect/Layer"; 2026-10-24T05:20:08.8829212Z ╰──── 2026-10-24T05:20:08.8829310Z  help: Consider removing this import. 2026-10-24T05:20:08.8829313Z 2026-10-24T05:20:08.8829514Z ⚠ eslint(no-unused-vars): Identifier 'HostProcess' is imported but never used. 2026-10-24T05:20:08.8829715Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:25:13] 2026-10-24T05:20:08.8829799Z 24 │ import * as Schema from "effect/Schema"; 2026-10-24T05:20:08.8829913Z 25 │ import * as HostProcess from "@t3tools/shared/HostProcess"; 2026-10-24T05:20:08.8829991Z ·  ─────┬───── 2026-10-24T05:20:08.8830127Z · ╰── 'HostProcess' is imported here 2026-10-24T05:20:08.8830178Z 26 │ 2026-10-24T05:20:08.8830227Z ╰──── 2026-10-24T05:20:08.8830320Z  help: Consider removing this import. 2026-10-24T05:20:08.8830323Z 2026-10-24T05:20:08.8830587Z ⚠ eslint(no-unused-vars): Variable 'serverConfig' is declared but never used. Unused variables should start with a '_'. 2026-10-24T05:20:08.8830798Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:124:11] 2026-10-24T05:20:08.8830949Z 123 │ const path = yield* Path.Path; 2026-10-24T05:20:08.8831063Z 124 │ const serverConfig = yield* ServerConfig.ServerConfig; 2026-10-24T05:20:08.8831143Z ·  ──────┬───── 2026-10-24T05:20:08.8831277Z · ╰── 'serverConfig' is declared here 2026-10-24T05:20:08.8831416Z 125 │ const serverSettings = yield* ServerSettings.ServerSettingsService; 2026-10-24T05:20:08.8831465Z ╰──── 2026-10-24T05:20:08.8831564Z  help: Consider removing this declaration. 2026-10-24T05:20:08.8831566Z 2026-10-24T05:20:08.8831834Z ⚠ eslint(no-unused-vars): Variable 'serverSettings' is declared but never used. Unused variables should start with a '_'. 2026-10-24T05:20:08.8831999Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:125:11] 2026-10-24T05:20:08.8832114Z 124 │ const serverConfig = yield* ServerConfig.ServerConfig; 2026-10-24T05:20:08.8832249Z 125 │ const serverSettings = yield* ServerSettings.ServerSettingsService; 2026-10-24T05:20:08.8832334Z ·  ───────┬────── 2026-10-24T05:20:08.8832475Z · ╰── 'serverSettings' is declared here 2026-10-24T05:20:08.8832608Z 126 │ const gitWorkflow = yield* GitWorkflowService.GitWorkflowService; 2026-10-24T05:20:08.8832657Z ╰──── 2026-10-24T05:20:08.8832758Z  help: Consider removing this declaration. 2026-10-24T05:20:08.8832760Z 2026-10-24T05:20:08.8832941Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T05:20:08.8833104Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:100:85] 2026-10-24T05:20:08.8833204Z  99 │ const startEditor = startScheduledTaskEditor; 2026-10-24T05:20:08.8833383Z 100 │ const resetEditor = useCallback(() => startEditor(defaultEditor), [defaultEditor, startEditor]); 2026-10-24T05:20:08.8833526Z ·  ─────┬───── 2026-10-24T05:20:08.8833725Z · ╰── Unnecessary dependency `startEditor` 2026-10-24T05:20:08.8833803Z 101 │ const readEditor = useCallback( 2026-10-24T05:20:08.8833851Z ╰──── 2026-10-24T05:20:08.8834159Z  help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often 2026-10-24T05:20:08.8834474Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8834479Z 2026-10-24T05:20:08.8834655Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T05:20:08.8834810Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:121:7] 2026-10-24T05:20:08.8834873Z 120 │ setEditor, 2026-10-24T05:20:08.8834938Z 121 │ startEditor, 2026-10-24T05:20:08.8835013Z ·  ─────┬───── 2026-10-24T05:20:08.8835150Z · ╰── Unnecessary dependency `startEditor` 2026-10-24T05:20:08.8835215Z 122 │ hasChanges, 2026-10-24T05:20:08.8835266Z ╰──── 2026-10-24T05:20:08.8835634Z  help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often 2026-10-24T05:20:08.8835980Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8835984Z 2026-10-24T05:20:08.8836418Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.encodeEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const. 2026-10-24T05:20:08.8836541Z ╭─[apps/server/src/serverSettings.test.ts:1741:32] 2026-10-24T05:20:08.8836707Z 1740 │ const model = createModelSelection(ProviderInstanceId.make("codex"), "gpt-5.5"); 2026-10-24T05:20:08.8836891Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-24T05:20:08.8837002Z ·  ─────────────────── 2026-10-24T05:20:08.8837110Z 1742 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-24T05:20:08.8837162Z ╰──── 2026-10-24T05:20:08.8837165Z 2026-10-24T05:20:08.8837594Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.encodeEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const. 2026-10-24T05:20:08.8837713Z ╭─[apps/server/src/serverSettings.test.ts:1742:34] 2026-10-24T05:20:08.8837891Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-24T05:20:08.8837995Z 1742 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-24T05:20:08.8838112Z ·  ─────────────────── 2026-10-24T05:20:08.8838230Z 1743 │ Schema.fromJsonString(Schema.Array(ProjectScript)), 2026-10-24T05:20:08.8838282Z ╰──── 2026-10-24T05:20:08.8838284Z 2026-10-24T05:20:08.8838491Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T05:20:08.8838611Z ╭─[apps/mobile/src/lib/markdownDocument.ts:259:28] 2026-10-24T05:20:08.8838709Z 258 │ visit(parser.parse(markdown), false, false); 2026-10-24T05:20:08.8838791Z 259 │ for (const edit of edits.reverse()) 2026-10-24T05:20:08.8838885Z ·  ─────── 2026-10-24T05:20:08.8839046Z 260 │ markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end); 2026-10-24T05:20:08.8839097Z ╰──── 2026-10-24T05:20:08.8839357Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T05:20:08.8839362Z 2026-10-24T05:20:08.8839591Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T05:20:08.8839709Z ╭─[apps/mobile/src/lib/markdownDocument.ts:290:28] 2026-10-24T05:20:08.8839787Z 289 │ visit(parser.parse(markdown)); 2026-10-24T05:20:08.8839868Z 290 │ for (const edit of edits.reverse()) 2026-10-24T05:20:08.8839960Z ·  ─────── 2026-10-24T05:20:08.8840117Z 291 │ markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end); 2026-10-24T05:20:08.8840167Z ╰──── 2026-10-24T05:20:08.8840564Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T05:20:08.8840597Z 2026-10-24T05:20:08.8840800Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T05:20:08.8840918Z ╭─[apps/mobile/src/lib/markdownDocument.ts:344:38] 2026-10-24T05:20:08.8840994Z 343 │ visit(parser.parse(markdown)); 2026-10-24T05:20:08.8841097Z 344 │ for (const lineStart of lineStarts.reverse()) { 2026-10-24T05:20:08.8841196Z ·  ─────── 2026-10-24T05:20:08.8841357Z 345 │ // The header row may be a lazy line without its container markers (`>` or list indent), 2026-10-24T05:20:08.8841407Z ╰──── 2026-10-24T05:20:08.8841656Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T05:20:08.8841659Z 2026-10-24T05:20:08.8841812Z ⚠ react(immutability): This value cannot be modified 2026-10-24T05:20:08.8841981Z ╭─[apps/mobile/src/features/voice-input/GlobalVoiceInputControl.tsx:68:5] 2026-10-24T05:20:08.8842082Z 65 │ const [expanded, setExpanded] = useState(false); 2026-10-24T05:20:08.8842163Z 66 │ const progress = useSharedValue(0); 2026-10-24T05:20:08.8842235Z ·  ────┬─── 2026-10-24T05:20:08.8842364Z · ╰── `progress` originates here 2026-10-24T05:20:08.8842430Z 67 │ useEffect(() => { 2026-10-24T05:20:08.8842552Z 68 │ progress.value = withTiming(expanded ? 1 : 0, MORPH_TIMING); 2026-10-24T05:20:08.8842619Z ·  ────┬─── 2026-10-24T05:20:08.8842750Z · ╰── `progress` cannot be modified 2026-10-24T05:20:08.8842826Z 69 │ }, [expanded, progress]); 2026-10-24T05:20:08.8842878Z ╰──── 2026-10-24T05:20:08.8843136Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T05:20:08.8843436Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:20:08.8843438Z 2026-10-24T05:20:08.8843856Z ⚠ 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-24T05:20:08.8843999Z ╭─[apps/server/src/provider/acp/AntigravityProtocol.ts:263:20] 2026-10-24T05:20:08.8844077Z 262 │ ...(update._meta !== undefined 2026-10-24T05:20:08.8844242Z 263 │ ? { _meta: Schema.is(Schema.Record(Schema.String, Schema.Json))(meta) ? meta : null } 2026-10-24T05:20:08.8844332Z ·  ───────── 2026-10-24T05:20:08.8844392Z 264 │ : {}), 2026-10-24T05:20:08.8844441Z ╰──── 2026-10-24T05:20:08.8844443Z 2026-10-24T05:20:08.8844584Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:20:08.8844738Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:122:38] 2026-10-24T05:20:08.8844893Z 121 │ const audioLevelsRef = useRef(Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-24T05:20:08.8845014Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-24T05:20:08.8845130Z ·  ───────────┬────────── 2026-10-24T05:20:08.8845356Z · ╰── Cannot access ref value during render 2026-10-24T05:20:08.8845567Z 123 │ const sessionRef = useRef(null); 2026-10-24T05:20:08.8845617Z ╰──── 2026-10-24T05:20:08.8846071Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T05:20:08.8846360Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:20:08.8846362Z 2026-10-24T05:20:08.8846502Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:20:08.8846660Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:8] 2026-10-24T05:20:08.8846713Z 125 │ 2026-10-24T05:20:08.8846819Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T05:20:08.8846904Z ·  ─────────┬──────── 2026-10-24T05:20:08.8847051Z · ╰── Cannot access ref value during render 2026-10-24T05:20:08.8847150Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T05:20:08.8847198Z ╰──── 2026-10-24T05:20:08.8847656Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T05:20:08.8847946Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:20:08.8847951Z 2026-10-24T05:20:08.8848090Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:20:08.8848242Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:7] 2026-10-24T05:20:08.8848296Z 125 │ 2026-10-24T05:20:08.8848401Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T05:20:08.8848487Z ·  ─────────┬───────── 2026-10-24T05:20:08.8848632Z · ╰── Cannot access ref value during render 2026-10-24T05:20:08.8848729Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T05:20:08.8848779Z ╰──── 2026-10-24T05:20:08.8849277Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T05:20:08.8849617Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:20:08.8849619Z 2026-10-24T05:20:08.8849758Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:20:08.8849911Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:31] 2026-10-24T05:20:08.8849962Z 125 │ 2026-10-24T05:20:08.8850065Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T05:20:08.8850175Z ·  ─────────┬───────── 2026-10-24T05:20:08.8850340Z · ╰── Cannot access ref value during render 2026-10-24T05:20:08.8850442Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T05:20:08.8850495Z ╰──── 2026-10-24T05:20:08.8850944Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T05:20:08.8851224Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:20:08.8851227Z 2026-10-24T05:20:08.8851367Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:20:08.8851520Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:30] 2026-10-24T05:20:08.8851571Z 125 │ 2026-10-24T05:20:08.8851677Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T05:20:08.8851789Z ·  ──────────┬───────── 2026-10-24T05:20:08.8851952Z · ╰── Cannot access ref value during render 2026-10-24T05:20:08.8852052Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T05:20:08.8852102Z ╰──── 2026-10-24T05:20:08.8852552Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T05:20:08.8852834Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:20:08.8852836Z 2026-10-24T05:20:08.8852980Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:20:08.8853135Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:127:46] 2026-10-24T05:20:08.8853243Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T05:20:08.8853433Z 127 │ ╭─▶ const recorder = createLazyVoiceRecorder({ 2026-10-24T05:20:08.8853603Z 128 │ │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-24T05:20:08.8853725Z 129 │ │ onStatus: (status: RecordingStatus) => { 2026-10-24T05:20:08.8853872Z 130 │ │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-24T05:20:08.8853989Z 131 │ │ isFinished: status.isFinished, 2026-10-24T05:20:08.8854209Z 132 │ │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-24T05:20:08.8854338Z 133 │ │ error: status.error, 2026-10-24T05:20:08.8854433Z 134 │ │ url: status.url, 2026-10-24T05:20:08.8854510Z 135 │ │ }); 2026-10-24T05:20:08.8854586Z 136 │ │ }, 2026-10-24T05:20:08.8854780Z 137 │ │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-24T05:20:08.8854885Z 138 │ │ selectInput: (inputs) => { 2026-10-24T05:20:08.8855037Z 139 │ │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-24T05:20:08.8855179Z 140 │ │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-24T05:20:08.8855347Z 141 │ │ const known = microphoneOrder(preferences.value.microphones); 2026-10-24T05:20:08.8855488Z 142 │ │ const order = rememberMicrophones(known, inputs); 2026-10-24T05:20:08.8855586Z 143 │ │ if (order !== known) { 2026-10-24T05:20:08.8855720Z 144 │ │ registry.set(updateMobilePreferencesAtom, { 2026-10-24T05:20:08.8855834Z 145 │ │ transform: (current) => ({ 2026-10-24T05:20:08.8856035Z 146 │ │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-24T05:20:08.8856117Z 147 │ │ }), 2026-10-24T05:20:08.8856197Z 148 │ │ }); 2026-10-24T05:20:08.8856274Z 149 │ │ } 2026-10-24T05:20:08.8856416Z 150 │ │ return preferredMicrophoneInput(inputs, order); 2026-10-24T05:20:08.8856492Z 151 │ │ }, 2026-10-24T05:20:08.8856620Z 152 │ ├─▶ }); 2026-10-24T05:20:08.8856852Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T05:20:08.8856934Z 153 │ recorderRef.current = recorder; 2026-10-24T05:20:08.8856983Z ╰──── 2026-10-24T05:20:08.8857438Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T05:20:08.8857727Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:20:08.8857732Z 2026-10-24T05:20:08.8857872Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:20:08.8858025Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:153:16] 2026-10-24T05:20:08.8858080Z 152 │ }); 2026-10-24T05:20:08.8858160Z 153 │ recorderRef.current = recorder; 2026-10-24T05:20:08.8858271Z ·  ─────┬─────────┬─── 2026-10-24T05:20:08.8858450Z · │ ╰── Cannot update ref value during render 2026-10-24T05:20:08.8858562Z · ╰── This value is a ref 2026-10-24T05:20:08.8858665Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T05:20:08.8858715Z ╰──── 2026-10-24T05:20:08.8859216Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T05:20:08.8859531Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:20:08.8859534Z 2026-10-24T05:20:08.8859703Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:20:08.8859857Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:48] 2026-10-24T05:20:08.8859944Z 153 │ recorderRef.current = recorder; 2026-10-24T05:20:08.8860138Z 154 │ ╭─▶ sessionRef.current = new VoiceInputSession({ 2026-10-24T05:20:08.8860223Z 155 │ │ recorder, 2026-10-24T05:20:08.8860349Z 156 │ │ getTranscriber: getLocalVoiceTranscriber, 2026-10-24T05:20:08.8860465Z 157 │ │ requestPermission: async () => { 2026-10-24T05:20:08.8860626Z 158 │ │ const permission = await requestRecordingPermissionsAsync(); 2026-10-24T05:20:08.8860812Z 159 │ │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-24T05:20:08.8860889Z 160 │ │ }, 2026-10-24T05:20:08.8861027Z 161 │ │ configureRecording: configureVoiceRecordingAudio, 2026-10-24T05:20:08.8861158Z 162 │ │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-24T05:20:08.8861293Z 163 │ │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-24T05:20:08.8861404Z 164 │ │ onStateChange: (nextState) => 2026-10-24T05:20:08.8861492Z 165 │ │ setState({ 2026-10-24T05:20:08.8861589Z 166 │ │ state: nextState, 2026-10-24T05:20:08.8861723Z 167 │ │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-24T05:20:08.8861850Z 168 │ │ label: sessionRef.current?.label ?? null, 2026-10-24T05:20:08.8861927Z 169 │ │ }), 2026-10-24T05:20:08.8862053Z 170 │ ├─▶ }); 2026-10-24T05:20:08.8862246Z · ╰──── Cannot access ref value during render 2026-10-24T05:20:08.8862300Z 171 │ } 2026-10-24T05:20:08.8862356Z ╰──── 2026-10-24T05:20:08.8862811Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T05:20:08.8863095Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:20:08.8863098Z 2026-10-24T05:20:08.8863238Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:20:08.8863392Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:15] 2026-10-24T05:20:08.8863471Z 153 │ recorderRef.current = recorder; 2026-10-24T05:20:08.8863572Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T05:20:08.8863737Z ·  ─────┬────────┬─── 2026-10-24T05:20:08.8863949Z · │ ╰── Cannot update ref value during render 2026-10-24T05:20:08.8864062Z · ╰── This value is a ref 2026-10-24T05:20:08.8864126Z 155 │ recorder, 2026-10-24T05:20:08.8864175Z ╰──── 2026-10-24T05:20:08.8864626Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T05:20:08.8864908Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:20:08.8864910Z 2026-10-24T05:20:08.8865058Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:20:08.8865212Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:7] 2026-10-24T05:20:08.8865295Z 184 │ return () => subscription.remove(); 2026-10-24T05:20:08.8865360Z 185 │ }, [controller]); 2026-10-24T05:20:08.8865434Z ·  ─────┬──── 2026-10-24T05:20:08.8865575Z · ╰── Cannot access ref value during render 2026-10-24T05:20:08.8865626Z 186 │ 2026-10-24T05:20:08.8865676Z ╰──── 2026-10-24T05:20:08.8866127Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T05:20:08.8866417Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:20:08.8866422Z 2026-10-24T05:20:08.8866561Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:20:08.8866711Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:6] 2026-10-24T05:20:08.8866796Z 184 │ return () => subscription.remove(); 2026-10-24T05:20:08.8866860Z 185 │ }, [controller]); 2026-10-24T05:20:08.8866935Z ·  ──────┬───── 2026-10-24T05:20:08.8867073Z · ╰── Cannot access ref value during render 2026-10-24T05:20:08.8867124Z 186 │ 2026-10-24T05:20:08.8867175Z ╰──── 2026-10-24T05:20:08.8867628Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T05:20:08.8867910Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:20:08.8867912Z 2026-10-24T05:20:08.8868053Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:20:08.8868206Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:6] 2026-10-24T05:20:08.8868261Z 191 │ }, 2026-10-24T05:20:08.8868329Z 192 │ [controller, recorder], 2026-10-24T05:20:08.8868402Z ·  ─────┬──── 2026-10-24T05:20:08.8868591Z · ╰── Cannot access ref value during render 2026-10-24T05:20:08.8868675Z 193 │ ); 2026-10-24T05:20:08.8868724Z ╰──── 2026-10-24T05:20:08.8869175Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T05:20:08.8869456Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:20:08.8869458Z 2026-10-24T05:20:08.8869614Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:20:08.8869843Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:175:20] 2026-10-24T05:20:08.8869931Z 174 │ const controller = session.controller; 2026-10-24T05:20:08.8870020Z 175 │ const recorder = recorderRef.current; 2026-10-24T05:20:08.8870125Z ·  ─────────┬───────── 2026-10-24T05:20:08.8870280Z · ╰── Cannot access ref value during render 2026-10-24T05:20:08.8870330Z 176 │ 2026-10-24T05:20:08.8870380Z ╰──── 2026-10-24T05:20:08.8870831Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T05:20:08.8871152Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:20:08.8871155Z 2026-10-24T05:20:08.8871298Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:20:08.8871451Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:5] 2026-10-24T05:20:08.8871506Z 191 │ }, 2026-10-24T05:20:08.8871576Z 192 │ [controller, recorder], 2026-10-24T05:20:08.8871663Z ·  ───────────┬────────── 2026-10-24T05:20:08.8871806Z · ╰── Cannot access ref value during render 2026-10-24T05:20:08.8871860Z 193 │ ); 2026-10-24T05:20:08.8871910Z ╰──── 2026-10-24T05:20:08.8872360Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T05:20:08.8872708Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:20:08.8872748Z 2026-10-24T05:20:08.8872887Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:20:08.8873039Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:20] 2026-10-24T05:20:08.8873131Z 245 │ return () => clearInterval(intervalId); 2026-10-24T05:20:08.8873237Z 246 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-24T05:20:08.8873322Z ·  ─────┬──── 2026-10-24T05:20:08.8873472Z · ╰── Cannot access ref value during render 2026-10-24T05:20:08.8873524Z 247 │ 2026-10-24T05:20:08.8873572Z ╰──── 2026-10-24T05:20:08.8874030Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T05:20:08.8874314Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:20:08.8874316Z 2026-10-24T05:20:08.8874455Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:20:08.8874608Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:6] 2026-10-24T05:20:08.8874694Z 245 │ return () => clearInterval(intervalId); 2026-10-24T05:20:08.8874800Z 246 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-24T05:20:08.8874927Z ·  ────────────────────────┬─────────────────────── 2026-10-24T05:20:08.8875091Z · ╰── Cannot access ref value during render 2026-10-24T05:20:08.8875144Z 247 │ 2026-10-24T05:20:08.8875194Z ╰──── 2026-10-24T05:20:08.8875645Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T05:20:08.8875926Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:20:08.8875929Z 2026-10-24T05:20:08.8876067Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:20:08.8876217Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:261:5] 2026-10-24T05:20:08.8876287Z 260 │ setOwnerFocused, 2026-10-24T05:20:08.8876348Z 261 │ session, 2026-10-24T05:20:08.8876419Z ·  ───┬─── 2026-10-24T05:20:08.8876552Z · ╰── Cannot access ref value during render 2026-10-24T05:20:08.8876610Z 262 │ stop, 2026-10-24T05:20:08.8876660Z ╰──── 2026-10-24T05:20:08.8877107Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T05:20:08.8877386Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:20:08.8877390Z 2026-10-24T05:20:08.8877575Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:20:08.8877762Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:251:10] 2026-10-24T05:20:08.8877814Z 250 │ 2026-10-24T05:20:08.8877951Z 251 │ ╭─▶ return { 2026-10-24T05:20:08.8878158Z 252 │ │ isAvailable: getLocalVoiceTranscriber() !== null || getNativeShowcaseScene() !== null, 2026-10-24T05:20:08.8878236Z 253 │ │ state, 2026-10-24T05:20:08.8878322Z 254 │ │ audioLevels, 2026-10-24T05:20:08.8878415Z 255 │ │ elapsedSeconds, 2026-10-24T05:20:08.8878540Z 256 │ │ isBusy: voiceInputBlocksSubmission(state), 2026-10-24T05:20:08.8878619Z 257 │ │ ownerKey, 2026-10-24T05:20:08.8878701Z 258 │ │ label, 2026-10-24T05:20:08.8878792Z 259 │ │ focusedOwners, 2026-10-24T05:20:08.8878882Z 260 │ │ setOwnerFocused, 2026-10-24T05:20:08.8878961Z 261 │ │ session, 2026-10-24T05:20:08.8879037Z 262 │ │ stop, 2026-10-24T05:20:08.8879115Z 263 │ │ cancel, 2026-10-24T05:20:08.8879240Z 264 │ ├─▶ }; 2026-10-24T05:20:08.8879434Z · ╰──── Cannot access ref value during render 2026-10-24T05:20:08.8879489Z 265 │ } 2026-10-24T05:20:08.8879540Z ╰──── 2026-10-24T05:20:08.8880043Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T05:20:08.8880332Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:20:08.8880334Z 2026-10-24T05:20:08.8880489Z ⚠ react(immutability): This value cannot be modified 2026-10-24T05:20:08.8880645Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7] 2026-10-24T05:20:08.8880798Z 121 │ const audioLevelsRef = useRef(Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-24T05:20:08.8880918Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-24T05:20:08.8880995Z ·  ─────┬───── 2026-10-24T05:20:08.8881132Z · ╰── `audioLevels` originates here 2026-10-24T05:20:08.8881252Z 123 │ const sessionRef = useRef(null); 2026-10-24T05:20:08.8881395Z 124 │ const recorderRef = useRef | null>(null); 2026-10-24T05:20:08.8881448Z 125 │ 2026-10-24T05:20:08.8881551Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T05:20:08.8881650Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T05:20:08.8881786Z 128 │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-24T05:20:08.8881877Z 129 │ onStatus: (status: RecordingStatus) => { 2026-10-24T05:20:08.8881994Z 130 │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-24T05:20:08.8882076Z 131 │ isFinished: status.isFinished, 2026-10-24T05:20:08.8882216Z 132 │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-24T05:20:08.8882338Z 133 │ error: status.error, 2026-10-24T05:20:08.8882433Z 134 │ url: status.url, 2026-10-24T05:20:08.8882490Z 135 │ }); 2026-10-24T05:20:08.8882545Z 136 │ }, 2026-10-24T05:20:08.8882705Z 137 │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-24T05:20:08.8882781Z 138 │ selectInput: (inputs) => { 2026-10-24T05:20:08.8882900Z 139 │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-24T05:20:08.8883010Z 140 │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-24T05:20:08.8883139Z 141 │ const known = microphoneOrder(preferences.value.microphones); 2026-10-24T05:20:08.8883245Z 142 │ const order = rememberMicrophones(known, inputs); 2026-10-24T05:20:08.8883315Z 143 │ if (order !== known) { 2026-10-24T05:20:08.8883425Z 144 │ registry.set(updateMobilePreferencesAtom, { 2026-10-24T05:20:08.8883508Z 145 │ transform: (current) => ({ 2026-10-24T05:20:08.8883676Z 146 │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-24T05:20:08.8883736Z 147 │ }), 2026-10-24T05:20:08.8883795Z 148 │ }); 2026-10-24T05:20:08.8883852Z 149 │ } 2026-10-24T05:20:08.8883959Z 150 │ return preferredMicrophoneInput(inputs, order); 2026-10-24T05:20:08.8884012Z 151 │ }, 2026-10-24T05:20:08.8884067Z 152 │ }); 2026-10-24T05:20:08.8884147Z 153 │ recorderRef.current = recorder; 2026-10-24T05:20:08.8884245Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T05:20:08.8884304Z 155 │ recorder, 2026-10-24T05:20:08.8884400Z 156 │ getTranscriber: getLocalVoiceTranscriber, 2026-10-24T05:20:08.8884489Z 157 │ requestPermission: async () => { 2026-10-24T05:20:08.8884620Z 158 │ const permission = await requestRecordingPermissionsAsync(); 2026-10-24T05:20:08.8884770Z 159 │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-24T05:20:08.8884827Z 160 │ }, 2026-10-24T05:20:08.8884934Z 161 │ configureRecording: configureVoiceRecordingAudio, 2026-10-24T05:20:08.8885038Z 162 │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-24T05:20:08.8885137Z 163 │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-24T05:20:08.8885215Z 164 │ onStateChange: (nextState) => 2026-10-24T05:20:08.8885280Z 165 │ setState({ 2026-10-24T05:20:08.8885348Z 166 │ state: nextState, 2026-10-24T05:20:08.8885449Z 167 │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-24T05:20:08.8885546Z 168 │ label: sessionRef.current?.label ?? null, 2026-10-24T05:20:08.8885607Z 169 │ }), 2026-10-24T05:20:08.8885663Z 170 │ }); 2026-10-24T05:20:08.8885715Z 171 │ } 2026-10-24T05:20:08.8885767Z 172 │ 2026-10-24T05:20:08.8885850Z 173 │ const session = sessionRef.current; 2026-10-24T05:20:08.8885934Z 174 │ const controller = session.controller; 2026-10-24T05:20:08.8886018Z 175 │ const recorder = recorderRef.current; 2026-10-24T05:20:08.8886069Z 176 │ 2026-10-24T05:20:08.8886133Z 177 │ useEffect(() => { 2026-10-24T05:20:08.8886278Z 178 │ const subscription = AppState.addEventListener("change", (nextState) => { 2026-10-24T05:20:08.8886415Z 179 │ // iOS reports `inactive` while its permission dialog is open. Only the 2026-10-24T05:20:08.8886551Z 180 │ // real background state cancels preparation; recorder status handles 2026-10-24T05:20:08.8886657Z 181 │ // calls and route interruptions during capture. 2026-10-24T05:20:08.8886841Z 182 │ if (nextState === "background") controller.appMovedToBackground(); 2026-10-24T05:20:08.8886934Z 183 │ }); 2026-10-24T05:20:08.8887016Z 184 │ return () => subscription.remove(); 2026-10-24T05:20:08.8887079Z 185 │ }, [controller]); 2026-10-24T05:20:08.8887128Z 186 │ 2026-10-24T05:20:08.8887188Z 187 │ useEffect( 2026-10-24T05:20:08.8887248Z 188 │ () => () => { 2026-10-24T05:20:08.8887318Z 189 │ controller.dispose(); 2026-10-24T05:20:08.8887383Z 190 │ recorder.release(); 2026-10-24T05:20:08.8887436Z 191 │ }, 2026-10-24T05:20:08.8887503Z 192 │ [controller, recorder], 2026-10-24T05:20:08.8887554Z 193 │ ); 2026-10-24T05:20:08.8887605Z 194 │ 2026-10-24T05:20:08.8887666Z 195 │ useEffect(() => { 2026-10-24T05:20:08.8887756Z 196 │ if (state.phase !== "recording") return; 2026-10-24T05:20:08.8887805Z 197 │ 2026-10-24T05:20:08.8887956Z 198 │ const tag = `voice-input:${keepAwakeId}:${++keepAwakeSessionRef.current}`; 2026-10-24T05:20:08.8888060Z 199 │ const activation = activateKeepAwakeAsync(tag); 2026-10-24T05:20:08.8888138Z 200 │ void activation.catch(() => {}); 2026-10-24T05:20:08.8888199Z 201 │ return () => { 2026-10-24T05:20:08.8888347Z 202 │ // Release after activation settles, even if the recording ends immediately. 2026-10-24T05:20:08.8888482Z 203 │ void activation.then(() => deactivateKeepAwake(tag)).catch(() => {}); 2026-10-24T05:20:08.8888535Z 204 │ }; 2026-10-24T05:20:08.8888610Z 205 │ }, [keepAwakeId, state.phase]); 2026-10-24T05:20:08.8888661Z 206 │ 2026-10-24T05:20:08.8888723Z 207 │ useEffect(() => { 2026-10-24T05:20:08.8888853Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-24T05:20:08.8888902Z 209 │ 2026-10-24T05:20:08.8889024Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-24T05:20:08.8889180Z 211 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-24T05:20:08.8889280Z 212 │ audioLevels.value = audioLevelsRef.current; 2026-10-24T05:20:08.8889354Z ·  ─────┬───── 2026-10-24T05:20:08.8889490Z · ╰── `audioLevels` cannot be modified 2026-10-24T05:20:08.8889543Z 213 │ } 2026-10-24T05:20:08.8889604Z ╰──── 2026-10-24T05:20:08.8889894Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T05:20:08.8890194Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:20:08.8890202Z 2026-10-24T05:20:08.8890400Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T05:20:08.8890555Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7] 2026-10-24T05:20:08.8890606Z 206 │ 2026-10-24T05:20:08.8890669Z 207 │ useEffect(() => { 2026-10-24T05:20:08.8890744Z ·  ───┬─── 2026-10-24T05:20:08.8890957Z · ╰── This function may (indirectly) reassign or modify `audioLevels` after render 2026-10-24T05:20:08.8891089Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-24T05:20:08.8891139Z 209 │ 2026-10-24T05:20:08.8891258Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-24T05:20:08.8891460Z 211 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-24T05:20:08.8891590Z 212 │ audioLevels.value = audioLevelsRef.current; 2026-10-24T05:20:08.8891666Z ·  ─────┬───── 2026-10-24T05:20:08.8891795Z · ╰── This modifies `audioLevels` 2026-10-24T05:20:08.8891850Z 213 │ } 2026-10-24T05:20:08.8891899Z ╰──── 2026-10-24T05:20:08.8892232Z  help: This argument is a function which may reassign or mutate `audioLevels` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead 2026-10-24T05:20:08.8892530Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:20:08.8892532Z 2026-10-24T05:20:08.8892688Z ⚠ react(immutability): This value cannot be modified 2026-10-24T05:20:08.8892855Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:93:5] 2026-10-24T05:20:08.8892908Z 90 │ }) { 2026-10-24T05:20:08.8893016Z 91 │ const rotation = useSharedValue(props.hidden ? 1 : 0); 2026-10-24T05:20:08.8893089Z ·  ────┬─── 2026-10-24T05:20:08.8893216Z · ╰── `rotation` originates here 2026-10-24T05:20:08.8893283Z 92 │ useLayoutEffect(() => { 2026-10-24T05:20:08.8893420Z 93 │ rotation.value = withTiming(props.hidden ? 1 : 0, TOOLBAR_FLIP_TIMING); 2026-10-24T05:20:08.8893489Z ·  ────┬─── 2026-10-24T05:20:08.8893617Z · ╰── `rotation` cannot be modified 2026-10-24T05:20:08.8893689Z 94 │ }, [props.hidden, rotation]); 2026-10-24T05:20:08.8893739Z ╰──── 2026-10-24T05:20:08.8894002Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T05:20:08.8894298Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:20:08.8894301Z 2026-10-24T05:20:08.8894452Z ⚠ react(immutability): This value cannot be modified 2026-10-24T05:20:08.8894619Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:269:5] 2026-10-24T05:20:08.8894710Z 266 │ const variant = props.variant ?? "plain"; 2026-10-24T05:20:08.8894840Z 267 │ const loadingVisibility = useSharedValue(props.loading ? 1 : 0); 2026-10-24T05:20:08.8894923Z ·  ────────┬──────── 2026-10-24T05:20:08.8895074Z · ╰── `loadingVisibility` originates here 2026-10-24T05:20:08.8895146Z 268 │ useLayoutEffect(() => { 2026-10-24T05:20:08.8895298Z 269 │ loadingVisibility.value = withTiming(props.loading ? 1 : 0, DICTATION_TIMING); 2026-10-24T05:20:08.8895377Z ·  ────────┬──────── 2026-10-24T05:20:08.8895522Z · ╰── `loadingVisibility` cannot be modified 2026-10-24T05:20:08.8895610Z 270 │ }, [loadingVisibility, props.loading]); 2026-10-24T05:20:08.8895667Z ╰──── 2026-10-24T05:20:08.8895921Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T05:20:08.8896220Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:20:08.8896272Z 2026-10-24T05:20:08.8896456Z ⚠ react(immutability): This value cannot be modified 2026-10-24T05:20:08.8896621Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:328:5] 2026-10-24T05:20:08.8896673Z 325 │ }) { 2026-10-24T05:20:08.8896828Z 326 │ const recordingVisibility = useSharedValue(props.phase === "recording" ? 1 : 0); 2026-10-24T05:20:08.8896915Z ·  ─────────┬───────── 2026-10-24T05:20:08.8897063Z · ╰── `recordingVisibility` originates here 2026-10-24T05:20:08.8897132Z 327 │ useLayoutEffect(() => { 2026-10-24T05:20:08.8897314Z 328 │ recordingVisibility.value = withTiming(props.phase === "recording" ? 1 : 0, DICTATION_TIMING); 2026-10-24T05:20:08.8897398Z ·  ─────────┬───────── 2026-10-24T05:20:08.8897553Z · ╰── `recordingVisibility` cannot be modified 2026-10-24T05:20:08.8897645Z 329 │ }, [props.phase, recordingVisibility]); 2026-10-24T05:20:08.8897694Z ╰──── 2026-10-24T05:20:08.8897951Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T05:20:08.8898245Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:20:08.8898248Z 2026-10-24T05:20:08.8898390Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:20:08.8898551Z ╭─[apps/mobile/src/features/voice-input/useVoiceInputController.ts:27:14] 2026-10-24T05:20:08.8898630Z 26 │ const latestInput = useRef(input); 2026-10-24T05:20:08.8898709Z 27 │ latestInput.current = input; 2026-10-24T05:20:08.8898820Z ·  ─────┬─────────┬─── 2026-10-24T05:20:08.8898999Z · │ ╰── Cannot update ref value during render 2026-10-24T05:20:08.8899111Z · ╰── This value is a ref 2026-10-24T05:20:08.8899186Z 28 │ const mounted = useRef(true); 2026-10-24T05:20:08.8899236Z ╰──── 2026-10-24T05:20:08.8899731Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T05:20:08.8900070Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:20:08.8900103Z 2026-10-24T05:20:08.8900282Z ⚠ eslint(no-unused-vars): Type 'Scope' is imported but never used. 2026-10-24T05:20:08.8900416Z ╭─[apps/server/src/provider/ProviderAuthService.ts:15:18] 2026-10-24T05:20:08.8900501Z 14 │ import * as Layer from "effect/Layer"; 2026-10-24T05:20:08.8900592Z 15 │ import type * as Scope from "effect/Scope"; 2026-10-24T05:20:08.8900668Z ·  ──┬── 2026-10-24T05:20:08.8900799Z · ╰── 'Scope' is imported here 2026-10-24T05:20:08.8900883Z 16 │ import * as Stream from "effect/Stream"; 2026-10-24T05:20:08.8900933Z ╰──── 2026-10-24T05:20:08.8903074Z  help: Consider removing this import. 2026-10-24T05:20:08.8903078Z 2026-10-24T05:20:08.8903257Z ⚠ react(immutability): This value cannot be modified 2026-10-24T05:20:08.8903420Z ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:42:5] 2026-10-24T05:20:08.8903472Z 35 │ 2026-10-24T05:20:08.8903609Z 36 │ const inspectorProgress = useSharedValue(inspectorVisible ? 1 : 0); 2026-10-24T05:20:08.8903695Z ·  ────────┬──────── 2026-10-24T05:20:08.8903839Z · ╰── `inspectorProgress` originates here 2026-10-24T05:20:08.8903930Z 37 │ const { renderedInspectorWidth } = props; 2026-10-24T05:20:08.8904060Z 38 │ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0); 2026-10-24T05:20:08.8904111Z 39 │ 2026-10-24T05:20:08.8904189Z 40 │ const onClosed = props.onClosed; 2026-10-24T05:20:08.8904253Z 41 │ useEffect(() => { 2026-10-24T05:20:08.8904340Z 42 │ inspectorProgress.value = withTiming( 2026-10-24T05:20:08.8904425Z ·  ────────┬──────── 2026-10-24T05:20:08.8904572Z · ╰── `inspectorProgress` cannot be modified 2026-10-24T05:20:08.8904646Z 43 │ inspectorVisible ? 1 : 0, 2026-10-24T05:20:08.8904696Z ╰──── 2026-10-24T05:20:08.8904952Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T05:20:08.8905250Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:20:08.8905252Z 2026-10-24T05:20:08.8905403Z ⚠ react(immutability): This value cannot be modified 2026-10-24T05:20:08.8905559Z ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:67:7] 2026-10-24T05:20:08.8905654Z 37 │ const { renderedInspectorWidth } = props; 2026-10-24T05:20:08.8905783Z 38 │ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0); 2026-10-24T05:20:08.8905871Z ·  ──────────┬───────── 2026-10-24T05:20:08.8906021Z · ╰── `renderedContentWidth` originates here 2026-10-24T05:20:08.8906074Z 39 │ 2026-10-24T05:20:08.8906151Z 40 │ const onClosed = props.onClosed; 2026-10-24T05:20:08.8906215Z 41 │ useEffect(() => { 2026-10-24T05:20:08.8906302Z 42 │ inspectorProgress.value = withTiming( 2026-10-24T05:20:08.8906375Z 43 │ inspectorVisible ? 1 : 0, 2026-10-24T05:20:08.8906443Z 44 │ WORKSPACE_PANE_TIMING, 2026-10-24T05:20:08.8906508Z 45 │ (finished) => { 2026-10-24T05:20:08.8906646Z 46 │ if (finished === true && !inspectorVisible && onClosed !== undefined) { 2026-10-24T05:20:08.8906786Z 47 │ runOnJS(onClosed)(); 2026-10-24T05:20:08.8906874Z 48 │ } 2026-10-24T05:20:08.8906928Z 49 │ }, 2026-10-24T05:20:08.8906982Z 50 │ ); 2026-10-24T05:20:08.8907111Z 51 │ const targetWidth = inspectorVisible ? (inspectorWidth ?? 0) : 0; 2026-10-24T05:20:08.8907188Z 52 │ renderedInspectorWidth.set( 2026-10-24T05:20:08.8907328Z 53 │ resizing ? targetWidth : withTiming(targetWidth, WORKSPACE_PANE_TIMING), 2026-10-24T05:20:08.8907382Z 54 │ ); 2026-10-24T05:20:08.8907433Z 55 │ }, [ 2026-10-24T05:20:08.8907500Z 56 │ inspectorProgress, 2026-10-24T05:20:08.8907564Z 57 │ inspectorVisible, 2026-10-24T05:20:08.8907626Z 58 │ inspectorWidth, 2026-10-24T05:20:08.8907683Z 59 │ onClosed, 2026-10-24T05:20:08.8907753Z 60 │ renderedInspectorWidth, 2026-10-24T05:20:08.8907811Z 61 │ resizing, 2026-10-24T05:20:08.8907869Z 62 │ ]); 2026-10-24T05:20:08.8907920Z 63 │ 2026-10-24T05:20:08.8907983Z 64 │ useEffect(() => { 2026-10-24T05:20:08.8908073Z 65 │ const targetWidth = inspectorWidth ?? 0; 2026-10-24T05:20:08.8908156Z 66 │ if (!inspectorVisible || resizing) { 2026-10-24T05:20:08.8908250Z 67 │ renderedContentWidth.value = targetWidth; 2026-10-24T05:20:08.8908336Z ·  ──────────┬───────── 2026-10-24T05:20:08.8908494Z · ╰── `renderedContentWidth` cannot be modified 2026-10-24T05:20:08.8908552Z 68 │ return; 2026-10-24T05:20:08.8908602Z ╰──── 2026-10-24T05:20:08.8908860Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T05:20:08.8909166Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:20:08.8909171Z 2026-10-24T05:20:08.8909335Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T05:20:08.8909478Z ╭─[apps/web/src/components/chat/useThreadLifecycle.tsx:178:58] 2026-10-24T05:20:08.8909600Z 177 │ if (snoozeClockState.shell !== activeThreadShell) { 2026-10-24T05:20:08.8909787Z 178 │ setSnoozeClockState({ shell: activeThreadShell, now: new Date().toISOString() }); 2026-10-24T05:20:08.8909910Z ·  ─────┬──── 2026-10-24T05:20:08.8910075Z · ╰── Cannot call impure function 2026-10-24T05:20:08.8910128Z 179 │ } 2026-10-24T05:20:08.8910179Z ╰──── 2026-10-24T05:20:08.8910456Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T05:20:08.8910746Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T05:20:08.8910750Z 2026-10-24T05:20:08.8910986Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:20:08.8911144Z ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:155:7] 2026-10-24T05:20:08.8911197Z 154 │ } 2026-10-24T05:20:08.8911266Z 155 │ }, [wrappedRender]); 2026-10-24T05:20:08.8911343Z ·  ──────┬────── 2026-10-24T05:20:08.8911566Z · ╰── Unnecessary dependency `wrappedRender` 2026-10-24T05:20:08.8911656Z 156 │ 2026-10-24T05:20:08.8911706Z ╰──── 2026-10-24T05:20:08.8911990Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T05:20:08.8912294Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8912297Z 2026-10-24T05:20:08.8912531Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T05:20:08.8912688Z ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:800:42] 2026-10-24T05:20:08.8912741Z 799 │ > 2026-10-24T05:20:08.8912869Z 800 │ 2026-10-24T05:20:08.8912994Z ·  ──────────────────── 2026-10-24T05:20:08.8913096Z 801 │ 2026-10-24T05:20:08.8913147Z ╰──── 2026-10-24T05:20:08.8913368Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T05:20:08.8913505Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T05:20:08.8913507Z 2026-10-24T05:20:08.8913783Z ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'. 2026-10-24T05:20:08.8913910Z ╭─[apps/server/src/provider/AntigravityAuth.ts:285:20] 2026-10-24T05:20:08.8913964Z 284 │ }, 2026-10-24T05:20:08.8914050Z 285 │ (effect, flow, stopSessions) => 2026-10-24T05:20:08.8914142Z ·  ──────┬───── 2026-10-24T05:20:08.8914286Z · ╰── 'stopSessions' is declared here 2026-10-24T05:20:08.8914348Z 286 │ effect.pipe( 2026-10-24T05:20:08.8914398Z ╰──── 2026-10-24T05:20:08.8914497Z  help: Consider removing this parameter. 2026-10-24T05:20:08.8914500Z 2026-10-24T05:20:08.8914754Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:20:08.8914921Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:643:5] 2026-10-24T05:20:08.8914974Z 638 │ 2026-10-24T05:20:08.8915039Z 639 │ useEffect(() => { 2026-10-24T05:20:08.8915109Z ·  ────┬──── 2026-10-24T05:20:08.8915241Z · ╰── This is the containing effect 2026-10-24T05:20:08.8915351Z 640 │ if (pendingLaunchEntry.key === launchTargetKey) { 2026-10-24T05:20:08.8915411Z 641 │ return; 2026-10-24T05:20:08.8915464Z 642 │ } 2026-10-24T05:20:08.8915536Z 643 │ setPendingLaunchEntry({ 2026-10-24T05:20:08.8915621Z ·  ──────────┬────────── 2026-10-24T05:20:08.8915788Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:20:08.8915858Z 644 │ key: launchTargetKey, 2026-10-24T05:20:08.8915907Z ╰──── 2026-10-24T05:20:08.8916551Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T05:20:08.8916898Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T05:20:08.8916900Z 2026-10-24T05:20:08.8917155Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:20:08.8917320Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:653:5] 2026-10-24T05:20:08.8917371Z 648 │ 2026-10-24T05:20:08.8917435Z 649 │ useEffect(() => { 2026-10-24T05:20:08.8917504Z ·  ────┬──── 2026-10-24T05:20:08.8917630Z · ╰── This is the containing effect 2026-10-24T05:20:08.8917742Z 650 │ if (initialAttachGridEntry.key === launchTargetKey) { 2026-10-24T05:20:08.8917806Z 651 │ return; 2026-10-24T05:20:08.8917861Z 652 │ } 2026-10-24T05:20:08.8917938Z 653 │ setInitialAttachGridEntry({ 2026-10-24T05:20:08.8918030Z ·  ────────────┬──────────── 2026-10-24T05:20:08.8918199Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:20:08.8918268Z 654 │ key: launchTargetKey, 2026-10-24T05:20:08.8918318Z ╰──── 2026-10-24T05:20:08.8918901Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T05:20:08.8919218Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T05:20:08.8919223Z 2026-10-24T05:20:08.8919472Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T05:20:08.8919669Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:746:7] 2026-10-24T05:20:08.8919720Z 743 │ 2026-10-24T05:20:08.8919784Z 744 │ useEffect(() => { 2026-10-24T05:20:08.8919852Z ·  ────┬──── 2026-10-24T05:20:08.8919975Z · ╰── This is the containing effect 2026-10-24T05:20:08.8920074Z 745 │ if (!routeEnvironmentId || !routeThreadId) { 2026-10-24T05:20:08.8920142Z 746 │ setLastGridSize({ 2026-10-24T05:20:08.8920222Z ·  ───────┬─────── 2026-10-24T05:20:08.8920393Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T05:20:08.8920475Z 747 │ cols: DEFAULT_TERMINAL_COLS, 2026-10-24T05:20:08.8920526Z ╰──── 2026-10-24T05:20:08.8921106Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T05:20:08.8921420Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T05:20:08.8921422Z 2026-10-24T05:20:08.8921728Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:20:08.8921922Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:538:24] 2026-10-24T05:20:08.8921979Z 537 │ }); 2026-10-24T05:20:08.8922105Z 538 │ }, [terminal.buffer, terminal.buffer.length, terminalKey]); 2026-10-24T05:20:08.8922214Z ·  ───────────┬────────── 2026-10-24T05:20:08.8922451Z · ╰── Overly precise dependency `terminal.buffer.length`, use `terminal.buffer` instead 2026-10-24T05:20:08.8922612Z 539 │ const cwd = terminal.summary?.cwd ?? selectedThreadProject?.workspaceRoot ?? null; 2026-10-24T05:20:08.8922664Z ╰──── 2026-10-24T05:20:08.8922952Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T05:20:08.8923261Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8923266Z 2026-10-24T05:20:08.8923460Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:20:08.8923624Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:709:7] 2026-10-24T05:20:08.8923718Z 708 │ sentInitialInputKeyRef.current = null; 2026-10-24T05:20:08.8923784Z 709 │ }, [terminalKey]); 2026-10-24T05:20:08.8923858Z ·  ─────┬───── 2026-10-24T05:20:08.8923998Z · ╰── Unnecessary dependency `terminalKey` 2026-10-24T05:20:08.8924051Z 710 │ 2026-10-24T05:20:08.8924101Z ╰──── 2026-10-24T05:20:08.8924388Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T05:20:08.8924691Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8924694Z 2026-10-24T05:20:08.8924889Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T05:20:08.8925053Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:800:52] 2026-10-24T05:20:08.8925107Z 799 │ }; 2026-10-24T05:20:08.8925280Z 800 │ }, [canOperateTerminal, isRunning, pasteSession, terminal.lifecycleVersion, terminalKey]); 2026-10-24T05:20:08.8925454Z ·  ────────────┬──────────── ─────┬───── 2026-10-24T05:20:08.8925728Z · │ ╰── Unnecessary dependency `terminalKey` 2026-10-24T05:20:08.8925963Z · ╰── Unnecessary dependency `terminal.lifecycleVersion` 2026-10-24T05:20:08.8926014Z 801 │ 2026-10-24T05:20:08.8926064Z ╰──── 2026-10-24T05:20:08.8926347Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T05:20:08.8926647Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8926650Z 2026-10-24T05:20:08.8926796Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:20:08.8926960Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:793:24] 2026-10-24T05:20:08.8927015Z 792 │ } 2026-10-24T05:20:08.8927120Z 793 │ const pasteSession = pasteSessionRef.current; 2026-10-24T05:20:08.8927231Z ·  ───────────┬─────────── 2026-10-24T05:20:08.8927388Z · ╰── Cannot access ref value during render 2026-10-24T05:20:08.8927439Z 794 │ 2026-10-24T05:20:08.8927493Z ╰──── 2026-10-24T05:20:08.8927951Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T05:20:08.8928243Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:20:08.8928248Z 2026-10-24T05:20:08.8928412Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T05:20:08.8928567Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:697:76] 2026-10-24T05:20:08.8928745Z 696 │ const [snoozeGateClock, setSnoozeGateClock] = useState(() => ({ thread, now: Date.now() })); 2026-10-24T05:20:08.8928909Z 697 │ if (snoozeGateClock.thread !== thread) setSnoozeGateClock({ thread, now: Date.now() }); 2026-10-24T05:20:08.8929042Z ·  ─────┬──── 2026-10-24T05:20:08.8929224Z · ╰── Cannot call impure function 2026-10-24T05:20:08.8929359Z 698 │ const snoozeGateNow = new Date(snoozeGateClock.now).toISOString(); 2026-10-24T05:20:08.8929409Z ╰──── 2026-10-24T05:20:08.8929717Z  help: `Date.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T05:20:08.8930004Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T05:20:08.8930007Z 2026-10-24T05:20:08.8930168Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T05:20:08.8930320Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:718:71] 2026-10-24T05:20:08.8930399Z 717 │ const snoozePresets = useMemo( 2026-10-24T05:20:08.8930616Z 718 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-24T05:20:08.8930771Z ·  ─────┬──── 2026-10-24T05:20:08.8930946Z · ╰── Cannot call impure function 2026-10-24T05:20:08.8931061Z 719 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-24T05:20:08.8931110Z ╰──── 2026-10-24T05:20:08.8931381Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T05:20:08.8931668Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T05:20:08.8931671Z 2026-10-24T05:20:08.8931851Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T05:20:08.8932005Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:719:6] 2026-10-24T05:20:08.8932173Z 718 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-24T05:20:08.8932285Z 719 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-24T05:20:08.8932377Z ·  ────────────┬─────────── 2026-10-24T05:20:08.8932548Z · ╰── Unnecessary dependency `props.snoozePresetMinute` 2026-10-24T05:20:08.8932601Z 720 │ ); 2026-10-24T05:20:08.8932651Z ╰──── 2026-10-24T05:20:08.8932962Z  help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often 2026-10-24T05:20:08.8933267Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8933269Z 2026-10-24T05:20:08.8933444Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T05:20:08.8933596Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:765:7] 2026-10-24T05:20:08.8933665Z 764 │ thread.pinnedAt, 2026-10-24T05:20:08.8933727Z 765 │ variant, 2026-10-24T05:20:08.8933796Z ·  ───┬─── 2026-10-24T05:20:08.8933930Z · ╰── Unnecessary dependency `variant` 2026-10-24T05:20:08.8933984Z 766 │ ], 2026-10-24T05:20:08.8934034Z ╰──── 2026-10-24T05:20:08.8934346Z  help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often 2026-10-24T05:20:08.8934652Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T05:20:08.8934654Z 2026-10-24T05:20:08.8934843Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T05:20:08.8935000Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:1215:21] 2026-10-24T05:20:08.8935126Z 1214 │ {providerDrivers.slice(0, -1).map((driver, index) => ( 2026-10-24T05:20:08.8935256Z 1215 │ 2026-10-24T05:20:08.8935425Z ·  ────────────────────────── 2026-10-24T05:20:08.8935561Z 1216 │ 2026-10-24T05:20:08.8935614Z ╰──── 2026-10-24T05:20:08.8935758Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T05:20:08.8935761Z 2026-10-24T05:20:08.8935945Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T05:20:08.8936095Z ╭─[apps/mobile/src/features/threads/ThreadQueueControl.tsx:602:27] 2026-10-24T05:20:08.8936261Z 601 │ const onEnd = useEffectEvent((y: number, success: boolean) => props.onEnd(y, success)); 2026-10-24T05:20:08.8936337Z 602 │ const gesture = Gesture.Pan() 2026-10-24T05:20:08.8936421Z ·  ─┬─ 2026-10-24T05:20:08.8936559Z · ╰── `Pan` may be a component 2026-10-24T05:20:08.8936638Z 603 │ .enabled(!props.disabled) 2026-10-24T05:20:08.8936690Z ╰──── 2026-10-24T05:20:08.8936958Z  help: Render `Pan` with JSX if it is a component; otherwise rename it to start with a lowercase letter or allowlist it in the compiler configuration 2026-10-24T05:20:08.8937394Z  note: `Pan` is treated as a component because it begins with an uppercase letter; React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/static-components 2026-10-24T05:20:08.8937396Z 2026-10-24T05:20:08.8937626Z ⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence. 2026-10-24T05:20:08.8937760Z ╭─[apps/web/src/components/chat/useComposerSend.ts:985:13] 2026-10-24T05:20:08.8937883Z 984 │ const changedBeforeDecline = draftChangedSinceSend(); 2026-10-24T05:20:08.8938122Z 985 │ ╭─▶ const pendingIdsBeforeDecline = pendingApprovalsRef.current.map( 2026-10-24T05:20:08.8938240Z 986 │ │ (approval) => approval.requestId, 2026-10-24T05:20:08.8938369Z 987 │ ╰─▶ ); 2026-10-24T05:20:08.8938503Z 988 │ const approvalResponding = approvalsToDecline.some((approval) => 2026-10-24T05:20:08.8938554Z ╰──── 2026-10-24T05:20:08.8938628Z  help: Switch to `Set` 2026-10-24T05:20:08.8938632Z 2026-10-24T05:20:08.8938785Z ⚠ react(immutability): This value cannot be modified 2026-10-24T05:20:08.8938935Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-24T05:20:08.8938987Z  86 │ 2026-10-24T05:20:08.8939082Z  87 │ const cardCoverage = props.cardCoverage; 2026-10-24T05:20:08.8939163Z ·  ──────┬───── 2026-10-24T05:20:08.8939296Z · ╰── `cardCoverage` originates here 2026-10-24T05:20:08.8939375Z  88 │ const barHeightRef = useRef(0); 2026-10-24T05:20:08.8939453Z  89 │ const cardHeightRef = useRef(0); 2026-10-24T05:20:08.8939536Z  90 │ const cardHeight = useSharedValue(0); 2026-10-24T05:20:08.8939636Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-24T05:20:08.8939729Z  92 │ if (!cardCoverage) { 2026-10-24T05:20:08.8939789Z  93 │ return; 2026-10-24T05:20:08.8939842Z  94 │ } 2026-10-24T05:20:08.8939988Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T05:20:08.8940075Z  96 │ if (coverage === cardCoverage.value) { 2026-10-24T05:20:08.8940184Z  97 │ return; 2026-10-24T05:20:08.8940267Z  98 │ } 2026-10-24T05:20:08.8940344Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T05:20:08.8940423Z 100 │ cardCoverage.value = coverage; 2026-10-24T05:20:08.8940500Z ·  ──────┬───── 2026-10-24T05:20:08.8940640Z · ╰── `cardCoverage` cannot be modified 2026-10-24T05:20:08.8940699Z 101 │ return; 2026-10-24T05:20:08.8940750Z ╰──── 2026-10-24T05:20:08.8941037Z  help: Do not mutate component props or hook arguments. If the value should change, update it where it is owned and pass an update callback, or use local state 2026-10-24T05:20:08.8941334Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:20:08.8941337Z 2026-10-24T05:20:08.8941492Z ⚠ react(immutability): This value cannot be modified 2026-10-24T05:20:08.8941644Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7] 2026-10-24T05:20:08.8941722Z  89 │ const cardHeightRef = useRef(0); 2026-10-24T05:20:08.8941805Z  90 │ const cardHeight = useSharedValue(0); 2026-10-24T05:20:08.8941880Z ·  ─────┬──── 2026-10-24T05:20:08.8942011Z · ╰── `cardHeight` originates here 2026-10-24T05:20:08.8942102Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-24T05:20:08.8942168Z  92 │ if (!cardCoverage) { 2026-10-24T05:20:08.8942225Z  93 │ return; 2026-10-24T05:20:08.8942280Z  94 │ } 2026-10-24T05:20:08.8942423Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T05:20:08.8942512Z  96 │ if (coverage === cardCoverage.value) { 2026-10-24T05:20:08.8942570Z  97 │ return; 2026-10-24T05:20:08.8942622Z  98 │ } 2026-10-24T05:20:08.8942697Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T05:20:08.8942777Z 100 │ cardCoverage.value = coverage; 2026-10-24T05:20:08.8942836Z 101 │ return; 2026-10-24T05:20:08.8942888Z 102 │ } 2026-10-24T05:20:08.8942985Z 103 │ cardCoverage.value = withTiming(coverage, { 2026-10-24T05:20:08.8943079Z 104 │ duration: USER_INPUT_TOGGLE_DURATION_MS, 2026-10-24T05:20:08.8943164Z 105 │ easing: Easing.out(Easing.cubic), 2026-10-24T05:20:08.8943219Z 106 │ }); 2026-10-24T05:20:08.8943284Z 107 │ }, [cardCoverage]); 2026-10-24T05:20:08.8943365Z 108 │ const handleBarLayout = useCallback( 2026-10-24T05:20:08.8943443Z 109 │ (event: LayoutChangeEvent) => { 2026-10-24T05:20:08.8943569Z 110 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T05:20:08.8943638Z 111 │ notifyCoverage(); 2026-10-24T05:20:08.8943691Z 112 │ }, 2026-10-24T05:20:08.8943754Z 113 │ [notifyCoverage], 2026-10-24T05:20:08.8943805Z 114 │ ); 2026-10-24T05:20:08.8943888Z 115 │ const handleCardLayout = useCallback( 2026-10-24T05:20:08.8943965Z 116 │ (event: LayoutChangeEvent) => { 2026-10-24T05:20:08.8944089Z 117 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T05:20:08.8944197Z 118 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-24T05:20:08.8944272Z ·  ─────┬──── 2026-10-24T05:20:08.8944406Z · ╰── `cardHeight` cannot be modified 2026-10-24T05:20:08.8944472Z 119 │ notifyCoverage(); 2026-10-24T05:20:08.8944521Z ╰──── 2026-10-24T05:20:08.8944835Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T05:20:08.8945165Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:20:08.8945167Z 2026-10-24T05:20:08.8945363Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T05:20:08.8945515Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-24T05:20:08.8945597Z  90 │ const cardHeight = useSharedValue(0); 2026-10-24T05:20:08.8945687Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-24T05:20:08.8945789Z ·  ───┬─── 2026-10-24T05:20:08.8946027Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-24T05:20:08.8946094Z  92 │ if (!cardCoverage) { 2026-10-24T05:20:08.8946153Z  93 │ return; 2026-10-24T05:20:08.8946204Z  94 │ } 2026-10-24T05:20:08.8946349Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T05:20:08.8946432Z  96 │ if (coverage === cardCoverage.value) { 2026-10-24T05:20:08.8946488Z  97 │ return; 2026-10-24T05:20:08.8946540Z  98 │ } 2026-10-24T05:20:08.8946617Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T05:20:08.8946696Z 100 │ cardCoverage.value = coverage; 2026-10-24T05:20:08.8946771Z ·  ──────┬───── 2026-10-24T05:20:08.8946905Z · ╰── This modifies `cardCoverage` 2026-10-24T05:20:08.8946967Z 101 │ return; 2026-10-24T05:20:08.8947020Z ╰──── 2026-10-24T05:20:08.8947353Z  help: This argument is a function which may reassign or mutate `cardCoverage` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead 2026-10-24T05:20:08.8947649Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:20:08.8947651Z 2026-10-24T05:20:08.8947845Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T05:20:08.8947994Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-24T05:20:08.8948072Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T05:20:08.8948153Z 100 │ cardCoverage.value = coverage; 2026-10-24T05:20:08.8948231Z ·  ──────┬───── 2026-10-24T05:20:08.8948360Z · ╰── This modifies `cardCoverage` 2026-10-24T05:20:08.8948419Z 101 │ return; 2026-10-24T05:20:08.8948471Z 102 │ } 2026-10-24T05:20:08.8948570Z 103 │ cardCoverage.value = withTiming(coverage, { 2026-10-24T05:20:08.8948663Z 104 │ duration: USER_INPUT_TOGGLE_DURATION_MS, 2026-10-24T05:20:08.8948745Z 105 │ easing: Easing.out(Easing.cubic), 2026-10-24T05:20:08.8948799Z 106 │ }); 2026-10-24T05:20:08.8948863Z 107 │ }, [cardCoverage]); 2026-10-24T05:20:08.8948944Z 108 │ const handleBarLayout = useCallback( 2026-10-24T05:20:08.8949021Z 109 │ (event: LayoutChangeEvent) => { 2026-10-24T05:20:08.8949124Z ·  ───────────────┬─────────────── 2026-10-24T05:20:08.8949400Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-24T05:20:08.8949566Z 110 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T05:20:08.8949618Z ╰──── 2026-10-24T05:20:08.8949971Z  help: This argument is a function which may reassign or mutate `cardCoverage` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead 2026-10-24T05:20:08.8950267Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:20:08.8950269Z 2026-10-24T05:20:08.8950465Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T05:20:08.8950615Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7] 2026-10-24T05:20:08.8950702Z 115 │ const handleCardLayout = useCallback( 2026-10-24T05:20:08.8950783Z 116 │ (event: LayoutChangeEvent) => { 2026-10-24T05:20:08.8950940Z ·  ───────────────┬─────────────── 2026-10-24T05:20:08.8951156Z · ╰── This function may (indirectly) reassign or modify `cardHeight` after render 2026-10-24T05:20:08.8951280Z 117 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T05:20:08.8951392Z 118 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-24T05:20:08.8951464Z ·  ─────┬──── 2026-10-24T05:20:08.8951592Z · ╰── This modifies `cardHeight` 2026-10-24T05:20:08.8951658Z 119 │ notifyCoverage(); 2026-10-24T05:20:08.8951708Z ╰──── 2026-10-24T05:20:08.8952039Z  help: This argument is a function which may reassign or mutate `cardHeight` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead 2026-10-24T05:20:08.8952338Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T05:20:08.8952341Z 2026-10-24T05:20:08.8952483Z ⚠ react(refs): Cannot access refs during render 2026-10-24T05:20:08.8952637Z ╭─[apps/mobile/src/features/diffs/nativeReviewDiffSurface.ts:277:39] 2026-10-24T05:20:08.8952691Z 276 │ 2026-10-24T05:20:08.8952867Z 277 │ ╭─▶ return createElement(RawNativeView, { 2026-10-24T05:20:08.8952958Z 278 │ │ ...nativeProps, 2026-10-24T05:20:08.8953167Z 279 │ │ refreshEnabled: props.onPullToRefresh !== undefined, 2026-10-24T05:20:08.8953294Z 280 │ │ ref: nativeRef, 2026-10-24T05:20:08.8953419Z 281 │ ├─▶ }); 2026-10-24T05:20:08.8953649Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T05:20:08.8953703Z 282 │ } 2026-10-24T05:20:08.8953754Z ╰──── 2026-10-24T05:20:08.8954211Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T05:20:08.8954500Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T05:20:08.8954507Z 2026-10-24T05:20:08.8954687Z ⚠ unicorn(no-new-array): Do not use `new Array(singleArgument)`. 2026-10-24T05:20:08.8954805Z ╭─[apps/web/src/terminal/ghostty/core.ts:194:19] 2026-10-24T05:20:08.8954926Z 193 │ const count = Math.min(CHUNK_SIZE, graphemeLength - start); 2026-10-24T05:20:08.8955014Z 194 │ const codes = new Array(count); 2026-10-24T05:20:08.8955119Z ·  ──────────────────────── 2026-10-24T05:20:08.8955220Z 195 │ for (let index = 0; index < count; index += 1) { 2026-10-24T05:20:08.8955271Z ╰──── 2026-10-24T05:20:08.8955679Z  help: It's not clear whether the argument is meant to be the length of the array or the only element. If the argument is the array's length, consider using `Array.from({ length: n })`. If the argument is the only element, use `[element]`. 2026-10-24T05:20:08.8955688Z 2026-10-24T05:20:08.8955854Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T05:20:08.8955972Z ╭─[apps/web/src/hooks/useThreadActions.ts:821:56] 2026-10-24T05:20:08.8956072Z 820 │ const resolved = resolveThreadTarget(target); 2026-10-24T05:20:08.8956225Z 821 │ if (resolved && !canSnooze(resolved.thread, { now: new Date().toISOString() })) { 2026-10-24T05:20:08.8956341Z ·  ─────┬──── 2026-10-24T05:20:08.8956506Z · ╰── Cannot call impure function 2026-10-24T05:20:08.8956588Z 822 │ return AsyncResult.failure( 2026-10-24T05:20:08.8956639Z ╰──── 2026-10-24T05:20:08.8956915Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T05:20:08.8957203Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T05:20:08.8957206Z 2026-10-24T05:20:08.8957368Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T05:20:08.8957484Z ╭─[apps/web/src/hooks/useThreadActions.ts:709:46] 2026-10-24T05:20:08.8957553Z 708 │ const wokeAt = resolved 2026-10-24T05:20:08.8957685Z 709 │ ? threadWokeAt(resolved.thread, { now: new Date().toISOString() }) 2026-10-24T05:20:08.8957795Z ·  ─────┬──── 2026-10-24T05:20:08.8958001Z · ╰── Cannot call impure function 2026-10-24T05:20:08.8958089Z 710 │ : null; 2026-10-24T05:20:08.8958140Z ╰──── 2026-10-24T05:20:08.8958408Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T05:20:08.8958690Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T05:20:08.8958692Z 2026-10-24T05:20:08.8958773Z Found 0 errors and 362 warnings in 5420 files (4.9s, 8 threads) 2026-10-24T05:20:08.9367222Z Post job cleanup. 2026-10-24T05:20:08.9951021Z Cache hit occurred on the primary key electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309, not saving cache. 2026-10-24T05:20:09.0011287Z Post job cleanup. 2026-10-24T05:20:09.0933581Z ##[start-action display=Cache full pnpm store;id=__147d3655-218b-44a6-9660-f2c83d79c994.__actions_cache] 2026-10-24T05:20:09.1224788Z Post job cleanup. 2026-10-24T05:20:09.1858173Z [command]/usr/bin/tar --posix -cf cache.tzst --exclude cache.tzst -P -C /home/runner/_work/t3code/t3code --files-from manifest.txt --use-compress-program zstdmt 2026-10-24T05:20:12.7490450Z Failed to save: Unable to reserve cache with key pnpm-full-v1-Linux-X64-8600a8d4a7fcc9519d421cef0c77201c793c5d8afbbef2897636b5b9305a9b7d, another job may be creating this cache. 2026-10-24T05:20:12.7950274Z ##[end-action id=__147d3655-218b-44a6-9660-f2c83d79c994.__actions_cache;outcome=success;conclusion=success;duration_ms=3701] 2026-10-24T05:20:12.7951980Z ##[start-action display=Cache Vite+;id=__147d3655-218b-44a6-9660-f2c83d79c994.vp_cache] 2026-10-24T05:20:12.7982658Z Post job cleanup. 2026-10-24T05:20:12.8601984Z 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-24T05:20:12.8630219Z ##[end-action id=__147d3655-218b-44a6-9660-f2c83d79c994.vp_cache;outcome=success;conclusion=success;duration_ms=67] 2026-10-24T05:20:12.8664057Z Post job cleanup. 2026-10-24T05:20:12.9035731Z [command]/usr/local/bin/git version 2026-10-24T05:20:12.9061319Z git version 2.55.0 2026-10-24T05:20:12.9077885Z Temporarily overriding HOME='/home/runner/_work/_temp/fb0d8d89-3aa5-4ce1-8c2c-bdec9e0cdeae' before making global git config changes 2026-10-24T05:20:12.9078237Z Adding repository directory to the temporary git global config as a safe directory 2026-10-24T05:20:12.9080756Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code 2026-10-24T05:20:12.9100672Z Removing SSH command configuration 2026-10-24T05:20:12.9103470Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand 2026-10-24T05:20:12.9124302Z [command]/usr/local/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :" 2026-10-24T05:20:12.9233610Z fatal: No url found for submodule path '.repos/alchemy-effect/submodules/distilled' in .gitmodules 2026-10-24T05:20:12.9254172Z ##[warning]The process '/usr/local/bin/git' failed with exit code 128 2026-10-24T05:20:12.9287418Z A job completed hook has been configured by the self-hosted runner administrator 2026-10-24T05:20:12.9301332Z ##[group]Run '/job_completed.sh' 2026-10-24T05:20:12.9307104Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T05:20:12.9307277Z env: 2026-10-24T05:20:12.9307391Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 135 2026-10-24T05:20:12.9307539Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 395 2026-10-24T05:20:12.9307680Z BLACKSMITH_CHECK_RUN_ID: 120788669600 2026-10-24T05:20:12.9307820Z BLACKSMITH_JOB_DISPLAY_NAME: Lint 2026-10-24T05:20:12.9307962Z GITHUB_ACTIONS_CACHE_MODE: write 2026-10-24T05:20:12.9308097Z ##[endgroup] 2026-10-24T05:20:12.9375584Z Docker container cache not activated, skipping hash computation. 2026-10-24T05:20:12.9621235Z No active SSH sessions detected. Proceeding with shutdown immediately. 2026-10-24T05:20:12.9662097Z Cleaning up orphan processes