2026-10-23T01:49:54.3078796Z Current runner version: '2.337.0' 2026-10-23T01:49:54.3083373Z Runner name: 'blacksmith-8vcpu-ubuntu-2404-fcowxi2zxypa45wn' 2026-10-23T01:49:54.3084212Z Runner group name: 'blacksmith scale sets - blacksmith-8vcpu-ubuntu-2404' 2026-10-23T01:49:54.3085105Z Machine name: 'ip-172-31-73-130' 2026-10-23T01:49:54.3086902Z ##[group]GITHUB_TOKEN Permissions 2026-10-23T01:49:54.3088548Z Contents: read 2026-10-23T01:49:54.3089006Z Metadata: read 2026-10-23T01:49:54.3089413Z ##[endgroup] 2026-10-23T01:49:54.3091078Z Secret source: Actions 2026-10-23T01:49:54.3092132Z Cache mode: write 2026-10-23T01:49:54.3092714Z Prepare workflow directory 2026-10-23T01:49:54.3309976Z Prepare all required actions 2026-10-23T01:49:54.3339265Z Getting action download info 2026-10-23T01:49:54.4632040Z Download action repository 'actions/checkout@v6' (SHA:d23441a48e516b6c34aea4fa41551a30e30af803) 2026-10-23T01:49:54.5129272Z Download action repository 'actions/cache@v6' (SHA:55cc8345863c7cc4c66a329aec7e433d2d1c52a9) 2026-10-23T01:49:54.6487583Z Setting BLACKSMITH_ACTIONS_RESULTS_URL to https://results-receiver.actions.githubusercontent.com/ 2026-10-23T01:49:54.6530882Z Complete job name: Lint 2026-10-23T01:49:54.6916732Z A job started hook has been configured by the self-hosted runner administrator 2026-10-23T01:49:54.6985862Z ##[group]Run '/setup.sh' 2026-10-23T01:49:54.6996165Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-23T01:49:54.6996768Z env: 2026-10-23T01:49:54.6997019Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 173 2026-10-23T01:49:54.6997431Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 444 2026-10-23T01:49:54.6997722Z BLACKSMITH_CHECK_RUN_ID: 120194814446 2026-10-23T01:49:54.6998017Z BLACKSMITH_JOB_DISPLAY_NAME: Lint 2026-10-23T01:49:54.6998307Z GITHUB_ACTIONS_CACHE_MODE: write 2026-10-23T01:49:54.6998579Z ##[endgroup] 2026-10-23T01:49:54.7314845Z Logging daemon started (blacksmithd for logs) 2026-10-23T01:49:54.7452038Z Results daemon started (blacksmithd for results) 2026-10-23T01:49:54.7656427Z Background adoption and SSH setup started (PID: 3144) 2026-10-23T01:49:54.7658338Z 2026-10-23T01:49:54.7661288Z ---------------------------------------- 2026-10-23T01:49:54.7662030Z View this job: https://app.blacksmith.sh/pingdotgg/runs/39886192373/jobs/120194814446 2026-10-23T01:49:54.7662471Z SSH Access (using your GitHub SSH key): 2026-10-23T01:49:54.7662996Z ssh -p 64007 runner@blacksmith-8vcpu-ubuntu-2404-fcowxi2zxypa45wn.vm.blacksmith.sh 2026-10-23T01:49:54.7663332Z 2026-10-23T01:49:54.7663447Z No GitHub SSH key? Add one at: 2026-10-23T01:49:54.7663953Z https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account 2026-10-23T01:49:54.7664363Z 2026-10-23T01:49:54.7664505Z ---------------------------------------- 2026-10-23T01:49:54.7664686Z 2026-10-23T01:49:54.7664835Z VM ID: blacksmith-8vcpu-ubuntu-2404-fcowxi2zxypa45wn 2026-10-23T01:49:54.7665165Z Host: production-152.236.41.167-x8664 2026-10-23T01:49:54.7665445Z Host Agent PID: 2961470 2026-10-23T01:49:54.7665699Z Host Agent Git SHA: af74fd76b 2026-10-23T01:49:54.7665973Z Host CPU Manufacturer: AuthenticAMD 2026-10-23T01:49:54.7666263Z Blacksmith Host Generation: gen 2 2026-10-23T01:49:54.7666607Z Petname: production-next-dassie-db9d763f 2026-10-23T01:49:54.7666892Z Region: us-east 2026-10-23T01:49:54.7667130Z Rootfs Version: ubuntu24-full-x64-081926 2026-10-23T01:49:54.7678418Z OS Version: Ubuntu 24.04.4 LTS 2026-10-23T01:49:54.7678681Z 2026-10-23T01:49:54.7679012Z Enabling Blacksmith transparent cache 2026-10-23T01:49:54.8109660Z ##[group]Run actions/checkout@v6 2026-10-23T01:49:54.8110142Z with: 2026-10-23T01:49:54.8110647Z sparse-checkout: /* !/.repos/ !/apps/mobile/modules/t3-terminal/Vendor/**/*.a 2026-10-23T01:49:54.8111375Z sparse-checkout-cone-mode: false 2026-10-23T01:49:54.8111815Z repository: pingdotgg/t3code 2026-10-23T01:49:54.8115096Z token: *** 2026-10-23T01:49:54.8115439Z ssh-strict: true 2026-10-23T01:49:54.8115788Z ssh-user: git 2026-10-23T01:49:54.8116138Z persist-credentials: true 2026-10-23T01:49:54.8116892Z clean: true 2026-10-23T01:49:54.8117149Z fetch-depth: 1 2026-10-23T01:49:54.8117369Z fetch-tags: false 2026-10-23T01:49:54.8117671Z show-progress: true 2026-10-23T01:49:54.8118030Z lfs: false 2026-10-23T01:49:54.8118288Z submodules: false 2026-10-23T01:49:54.8118537Z set-safe-directory: true 2026-10-23T01:49:54.8118896Z allow-unsafe-pr-checkout: false 2026-10-23T01:49:54.8119302Z env: 2026-10-23T01:49:54.8119677Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 173 2026-10-23T01:49:54.8120145Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 444 2026-10-23T01:49:54.8120620Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T01:49:54.8121043Z ##[endgroup] 2026-10-23T01:49:54.9523392Z Syncing repository: pingdotgg/t3code 2026-10-23T01:49:54.9524730Z ##[group]Getting Git version info 2026-10-23T01:49:54.9525109Z Working directory is '/home/runner/_work/t3code/t3code' 2026-10-23T01:49:54.9525631Z [command]/usr/local/bin/git version 2026-10-23T01:49:54.9617757Z git version 2.55.0 2026-10-23T01:49:54.9631834Z ##[endgroup] 2026-10-23T01:49:54.9640371Z Temporarily overriding HOME='/home/runner/_work/_temp/ddba3aef-c0d9-42d5-949b-d0c2500c4426' before making global git config changes 2026-10-23T01:49:54.9641067Z Adding repository directory to the temporary git global config as a safe directory 2026-10-23T01:49:54.9644462Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code 2026-10-23T01:49:54.9678864Z Deleting the contents of '/home/runner/_work/t3code/t3code' 2026-10-23T01:49:54.9681477Z ##[group]Determining repository object format 2026-10-23T01:49:54.9682854Z ##[endgroup] 2026-10-23T01:49:54.9683242Z ##[group]Initializing the repository 2026-10-23T01:49:54.9685818Z [command]/usr/local/bin/git init /home/runner/_work/t3code/t3code 2026-10-23T01:49:54.9723782Z hint: Using 'master' as the name for the initial branch. This default branch name 2026-10-23T01:49:54.9724541Z hint: will change to "main" in Git 3.0. To configure the initial branch name 2026-10-23T01:49:54.9725092Z hint: to use in all of your new repositories, which will suppress this warning, 2026-10-23T01:49:54.9725492Z hint: call: 2026-10-23T01:49:54.9725701Z hint: 2026-10-23T01:49:54.9725991Z hint: git config --global init.defaultBranch 2026-10-23T01:49:54.9726314Z hint: 2026-10-23T01:49:54.9726612Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and 2026-10-23T01:49:54.9727078Z hint: 'development'. The just-created branch can be renamed via this command: 2026-10-23T01:49:54.9727463Z hint: 2026-10-23T01:49:54.9727700Z hint: git branch -m 2026-10-23T01:49:54.9727943Z hint: 2026-10-23T01:49:54.9728258Z hint: Disable this message with "git config set advice.defaultBranchName false" 2026-10-23T01:49:54.9728734Z Initialized empty Git repository in /home/runner/_work/t3code/t3code/.git/ 2026-10-23T01:49:54.9730019Z [command]/usr/local/bin/git remote add origin https://github.com/pingdotgg/t3code 2026-10-23T01:49:54.9809152Z ##[endgroup] 2026-10-23T01:49:54.9809628Z ##[group]Disabling automatic garbage collection 2026-10-23T01:49:54.9814368Z [command]/usr/local/bin/git config --local gc.auto 0 2026-10-23T01:49:54.9844271Z ##[endgroup] 2026-10-23T01:49:54.9844641Z ##[group]Setting up auth 2026-10-23T01:49:54.9845777Z Removing SSH command configuration 2026-10-23T01:49:54.9851220Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand 2026-10-23T01:49:54.9878026Z [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-23T01:49:55.0035409Z Removing HTTP extra header 2026-10-23T01:49:55.0040435Z [command]/usr/local/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader 2026-10-23T01:49:55.0072895Z [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-23T01:49:55.0196666Z Removing includeIf entries pointing to credentials config files 2026-10-23T01:49:55.0202291Z [command]/usr/local/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir: 2026-10-23T01:49:55.0234959Z [command]/usr/local/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url 2026-10-23T01:49:55.0359591Z [command]/usr/local/bin/git config --file /home/runner/_work/_temp/git-credentials-a22fe87c-0a23-40ca-b7ac-10fb75c25d60.config http.https://github.com/.extraheader AUTHORIZATION: basic *** 2026-10-23T01:49:55.0400739Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git.path /home/runner/_work/_temp/git-credentials-a22fe87c-0a23-40ca-b7ac-10fb75c25d60.config 2026-10-23T01:49:55.0427241Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git/worktrees/*.path /home/runner/_work/_temp/git-credentials-a22fe87c-0a23-40ca-b7ac-10fb75c25d60.config 2026-10-23T01:49:55.0452799Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git.path /github/runner_temp/git-credentials-a22fe87c-0a23-40ca-b7ac-10fb75c25d60.config 2026-10-23T01:49:55.0477421Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git/worktrees/*.path /github/runner_temp/git-credentials-a22fe87c-0a23-40ca-b7ac-10fb75c25d60.config 2026-10-23T01:49:55.0498558Z ##[endgroup] 2026-10-23T01:49:55.0499240Z ##[group]Fetching the repository 2026-10-23T01:49:55.0504732Z [command]/usr/local/bin/git -c protocol.version=2 fetch --no-tags --prune --no-recurse-submodules --filter=blob:none --depth=1 origin +2344261df247c44b749f49021ac06ad367c99b1f:refs/remotes/pull/23913/merge 2026-10-23T01:49:55.3684784Z From https://github.com/pingdotgg/t3code 2026-10-23T01:49:55.3685406Z * [new ref] 2344261df247c44b749f49021ac06ad367c99b1f -> pull/23913/merge 2026-10-23T01:49:55.3713802Z ##[endgroup] 2026-10-23T01:49:55.3714518Z ##[group]Determining the checkout info 2026-10-23T01:49:55.3715060Z ##[endgroup] 2026-10-23T01:49:55.3715462Z ##[group]Setting up sparse checkout 2026-10-23T01:49:55.3719016Z [command]/usr/local/bin/git config core.sparseCheckout true 2026-10-23T01:49:55.3744968Z [command]/usr/local/bin/git rev-parse --git-path info/sparse-checkout 2026-10-23T01:49:55.3770779Z .git/info/sparse-checkout 2026-10-23T01:49:55.3775222Z ##[endgroup] 2026-10-23T01:49:55.3775866Z ##[group]Checking out the ref 2026-10-23T01:49:55.3779010Z [command]/usr/local/bin/git checkout --progress --force refs/remotes/pull/23913/merge 2026-10-23T01:50:02.0787344Z Updating files: 0% (1/6310) 2026-10-23T01:50:02.0819522Z Updating files: 1% (64/6310) 2026-10-23T01:50:02.0838782Z Updating files: 2% (127/6310) 2026-10-23T01:50:02.0863718Z Updating files: 3% (190/6310) 2026-10-23T01:50:02.0887646Z Updating files: 4% (253/6310) 2026-10-23T01:50:02.0926839Z Updating files: 5% (316/6310) 2026-10-23T01:50:02.0955272Z Updating files: 6% (379/6310) 2026-10-23T01:50:02.1032377Z Updating files: 7% (442/6310) 2026-10-23T01:50:02.1074664Z Updating files: 8% (505/6310) 2026-10-23T01:50:02.1106476Z Updating files: 9% (568/6310) 2026-10-23T01:50:02.1519116Z Updating files: 10% (631/6310) 2026-10-23T01:50:02.1542819Z Updating files: 11% (695/6310) 2026-10-23T01:50:02.1557691Z Updating files: 12% (758/6310) 2026-10-23T01:50:02.1579243Z Updating files: 13% (821/6310) 2026-10-23T01:50:02.1600906Z Updating files: 14% (884/6310) 2026-10-23T01:50:02.1624352Z Updating files: 15% (947/6310) 2026-10-23T01:50:02.1650366Z Updating files: 16% (1010/6310) 2026-10-23T01:50:02.1672575Z Updating files: 17% (1073/6310) 2026-10-23T01:50:02.1699330Z Updating files: 18% (1136/6310) 2026-10-23T01:50:02.1721011Z Updating files: 19% (1199/6310) 2026-10-23T01:50:02.1757490Z Updating files: 20% (1262/6310) 2026-10-23T01:50:02.1782963Z Updating files: 21% (1326/6310) 2026-10-23T01:50:02.1809071Z Updating files: 22% (1389/6310) 2026-10-23T01:50:02.1830537Z Updating files: 23% (1452/6310) 2026-10-23T01:50:02.1851213Z Updating files: 24% (1515/6310) 2026-10-23T01:50:02.1873827Z Updating files: 25% (1578/6310) 2026-10-23T01:50:02.1892371Z Updating files: 26% (1641/6310) 2026-10-23T01:50:02.1912398Z Updating files: 27% (1704/6310) 2026-10-23T01:50:02.1940543Z Updating files: 28% (1767/6310) 2026-10-23T01:50:02.1987227Z Updating files: 29% (1830/6310) 2026-10-23T01:50:02.2014456Z Updating files: 30% (1893/6310) 2026-10-23T01:50:02.2047957Z Updating files: 31% (1957/6310) 2026-10-23T01:50:02.2091949Z Updating files: 32% (2020/6310) 2026-10-23T01:50:02.2133872Z Updating files: 33% (2083/6310) 2026-10-23T01:50:02.2229221Z Updating files: 34% (2146/6310) 2026-10-23T01:50:02.2322745Z Updating files: 35% (2209/6310) 2026-10-23T01:50:02.2372033Z Updating files: 36% (2272/6310) 2026-10-23T01:50:02.2422972Z Updating files: 37% (2335/6310) 2026-10-23T01:50:02.2490806Z Updating files: 38% (2398/6310) 2026-10-23T01:50:02.2529372Z Updating files: 39% (2461/6310) 2026-10-23T01:50:02.2577611Z Updating files: 40% (2524/6310) 2026-10-23T01:50:02.2627099Z Updating files: 41% (2588/6310) 2026-10-23T01:50:02.2651461Z Updating files: 42% (2651/6310) 2026-10-23T01:50:02.2666642Z Updating files: 43% (2714/6310) 2026-10-23T01:50:02.2695751Z Updating files: 44% (2777/6310) 2026-10-23T01:50:02.2738908Z Updating files: 45% (2840/6310) 2026-10-23T01:50:02.2772608Z Updating files: 46% (2903/6310) 2026-10-23T01:50:02.2812633Z Updating files: 47% (2966/6310) 2026-10-23T01:50:02.2846765Z Updating files: 48% (3029/6310) 2026-10-23T01:50:02.2880893Z Updating files: 49% (3092/6310) 2026-10-23T01:50:02.2925975Z Updating files: 50% (3155/6310) 2026-10-23T01:50:02.2942850Z Updating files: 51% (3219/6310) 2026-10-23T01:50:02.2980913Z Updating files: 52% (3282/6310) 2026-10-23T01:50:02.3012243Z Updating files: 53% (3345/6310) 2026-10-23T01:50:02.3039876Z Updating files: 54% (3408/6310) 2026-10-23T01:50:02.3072329Z Updating files: 55% (3471/6310) 2026-10-23T01:50:02.3095672Z Updating files: 56% (3534/6310) 2026-10-23T01:50:02.3119158Z Updating files: 57% (3597/6310) 2026-10-23T01:50:02.3145069Z Updating files: 58% (3660/6310) 2026-10-23T01:50:02.3606283Z Updating files: 59% (3723/6310) 2026-10-23T01:50:02.3620691Z Updating files: 60% (3786/6310) 2026-10-23T01:50:02.3640015Z Updating files: 61% (3850/6310) 2026-10-23T01:50:02.3660051Z Updating files: 62% (3913/6310) 2026-10-23T01:50:02.3683104Z Updating files: 63% (3976/6310) 2026-10-23T01:50:02.3713364Z Updating files: 64% (4039/6310) 2026-10-23T01:50:02.3739141Z Updating files: 65% (4102/6310) 2026-10-23T01:50:02.3757068Z Updating files: 66% (4165/6310) 2026-10-23T01:50:02.3784650Z Updating files: 67% (4228/6310) 2026-10-23T01:50:02.3799121Z Updating files: 68% (4291/6310) 2026-10-23T01:50:02.3821565Z Updating files: 69% (4354/6310) 2026-10-23T01:50:02.3835904Z Updating files: 70% (4417/6310) 2026-10-23T01:50:02.3854345Z Updating files: 71% (4481/6310) 2026-10-23T01:50:02.3872717Z Updating files: 72% (4544/6310) 2026-10-23T01:50:02.3901552Z Updating files: 73% (4607/6310) 2026-10-23T01:50:02.4102075Z Updating files: 74% (4670/6310) 2026-10-23T01:50:02.4201088Z Updating files: 74% (4723/6310) 2026-10-23T01:50:02.4428849Z Updating files: 75% (4733/6310) 2026-10-23T01:50:02.4454988Z Updating files: 76% (4796/6310) 2026-10-23T01:50:02.4480848Z Updating files: 77% (4859/6310) 2026-10-23T01:50:02.4513917Z Updating files: 78% (4922/6310) 2026-10-23T01:50:02.4539025Z Updating files: 79% (4985/6310) 2026-10-23T01:50:02.4564004Z Updating files: 80% (5048/6310) 2026-10-23T01:50:02.4585461Z Updating files: 81% (5112/6310) 2026-10-23T01:50:02.4611026Z Updating files: 82% (5175/6310) 2026-10-23T01:50:02.4635177Z Updating files: 83% (5238/6310) 2026-10-23T01:50:02.4665111Z Updating files: 84% (5301/6310) 2026-10-23T01:50:02.4690884Z Updating files: 85% (5364/6310) 2026-10-23T01:50:02.4722238Z Updating files: 86% (5427/6310) 2026-10-23T01:50:02.4810641Z Updating files: 87% (5490/6310) 2026-10-23T01:50:02.4849042Z Updating files: 88% (5553/6310) 2026-10-23T01:50:02.4871217Z Updating files: 89% (5616/6310) 2026-10-23T01:50:02.4899417Z Updating files: 90% (5679/6310) 2026-10-23T01:50:02.4937699Z Updating files: 91% (5743/6310) 2026-10-23T01:50:02.4954214Z Updating files: 92% (5806/6310) 2026-10-23T01:50:02.4972161Z Updating files: 93% (5869/6310) 2026-10-23T01:50:02.4995487Z Updating files: 94% (5932/6310) 2026-10-23T01:50:02.5023654Z Updating files: 95% (5995/6310) 2026-10-23T01:50:02.5082786Z Updating files: 96% (6058/6310) 2026-10-23T01:50:02.5114387Z Updating files: 97% (6121/6310) 2026-10-23T01:50:02.5166834Z Updating files: 98% (6184/6310) 2026-10-23T01:50:02.5188064Z Updating files: 99% (6247/6310) 2026-10-23T01:50:02.5188496Z Updating files: 100% (6310/6310) 2026-10-23T01:50:02.5188902Z Updating files: 100% (6310/6310), done. 2026-10-23T01:50:02.5363164Z Note: switching to 'refs/remotes/pull/23913/merge'. 2026-10-23T01:50:02.5363510Z 2026-10-23T01:50:02.5363710Z You are in 'detached HEAD' state. You can look around, make experimental 2026-10-23T01:50:02.5364165Z changes and commit them, and you can discard any commits you make in this 2026-10-23T01:50:02.5364606Z state without impacting any branches by switching back to a branch. 2026-10-23T01:50:02.5364872Z 2026-10-23T01:50:02.5365047Z If you want to create a new branch to retain commits you create, you may 2026-10-23T01:50:02.5365466Z do so (now or later) by using -c with the switch command. Example: 2026-10-23T01:50:02.5365675Z 2026-10-23T01:50:02.5365766Z git switch -c 2026-10-23T01:50:02.5365860Z 2026-10-23T01:50:02.5365916Z Or undo this operation with: 2026-10-23T01:50:02.5366002Z 2026-10-23T01:50:02.5366132Z git switch - 2026-10-23T01:50:02.5366237Z 2026-10-23T01:50:02.5366413Z Turn off this advice by setting config variable advice.detachedHead to false 2026-10-23T01:50:02.5366708Z 2026-10-23T01:50:02.5367033Z HEAD is now at 2344261 Merge 74c4ffc4ca044c6bfb63cb203237a6aacb3b238c into 51273020db3245f4ec29514a419d29b5dcb012dc 2026-10-23T01:50:02.5378307Z ##[endgroup] 2026-10-23T01:50:02.5425535Z [command]/usr/local/bin/git log -1 --format=%H 2026-10-23T01:50:02.5450978Z 2344261df247c44b749f49021ac06ad367c99b1f 2026-10-23T01:50:02.5569596Z ##[group]Run files="$(git ls-files .github/pr-assets)" 2026-10-23T01:50:02.5570009Z files="$(git ls-files .github/pr-assets)" 2026-10-23T01:50:02.5570307Z if test -n "$files"; then 2026-10-23T01:50:02.5570672Z  printf 'PR evidence must be uploaded to GitHub, not committed:\n%s\n' "$files" >&2 2026-10-23T01:50:02.5571029Z  exit 1 2026-10-23T01:50:02.5571214Z fi 2026-10-23T01:50:02.5583660Z shell: /usr/bin/bash -e {0} 2026-10-23T01:50:02.5583919Z env: 2026-10-23T01:50:02.5584127Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 173 2026-10-23T01:50:02.5584360Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 444 2026-10-23T01:50:02.5584579Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T01:50:02.5584788Z ##[endgroup] 2026-10-23T01:50:02.5794478Z Prepare all required actions 2026-10-23T01:50:02.5794885Z Getting action download info 2026-10-23T01:50:02.6723249Z Download action repository 'voidzero-dev/setup-vp@v1' (SHA:250f29ce396baf5e8f24498e17c0dfdebabc26eb) 2026-10-23T01:50:02.7830751Z ##[group]Run ./.github/actions/setup-ci-deps 2026-10-23T01:50:02.7831050Z env: 2026-10-23T01:50:02.7831254Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 173 2026-10-23T01:50:02.7831492Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 444 2026-10-23T01:50:02.7831727Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T01:50:02.7831948Z ##[endgroup] 2026-10-23T01:50:02.8014964Z ##[start-action display=Resolve Vite+ version;id=__self.vp] 2026-10-23T01:50:02.8050992Z ##[group]Run echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-23T01:50:02.8052028Z echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-23T01:50:02.8052540Z echo "node=$(jq -r '.engines.node' package.json)" >> "$GITHUB_OUTPUT" 2026-10-23T01:50:02.8052959Z echo "pnpm=$(jq -r '.packageManager' package.json)" >> "$GITHUB_OUTPUT" 2026-10-23T01:50:02.8063721Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-23T01:50:02.8063936Z env: 2026-10-23T01:50:02.8064081Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 173 2026-10-23T01:50:02.8064248Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 444 2026-10-23T01:50:02.8064408Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T01:50:02.8064563Z ##[endgroup] 2026-10-23T01:50:02.8178682Z ##[end-action id=__self.vp;outcome=success;conclusion=success;duration_ms=16] 2026-10-23T01:50:02.8182033Z ##[start-action display=Cache Vite+;id=__self.vp_cache] 2026-10-23T01:50:02.8264877Z ##[group]Run actions/cache@v6 2026-10-23T01:50:02.8265135Z with: 2026-10-23T01:50:02.8265310Z path: ~/.vite-plus 2026-10-23T01:50:02.8265576Z key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-23T01:50:02.8265925Z enableCrossOsArchive: false 2026-10-23T01:50:02.8266149Z fail-on-cache-miss: false 2026-10-23T01:50:02.8266363Z lookup-only: false 2026-10-23T01:50:02.8266542Z save-always: false 2026-10-23T01:50:02.8266736Z env: 2026-10-23T01:50:02.8266913Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 173 2026-10-23T01:50:02.8267167Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 444 2026-10-23T01:50:02.8267406Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T01:50:02.8267615Z ##[endgroup] 2026-10-23T01:50:03.0525778Z Cache hit for: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-23T01:50:03.5266946Z Received 170349591 of 170349591 (100.0%), 361.8 MBs/sec 2026-10-23T01:50:03.5267927Z Cache Size: ~162 MB (170349591 B) 2026-10-23T01:50:03.5299432Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/7f0e2a8c-3dff-4cf7-bcd5-c89c5c7aabee/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-23T01:50:04.5363144Z Cache restored successfully 2026-10-23T01:50:04.5565884Z Cache restored from key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-23T01:50:04.5676265Z ##[end-action id=__self.vp_cache;outcome=success;conclusion=success;duration_ms=1749] 2026-10-23T01:50:04.5679688Z ##[start-action display=Use cached Vite+;id=__self.__run] 2026-10-23T01:50:04.5710666Z ##[group]Run echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-23T01:50:04.5711043Z echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-23T01:50:04.5711331Z "$HOME/.vite-plus/bin/vp" env use "26.12.1" 2026-10-23T01:50:04.5722460Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-23T01:50:04.5722753Z env: 2026-10-23T01:50:04.5722941Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 173 2026-10-23T01:50:04.5723190Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 444 2026-10-23T01:50:04.5723457Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T01:50:04.5723682Z ##[endgroup] 2026-10-23T01:50:04.5775627Z Using Node.js v26.12.1 (resolved from 26.12.1) 2026-10-23T01:50:04.5793855Z ##[end-action id=__self.__run;outcome=success;conclusion=success;duration_ms=11] 2026-10-23T01:50:04.5797290Z ##[start-action display=Setup Vite+;id=__self.__voidzero-dev_setup-vp] 2026-10-23T01:50:04.5805236Z ##[end-action id=__self.__voidzero-dev_setup-vp;outcome=skipped;conclusion=skipped;duration_ms=0] 2026-10-23T01:50:04.5807413Z ##[start-action display=Resolve pnpm store path;id=__self.pnpm_store] 2026-10-23T01:50:04.5829826Z ##[group]Run store_path="$(vp pm cache dir)" 2026-10-23T01:50:04.5830190Z store_path="$(vp pm cache dir)" 2026-10-23T01:50:04.5851957Z echo "path=$store_path" >> "$GITHUB_OUTPUT" 2026-10-23T01:50:04.5871013Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-23T01:50:04.5871296Z env: 2026-10-23T01:50:04.5871482Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 173 2026-10-23T01:50:04.5871983Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 444 2026-10-23T01:50:04.5872215Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T01:50:04.5872481Z ##[endgroup] 2026-10-23T01:50:04.6047430Z ##[end-action id=__self.pnpm_store;outcome=success;conclusion=success;duration_ms=23] 2026-10-23T01:50:04.6050585Z ##[start-action display=Cache full pnpm store;id=__self.__actions_cache] 2026-10-23T01:50:04.6884811Z ##[group]Run actions/cache@v6 2026-10-23T01:50:04.6885035Z with: 2026-10-23T01:50:04.6885235Z path: /home/runner/.local/share/pnpm/store/v11 2026-10-23T01:50:04.6885665Z key: pnpm-full-v1-Linux-X64-00e587c1edf31fe669c96bc4768c0e07a969fff8e8228235fb75ec6c0abf4161 2026-10-23T01:50:04.6886068Z restore-keys: pnpm-full-v1-Linux-X64- 2026-10-23T01:50:04.6886300Z enableCrossOsArchive: false 2026-10-23T01:50:04.6886514Z fail-on-cache-miss: false 2026-10-23T01:50:04.6886706Z lookup-only: false 2026-10-23T01:50:04.6886879Z save-always: false 2026-10-23T01:50:04.6887081Z env: 2026-10-23T01:50:04.6887252Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 173 2026-10-23T01:50:04.6887467Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 444 2026-10-23T01:50:04.6887609Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T01:50:04.6887749Z ##[endgroup] 2026-10-23T01:50:04.9220315Z Cache hit for: pnpm-full-v1-Linux-X64-00e587c1edf31fe669c96bc4768c0e07a969fff8e8228235fb75ec6c0abf4161 2026-10-23T01:50:05.9464360Z Received 532676608 of 995198885 (53.5%), 507.5 MBs/sec 2026-10-23T01:50:06.8984040Z Received 995198885 of 995198885 (100.0%), 486.0 MBs/sec 2026-10-23T01:50:06.8985365Z Cache Size: ~949 MB (995198885 B) 2026-10-23T01:50:06.9039444Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/4471e41b-ed38-4a92-bcee-c63084c4185b/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-23T01:50:12.7152430Z Cache restored successfully 2026-10-23T01:50:12.7646503Z Cache restored from key: pnpm-full-v1-Linux-X64-00e587c1edf31fe669c96bc4768c0e07a969fff8e8228235fb75ec6c0abf4161 2026-10-23T01:50:12.7742948Z ##[end-action id=__self.__actions_cache;outcome=success;conclusion=success;duration_ms=8169] 2026-10-23T01:50:12.7745206Z ##[start-action display=Install dependencies;id=__self.__run_2] 2026-10-23T01:50:12.7756730Z ##[group]Run vp install 2026-10-23T01:50:12.7756887Z vp install 2026-10-23T01:50:12.7765841Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-23T01:50:12.7766008Z env: 2026-10-23T01:50:12.7766120Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 173 2026-10-23T01:50:12.7766266Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 444 2026-10-23T01:50:12.7766411Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T01:50:12.7766550Z ##[endgroup] 2026-10-23T01:50:12.8342171Z Scope: all 33 workspace projects 2026-10-23T01:50:12.9487184Z ? Verifying lockfile against supply-chain policies (2088 entries)... 2026-10-23T01:50:13.2459783Z Packages are hard linked from the content-addressable store to the virtual store. 2026-10-23T01:50:13.2460310Z Content-addressable store is at: /home/runner/.local/share/pnpm/store/v11 2026-10-23T01:50:13.2460877Z Virtual store is at: node_modules/.pnpm 2026-10-23T01:50:15.7109826Z ✓ Lockfile passes supply-chain policies (2088 entries in 2.8s) 2026-10-23T01:50:15.7110098Z Lockfile is up to date, resolution step is skipped 2026-10-23T01:50:15.7292287Z Packages: +1721 2026-10-23T01:50:15.7292490Z ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2026-10-23T01:50:15.7627600Z Progress: resolved 1721, reused 1718, downloaded 0, added 1721, done 2026-10-23T01:50:16.8487045Z . prepare$ vp config --no-agent 2026-10-23T01:50:16.9520640Z . prepare: Done 2026-10-23T01:50:16.9535590Z 2026-10-23T01:50:16.9535843Z devDependencies: 2026-10-23T01:50:16.9535986Z + @coderabbitai/config 1.1.0 2026-10-23T01:50:16.9536129Z + @shadcn/lint 0.1.5 2026-10-23T01:50:16.9536280Z + @types/node 24.12.4 2026-10-23T01:50:16.9536408Z + knip 6.34.0 2026-10-23T01:50:16.9536541Z + typescript <- @tsc-rs/typescript 0.8.0 2026-10-23T01:50:16.9536689Z + vite-plus 1.3.0 2026-10-23T01:50:16.9536751Z 2026-10-23T01:50:16.9553405Z Done in 4.2s using pnpm v12.14.0 2026-10-23T01:50:16.9729434Z ##[end-action id=__self.__run_2;outcome=success;conclusion=success;duration_ms=4198] 2026-10-23T01:50:17.0311820Z ##[group]Run actions/cache@v6 2026-10-23T01:50:17.0311990Z with: 2026-10-23T01:50:17.0312100Z path: ~/.cache/electron 2026-10-23T01:50:17.0312327Z key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-23T01:50:17.0312566Z enableCrossOsArchive: false 2026-10-23T01:50:17.0312701Z fail-on-cache-miss: false 2026-10-23T01:50:17.0312823Z lookup-only: false 2026-10-23T01:50:17.0312940Z save-always: false 2026-10-23T01:50:17.0313047Z env: 2026-10-23T01:50:17.0313157Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 173 2026-10-23T01:50:17.0313304Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 444 2026-10-23T01:50:17.0313467Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T01:50:17.0313606Z ##[endgroup] 2026-10-23T01:50:17.2471361Z Cache hit for: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-23T01:50:17.4281103Z Received 122906203 of 122906203 (100.0%), 728.0 MBs/sec 2026-10-23T01:50:17.4281546Z Cache Size: ~117 MB (122906203 B) 2026-10-23T01:50:17.4299566Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/ae075480-e40f-4ad5-8326-a50945b9baad/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-23T01:50:17.4888197Z Cache restored successfully 2026-10-23T01:50:17.5082328Z Cache restored from key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-23T01:50:17.5197587Z ##[group]Run vp run --filter @t3tools/desktop ensure:electron 2026-10-23T01:50:17.5197834Z vp run --filter @t3tools/desktop ensure:electron 2026-10-23T01:50:17.5207326Z shell: /usr/bin/bash -e {0} 2026-10-23T01:50:17.5207473Z env: 2026-10-23T01:50:17.5207837Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 173 2026-10-23T01:50:17.5208065Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 444 2026-10-23T01:50:17.5208212Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T01:50:17.5208351Z ##[endgroup] 2026-10-23T01:50:17.7364941Z ~/apps/desktop$ node scripts/ensure-electron-runtime.mjs ⊘ cache disabled 2026-10-23T01:50:18.3327688Z /home/runner/_work/t3code/t3code/node_modules/.pnpm/electron@44.9.3_supports-color@8.1.1/node_modules/electron/dist/electron 2026-10-23T01:50:18.3348921Z 2026-10-23T01:50:18.3448866Z ##[group]Run vp run knip:check 2026-10-23T01:50:18.3449126Z vp run knip:check 2026-10-23T01:50:18.3458906Z shell: /usr/bin/bash -e {0} 2026-10-23T01:50:18.3459193Z env: 2026-10-23T01:50:18.3459380Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 173 2026-10-23T01:50:18.3459589Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 444 2026-10-23T01:50:18.3473604Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T01:50:18.3473753Z ##[endgroup] 2026-10-23T01:50:18.5246218Z $ knip --include files,dependencies --no-config-hints ⊘ cache disabled 2026-10-23T01:50:22.8037153Z 2026-10-23T01:50:22.8040643Z $ 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-23T01:50:55.5949365Z 2026-10-23T01:50:55.5950105Z --- 2026-10-23T01:50:55.5950465Z vp run: 2/2 successful. (Run `vp run --last-details` for full details) 2026-10-23T01:50:55.6054492Z ##[group]Run vp run --filter @t3tools/source-control-github generate --check 2026-10-23T01:50:55.6054927Z vp run --filter @t3tools/source-control-github generate --check 2026-10-23T01:50:55.6064034Z shell: /usr/bin/bash -e {0} 2026-10-23T01:50:55.6064169Z env: 2026-10-23T01:50:55.6064288Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 173 2026-10-23T01:50:55.6064443Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 444 2026-10-23T01:50:55.6064589Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T01:50:55.6064731Z ##[endgroup] 2026-10-23T01:50:55.7799153Z ~/packages/source-control-github$ graphqlgen --check ⊘ cache disabled 2026-10-23T01:50:56.0079686Z 2026-10-23T01:50:56.0172880Z ##[group]Run vp run --filter t3 generate --check 2026-10-23T01:50:56.0173120Z vp run --filter t3 generate --check 2026-10-23T01:50:56.0181933Z shell: /usr/bin/bash -e {0} 2026-10-23T01:50:56.0182067Z env: 2026-10-23T01:50:56.0182195Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 173 2026-10-23T01:50:56.0182342Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 444 2026-10-23T01:50:56.0182487Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T01:50:56.0182626Z ##[endgroup] 2026-10-23T01:50:56.1940078Z ~/apps/server$ graphqlgen --check ⊘ cache disabled 2026-10-23T01:50:56.3696274Z 2026-10-23T01:50:56.3805444Z ##[group]Run vp check 2026-10-23T01:50:56.3805631Z vp check 2026-10-23T01:50:56.3814622Z shell: /usr/bin/bash -e {0} 2026-10-23T01:50:56.3814756Z env: 2026-10-23T01:50:56.3814877Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 173 2026-10-23T01:50:56.3815027Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 444 2026-10-23T01:50:56.3815178Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T01:50:56.3815317Z ##[endgroup] 2026-10-23T01:50:57.0559179Z pass: All 5668 files are correctly formatted (494ms, 8 threads) 2026-10-23T01:51:03.5308286Z warn: Lint warnings found 2026-10-23T01:51:03.5310055Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T01:51:03.5310736Z ╭─[apps/mobile/src/features/files/FileTreeBrowser.tsx:155:5] 2026-10-23T01:51:03.5311078Z 150 │ 2026-10-23T01:51:03.5311357Z 151 │ useEffect(() => { 2026-10-23T01:51:03.5311650Z ·  ────┬──── 2026-10-23T01:51:03.5312002Z · ╰── This is the containing effect 2026-10-23T01:51:03.5312367Z 152 │ if (!controlledSelectedPath) { 2026-10-23T01:51:03.5313247Z 153 │ return; 2026-10-23T01:51:03.5313450Z 154 │ } 2026-10-23T01:51:03.5313700Z 155 │ setExpandedPaths((current) => { 2026-10-23T01:51:03.5313966Z ·  ────────┬─────── 2026-10-23T01:51:03.5314283Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T01:51:03.5314826Z 156 │ const ancestors = ancestorPaths(controlledSelectedPath); 2026-10-23T01:51:03.5315040Z ╰──── 2026-10-23T01:51:03.5315990Z  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-23T01:51:03.5317477Z  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-23T01:51:03.5317999Z 2026-10-23T01:51:03.5318392Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T01:51:03.5318970Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:257:7] 2026-10-23T01:51:03.5319386Z 256 │ return () => cancelAnimationFrame(frame); 2026-10-23T01:51:03.5319692Z 257 │ }, [props.path, targetIndex]); 2026-10-23T01:51:03.5319964Z ·  ─────┬──── 2026-10-23T01:51:03.5320349Z · ╰── Unnecessary dependency `props.path` 2026-10-23T01:51:03.5320667Z 258 │ 2026-10-23T01:51:03.5320833Z ╰──── 2026-10-23T01:51:03.5321410Z  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-23T01:51:03.5322376Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.5322871Z 2026-10-23T01:51:03.5323195Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T01:51:03.5323746Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:293:23] 2026-10-23T01:51:03.5324110Z 292 │ 2026-10-23T01:51:03.5327905Z ·  ─────────── 2026-10-23T01:51:03.5328217Z 310 │ {body} 2026-10-23T01:51:03.5328430Z ╰──── 2026-10-23T01:51:03.5328752Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-23T01:51:03.5329006Z 2026-10-23T01:51:03.5329334Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-23T01:51:03.5329883Z ╭─[packages/client-runtime/src/state/filesystem.ts:3:8] 2026-10-23T01:51:03.5330216Z 2 │ AuthFilesystemReadScope, 2026-10-23T01:51:03.5330461Z 3 │ type AuthSessionState, 2026-10-23T01:51:03.5330721Z ·  ────────┬─────── 2026-10-23T01:51:03.5331109Z · ╰── 'AuthSessionState' is imported here 2026-10-23T01:51:03.5331444Z 4 │ type FilesystemBrowseEntry, 2026-10-23T01:51:03.5331712Z ╰──── 2026-10-23T01:51:03.5331956Z  help: Consider removing this import. 2026-10-23T01:51:03.5332126Z 2026-10-23T01:51:03.5332507Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-23T01:51:03.5332978Z ╭─[packages/client-runtime/src/state/shell.ts:189:5] 2026-10-23T01:51:03.5333382Z 186 │ let waiting = yield* Ref.get(awaitingCompletion); 2026-10-23T01:51:03.5333665Z 187 │ let next = initial; 2026-10-23T01:51:03.5333891Z ·  ──┬─ 2026-10-23T01:51:03.5334317Z · ╰── From this accumulator 2026-10-23T01:51:03.5334657Z 188 │ let receivedSnapshot = false; 2026-10-23T01:51:03.5334948Z 189 │ for (const item of items) { 2026-10-23T01:51:03.5335196Z ·  ─┬─ 2026-10-23T01:51:03.5335493Z · ╰── For this loop 2026-10-23T01:51:03.5335813Z 190 │ if (item.kind === "synchronized") { 2026-10-23T01:51:03.5336080Z 191 │ waiting = false; 2026-10-23T01:51:03.5336353Z 192 │ if (Option.isSome(next.snapshot)) { 2026-10-23T01:51:03.5336718Z 193 │ next = { ...next, status: "live", error: Option.none() }; 2026-10-23T01:51:03.5337066Z ·  ───┬─── 2026-10-23T01:51:03.5337423Z · ╰── From this spread 2026-10-23T01:51:03.5337730Z 194 │ } 2026-10-23T01:51:03.5337916Z ╰──── 2026-10-23T01:51:03.5338339Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-23T01:51:03.5338895Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-23T01:51:03.5339198Z 2026-10-23T01:51:03.5339573Z ⚠ typescript(no-extraneous-class): Unexpected class with only a constructor. 2026-10-23T01:51:03.5340102Z ╭─[apps/desktop/src/preview/Manager.test.ts:158:18] 2026-10-23T01:51:03.5340480Z 157 │ BrowserWindow: browserWindowConstructor, 2026-10-23T01:51:03.5340934Z 158 │ ╭─▶ ClipboardItem: class { 2026-10-23T01:51:03.5341413Z 159 │ │ constructor(data: Record) { 2026-10-23T01:51:03.5341843Z 160 │ │ clipboardItemConstructor(data); 2026-10-23T01:51:03.5342421Z 161 │ │ } 2026-10-23T01:51:03.5342855Z 162 │ ╰─▶ }, 2026-10-23T01:51:03.5343167Z 163 │ clipboard: { 2026-10-23T01:51:03.5343377Z ╰──── 2026-10-23T01:51:03.5343729Z  help: Try replacing this class with a standalone function or deleting it entirely 2026-10-23T01:51:03.5344018Z 2026-10-23T01:51:03.5344301Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T01:51:03.5344764Z ╭─[apps/web/src/hooks/useThreadActions.ts:821:56] 2026-10-23T01:51:03.5345144Z 820 │ const resolved = resolveThreadTarget(target); 2026-10-23T01:51:03.5345595Z 821 │ if (resolved && !canSnooze(resolved.thread, { now: new Date().toISOString() })) { 2026-10-23T01:51:03.5346068Z ·  ─────┬──── 2026-10-23T01:51:03.5346575Z · ╰── Cannot call impure function 2026-10-23T01:51:03.5346974Z 822 │ return AsyncResult.failure( 2026-10-23T01:51:03.5347225Z ╰──── 2026-10-23T01:51:03.5347800Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-23T01:51:03.5348817Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T01:51:03.5349203Z 2026-10-23T01:51:03.5349481Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T01:51:03.5349945Z ╭─[apps/web/src/hooks/useThreadActions.ts:709:46] 2026-10-23T01:51:03.5350273Z 708 │ const wokeAt = resolved 2026-10-23T01:51:03.5350636Z 709 │ ? threadWokeAt(resolved.thread, { now: new Date().toISOString() }) 2026-10-23T01:51:03.5351054Z ·  ─────┬──── 2026-10-23T01:51:03.5351501Z · ╰── Cannot call impure function 2026-10-23T01:51:03.5351852Z 710 │ : null; 2026-10-23T01:51:03.5352044Z ╰──── 2026-10-23T01:51:03.5352588Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-23T01:51:03.5353513Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T01:51:03.5353983Z 2026-10-23T01:51:03.5354362Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-23T01:51:03.5354950Z ╭─[packages/client-runtime/src/operations/projects.ts:228:51] 2026-10-23T01:51:03.5355294Z 227 │ ): string { 2026-10-23T01:51:03.5355650Z 228 │ const folderName = workspaceRoot.split(/[\\/]/).filter(Boolean).at(-1) ?? ""; 2026-10-23T01:51:03.5356097Z ·  ────── 2026-10-23T01:51:03.5356502Z 229 │ return target.owner ? `${target.owner}/${folderName}` : folderName; 2026-10-23T01:51:03.5356812Z ╰──── 2026-10-23T01:51:03.5357168Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-23T01:51:03.5357467Z 2026-10-23T01:51:03.5358438Z ⚠ 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-23T01:51:03.5359482Z ╭─[packages/client-runtime/src/connection/supervisor.test.ts:135:3] 2026-10-23T01:51:03.5359926Z 134 │ let lastState = yield* SubscriptionRef.get(state); 2026-10-23T01:51:03.5360463Z 135 │ ╭─▶ for (let iteration = 0; iteration < 100; iteration += 1) { 2026-10-23T01:51:03.5362045Z 136 │ │ lastState = yield* SubscriptionRef.get(state); 2026-10-23T01:51:03.5362480Z 137 │ │ if (predicate(lastState)) { 2026-10-23T01:51:03.5362830Z 138 │ │ return lastState; 2026-10-23T01:51:03.5363119Z 139 │ │ } 2026-10-23T01:51:03.5363441Z 140 │ │ yield* Effect.yieldNow; 2026-10-23T01:51:03.5363849Z 141 │ ╰─▶ } 2026-10-23T01:51:03.5364185Z 142 │ return yield* Effect.die( 2026-10-23T01:51:03.5364416Z ╰──── 2026-10-23T01:51:03.5364506Z 2026-10-23T01:51:03.5364833Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T01:51:03.5365364Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:542:25] 2026-10-23T01:51:03.5365793Z 541 │ // range) the boundary string is identical and the chain would die. 2026-10-23T01:51:03.5366166Z 542 │ }, [nextSnoozeWakeAt, snoozeWakeTick]); 2026-10-23T01:51:03.5366492Z ·  ───────┬────── 2026-10-23T01:51:03.5366936Z · ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-23T01:51:03.5367579Z 543 │ const v2SearchQuery = props.searchQuery.trim().toLocaleLowerCase(); 2026-10-23T01:51:03.5367914Z ╰──── 2026-10-23T01:51:03.5368538Z  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-23T01:51:03.5369528Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.5370026Z 2026-10-23T01:51:03.5370299Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T01:51:03.5370773Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:533:53] 2026-10-23T01:51:03.5371141Z 532 │ if (Number.isNaN(wakeAtMs)) return; 2026-10-23T01:51:03.5371556Z 533 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647); 2026-10-23T01:51:03.5372016Z ·  ─────┬──── 2026-10-23T01:51:03.5372494Z · ╰── Cannot call impure function 2026-10-23T01:51:03.5372899Z 534 │ const id = setTimeout(() => { 2026-10-23T01:51:03.5373133Z ╰──── 2026-10-23T01:51:03.5373699Z  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-23T01:51:03.5374705Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T01:51:03.5375173Z 2026-10-23T01:51:03.5375536Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-23T01:51:03.5376260Z ╭─[scripts/lib/cli-external-packages.test.ts:114:11] 2026-10-23T01:51:03.5376699Z 113 │ const declared = { 2026-10-23T01:51:03.5376986Z 114 │ ...(manifest.dependencies ?? {}), 2026-10-23T01:51:03.5377333Z ·  ──────────────────────────────── 2026-10-23T01:51:03.5377676Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-23T01:51:03.5377942Z ╰──── 2026-10-23T01:51:03.5378507Z  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-23T01:51:03.5378933Z 2026-10-23T01:51:03.5379288Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-23T01:51:03.5379663Z ╭─[scripts/lib/cli-external-packages.test.ts:115:11] 2026-10-23T01:51:03.5379905Z 114 │ ...(manifest.dependencies ?? {}), 2026-10-23T01:51:03.5380126Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-23T01:51:03.5380370Z ·  ──────────────────────────────────────── 2026-10-23T01:51:03.5380598Z 116 │ ...(manifest.peerDependencies ?? {}), 2026-10-23T01:51:03.5380764Z ╰──── 2026-10-23T01:51:03.5381093Z  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-23T01:51:03.5381357Z 2026-10-23T01:51:03.5381579Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-23T01:51:03.5381926Z ╭─[scripts/lib/cli-external-packages.test.ts:116:11] 2026-10-23T01:51:03.5382167Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-23T01:51:03.5382391Z 116 │ ...(manifest.peerDependencies ?? {}), 2026-10-23T01:51:03.5382627Z ·  ──────────────────────────────────── 2026-10-23T01:51:03.5382813Z 117 │ }; 2026-10-23T01:51:03.5382938Z ╰──── 2026-10-23T01:51:03.5383263Z  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-23T01:51:03.5383525Z 2026-10-23T01:51:03.5384000Z ⚠ 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-23T01:51:03.5384558Z ╭─[apps/server/src/serverSettings.test.ts:1741:32] 2026-10-23T01:51:03.5384967Z 1740 │ const model = createModelSelection(ProviderInstanceId.make("codex"), "gpt-5.5"); 2026-10-23T01:51:03.5385576Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-23T01:51:03.5385888Z ·  ─────────────────── 2026-10-23T01:51:03.5386123Z 1742 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-23T01:51:03.5386301Z ╰──── 2026-10-23T01:51:03.5386361Z 2026-10-23T01:51:03.5386830Z ⚠ 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-23T01:51:03.5387376Z ╭─[apps/server/src/serverSettings.test.ts:1742:34] 2026-10-23T01:51:03.5387699Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-23T01:51:03.5388007Z 1742 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-23T01:51:03.5388313Z ·  ─────────────────── 2026-10-23T01:51:03.5388556Z 1743 │ Schema.fromJsonString(Schema.Array(ProjectScript)), 2026-10-23T01:51:03.5388742Z ╰──── 2026-10-23T01:51:03.5388799Z 2026-10-23T01:51:03.5388952Z ⚠ react(refs): Cannot access refs during render 2026-10-23T01:51:03.5389261Z ╭─[apps/mobile/src/features/home/thread-swipe-actions.tsx:494:27] 2026-10-23T01:51:03.5389485Z 493 │ > 2026-10-23T01:51:03.5389636Z 494 │ {props.children(close)} 2026-10-23T01:51:03.5389828Z ·  ──┬── 2026-10-23T01:51:03.5390093Z · ╰── Cannot access ref value during render 2026-10-23T01:51:03.5390365Z 495 │ 2026-10-23T01:51:03.5390524Z ╰──── 2026-10-23T01:51:03.5391084Z  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-23T01:51:03.5391841Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T01:51:03.5392133Z 2026-10-23T01:51:03.5392418Z ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'. 2026-10-23T01:51:03.5392822Z ╭─[apps/server/src/telemetry/AnalyticsService.ts:340:7] 2026-10-23T01:51:03.5393035Z 339 │ 2026-10-23T01:51:03.5393210Z 340 │ const layerTest = AnalyticsService.layerTest; 2026-10-23T01:51:03.5393418Z ·  ────┬──── 2026-10-23T01:51:03.5393647Z · ╰── 'layerTest' is declared here 2026-10-23T01:51:03.5393850Z ╰──── 2026-10-23T01:51:03.5394019Z  help: Consider removing this declaration. 2026-10-23T01:51:03.5394143Z 2026-10-23T01:51:03.5394418Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T01:51:03.5394849Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:123:7] 2026-10-23T01:51:03.5395090Z 118 │ 2026-10-23T01:51:03.5395222Z 119 │ useEffect(() => { 2026-10-23T01:51:03.5395383Z ·  ────┬──── 2026-10-23T01:51:03.5395609Z · ╰── This is the containing effect 2026-10-23T01:51:03.5395925Z 120 │ if (orientationSettled) return; 2026-10-23T01:51:03.5417613Z 121 │ const orientation = getNativeShowcaseOrientation(); 2026-10-23T01:51:03.5417976Z 122 │ if (orientation === null) { 2026-10-23T01:51:03.5418205Z 123 │ setOrientationSettled(true); 2026-10-23T01:51:03.5418473Z ·  ──────────┬────────── 2026-10-23T01:51:03.5418932Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T01:51:03.5419318Z 124 │ return; 2026-10-23T01:51:03.5419515Z ╰──── 2026-10-23T01:51:03.5420484Z  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-23T01:51:03.5421401Z  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-23T01:51:03.5421719Z 2026-10-23T01:51:03.5421998Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T01:51:03.5422434Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:304:7] 2026-10-23T01:51:03.5422722Z 292 │ 2026-10-23T01:51:03.5422895Z 293 │ useEffect(() => { 2026-10-23T01:51:03.5423064Z ·  ────┬──── 2026-10-23T01:51:03.5423292Z · ╰── This is the containing effect 2026-10-23T01:51:03.5423492Z 294 │ if ( 2026-10-23T01:51:03.5423638Z 295 │ scene === null || 2026-10-23T01:51:03.5423812Z 296 │ requestedScene === null || 2026-10-23T01:51:03.5423998Z 297 │ scene !== requestedScene || 2026-10-23T01:51:03.5424163Z 298 │ !hasFixture || 2026-10-23T01:51:03.5424317Z 299 │ !orientationSettled || 2026-10-23T01:51:03.5424482Z 300 │ !themeApplied || 2026-10-23T01:51:03.5424687Z 301 │ (scene === "agent-activity" && !agentActivityStaged) || 2026-10-23T01:51:03.5424958Z 302 │ !isShowcaseNativeContentReady({ scene, themeId, renderSignal }) 2026-10-23T01:51:03.5425193Z 303 │ ) { 2026-10-23T01:51:03.5425329Z 304 │ setReadyScene(null); 2026-10-23T01:51:03.5425494Z ·  ──────┬────── 2026-10-23T01:51:03.5425760Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T01:51:03.5425990Z 305 │ return; 2026-10-23T01:51:03.5426113Z ╰──── 2026-10-23T01:51:03.5426792Z  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-23T01:51:03.5427675Z  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-23T01:51:03.5427982Z 2026-10-23T01:51:03.5428323Z ⚠ eslint(no-unused-vars): Variable 'lastOutcome' is declared but never used. Unused variables should start with a '_'. 2026-10-23T01:51:03.5428758Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:128:9] 2026-10-23T01:51:03.5429195Z 127 │ let cancelled = false; 2026-10-23T01:51:03.5429491Z 128 │ let lastOutcome: string | null = null; 2026-10-23T01:51:03.5429677Z ·  ─────┬───── 2026-10-23T01:51:03.5429905Z · ╰── 'lastOutcome' is declared here 2026-10-23T01:51:03.5430226Z 129 │ void retryShowcaseOperation(async () => applyNativeShowcaseOrientation(orientation), { 2026-10-23T01:51:03.5430461Z ╰──── 2026-10-23T01:51:03.5430625Z  help: Consider removing this declaration. 2026-10-23T01:51:03.5430746Z 2026-10-23T01:51:03.5431230Z ⚠ 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-23T01:51:03.5431814Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:169:7] 2026-10-23T01:51:03.5432037Z 168 │ }); 2026-10-23T01:51:03.5432317Z 169 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-23T01:51:03.5432700Z 170 │ │ if ((yield* SubscriptionRef.get(shellState)).status === "synchronizing") break; 2026-10-23T01:51:03.5433002Z 171 │ │ yield* Effect.yieldNow; 2026-10-23T01:51:03.5433259Z 172 │ ╰─▶ } 2026-10-23T01:51:03.5433452Z 173 │ 2026-10-23T01:51:03.5433567Z ╰──── 2026-10-23T01:51:03.5433626Z 2026-10-23T01:51:03.5434110Z ⚠ 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-23T01:51:03.5434683Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:178:7] 2026-10-23T01:51:03.5434950Z 177 │ yield* Deferred.succeed(releaseSave, undefined); 2026-10-23T01:51:03.5435271Z 178 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-23T01:51:03.5435590Z 179 │ │ if ((yield* Ref.get(saved)).length > 0) break; 2026-10-23T01:51:03.5435837Z 180 │ │ yield* Effect.yieldNow; 2026-10-23T01:51:03.5436090Z 181 │ ╰─▶ } 2026-10-23T01:51:03.5436279Z 182 │ 2026-10-23T01:51:03.5436396Z ╰──── 2026-10-23T01:51:03.5436453Z 2026-10-23T01:51:03.5436930Z ⚠ 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-23T01:51:03.5437505Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:307:7] 2026-10-23T01:51:03.5437788Z 306 │ yield* Deferred.succeed(releaseUnenrichedSave, undefined); 2026-10-23T01:51:03.5438175Z 307 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-23T01:51:03.5438484Z 308 │ │ const values = yield* Ref.get(saved); 2026-10-23T01:51:03.5438818Z 309 │ │ if (values.length > 0 && values.at(-1)?.projects[0]?.repositoryIdentity != null) { 2026-10-23T01:51:03.5439096Z 310 │ │ break; 2026-10-23T01:51:03.5439361Z 311 │ │ } 2026-10-23T01:51:03.5439672Z 312 │ │ yield* Effect.yieldNow; 2026-10-23T01:51:03.5439925Z 313 │ ╰─▶ } 2026-10-23T01:51:03.5440115Z 314 │ 2026-10-23T01:51:03.5440228Z ╰──── 2026-10-23T01:51:03.5440286Z 2026-10-23T01:51:03.5440497Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable. 2026-10-23T01:51:03.5440824Z ╭─[apps/web/src/contextMenuFallback.test.ts:38:9] 2026-10-23T01:51:03.5441029Z 37 │ get isConnected() { 2026-10-23T01:51:03.5441207Z 38 │ let current: FakeElement | null = this; 2026-10-23T01:51:03.5441393Z ·  ─────── 2026-10-23T01:51:03.5441553Z 39 │ while (current?.parent) { 2026-10-23T01:51:03.5441697Z ╰──── 2026-10-23T01:51:03.5442045Z  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-23T01:51:03.5442318Z 2026-10-23T01:51:03.5442589Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-23T01:51:03.5442968Z ╭─[packages/provider-pi/src/server/adapter.ts:3389:7] 2026-10-23T01:51:03.5443165Z 3388 │ 2026-10-23T01:51:03.5443434Z 3389 │ const layer: Layer.Layer = 2026-10-23T01:51:03.5443704Z ·  ──┬── 2026-10-23T01:51:03.5443923Z · ╰── 'layer' is declared here 2026-10-23T01:51:03.5444128Z 3390 │ Layer.effect( 2026-10-23T01:51:03.5444260Z ╰──── 2026-10-23T01:51:03.5444430Z  help: Consider removing this declaration. 2026-10-23T01:51:03.5444555Z 2026-10-23T01:51:03.5444768Z ⚠ eslint(no-unused-vars): Type 'ThreadRunSummary' is imported but never used. 2026-10-23T01:51:03.5445060Z ╭─[apps/web/src/types.ts:22:3] 2026-10-23T01:51:03.5445243Z 21 │ EnvironmentThreadShell, 2026-10-23T01:51:03.5445401Z 22 │ ThreadRunSummary, 2026-10-23T01:51:03.5445569Z ·  ────────┬─────── 2026-10-23T01:51:03.5445808Z · ╰── 'ThreadRunSummary' is imported here 2026-10-23T01:51:03.5446026Z 23 │ ThreadRuntimeSummary, 2026-10-23T01:51:03.5446169Z ╰──── 2026-10-23T01:51:03.5446325Z  help: Consider removing this import. 2026-10-23T01:51:03.5446438Z 2026-10-23T01:51:03.5446645Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-23T01:51:03.5446987Z ╭─[packages/client-runtime/src/state/usageAccess.ts:3:8] 2026-10-23T01:51:03.5447670Z 2 │ AuthDiagnosticsReadScope, 2026-10-23T01:51:03.5447831Z 3 │ type AuthSessionState, 2026-10-23T01:51:03.5448007Z ·  ────────┬─────── 2026-10-23T01:51:03.5448318Z · ╰── 'AuthSessionState' is imported here 2026-10-23T01:51:03.5448544Z 4 │ sessionGrantsScope, 2026-10-23T01:51:03.5448680Z ╰──── 2026-10-23T01:51:03.5448838Z  help: Consider removing this import. 2026-10-23T01:51:03.5448951Z 2026-10-23T01:51:03.5449154Z ⚠ eslint(no-unused-vars): Identifier 'Arr' is imported but never used. 2026-10-23T01:51:03.5449484Z ╭─[packages/client-runtime/src/state/threadSort.ts:4:13] 2026-10-23T01:51:03.5449820Z 3 │ import type { EnvironmentThreadShell } from "./models.ts"; 2026-10-23T01:51:03.5450139Z 4 │ import * as Arr from "effect/Array"; 2026-10-23T01:51:03.5450313Z ·  ─┬─ 2026-10-23T01:51:03.5450532Z · ╰── 'Arr' is imported here 2026-10-23T01:51:03.5450750Z 5 │ import * as Order from "effect/Order"; 2026-10-23T01:51:03.5450904Z ╰──── 2026-10-23T01:51:03.5451059Z  help: Consider removing this import. 2026-10-23T01:51:03.5451174Z 2026-10-23T01:51:03.5451372Z ⚠ eslint(no-unused-vars): Identifier 'Order' is imported but never used. 2026-10-23T01:51:03.5451703Z ╭─[packages/client-runtime/src/state/threadSort.ts:5:13] 2026-10-23T01:51:03.5451926Z 4 │ import * as Arr from "effect/Array"; 2026-10-23T01:51:03.5452110Z 5 │ import * as Order from "effect/Order"; 2026-10-23T01:51:03.5452286Z ·  ──┬── 2026-10-23T01:51:03.5452524Z · ╰── 'Order' is imported here 2026-10-23T01:51:03.5452722Z 6 │ 2026-10-23T01:51:03.5452834Z ╰──── 2026-10-23T01:51:03.5452985Z  help: Consider removing this import. 2026-10-23T01:51:03.5453099Z 2026-10-23T01:51:03.5453261Z ⚠ react(immutability): This value cannot be modified 2026-10-23T01:51:03.5453586Z ╭─[apps/mobile/src/features/connection/ConnectionStatusDot.tsx:58:7] 2026-10-23T01:51:03.5453852Z 53 │ function usePulseAnimation(pulse: boolean) { 2026-10-23T01:51:03.5454064Z 54 │ const pulseProgress = useSharedValue(0); 2026-10-23T01:51:03.5454355Z ·  ──────┬────── 2026-10-23T01:51:03.5454600Z · ╰── `pulseProgress` originates here 2026-10-23T01:51:03.5454801Z 55 │ 2026-10-23T01:51:03.5454937Z 56 │ useEffect(() => { 2026-10-23T01:51:03.5455089Z 57 │ if (pulse) { 2026-10-23T01:51:03.5455261Z 58 │ pulseProgress.value = withRepeat( 2026-10-23T01:51:03.5455449Z ·  ──────┬────── 2026-10-23T01:51:03.5455694Z · ╰── `pulseProgress` cannot be modified 2026-10-23T01:51:03.5455909Z 59 │ withTiming(1, { 2026-10-23T01:51:03.5456048Z ╰──── 2026-10-23T01:51:03.5456382Z  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-23T01:51:03.5456962Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T01:51:03.5457263Z 2026-10-23T01:51:03.5457815Z ⚠ 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-23T01:51:03.5458427Z ╭─[packages/shared/src/atomicWrite.test.ts:139:5] 2026-10-23T01:51:03.5458642Z 138 │ Effect.gen(function* () { 2026-10-23T01:51:03.5458947Z 139 │ ╭─▶ while (fiber.pollUnsafe() === undefined) { 2026-10-23T01:51:03.5459266Z 140 │ │ yield* TestClock.adjust("100 millis"); 2026-10-23T01:51:03.5459743Z 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-23T01:51:03.5460346Z 142 │ │ yield* Effect.promise(() => new Promise((resolve) => setImmediate(resolve))); 2026-10-23T01:51:03.5460786Z 143 │ ╰─▶ } 2026-10-23T01:51:03.5461012Z 144 │ return yield* Fiber.join(fiber); 2026-10-23T01:51:03.5461173Z ╰──── 2026-10-23T01:51:03.5461230Z 2026-10-23T01:51:03.5461503Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T01:51:03.5461938Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:335:7] 2026-10-23T01:51:03.5462174Z 330 │ }; 2026-10-23T01:51:03.5462304Z 331 │ useEffect(() => { 2026-10-23T01:51:03.5462466Z ·  ────┬──── 2026-10-23T01:51:03.5462688Z · ╰── This is the containing effect 2026-10-23T01:51:03.5462941Z 332 │ if (!guidesEnabled && section === "guide") { 2026-10-23T01:51:03.5463160Z 333 │ requestedSection.current = "overview"; 2026-10-23T01:51:03.5463449Z 334 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-23T01:51:03.5463698Z 335 │ setSection("overview"); 2026-10-23T01:51:03.5463873Z ·  ─────┬──── 2026-10-23T01:51:03.5464143Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T01:51:03.5464375Z 336 │ } 2026-10-23T01:51:03.5464494Z ╰──── 2026-10-23T01:51:03.5465179Z  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-23T01:51:03.5466075Z  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-23T01:51:03.5466393Z 2026-10-23T01:51:03.5466605Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-23T01:51:03.5466988Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:337:6] 2026-10-23T01:51:03.5467271Z 332 │ if (!guidesEnabled && section === "guide") { 2026-10-23T01:51:03.5467482Z 333 │ requestedSection.current = "overview"; 2026-10-23T01:51:03.5467682Z ·  ────────┬─────── 2026-10-23T01:51:03.5468352Z · ╰── 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-23T01:51:03.5469149Z 334 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-23T01:51:03.5469597Z ·  ─────────┬───────── ──────┬────── 2026-10-23T01:51:03.5470464Z · │ ╰── 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-23T01:51:03.5471833Z · ╰── 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-23T01:51:03.5472498Z 335 │ setSection("overview"); 2026-10-23T01:51:03.5472653Z 336 │ } 2026-10-23T01:51:03.5472817Z 337 │ }, [guidesEnabled, section, insets.top]); 2026-10-23T01:51:03.5473099Z ·  ──────────────────┬───────────────── 2026-10-23T01:51:03.5473425Z · ╰── This dependency list is missing values used by the callback 2026-10-23T01:51:03.5473705Z 338 │ const tabContent = activityContent; 2026-10-23T01:51:03.5473864Z ╰──── 2026-10-23T01:51:03.5474096Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-23T01:51:03.5474598Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.5474901Z 2026-10-23T01:51:03.5475123Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-23T01:51:03.5475511Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:873:6] 2026-10-23T01:51:03.5475750Z 856 │ if ( 2026-10-23T01:51:03.5475939Z 857 │ lastSelection.current.path === route.params.path && 2026-10-23T01:51:03.5476154Z ·  ──────┬────── 2026-10-23T01:51:03.5476702Z · ╰── 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-23T01:51:03.5477237Z 858 │ lastSelection.current.id === route.params.fileSelectionId 2026-10-23T01:51:03.5477437Z 859 │ ) 2026-10-23T01:51:03.5477565Z 860 │ return; 2026-10-23T01:51:03.5477823Z 861 │ lastSelection.current = { path: route.params.path, id: route.params.fileSelectionId }; 2026-10-23T01:51:03.5478192Z 862 │ if (route.params.focus) navigation.setParams({ focus: undefined }); 2026-10-23T01:51:03.5478430Z 863 │ setJumpPath(route.params.path); 2026-10-23T01:51:03.5478610Z 864 │ setSelectedRowId(null); 2026-10-23T01:51:03.5478786Z 865 │ jumpStarted.current = false; 2026-10-23T01:51:03.5479038Z 866 │ const file = data.files.find((entry) => entry.path === route.params.path); 2026-10-23T01:51:03.5479291Z 867 │ if (!file || !nativeView.current) return; 2026-10-23T01:51:03.5479496Z ·  ─────┬──── 2026-10-23T01:51:03.5480122Z · ╰── 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-23T01:51:03.5480761Z 868 │ setCollapsedIds((ids) => ids.filter((id) => id !== file.id)); 2026-10-23T01:51:03.5480979Z 869 │ jumpStarted.current = true; 2026-10-23T01:51:03.5481219Z 870 │ void nativeView.current.scrollToFile(file.id, false).catch(() => { 2026-10-23T01:51:03.5481452Z 871 │ jumpStarted.current = false; 2026-10-23T01:51:03.5481612Z 872 │ }); 2026-10-23T01:51:03.5481879Z 873 │ }, [route.params.path, route.params.fileSelectionId, route.params.focus, data.files, navigation]); 2026-10-23T01:51:03.5482306Z ·  ──────────────────────────────────────────────┬────────────────────────────────────────────── 2026-10-23T01:51:03.5482734Z · ╰── This dependency list is missing values used by the callback 2026-10-23T01:51:03.5483069Z 874 │ const appliedFilter = useRef(filter.hideTestFiles); 2026-10-23T01:51:03.5483255Z ╰──── 2026-10-23T01:51:03.5483488Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-23T01:51:03.5483987Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.5484292Z 2026-10-23T01:51:03.5484563Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T01:51:03.5484994Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:79:5] 2026-10-23T01:51:03.5485230Z 76 │ 2026-10-23T01:51:03.5485353Z 77 │ useEffect(() => { 2026-10-23T01:51:03.5485508Z ·  ────┬──── 2026-10-23T01:51:03.5485734Z · ╰── This is the containing effect 2026-10-23T01:51:03.5486005Z 78 │ const { host, code } = parsePairingUrl(connectionPairingUrl); 2026-10-23T01:51:03.5486214Z 79 │ setHostInput(host); 2026-10-23T01:51:03.5486377Z ·  ──────┬───── 2026-10-23T01:51:03.5486642Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T01:51:03.5486877Z 80 │ setCodeInput(code); 2026-10-23T01:51:03.5487015Z ╰──── 2026-10-23T01:51:03.5487689Z  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-23T01:51:03.5488621Z  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-23T01:51:03.5488938Z 2026-10-23T01:51:03.5489202Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T01:51:03.5489630Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:89:5] 2026-10-23T01:51:03.5489861Z 82 │ 2026-10-23T01:51:03.5489985Z 83 │ useEffect(() => { 2026-10-23T01:51:03.5490140Z ·  ────┬──── 2026-10-23T01:51:03.5490360Z · ╰── This is the containing effect 2026-10-23T01:51:03.5490590Z 84 │ if (routePairingUrl.length === 0) { 2026-10-23T01:51:03.5490760Z 85 │ return; 2026-10-23T01:51:03.5490889Z 86 │ } 2026-10-23T01:51:03.5491003Z 87 │ 2026-10-23T01:51:03.5491249Z 88 │ const { host, code } = parsePairingUrl(routePairingUrl); 2026-10-23T01:51:03.5491544Z 89 │ setHostInput(host); 2026-10-23T01:51:03.5491711Z ·  ──────┬───── 2026-10-23T01:51:03.5491973Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T01:51:03.5492210Z 90 │ setCodeInput(code); 2026-10-23T01:51:03.5492348Z ╰──── 2026-10-23T01:51:03.5493020Z  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-23T01:51:03.5493906Z  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-23T01:51:03.5494346Z 2026-10-23T01:51:03.5494757Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T01:51:03.5495186Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:95:7] 2026-10-23T01:51:03.5495421Z 92 │ 2026-10-23T01:51:03.5495541Z 93 │ useEffect(() => { 2026-10-23T01:51:03.5495698Z ·  ────┬──── 2026-10-23T01:51:03.5495914Z · ╰── This is the containing effect 2026-10-23T01:51:03.5496137Z 94 │ if (pairingConnectionError) { 2026-10-23T01:51:03.5496311Z 95 │ setIsSubmitting(false); 2026-10-23T01:51:03.5496489Z ·  ───────┬─────── 2026-10-23T01:51:03.5496768Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T01:51:03.5496998Z 96 │ } 2026-10-23T01:51:03.5497113Z ╰──── 2026-10-23T01:51:03.5497780Z  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-23T01:51:03.5498693Z  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-23T01:51:03.5499003Z 2026-10-23T01:51:03.5499292Z ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'. 2026-10-23T01:51:03.5499700Z ╭─[apps/server/src/provider/AntigravityAuth.ts:285:20] 2026-10-23T01:51:03.5499903Z 284 │ }, 2026-10-23T01:51:03.5500055Z 285 │ (effect, flow, stopSessions) => 2026-10-23T01:51:03.5500250Z ·  ──────┬───── 2026-10-23T01:51:03.5500512Z · ╰── 'stopSessions' is declared here 2026-10-23T01:51:03.5500732Z 286 │ effect.pipe( 2026-10-23T01:51:03.5500869Z ╰──── 2026-10-23T01:51:03.5501030Z  help: Consider removing this parameter. 2026-10-23T01:51:03.5501149Z 2026-10-23T01:51:03.5501341Z ⚠ eslint(no-unused-vars): Type 'Scope' is imported but never used. 2026-10-23T01:51:03.5501667Z ╭─[apps/server/src/provider/ProviderAuthService.ts:15:18] 2026-10-23T01:51:03.5501904Z 14 │ import * as Layer from "effect/Layer"; 2026-10-23T01:51:03.5502202Z 15 │ import type * as Scope from "effect/Scope"; 2026-10-23T01:51:03.5502508Z ·  ──┬── 2026-10-23T01:51:03.5502741Z · ╰── 'Scope' is imported here 2026-10-23T01:51:03.5502974Z 16 │ import * as Stream from "effect/Stream"; 2026-10-23T01:51:03.5503135Z ╰──── 2026-10-23T01:51:03.5503293Z  help: Consider removing this import. 2026-10-23T01:51:03.5503409Z 2026-10-23T01:51:03.5503683Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T01:51:03.5504076Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2109:5] 2026-10-23T01:51:03.5504283Z 2107 │ ); 2026-10-23T01:51:03.5504419Z 2108 │ useEffect(() => { 2026-10-23T01:51:03.5504583Z ·  ────┬──── 2026-10-23T01:51:03.5504818Z · ╰── This is the containing effect 2026-10-23T01:51:03.5505046Z 2109 │ setExpandedVideo(null); 2026-10-23T01:51:03.5505239Z ·  ────────┬─────── 2026-10-23T01:51:03.5505510Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T01:51:03.5505755Z 2110 │ setExpandedFile(null); 2026-10-23T01:51:03.5505904Z ╰──── 2026-10-23T01:51:03.5506577Z  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-23T01:51:03.5507461Z  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-23T01:51:03.5507776Z 2026-10-23T01:51:03.5508015Z ⚠ eslint(no-unused-vars): Identifier 'isMarkdownFileLinkLabel' is imported but never used. 2026-10-23T01:51:03.5508438Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:62:10] 2026-10-23T01:51:03.5508728Z 61 │ import { resolveAssetUrl } from "@t3tools/client-runtime/state/assets"; 2026-10-23T01:51:03.5509020Z 62 │ import { isMarkdownFileLinkLabel } from "@t3tools/shared/markdownLinks"; 2026-10-23T01:51:03.5509275Z ·  ───────────┬─────────── 2026-10-23T01:51:03.5509552Z · ╰── 'isMarkdownFileLinkLabel' is imported here 2026-10-23T01:51:03.5509879Z 63 │ import { formatAttachmentSize } from "@t3tools/client-runtime/state/attachments"; 2026-10-23T01:51:03.5510166Z ╰──── 2026-10-23T01:51:03.5510416Z  help: Consider removing this import. 2026-10-23T01:51:03.5510533Z 2026-10-23T01:51:03.5510748Z ⚠ eslint(no-unused-vars): Identifier 'createContext' is imported but never used. 2026-10-23T01:51:03.5511088Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:88:3] 2026-10-23T01:51:03.5511293Z 87 │ import { 2026-10-23T01:51:03.5511426Z 88 │ createContext, 2026-10-23T01:51:03.5511585Z ·  ──────┬────── 2026-10-23T01:51:03.5511816Z · ╰── 'createContext' is imported here 2026-10-23T01:51:03.5512019Z 89 │ memo, 2026-10-23T01:51:03.5512137Z ╰──── 2026-10-23T01:51:03.5512294Z  help: Consider removing this import. 2026-10-23T01:51:03.5512407Z 2026-10-23T01:51:03.5512636Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-23T01:51:03.5512991Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:103:3] 2026-10-23T01:51:03.5513195Z 102 │ import { 2026-10-23T01:51:03.5513333Z 103 │ ActivityIndicator, 2026-10-23T01:51:03.5513506Z ·  ────────┬──────── 2026-10-23T01:51:03.5513751Z · ╰── 'ActivityIndicator' is imported here 2026-10-23T01:51:03.5513960Z 104 │ Image, 2026-10-23T01:51:03.5514079Z ╰──── 2026-10-23T01:51:03.5514236Z  help: Consider removing this import. 2026-10-23T01:51:03.5514348Z 2026-10-23T01:51:03.5514559Z ⚠ eslint(no-unused-vars): Identifier 'ScrollView' is imported but never used. 2026-10-23T01:51:03.5514898Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:110:3] 2026-10-23T01:51:03.5515114Z 109 │ Pressable, 2026-10-23T01:51:03.5515262Z 110 │ ScrollView, 2026-10-23T01:51:03.5515412Z ·  ─────┬──── 2026-10-23T01:51:03.5515636Z · ╰── 'ScrollView' is imported here 2026-10-23T01:51:03.5515842Z 111 │ StyleSheet, 2026-10-23T01:51:03.5515969Z ╰──── 2026-10-23T01:51:03.5516124Z  help: Consider removing this import. 2026-10-23T01:51:03.5516239Z 2026-10-23T01:51:03.5516446Z ⚠ eslint(no-unused-vars): Identifier 'NativeText' is imported but never used. 2026-10-23T01:51:03.5516788Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:112:11] 2026-10-23T01:51:03.5516997Z 111 │ StyleSheet, 2026-10-23T01:51:03.5517143Z 112 │ Text as NativeText, 2026-10-23T01:51:03.5517313Z ·  ─────┬──── 2026-10-23T01:51:03.5517560Z · ╰── 'NativeText' is imported here 2026-10-23T01:51:03.5517777Z 113 │ type ColorValue, 2026-10-23T01:51:03.5517915Z ╰──── 2026-10-23T01:51:03.5518067Z  help: Consider removing this import. 2026-10-23T01:51:03.5518226Z 2026-10-23T01:51:03.5518449Z ⚠ eslint(no-unused-vars): Identifier 'tryOpenExternalUrl' is imported but never used. 2026-10-23T01:51:03.5518803Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:134:10] 2026-10-23T01:51:03.5519086Z 133 │ import { copyTextWithHaptic } from "../../lib/copyTextWithHaptic"; 2026-10-23T01:51:03.5519363Z 134 │ import { tryOpenExternalUrl } from "../../lib/openExternalUrl"; 2026-10-23T01:51:03.5519598Z ·  ─────────┬──────── 2026-10-23T01:51:03.5519934Z · ╰── 'tryOpenExternalUrl' is imported here 2026-10-23T01:51:03.5520335Z 135 │ import { downloadAndShareAttachment } from "../../lib/attachmentDownload"; 2026-10-23T01:51:03.5520550Z ╰──── 2026-10-23T01:51:03.5520706Z  help: Consider removing this import. 2026-10-23T01:51:03.5520823Z 2026-10-23T01:51:03.5521051Z ⚠ eslint(no-unused-vars): Identifier 'faviconUrlForOrigin' is imported but never used. 2026-10-23T01:51:03.5521404Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:137:10] 2026-10-23T01:51:03.5521694Z 136 │ import { hasWideMarkdownBlock } from "../../lib/wideMarkdownBlocks"; 2026-10-23T01:51:03.5521970Z 137 │ import { faviconUrlForOrigin } from "@t3tools/shared/favicon"; 2026-10-23T01:51:03.5522204Z ·  ─────────┬───────── 2026-10-23T01:51:03.5522476Z · ╰── 'faviconUrlForOrigin' is imported here 2026-10-23T01:51:03.5522701Z 138 │ import { 2026-10-23T01:51:03.5522824Z ╰──── 2026-10-23T01:51:03.5522977Z  help: Consider removing this import. 2026-10-23T01:51:03.5523093Z 2026-10-23T01:51:03.5523316Z ⚠ eslint(no-unused-vars): Identifier 'MediaVideoPlayer' is imported but never used. 2026-10-23T01:51:03.5523666Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:151:10] 2026-10-23T01:51:03.5523964Z 150 │ import { VideoAttachmentTile } from "../../components/VideoAttachmentTile"; 2026-10-23T01:51:03.5524261Z 151 │ import { MediaVideoPlayer } from "../../components/MediaVideoPlayer"; 2026-10-23T01:51:03.5524501Z ·  ────────┬─────── 2026-10-23T01:51:03.5524760Z · ╰── 'MediaVideoPlayer' is imported here 2026-10-23T01:51:03.5525062Z 152 │ import { resolveMarkdownMediaPreview } from "../../lib/markdownMedia"; 2026-10-23T01:51:03.5525273Z ╰──── 2026-10-23T01:51:03.5525431Z  help: Consider removing this import. 2026-10-23T01:51:03.5525545Z 2026-10-23T01:51:03.5525772Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoPreviewUri' is imported but never used. 2026-10-23T01:51:03.5526128Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:155:3] 2026-10-23T01:51:03.5526357Z 154 │ attachmentVideoPreviewSource, 2026-10-23T01:51:03.5526535Z 155 │ mediaVideoPreviewUri, 2026-10-23T01:51:03.5526710Z ·  ──────────┬───────── 2026-10-23T01:51:03.5526967Z · ╰── 'mediaVideoPreviewUri' is imported here 2026-10-23T01:51:03.5527195Z 156 │ mediaVideoThumbnailKey, 2026-10-23T01:51:03.5527338Z ╰──── 2026-10-23T01:51:03.5527499Z  help: Consider removing this import. 2026-10-23T01:51:03.5527617Z 2026-10-23T01:51:03.5527846Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoThumbnailKey' is imported but never used. 2026-10-23T01:51:03.5528248Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:156:3] 2026-10-23T01:51:03.5528464Z 155 │ mediaVideoPreviewUri, 2026-10-23T01:51:03.5528628Z 156 │ mediaVideoThumbnailKey, 2026-10-23T01:51:03.5528808Z ·  ───────────┬────────── 2026-10-23T01:51:03.5529073Z · ╰── 'mediaVideoThumbnailKey' is imported here 2026-10-23T01:51:03.5529314Z 157 │ type MediaVideoPreviewSource, 2026-10-23T01:51:03.5529468Z ╰──── 2026-10-23T01:51:03.5529622Z  help: Consider removing this import. 2026-10-23T01:51:03.5529736Z 2026-10-23T01:51:03.5530023Z ⚠ eslint(no-unused-vars): Type 'MediaVideoPreviewSource' is imported but never used. 2026-10-23T01:51:03.5530471Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:157:8] 2026-10-23T01:51:03.5530690Z 156 │ mediaVideoThumbnailKey, 2026-10-23T01:51:03.5530860Z 157 │ type MediaVideoPreviewSource, 2026-10-23T01:51:03.5531055Z ·  ───────────┬─────────── 2026-10-23T01:51:03.5531330Z · ╰── 'MediaVideoPreviewSource' is imported here 2026-10-23T01:51:03.5531581Z 158 │ } from "../../lib/videoPreviewSource"; 2026-10-23T01:51:03.5531741Z ╰──── 2026-10-23T01:51:03.5531893Z  help: Consider removing this import. 2026-10-23T01:51:03.5532008Z 2026-10-23T01:51:03.5532217Z ⚠ eslint(no-unused-vars): Type 'ReviewDiffTheme' is imported but never used. 2026-10-23T01:51:03.5532560Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:165:15] 2026-10-23T01:51:03.5532894Z 164 │ import { parseReviewCommentMessageSegments } from "../review/reviewCommentSelection"; 2026-10-23T01:51:03.5533219Z 165 │ import type { ReviewDiffTheme } from "../review/shikiReviewHighlighter"; 2026-10-23T01:51:03.5533467Z ·  ───────┬─────── 2026-10-23T01:51:03.5533726Z · ╰── 'ReviewDiffTheme' is imported here 2026-10-23T01:51:03.5533940Z 166 │ import { 2026-10-23T01:51:03.5534060Z ╰──── 2026-10-23T01:51:03.5538287Z  help: Consider removing this import. 2026-10-23T01:51:03.5538433Z 2026-10-23T01:51:03.5538688Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownFontSizes' is imported but never used. 2026-10-23T01:51:03.5539069Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:180:3] 2026-10-23T01:51:03.5539279Z 179 │ import { 2026-10-23T01:51:03.5539426Z 180 │ resolveMarkdownFontSizes, 2026-10-23T01:51:03.5539619Z ·  ────────────┬─────────── 2026-10-23T01:51:03.5539886Z · ╰── 'resolveMarkdownFontSizes' is imported here 2026-10-23T01:51:03.5540142Z 181 │ resolveNativeMarkdownTypography, 2026-10-23T01:51:03.5540303Z ╰──── 2026-10-23T01:51:03.5540459Z  help: Consider removing this import. 2026-10-23T01:51:03.5540570Z 2026-10-23T01:51:03.5540802Z ⚠ eslint(no-unused-vars): Identifier 'markdownLinkIconSource' is imported but never used. 2026-10-23T01:51:03.5541163Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:185:10] 2026-10-23T01:51:03.5541450Z 184 │ import { PierreEntryIcon } from "../../components/PierreEntryIcon"; 2026-10-23T01:51:03.5541741Z 185 │ import { markdownLinkIconSource } from "../../lib/markdownLinkIcons"; 2026-10-23T01:51:03.5541988Z ·  ───────────┬────────── 2026-10-23T01:51:03.5542263Z · ╰── 'markdownLinkIconSource' is imported here 2026-10-23T01:51:03.5542487Z 186 │ import { 2026-10-23T01:51:03.5542613Z ╰──── 2026-10-23T01:51:03.5542766Z  help: Consider removing this import. 2026-10-23T01:51:03.5542882Z 2026-10-23T01:51:03.5543150Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownInlineCodePresentation' is imported but never used. 2026-10-23T01:51:03.5543541Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:188:3] 2026-10-23T01:51:03.5543766Z 187 │ normalizeNativeMarkdownUrl, 2026-10-23T01:51:03.5544148Z 188 │ resolveMarkdownInlineCodePresentation, 2026-10-23T01:51:03.5544487Z ·  ──────────────────┬────────────────── 2026-10-23T01:51:03.5544808Z · ╰── 'resolveMarkdownInlineCodePresentation' is imported here 2026-10-23T01:51:03.5545077Z 189 │ resolveMarkdownLinkIcon, 2026-10-23T01:51:03.5545228Z ╰──── 2026-10-23T01:51:03.5545380Z  help: Consider removing this import. 2026-10-23T01:51:03.5545495Z 2026-10-23T01:51:03.5545730Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownLinkIcon' is imported but never used. 2026-10-23T01:51:03.5546090Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:189:3] 2026-10-23T01:51:03.5546334Z 188 │ resolveMarkdownInlineCodePresentation, 2026-10-23T01:51:03.5546521Z 189 │ resolveMarkdownLinkIcon, 2026-10-23T01:51:03.5546706Z ·  ───────────┬─────────── 2026-10-23T01:51:03.5546973Z · ╰── 'resolveMarkdownLinkIcon' is imported here 2026-10-23T01:51:03.5547237Z 190 │ resolveMarkdownLinkPresentation, 2026-10-23T01:51:03.5547399Z ╰──── 2026-10-23T01:51:03.5547553Z  help: Consider removing this import. 2026-10-23T01:51:03.5547669Z 2026-10-23T01:51:03.5547908Z ⚠ eslint(no-unused-vars): Identifier 'useMarkdownCodeHighlight' is imported but never used. 2026-10-23T01:51:03.5548307Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:228:10] 2026-10-23T01:51:03.5548564Z 227 │ import { ThreadMcpApp } from "./McpAppWebView"; 2026-10-23T01:51:03.5548830Z 228 │ import { useMarkdownCodeHighlight } from "./markdownCodeHighlightState"; 2026-10-23T01:51:03.5549098Z ·  ────────────┬─────────── 2026-10-23T01:51:03.5549387Z · ╰── 'useMarkdownCodeHighlight' is imported here 2026-10-23T01:51:03.5549622Z 229 │ import { 2026-10-23T01:51:03.5549742Z ╰──── 2026-10-23T01:51:03.5549902Z  help: Consider removing this import. 2026-10-23T01:51:03.5550015Z 2026-10-23T01:51:03.5550235Z ⚠ eslint(no-unused-vars): Identifier 'useAssetUrlState' is imported but never used. 2026-10-23T01:51:03.5550587Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:232:3] 2026-10-23T01:51:03.5550799Z 231 │ useAssetUrl, 2026-10-23T01:51:03.5550949Z 232 │ useAssetUrlState, 2026-10-23T01:51:03.5551117Z ·  ────────┬─────── 2026-10-23T01:51:03.5551363Z · ╰── 'useAssetUrlState' is imported here 2026-10-23T01:51:03.5551583Z 233 │ useRefreshAssetUrl, 2026-10-23T01:51:03.5551799Z ╰──── 2026-10-23T01:51:03.5552057Z  help: Consider removing this import. 2026-10-23T01:51:03.5552172Z 2026-10-23T01:51:03.5552381Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T01:51:03.5552725Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2111:7] 2026-10-23T01:51:03.5552948Z 2110 │ setExpandedFile(null); 2026-10-23T01:51:03.5553208Z 2111 │ }, [props.environmentId, props.threadId, props.contentPresentation.kind]); 2026-10-23T01:51:03.5553613Z ·  ─────────┬───────── ───────┬────── ───────────────┬────────────── 2026-10-23T01:51:03.5554133Z · │ │ ╰── Unnecessary dependency `props.contentPresentation.kind` 2026-10-23T01:51:03.5554616Z · │ ╰── Unnecessary dependency `props.threadId` 2026-10-23T01:51:03.5554985Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-23T01:51:03.5555297Z 2112 │ const horizontalPadding = props.layoutVariant === "split" ? 20 : 16; 2026-10-23T01:51:03.5555509Z ╰──── 2026-10-23T01:51:03.5555877Z  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-23T01:51:03.5556497Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.5556804Z 2026-10-23T01:51:03.5557018Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T01:51:03.5557368Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2578:7] 2026-10-23T01:51:03.5557616Z 2577 │ reportHeaderMaterialVisibility(false); 2026-10-23T01:51:03.5557854Z 2578 │ }, [feedThreadKey, reportHeaderMaterialVisibility]); 2026-10-23T01:51:03.5558070Z ·  ──────┬────── 2026-10-23T01:51:03.5558370Z · ╰── Unnecessary dependency `feedThreadKey` 2026-10-23T01:51:03.5558581Z 2579 │ 2026-10-23T01:51:03.5558698Z ╰──── 2026-10-23T01:51:03.5559055Z  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-23T01:51:03.5559671Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.5559976Z 2026-10-23T01:51:03.5560184Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T01:51:03.5560526Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2594:7] 2026-10-23T01:51:03.5560731Z 2593 │ } 2026-10-23T01:51:03.5560938Z 2594 │ }, [listMountKey, props.contentInsetEndAdjustment, listRef]); 2026-10-23T01:51:03.5561164Z ·  ──────┬───── 2026-10-23T01:51:03.5561410Z · ╰── Unnecessary dependency `listMountKey` 2026-10-23T01:51:03.5561621Z 2595 │ 2026-10-23T01:51:03.5561735Z ╰──── 2026-10-23T01:51:03.5562173Z  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-23T01:51:03.5562877Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.5563183Z 2026-10-23T01:51:03.5563392Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T01:51:03.5563733Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2751:7] 2026-10-23T01:51:03.5563942Z 2750 │ } 2026-10-23T01:51:03.5564197Z 2751 │ }, [expandedTurnIds, expandedWorkGroups, expandedWorkRows, settleDisclosureAfterLayout]); 2026-10-23T01:51:03.5564604Z ·  ───────┬─────── ─────────┬──────── ────────┬─────── 2026-10-23T01:51:03.5565064Z · │ │ ╰── Unnecessary dependency `expandedWorkRows` 2026-10-23T01:51:03.5565515Z · │ ╰── Unnecessary dependency `expandedWorkGroups` 2026-10-23T01:51:03.5565872Z · ╰── Unnecessary dependency `expandedTurnIds` 2026-10-23T01:51:03.5566089Z 2752 │ 2026-10-23T01:51:03.5566206Z ╰──── 2026-10-23T01:51:03.5566567Z  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-23T01:51:03.5567171Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.5567475Z 2026-10-23T01:51:03.5567669Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-23T01:51:03.5567997Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:603:9] 2026-10-23T01:51:03.5568242Z 602 │ }; 2026-10-23T01:51:03.5568430Z 603 │ }, [props.environmentId, attachment.id, httpBaseUrl]), 2026-10-23T01:51:03.5568766Z ·  ─────────┬───────── ──────┬────── ─────┬───── 2026-10-23T01:51:03.5569197Z · │ │ ╰── Unnecessary dependency `httpBaseUrl` 2026-10-23T01:51:03.5569626Z · │ ╰── Unnecessary dependency `attachment.id` 2026-10-23T01:51:03.5569991Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-23T01:51:03.5570222Z 604 │ ); 2026-10-23T01:51:03.5570342Z ╰──── 2026-10-23T01:51:03.5570725Z  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-23T01:51:03.5571351Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.5571656Z 2026-10-23T01:51:03.5571892Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-23T01:51:03.5572246Z ╭─[apps/server/src/terminal/Manager.test.ts:731:31] 2026-10-23T01:51:03.5572444Z 730 │ ); 2026-10-23T01:51:03.5572765Z 731 │ const snapshot = events.filter((event) => event.type === "snapshot").at(-1)?.snapshot; 2026-10-23T01:51:03.5573155Z ·  ────── 2026-10-23T01:51:03.5573391Z 732 │ expect(snapshot?.history).toBe("aa😀\rEND"); 2026-10-23T01:51:03.5573564Z ╰──── 2026-10-23T01:51:03.5573797Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-23T01:51:03.5573978Z 2026-10-23T01:51:03.5574255Z ⚠ eslint(no-unused-vars): Function 'summarizePayload' is declared but never used. 2026-10-23T01:51:03.5574664Z ╭─[packages/provider-acp/src/server/nativeLogging.ts:22:10] 2026-10-23T01:51:03.5574875Z 21 │ 2026-10-23T01:51:03.5575223Z 22 │ function summarizePayload(payload: unknown): Readonly> { 2026-10-23T01:51:03.5575514Z ·  ────────┬─────── 2026-10-23T01:51:03.5575779Z · ╰── 'summarizePayload' is declared here 2026-10-23T01:51:03.5576048Z 23 │ if (payload === null) return { valueType: "null" }; 2026-10-23T01:51:03.5576228Z ╰──── 2026-10-23T01:51:03.5576393Z  help: Consider removing this declaration. 2026-10-23T01:51:03.5576516Z 2026-10-23T01:51:03.5576973Z ⚠ 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-23T01:51:03.5577531Z ╭─[apps/server/src/provider/acp/AntigravityProtocol.ts:263:20] 2026-10-23T01:51:03.5577778Z 262 │ ...(update._meta !== undefined 2026-10-23T01:51:03.5578059Z 263 │ ? { _meta: Schema.is(Schema.Record(Schema.String, Schema.Json))(meta) ? meta : null } 2026-10-23T01:51:03.5578365Z ·  ───────── 2026-10-23T01:51:03.5578537Z 264 │ : {}), 2026-10-23T01:51:03.5578671Z ╰──── 2026-10-23T01:51:03.5578729Z 2026-10-23T01:51:03.5579003Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T01:51:03.5579421Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:508:5] 2026-10-23T01:51:03.5579645Z 506 │ }, []); 2026-10-23T01:51:03.5579786Z 507 │ useEffect(() => { 2026-10-23T01:51:03.5579948Z ·  ────┬──── 2026-10-23T01:51:03.5580178Z · ╰── This is the containing effect 2026-10-23T01:51:03.5580403Z 508 │ setKeyboardStateSuspect(false); 2026-10-23T01:51:03.5580602Z ·  ───────────┬─────────── 2026-10-23T01:51:03.5580980Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T01:51:03.5581364Z 509 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-23T01:51:03.5581538Z ╰──── 2026-10-23T01:51:03.5582226Z  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-23T01:51:03.5583130Z  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-23T01:51:03.5583443Z 2026-10-23T01:51:03.5583711Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T01:51:03.5584122Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:868:7] 2026-10-23T01:51:03.5584456Z 865 │ const [lastKnownKeyboardHeight, setLastKnownKeyboardHeight] = useState(0); 2026-10-23T01:51:03.5584692Z 866 │ useEffect(() => { 2026-10-23T01:51:03.5584851Z ·  ────┬──── 2026-10-23T01:51:03.5585073Z · ╰── This is the containing effect 2026-10-23T01:51:03.5585375Z 867 │ if (liveKeyboardHeight > 0 && liveKeyboardHeight !== lastKnownKeyboardHeight) { 2026-10-23T01:51:03.5585665Z 868 │ setLastKnownKeyboardHeight(liveKeyboardHeight); 2026-10-23T01:51:03.5585896Z ·  ─────────────┬──────────── 2026-10-23T01:51:03.5586190Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T01:51:03.5586424Z 869 │ } 2026-10-23T01:51:03.5586553Z ╰──── 2026-10-23T01:51:03.5587235Z  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-23T01:51:03.5588159Z  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-23T01:51:03.5588475Z 2026-10-23T01:51:03.5588739Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T01:51:03.5589153Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1115:5] 2026-10-23T01:51:03.5589377Z 1113 │ 2026-10-23T01:51:03.5589512Z 1114 │ useEffect(() => { 2026-10-23T01:51:03.5589672Z ·  ────┬──── 2026-10-23T01:51:03.5589897Z · ╰── This is the containing effect 2026-10-23T01:51:03.5590114Z 1115 │ setAnchorMessageId(null); 2026-10-23T01:51:03.5590304Z ·  ─────────┬──────── 2026-10-23T01:51:03.5590578Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T01:51:03.5590838Z 1116 │ setSubmittedMessageId(null); 2026-10-23T01:51:03.5590995Z ╰──── 2026-10-23T01:51:03.5591740Z  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-23T01:51:03.5592742Z  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-23T01:51:03.5593056Z 2026-10-23T01:51:03.5593266Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T01:51:03.5593626Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:509:7] 2026-10-23T01:51:03.5593878Z 508 │ setKeyboardStateSuspect(false); 2026-10-23T01:51:03.5594085Z 509 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-23T01:51:03.5594351Z ·  ────────┬──────── ─────────┬──────── 2026-10-23T01:51:03.5594716Z · │ ╰── Unnecessary dependency `liveKeyboardHeight` 2026-10-23T01:51:03.5606407Z · ╰── Unnecessary dependency `isKeyboardVisible` 2026-10-23T01:51:03.5606758Z 510 │ const handleOwnedInputFocusChange = (focused: boolean) => { 2026-10-23T01:51:03.5606960Z ╰──── 2026-10-23T01:51:03.5607327Z  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-23T01:51:03.5607942Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.5608296Z 2026-10-23T01:51:03.5608507Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T01:51:03.5608885Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1063:7] 2026-10-23T01:51:03.5609145Z 1062 │ userInputInsetProgress.set(1); 2026-10-23T01:51:03.5609423Z 1063 │ }, [activeUserInputRequestId, userInputCardProgress, userInputInsetProgress]); 2026-10-23T01:51:03.5609697Z ·  ────────────┬─────────── 2026-10-23T01:51:03.5609991Z · ╰── Unnecessary dependency `activeUserInputRequestId` 2026-10-23T01:51:03.5610282Z 1064 │ const showContent = props.showContent ?? true; 2026-10-23T01:51:03.5610455Z ╰──── 2026-10-23T01:51:03.5610817Z  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-23T01:51:03.5611433Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.5611741Z 2026-10-23T01:51:03.5611950Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T01:51:03.5612315Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1121:15] 2026-10-23T01:51:03.5612556Z 1120 │ freeze.set(false); 2026-10-23T01:51:03.5612729Z 1121 │ }, [freeze, selectedThreadKey]); 2026-10-23T01:51:03.5612931Z ·  ────────┬──────── 2026-10-23T01:51:03.5613207Z · ╰── Unnecessary dependency `selectedThreadKey` 2026-10-23T01:51:03.5613431Z 1122 │ 2026-10-23T01:51:03.5613545Z ╰──── 2026-10-23T01:51:03.5613903Z  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-23T01:51:03.5614804Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.5615265Z 2026-10-23T01:51:03.5615433Z ⚠ react(immutability): This value cannot be modified 2026-10-23T01:51:03.5615749Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:951:5] 2026-10-23T01:51:03.5616027Z 946 │ const composerPopoverHeight = useSharedValue(0); 2026-10-23T01:51:03.5616261Z 947 │ const floatingControlCoverage = useSharedValue( 2026-10-23T01:51:03.5616481Z ·  ───────────┬─────────── 2026-10-23T01:51:03.5616756Z · ╰── `floatingControlCoverage` originates here 2026-10-23T01:51:03.5617057Z 948 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-23T01:51:03.5617257Z 949 │ ); 2026-10-23T01:51:03.5617392Z 950 │ useEffect(() => { 2026-10-23T01:51:03.5617582Z 951 │ floatingControlCoverage.value = withTiming( 2026-10-23T01:51:03.5617795Z ·  ───────────┬─────────── 2026-10-23T01:51:03.5618070Z · ╰── `floatingControlCoverage` cannot be modified 2026-10-23T01:51:03.5618390Z 952 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-23T01:51:03.5618585Z ╰──── 2026-10-23T01:51:03.5618917Z  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-23T01:51:03.5619496Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T01:51:03.5619804Z 2026-10-23T01:51:03.5619967Z ⚠ react(immutability): This value cannot be modified 2026-10-23T01:51:03.5620288Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:969:7] 2026-10-23T01:51:03.5620640Z 959 │ const userInputCoverageApplies = Platform.OS === "ios" && activeUserInputRequestId !== null; 2026-10-23T01:51:03.5620961Z 960 │ const combinedContentInsetEndAdjustment = useSharedValue( 2026-10-23T01:51:03.5621214Z ·  ────────────────┬──────────────── 2026-10-23T01:51:03.5621529Z · ╰── `combinedContentInsetEndAdjustment` originates here 2026-10-23T01:51:03.5621849Z 961 │ Math.max(0, estimatedOverlayHeight - nativeInsetOvercount), 2026-10-23T01:51:03.5622051Z 962 │ ); 2026-10-23T01:51:03.5622186Z 963 │ useAnimatedReaction( 2026-10-23T01:51:03.5622347Z 964 │ () => 2026-10-23T01:51:03.5622515Z 965 │ contentInsetEndAdjustment.value + 2026-10-23T01:51:03.5622714Z 966 │ floatingControlCoverage.value + 2026-10-23T01:51:03.5623025Z 967 │ (userInputCoverageApplies ? userInputInsetProgress.value * userInputCardCoverage.value : 0), 2026-10-23T01:51:03.5623291Z 968 │ (value) => { 2026-10-23T01:51:03.5623490Z 969 │ combinedContentInsetEndAdjustment.value = value; 2026-10-23T01:51:03.5623733Z ·  ────────────────┬──────────────── 2026-10-23T01:51:03.5624051Z · ╰── `combinedContentInsetEndAdjustment` cannot be modified 2026-10-23T01:51:03.5624298Z 970 │ }, 2026-10-23T01:51:03.5624420Z ╰──── 2026-10-23T01:51:03.5624838Z  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-23T01:51:03.5625560Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T01:51:03.5625860Z 2026-10-23T01:51:03.5626058Z ⚠ eslint(require-yield): This generator function does not have `yield` 2026-10-23T01:51:03.5626404Z ╭─[packages/provider-acp/src/server/mcpOverAcpBridge.ts:81:78] 2026-10-23T01:51:03.5626618Z  80 │ 2026-10-23T01:51:03.5626971Z  81 │ ╭─▶ export const makeAcpMcpOverAcpBridge = Effect.fn("AcpMcpOverAcpBridge.make")(function* ( 2026-10-23T01:51:03.5627349Z  82 │ │ options: AcpMcpOverAcpBridgeOptions, 2026-10-23T01:51:03.5627613Z  83 │ │ ): Effect.fn.Return { 2026-10-23T01:51:03.5627923Z  84 │ │ const fetchImplementation = options.fetchImplementation ?? fetch; 2026-10-23T01:51:03.5628273Z  85 │ │ const connections = new Map(); 2026-10-23T01:51:03.5628491Z  86 │ │ 2026-10-23T01:51:03.5628801Z  87 │ │ const connectionFor = (connectionId: string): Effect.Effect => 2026-10-23T01:51:03.5629116Z  88 │ │ Effect.suspend(() => { 2026-10-23T01:51:03.5629374Z  89 │ │ const connection = connections.get(connectionId); 2026-10-23T01:51:03.5629633Z  90 │ │ return connection === undefined 2026-10-23T01:51:03.5629977Z  91 │ │ ? Effect.fail(new AcpMcpOverAcpError(`Unknown MCP-over-ACP connection "${connectionId}".`)) 2026-10-23T01:51:03.5630304Z  92 │ │ : Effect.succeed(connection); 2026-10-23T01:51:03.5630504Z  93 │ │ }); 2026-10-23T01:51:03.5630670Z  94 │ │ 2026-10-23T01:51:03.5630844Z  95 │ │ const send = ( 2026-10-23T01:51:03.5631050Z  96 │ │ connection: Connection, 2026-10-23T01:51:03.5631257Z  97 │ │ message: unknown, 2026-10-23T01:51:03.5631530Z  98 │ │ ): Effect.Effect, AcpMcpOverAcpError> => 2026-10-23T01:51:03.5631813Z  99 │ │ connection.mutex.withPermits(1)( 2026-10-23T01:51:03.5632052Z 100 │ │ Effect.gen(function* () { 2026-10-23T01:51:03.5632298Z 101 │ │ const body = JSON.stringify(message); 2026-10-23T01:51:03.5632587Z 102 │ │ if (Buffer.byteLength(body) > MAX_MESSAGE_BYTES) { 2026-10-23T01:51:03.5632958Z 103 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("MCP-over-ACP message exceeds 8 MiB.")); 2026-10-23T01:51:03.5633253Z 104 │ │ } 2026-10-23T01:51:03.5633486Z 105 │ │ const response = yield* Effect.tryPromise({ 2026-10-23T01:51:03.5633731Z 106 │ │ try: (signal) => 2026-10-23T01:51:03.5633975Z 107 │ │ fetchImplementation(options.endpoint, { 2026-10-23T01:51:03.5634223Z 108 │ │ method: "POST", 2026-10-23T01:51:03.5634433Z 109 │ │ signal, 2026-10-23T01:51:03.5634639Z 110 │ │ headers: { 2026-10-23T01:51:03.5634959Z 111 │ │ "content-type": "application/json", 2026-10-23T01:51:03.5635420Z 112 │ │ accept: "application/json, text/event-stream", 2026-10-23T01:51:03.5635707Z 113 │ │ authorization: options.authorization, 2026-10-23T01:51:03.5635978Z 114 │ │ ...(connection.sessionId === null 2026-10-23T01:51:03.5636212Z 115 │ │ ? {} 2026-10-23T01:51:03.5636470Z 116 │ │ : { "mcp-session-id": connection.sessionId }), 2026-10-23T01:51:03.5636756Z 117 │ │ ...(connection.protocolVersion === null 2026-10-23T01:51:03.5636995Z 118 │ │ ? {} 2026-10-23T01:51:03.5637274Z 119 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-23T01:51:03.5637534Z 120 │ │ }, 2026-10-23T01:51:03.5637732Z 121 │ │ body, 2026-10-23T01:51:03.5637923Z 122 │ │ }), 2026-10-23T01:51:03.5638168Z 123 │ │ catch: bridgeError, 2026-10-23T01:51:03.5638367Z 124 │ │ }); 2026-10-23T01:51:03.5638685Z 125 │ │ connection.sessionId = response.headers.get("mcp-session-id") ?? connection.sessionId; 2026-10-23T01:51:03.5638999Z 126 │ │ if (!response.ok) { 2026-10-23T01:51:03.5639306Z 127 │ │ yield* Effect.promise( 2026-10-23T01:51:03.5639616Z 128 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-23T01:51:03.5639882Z 129 │ │ ); 2026-10-23T01:51:03.5640104Z 130 │ │ return yield* Effect.fail( 2026-10-23T01:51:03.5640452Z 131 │ │ new AcpMcpOverAcpError(`T3 Code MCP endpoint responded with HTTP ${response.status}.`), 2026-10-23T01:51:03.5640744Z 132 │ │ ); 2026-10-23T01:51:03.5640919Z 133 │ │ } 2026-10-23T01:51:03.5641235Z 134 │ │ const payloads = [...(yield* Stream.runCollect(responsePayloads(response, bridgeError)))]; 2026-10-23T01:51:03.5641563Z 135 │ │ for (const payload of payloads) { 2026-10-23T01:51:03.5641920Z 136 │ │ connection.protocolVersion = protocolVersionOf(payload) ?? connection.protocolVersion; 2026-10-23T01:51:03.5642213Z 137 │ │ } 2026-10-23T01:51:03.5642487Z 138 │ │ return payloads; 2026-10-23T01:51:03.5642838Z 139 │ │ }).pipe(Effect.mapError(bridgeError)), 2026-10-23T01:51:03.5643053Z 140 │ │ ); 2026-10-23T01:51:03.5643217Z 141 │ │ 2026-10-23T01:51:03.5643486Z 142 │ │ const disconnect = Effect.fn("mcpOverAcpBridge.disconnect")(function* ( 2026-10-23T01:51:03.5643797Z 143 │ │ request: AcpSchema.DisconnectMcpRequest, 2026-10-23T01:51:03.5644130Z 144 │ │ ): Effect.fn.Return { 2026-10-23T01:51:03.5644484Z 145 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-23T01:51:03.5644782Z 146 │ │ connections.delete(request.connectionId); 2026-10-23T01:51:03.5645050Z 147 │ │ const sessionId = connection.sessionId; 2026-10-23T01:51:03.5645289Z 148 │ │ if (sessionId !== null) { 2026-10-23T01:51:03.5645541Z 149 │ │ const response = yield* Effect.tryPromise({ 2026-10-23T01:51:03.5645781Z 150 │ │ try: (signal) => 2026-10-23T01:51:03.5646026Z 151 │ │ fetchImplementation(options.endpoint, { 2026-10-23T01:51:03.5646268Z 152 │ │ method: "DELETE", 2026-10-23T01:51:03.5646477Z 153 │ │ signal, 2026-10-23T01:51:03.5646678Z 154 │ │ headers: { 2026-10-23T01:51:03.5646927Z 155 │ │ authorization: options.authorization, 2026-10-23T01:51:03.5647190Z 156 │ │ "mcp-session-id": sessionId, 2026-10-23T01:51:03.5647463Z 157 │ │ ...(connection.protocolVersion === null 2026-10-23T01:51:03.5647706Z 158 │ │ ? {} 2026-10-23T01:51:03.5647979Z 159 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-23T01:51:03.5648283Z 160 │ │ }, 2026-10-23T01:51:03.5648466Z 161 │ │ }), 2026-10-23T01:51:03.5648664Z 162 │ │ catch: bridgeError, 2026-10-23T01:51:03.5648860Z 163 │ │ }); 2026-10-23T01:51:03.5649092Z 164 │ │ if (!response.ok && response.status !== 404) { 2026-10-23T01:51:03.5649348Z 165 │ │ return yield* Effect.fail( 2026-10-23T01:51:03.5649583Z 166 │ │ new AcpMcpOverAcpError( 2026-10-23T01:51:03.5649903Z 167 │ │ `T3 Code MCP endpoint rejected disconnect with HTTP ${response.status}.`, 2026-10-23T01:51:03.5650170Z 168 │ │ ), 2026-10-23T01:51:03.5650350Z 169 │ │ ); 2026-10-23T01:51:03.5650522Z 170 │ │ } 2026-10-23T01:51:03.5650727Z 171 │ │ yield* Effect.promise( 2026-10-23T01:51:03.5651025Z 172 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-23T01:51:03.5651285Z 173 │ │ ); 2026-10-23T01:51:03.5651457Z 174 │ │ } 2026-10-23T01:51:03.5651635Z 175 │ │ return {}; 2026-10-23T01:51:03.5651809Z 176 │ │ }); 2026-10-23T01:51:03.5652037Z 177 │ │ 2026-10-23T01:51:03.5652325Z 178 │ │ return { 2026-10-23T01:51:03.5652600Z 179 │ │ connect: Effect.fn("mcpOverAcpBridge.connect")(function* (request) { 2026-10-23T01:51:03.5652903Z 180 │ │ if (request.serverId !== "t3-code") { 2026-10-23T01:51:03.5653145Z 181 │ │ return yield* Effect.fail( 2026-10-23T01:51:03.5653460Z 182 │ │ new AcpMcpOverAcpError(`Unknown ACP MCP server "${request.serverId}".`), 2026-10-23T01:51:03.5653726Z 183 │ │ ); 2026-10-23T01:51:03.5653898Z 184 │ │ } 2026-10-23T01:51:03.5654124Z 185 │ │ if (connections.size >= MAX_CONNECTIONS) { 2026-10-23T01:51:03.5654596Z 186 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("Too many MCP-over-ACP connections.")); 2026-10-23T01:51:03.5654886Z 187 │ │ } 2026-10-23T01:51:03.5655140Z 188 │ │ const connectionId = yield* options.allocateConnectionId; 2026-10-23T01:51:03.5655418Z 189 │ │ connections.set(connectionId, { 2026-10-23T01:51:03.5655666Z 190 │ │ mutex: yield* Semaphore.make(1), 2026-10-23T01:51:03.5655891Z 191 │ │ sessionId: null, 2026-10-23T01:51:03.5656110Z 192 │ │ protocolVersion: null, 2026-10-23T01:51:03.5656331Z 193 │ │ nextRequestId: 0, 2026-10-23T01:51:03.5656521Z 194 │ │ }); 2026-10-23T01:51:03.5656723Z 195 │ │ return { connectionId }; 2026-10-23T01:51:03.5656916Z 196 │ │ }), 2026-10-23T01:51:03.5657191Z 197 │ │ message: Effect.fn("mcpOverAcpBridge.message")(function* (request) { 2026-10-23T01:51:03.5657533Z 198 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-23T01:51:03.5657828Z 199 │ │ const id = ++connection.nextRequestId; 2026-10-23T01:51:03.5658093Z 200 │ │ const payloads = yield* send(connection, { 2026-10-23T01:51:03.5658364Z 201 │ │ jsonrpc: "2.0", 2026-10-23T01:51:03.5658555Z 202 │ │ id, 2026-10-23T01:51:03.5658760Z 203 │ │ method: request.method, 2026-10-23T01:51:03.5659044Z 204 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-23T01:51:03.5659287Z 205 │ │ }); 2026-10-23T01:51:03.5659582Z 206 │ │ const response = payloads.find((payload) => asEnvelope(payload)?.id === id); 2026-10-23T01:51:03.5659898Z 207 │ │ const envelope = asEnvelope(response); 2026-10-23T01:51:03.5660139Z 208 │ │ if (envelope === null) { 2026-10-23T01:51:03.5660363Z 209 │ │ return yield* Effect.fail( 2026-10-23T01:51:03.5660679Z 210 │ │ new AcpMcpOverAcpError("MCP server did not return a matching response."), 2026-10-23T01:51:03.5660945Z 211 │ │ ); 2026-10-23T01:51:03.5661119Z 212 │ │ } 2026-10-23T01:51:03.5661329Z 213 │ │ if (envelope.error !== undefined) { 2026-10-23T01:51:03.5661756Z 214 │ │ return yield* Effect.fail(new AcpMcpOverAcpError(errorMessage(envelope.error))); 2026-10-23T01:51:03.5662144Z 215 │ │ } 2026-10-23T01:51:03.5662413Z 216 │ │ return (envelope.result ?? null) as AcpSchema.MessageMcpResponse; 2026-10-23T01:51:03.5662663Z 217 │ │ }), 2026-10-23T01:51:03.5662954Z 218 │ │ notification: Effect.fn("mcpOverAcpBridge.notification")(function* (request) { 2026-10-23T01:51:03.5663313Z 219 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-23T01:51:03.5663590Z 220 │ │ yield* send(connection, { 2026-10-23T01:51:03.5663808Z 221 │ │ jsonrpc: "2.0", 2026-10-23T01:51:03.5664024Z 222 │ │ method: request.method, 2026-10-23T01:51:03.5664311Z 223 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-23T01:51:03.5664558Z 224 │ │ }); 2026-10-23T01:51:03.5664728Z 225 │ │ }), 2026-10-23T01:51:03.5664905Z 226 │ │ disconnect, 2026-10-23T01:51:03.5665121Z 227 │ │ dispose: Effect.suspend(() => 2026-10-23T01:51:03.5665340Z 228 │ │ Effect.forEach( 2026-10-23T01:51:03.5665559Z 229 │ │ [...connections.keys()], 2026-10-23T01:51:03.5665854Z 230 │ │ (connectionId) => disconnect({ connectionId }).pipe(Effect.ignore), 2026-10-23T01:51:03.5666130Z 231 │ │ { discard: true }, 2026-10-23T01:51:03.5666319Z 232 │ │ ), 2026-10-23T01:51:03.5666492Z 233 │ │ ), 2026-10-23T01:51:03.5666665Z 234 │ │ }; 2026-10-23T01:51:03.5666895Z 235 │ ╰─▶ }); 2026-10-23T01:51:03.5667082Z ╰──── 2026-10-23T01:51:03.5667400Z  help: Add a `yield` expression inside the generator body, or convert it to a regular function if iteration behavior is not needed. 2026-10-23T01:51:03.5667643Z 2026-10-23T01:51:03.5667882Z ⚠ eslint(no-unused-vars): Function 'assertUserMessagesExclude' is declared but never used. 2026-10-23T01:51:03.5668314Z ╭─[apps/server/src/orchestration-v2/testkit/fixtures/shared.ts:1398:10] 2026-10-23T01:51:03.5668542Z 1397 │ 2026-10-23T01:51:03.5668690Z 1398 │ function assertUserMessagesExclude( 2026-10-23T01:51:03.5668908Z ·  ────────────┬──────────── 2026-10-23T01:51:03.5669201Z · ╰── 'assertUserMessagesExclude' is declared here 2026-10-23T01:51:03.5669483Z 1399 │ projection: OrchestrationV2ThreadProjection, 2026-10-23T01:51:03.5669661Z ╰──── 2026-10-23T01:51:03.5669828Z  help: Consider removing this declaration. 2026-10-23T01:51:03.5669948Z 2026-10-23T01:51:03.5670319Z ⚠ 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-23T01:51:03.5670792Z ╭─[apps/server/src/vcs/GitVcsDriverCore.test.ts:1713:34] 2026-10-23T01:51:03.5671076Z 1712 │ const stat = branch.files!.find((file) => file.path === path)!; 2026-10-23T01:51:03.5671372Z 1713 │ const request = yield* Schema.decodeEffect(ReviewDiffPreviewInput)({ 2026-10-23T01:51:03.5671649Z ·  ─────────────────── 2026-10-23T01:51:03.5671908Z 1714 │ cwd, 2026-10-23T01:51:03.5672160Z ╰──── 2026-10-23T01:51:03.5672220Z 2026-10-23T01:51:03.5672491Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T01:51:03.5672649Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:400:5] 2026-10-23T01:51:03.5672710Z 398 │ 2026-10-23T01:51:03.5672779Z 399 │ useEffect(() => { 2026-10-23T01:51:03.5672855Z ·  ────┬──── 2026-10-23T01:51:03.5672987Z · ╰── This is the containing effect 2026-10-23T01:51:03.5673084Z 400 │ setInspectorSelection((current) => { 2026-10-23T01:51:03.5673175Z ·  ──────────┬────────── 2026-10-23T01:51:03.5673359Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T01:51:03.5673465Z 401 │ if (props.renderInspector === undefined) { 2026-10-23T01:51:03.5673521Z ╰──── 2026-10-23T01:51:03.5674140Z  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-23T01:51:03.5674481Z  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-23T01:51:03.5674483Z 2026-10-23T01:51:03.5674707Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-23T01:51:03.5674866Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:528:24] 2026-10-23T01:51:03.5675033Z 527 │ const inspectorHeaderInset = Platform.OS === "ios" ? 0 : safeAreaInsets.top; 2026-10-23T01:51:03.5675207Z 528 │ ╭─▶ const GitInspector = () => ( 2026-10-23T01:51:03.5675310Z 529 │ │ 2026-10-23T01:51:03.5675927Z 534 │ ╰─▶ ); 2026-10-23T01:51:03.5676018Z 535 │ const FilesInspector = () => 2026-10-23T01:51:03.5676076Z ╰──── 2026-10-23T01:51:03.5676302Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-23T01:51:03.5676305Z 2026-10-23T01:51:03.5676522Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-23T01:51:03.5676674Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:535:26] 2026-10-23T01:51:03.5676736Z 534 │ ); 2026-10-23T01:51:03.5676906Z 535 │ ╭─▶ const FilesInspector = () => 2026-10-23T01:51:03.5677059Z 536 │ │ selectedThread !== null && selectedThreadCwd !== null ? ( 2026-10-23T01:51:03.5677167Z 537 │ │ 2026-10-23T01:51:03.5678369Z 545 │ ╰─▶ ) : null; 2026-10-23T01:51:03.5678527Z 546 │ const RouteInspector = () => props.renderInspector?.(inspectorHeaderInset); 2026-10-23T01:51:03.5678581Z ╰──── 2026-10-23T01:51:03.5678811Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-23T01:51:03.5678817Z 2026-10-23T01:51:03.5679080Z ⚠ eslint(no-unused-vars): Function 'promptResponseHasMissingXAiStopReason' is declared but never used. 2026-10-23T01:51:03.5679238Z ╭─[packages/provider-grok/src/server/xaiAcpExtension.ts:1620:10] 2026-10-23T01:51:03.5679294Z 1619 │ 2026-10-23T01:51:03.5679508Z 1620 │ function promptResponseHasMissingXAiStopReason(response: EffectAcpSchema.PromptResponse): boolean { 2026-10-23T01:51:03.5679632Z ·  ──────────────────┬────────────────── 2026-10-23T01:51:03.5679837Z · ╰── 'promptResponseHasMissingXAiStopReason' is declared here 2026-10-23T01:51:03.5679925Z 1621 │ const meta = response._meta; 2026-10-23T01:51:03.5679983Z ╰──── 2026-10-23T01:51:03.5680091Z  help: Consider removing this declaration. 2026-10-23T01:51:03.5680094Z 2026-10-23T01:51:03.5680355Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T01:51:03.5680510Z ╭─[apps/mobile/src/features/threads/use-worktree-setup.ts:30:40] 2026-10-23T01:51:03.5680675Z 28 │ const snapshot = resolveWorktreeSetupSnapshot(input.threadId, query.data, live); 2026-10-23T01:51:03.5680744Z 29 │ useEffect(() => { 2026-10-23T01:51:03.5680816Z ·  ────┬──── 2026-10-23T01:51:03.5680951Z · ╰── This is the containing effect 2026-10-23T01:51:03.5681079Z 30 │ if (snapshot && snapshot !== live) setHeld({ key, snapshot }); 2026-10-23T01:51:03.5681192Z ·  ───┬─── 2026-10-23T01:51:03.5681390Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T01:51:03.5681465Z 31 │ }, [key, live, snapshot]); 2026-10-23T01:51:03.5681519Z ╰──── 2026-10-23T01:51:03.5682135Z  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-23T01:51:03.5682467Z  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-23T01:51:03.5682470Z 2026-10-23T01:51:03.5682780Z ⚠ unicorn(prefer-string-starts-ends-with): Prefer String#startsWith over a regex with a caret. 2026-10-23T01:51:03.5682990Z ╭─[apps/server/src/vcs/GitVcsDriverCore.ts:509:11] 2026-10-23T01:51:03.5683096Z 508 │ GIT_DIAGNOSTIC_LINE_PATTERN.test(line) || 2026-10-23T01:51:03.5683236Z 509 │ (!/^remote:/.test(line) && SSH_TRANSPORT_REFUSAL_PATTERN.test(line)), 2026-10-23T01:51:03.5683324Z ·  ─────────────── 2026-10-23T01:51:03.5683382Z 510 │ ) 2026-10-23T01:51:03.5683439Z ╰──── 2026-10-23T01:51:03.5683598Z  help: Replace `/^remote:/.test(line)` with `line.startsWith('remote:')`. 2026-10-23T01:51:03.5683601Z 2026-10-23T01:51:03.5683864Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-23T01:51:03.5684004Z ╭─[packages/provider-grok/src/server/adapter.ts:408:7] 2026-10-23T01:51:03.5684066Z 407 │ 2026-10-23T01:51:03.5684140Z 408 │ const layer: Layer.Layer< 2026-10-23T01:51:03.5684209Z ·  ──┬── 2026-10-23T01:51:03.5684338Z · ╰── 'layer' is declared here 2026-10-23T01:51:03.5684432Z 409 │ ProviderAdapter.ProviderAdapterV2, 2026-10-23T01:51:03.5684486Z ╰──── 2026-10-23T01:51:03.5684590Z  help: Consider removing this declaration. 2026-10-23T01:51:03.5684593Z 2026-10-23T01:51:03.5684854Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T01:51:03.5685018Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:444:5] 2026-10-23T01:51:03.5685082Z 434 │ : null; 2026-10-23T01:51:03.5685155Z 435 │ useEffect(() => { 2026-10-23T01:51:03.5685231Z ·  ────┬──── 2026-10-23T01:51:03.5685366Z · ╰── This is the containing effect 2026-10-23T01:51:03.5685427Z 436 │ if ( 2026-10-23T01:51:03.5685503Z 437 │ props.active === false || 2026-10-23T01:51:03.5685583Z 438 │ activeDraftKey !== null || 2026-10-23T01:51:03.5685668Z 439 │ editingPendingTask !== null || 2026-10-23T01:51:03.5685743Z 440 │ selectedProject === null 2026-10-23T01:51:03.5685798Z 441 │ ) { 2026-10-23T01:51:03.5685864Z 442 │ return; 2026-10-23T01:51:03.5685920Z 443 │ } 2026-10-23T01:51:03.5685993Z 444 │ setActiveDraftKey( 2026-10-23T01:51:03.5686075Z ·  ────────┬──────── 2026-10-23T01:51:03.5686313Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T01:51:03.5686581Z 445 │ createNewTaskDraft({ 2026-10-23T01:51:03.5686639Z ╰──── 2026-10-23T01:51:03.5687251Z  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-23T01:51:03.5687583Z  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-23T01:51:03.5687586Z 2026-10-23T01:51:03.5687834Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-23T01:51:03.5688009Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:1244:36] 2026-10-23T01:51:03.5688121Z 1243 │ 2026-10-23T01:51:03.5688357Z 1244 │ {props.children} 2026-10-23T01:51:03.5688474Z ·  ───────────── 2026-10-23T01:51:03.5688553Z 1245 │ 2026-10-23T01:51:03.5688611Z ╰──── 2026-10-23T01:51:03.5688838Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-23T01:51:03.5688984Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-23T01:51:03.5688987Z 2026-10-23T01:51:03.5689190Z ⚠ eslint(no-unused-vars): Identifier 'identity' is imported but never used. 2026-10-23T01:51:03.5689304Z ╭─[apps/server/src/auth/http.ts:28:10] 2026-10-23T01:51:03.5689395Z 27 │ import * as Schema from "effect/Schema"; 2026-10-23T01:51:03.5689491Z 28 │ import { identity } from "effect/Function"; 2026-10-23T01:51:03.5689569Z ·  ────┬─── 2026-10-23T01:51:03.5689706Z · ╰── 'identity' is imported here 2026-10-23T01:51:03.5689793Z 29 │ import * as Layer from "effect/Layer"; 2026-10-23T01:51:03.5689847Z ╰──── 2026-10-23T01:51:03.5689949Z  help: Consider removing this import. 2026-10-23T01:51:03.5689953Z 2026-10-23T01:51:03.5690111Z ⚠ react(immutability): This value cannot be modified 2026-10-23T01:51:03.5690269Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-23T01:51:03.5690325Z  86 │ 2026-10-23T01:51:03.5690428Z  87 │ const cardCoverage = props.cardCoverage; 2026-10-23T01:51:03.5690514Z ·  ──────┬───── 2026-10-23T01:51:03.5690653Z · ╰── `cardCoverage` originates here 2026-10-23T01:51:03.5690738Z  88 │ const barHeightRef = useRef(0); 2026-10-23T01:51:03.5690822Z  89 │ const cardHeightRef = useRef(0); 2026-10-23T01:51:03.5690911Z  90 │ const cardHeight = useSharedValue(0); 2026-10-23T01:51:03.5691003Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-23T01:51:03.5691074Z  92 │ if (!cardCoverage) { 2026-10-23T01:51:03.5691139Z  93 │ return; 2026-10-23T01:51:03.5691196Z  94 │ } 2026-10-23T01:51:03.5691348Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-23T01:51:03.5691439Z  96 │ if (coverage === cardCoverage.value) { 2026-10-23T01:51:03.5691569Z  97 │ return; 2026-10-23T01:51:03.5691680Z  98 │ } 2026-10-23T01:51:03.5691784Z  99 │ if (cardCoverage.value === 0) { 2026-10-23T01:51:03.5691870Z 100 │ cardCoverage.value = coverage; 2026-10-23T01:51:03.5691950Z ·  ──────┬───── 2026-10-23T01:51:03.5692097Z · ╰── `cardCoverage` cannot be modified 2026-10-23T01:51:03.5692158Z 101 │ return; 2026-10-23T01:51:03.5692212Z ╰──── 2026-10-23T01:51:03.5692518Z  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-23T01:51:03.5692834Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T01:51:03.5692837Z 2026-10-23T01:51:03.5692999Z ⚠ react(immutability): This value cannot be modified 2026-10-23T01:51:03.5693161Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7] 2026-10-23T01:51:03.5693244Z  89 │ const cardHeightRef = useRef(0); 2026-10-23T01:51:03.5693331Z  90 │ const cardHeight = useSharedValue(0); 2026-10-23T01:51:03.5693409Z ·  ─────┬──── 2026-10-23T01:51:03.5693552Z · ╰── `cardHeight` originates here 2026-10-23T01:51:03.5693648Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-23T01:51:03.5693718Z  92 │ if (!cardCoverage) { 2026-10-23T01:51:03.5693777Z  93 │ return; 2026-10-23T01:51:03.5693834Z  94 │ } 2026-10-23T01:51:03.5693984Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-23T01:51:03.5694078Z  96 │ if (coverage === cardCoverage.value) { 2026-10-23T01:51:03.5694139Z  97 │ return; 2026-10-23T01:51:03.5694195Z  98 │ } 2026-10-23T01:51:03.5694400Z  99 │ if (cardCoverage.value === 0) { 2026-10-23T01:51:03.5694526Z 100 │ cardCoverage.value = coverage; 2026-10-23T01:51:03.5694614Z 101 │ return; 2026-10-23T01:51:03.5694698Z 102 │ } 2026-10-23T01:51:03.5694850Z 103 │ cardCoverage.value = withTiming(coverage, { 2026-10-23T01:51:03.5694993Z 104 │ duration: USER_INPUT_TOGGLE_DURATION_MS, 2026-10-23T01:51:03.5695122Z 105 │ easing: Easing.out(Easing.cubic), 2026-10-23T01:51:03.5695209Z 106 │ }); 2026-10-23T01:51:03.5695313Z 107 │ }, [cardCoverage]); 2026-10-23T01:51:03.5695441Z 108 │ const handleBarLayout = useCallback( 2026-10-23T01:51:03.5695570Z 109 │ (event: LayoutChangeEvent) => { 2026-10-23T01:51:03.5695708Z 110 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-23T01:51:03.5695782Z 111 │ notifyCoverage(); 2026-10-23T01:51:03.5695838Z 112 │ }, 2026-10-23T01:51:03.5695910Z 113 │ [notifyCoverage], 2026-10-23T01:51:03.5695967Z 114 │ ); 2026-10-23T01:51:03.5696054Z 115 │ const handleCardLayout = useCallback( 2026-10-23T01:51:03.5696134Z 116 │ (event: LayoutChangeEvent) => { 2026-10-23T01:51:03.5696262Z 117 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-23T01:51:03.5696378Z 118 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-23T01:51:03.5696457Z ·  ─────┬──── 2026-10-23T01:51:03.5696601Z · ╰── `cardHeight` cannot be modified 2026-10-23T01:51:03.5696672Z 119 │ notifyCoverage(); 2026-10-23T01:51:03.5696729Z ╰──── 2026-10-23T01:51:03.5697108Z  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-23T01:51:03.5697570Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T01:51:03.5697573Z 2026-10-23T01:51:03.5697780Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-23T01:51:03.5697941Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-23T01:51:03.5698029Z  90 │ const cardHeight = useSharedValue(0); 2026-10-23T01:51:03.5698156Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-23T01:51:03.5698266Z ·  ───┬─── 2026-10-23T01:51:03.5698523Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-23T01:51:03.5698600Z  92 │ if (!cardCoverage) { 2026-10-23T01:51:03.5698662Z  93 │ return; 2026-10-23T01:51:03.5698716Z  94 │ } 2026-10-23T01:51:03.5698868Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-23T01:51:03.5698958Z  96 │ if (coverage === cardCoverage.value) { 2026-10-23T01:51:03.5699017Z  97 │ return; 2026-10-23T01:51:03.5699073Z  98 │ } 2026-10-23T01:51:03.5699156Z  99 │ if (cardCoverage.value === 0) { 2026-10-23T01:51:03.5699240Z 100 │ cardCoverage.value = coverage; 2026-10-23T01:51:03.5699319Z ·  ──────┬───── 2026-10-23T01:51:03.5699456Z · ╰── This modifies `cardCoverage` 2026-10-23T01:51:03.5699517Z 101 │ return; 2026-10-23T01:51:03.5699577Z ╰──── 2026-10-23T01:51:03.5699939Z  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-23T01:51:03.5700255Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T01:51:03.5700258Z 2026-10-23T01:51:03.5700463Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-23T01:51:03.5700622Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-23T01:51:03.5700706Z  99 │ if (cardCoverage.value === 0) { 2026-10-23T01:51:03.5700787Z 100 │ cardCoverage.value = coverage; 2026-10-23T01:51:03.5700871Z ·  ──────┬───── 2026-10-23T01:51:03.5701010Z · ╰── This modifies `cardCoverage` 2026-10-23T01:51:03.5701072Z 101 │ return; 2026-10-23T01:51:03.5701128Z 102 │ } 2026-10-23T01:51:03.5701231Z 103 │ cardCoverage.value = withTiming(coverage, { 2026-10-23T01:51:03.5701329Z 104 │ duration: USER_INPUT_TOGGLE_DURATION_MS, 2026-10-23T01:51:03.5701415Z 105 │ easing: Easing.out(Easing.cubic), 2026-10-23T01:51:03.5701470Z 106 │ }); 2026-10-23T01:51:03.5701538Z 107 │ }, [cardCoverage]); 2026-10-23T01:51:03.5701624Z 108 │ const handleBarLayout = useCallback( 2026-10-23T01:51:03.5701707Z 109 │ (event: LayoutChangeEvent) => { 2026-10-23T01:51:03.5701815Z ·  ───────────────┬─────────────── 2026-10-23T01:51:03.5702107Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-23T01:51:03.5702324Z 110 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-23T01:51:03.5702377Z ╰──── 2026-10-23T01:51:03.5702724Z  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-23T01:51:03.5703036Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T01:51:03.5703039Z 2026-10-23T01:51:03.5703244Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-23T01:51:03.5703405Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7] 2026-10-23T01:51:03.5703495Z 115 │ const handleCardLayout = useCallback( 2026-10-23T01:51:03.5703582Z 116 │ (event: LayoutChangeEvent) => { 2026-10-23T01:51:03.5703690Z ·  ───────────────┬─────────────── 2026-10-23T01:51:03.5703915Z · ╰── This function may (indirectly) reassign or modify `cardHeight` after render 2026-10-23T01:51:03.5704042Z 117 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-23T01:51:03.5704159Z 118 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-23T01:51:03.5704237Z ·  ─────┬──── 2026-10-23T01:51:03.5704369Z · ╰── This modifies `cardHeight` 2026-10-23T01:51:03.5704438Z 119 │ notifyCoverage(); 2026-10-23T01:51:03.5704493Z ╰──── 2026-10-23T01:51:03.5704845Z  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-23T01:51:03.5705159Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T01:51:03.5705162Z 2026-10-23T01:51:03.5705334Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-23T01:51:03.5705485Z ╭─[apps/server/src/provider/Drivers/CodexDriver.test.ts:466:14] 2026-10-23T01:51:03.5705541Z 465 │ 2026-10-23T01:51:03.5705651Z 466 │ for (const {} of ["direct", "wrapper"] as const) { 2026-10-23T01:51:03.5705728Z ·  ── 2026-10-23T01:51:03.5705783Z 467 │ } 2026-10-23T01:51:03.5705837Z ╰──── 2026-10-23T01:51:03.5706080Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-23T01:51:03.5706085Z 2026-10-23T01:51:03.5706247Z ⚠ react(immutability): This value cannot be modified 2026-10-23T01:51:03.5706394Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:174:5] 2026-10-23T01:51:03.5706544Z 170 │ const expandedAngle = props.collapsedDirection === "right" ? 90 : 180; 2026-10-23T01:51:03.5706683Z 171 │ const rotation = useSharedValue(props.expanded ? expandedAngle : 0); 2026-10-23T01:51:03.5706761Z ·  ────┬─── 2026-10-23T01:51:03.5706892Z · ╰── `rotation` originates here 2026-10-23T01:51:03.5706949Z 172 │ 2026-10-23T01:51:03.5707021Z 173 │ useLayoutEffect(() => { 2026-10-23T01:51:03.5707160Z 174 │ rotation.value = withTiming(props.expanded ? expandedAngle : 0, { 2026-10-23T01:51:03.5707293Z ·  ────┬─── 2026-10-23T01:51:03.5707508Z · ╰── `rotation` cannot be modified 2026-10-23T01:51:03.5707611Z 175 │ duration: THREAD_DISCLOSURE_TRANSITION_MS, 2026-10-23T01:51:03.5707666Z ╰──── 2026-10-23T01:51:03.5707938Z  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-23T01:51:03.5708282Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T01:51:03.5708285Z 2026-10-23T01:51:03.5708485Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T01:51:03.5708640Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:1246:23] 2026-10-23T01:51:03.5708715Z 1245 │ { 2026-10-23T01:51:03.5709921Z ·  ────┬──── 2026-10-23T01:51:03.5710058Z · ╰── This is the containing effect 2026-10-23T01:51:03.5710153Z 357 │ if (!isReturningToProjectPicker) { 2026-10-23T01:51:03.5710214Z 358 │ return; 2026-10-23T01:51:03.5710270Z 359 │ } 2026-10-23T01:51:03.5710370Z 360 │ if (requestedInitialProjectAvailable) { 2026-10-23T01:51:03.5710467Z 361 │ setIsReturningToProjectPicker(false); 2026-10-23T01:51:03.5710570Z ·  ──────────────┬────────────── 2026-10-23T01:51:03.5710752Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T01:51:03.5710815Z 362 │ return; 2026-10-23T01:51:03.5710867Z ╰──── 2026-10-23T01:51:03.5711554Z  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-23T01:51:03.5711982Z  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-23T01:51:03.5711985Z 2026-10-23T01:51:03.5712248Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T01:51:03.5712403Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:504:9] 2026-10-23T01:51:03.5712459Z 447 │ 2026-10-23T01:51:03.5712525Z 448 │ useEffect(() => { 2026-10-23T01:51:03.5712599Z ·  ────┬──── 2026-10-23T01:51:03.5712735Z · ╰── This is the containing effect 2026-10-23T01:51:03.5712840Z 449 │ if (props.pendingTaskId || props.draftId) { 2026-10-23T01:51:03.5712902Z 450 │ return; 2026-10-23T01:51:03.5712960Z 451 │ } 2026-10-23T01:51:03.5713105Z 452 │ if (lastInitialProjectRefRef.current !== props.initialProjectRef) { 2026-10-23T01:51:03.5713238Z 453 │ lastInitialProjectRefRef.current = props.initialProjectRef; 2026-10-23T01:51:03.5713348Z 454 │ appliedInitialProjectKeyRef.current = null; 2026-10-23T01:51:03.5713404Z 455 │ } 2026-10-23T01:51:03.5713547Z 456 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-23T01:51:03.5713674Z 457 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-23T01:51:03.5713781Z 458 │ if (initialEnvironmentId && initialProjectId) { 2026-10-23T01:51:03.5713862Z 459 │ const directProject = 2026-10-23T01:51:03.5713934Z 460 │ projects.find( 2026-10-23T01:51:03.5714000Z 461 │ (project) => 2026-10-23T01:51:03.5714180Z 462 │ project.environmentId === initialEnvironmentId && project.id === initialProjectId, 2026-10-23T01:51:03.5714245Z 463 │ ) ?? null; 2026-10-23T01:51:03.5714301Z 464 │ 2026-10-23T01:51:03.5714371Z 465 │ if (directProject) { 2026-10-23T01:51:03.5714513Z 466 │ // Apply the route's project once. Re-applying on every change would 2026-10-23T01:51:03.5714653Z 467 │ // instantly revert environment/project switches made in the picker. 2026-10-23T01:51:03.5714819Z 468 │ const directProjectKey = `${directProject.environmentId}:${directProject.id}`; 2026-10-23T01:51:03.5714957Z 469 │ if (appliedInitialProjectKeyRef.current === directProjectKey) { 2026-10-23T01:51:03.5715028Z 470 │ return; 2026-10-23T01:51:03.5715090Z 471 │ } 2026-10-23T01:51:03.5715190Z 472 │ if (props.initialProjectRef?.branch) { 2026-10-23T01:51:03.5715252Z 473 │ if ( 2026-10-23T01:51:03.5715398Z 474 │ selectedProject?.environmentId !== directProject.environmentId || 2026-10-23T01:51:03.5715501Z 475 │ selectedProject.id !== directProject.id 2026-10-23T01:51:03.5715563Z 476 │ ) { 2026-10-23T01:51:03.5715648Z 477 │ setProject(directProject); 2026-10-23T01:51:03.5715714Z 478 │ return; 2026-10-23T01:51:03.5715774Z 479 │ } 2026-10-23T01:51:03.5715861Z 480 │ if (!flow.draftKey) return; 2026-10-23T01:51:03.5716000Z 481 │ // The route completes checkout before mounting this composer. Local 2026-10-23T01:51:03.5716209Z 482 │ // mode reuses an existing worktree; worktree mode would create another. 2026-10-23T01:51:03.5716399Z 483 │ updateComposerDraftSettings(flow.draftKey, { 2026-10-23T01:51:03.5716481Z 484 │ workspaceSelection: { 2026-10-23T01:51:03.5716551Z 485 │ mode: "local", 2026-10-23T01:51:03.5716659Z 486 │ branch: props.initialProjectRef.branch, 2026-10-23T01:51:03.5716798Z 487 │ worktreePath: props.initialProjectRef.worktreePath ?? null, 2026-10-23T01:51:03.5716883Z 488 │ startFromOrigin: false, 2026-10-23T01:51:03.5716943Z 489 │ }, 2026-10-23T01:51:03.5717005Z 490 │ }); 2026-10-23T01:51:03.5717064Z 491 │ } 2026-10-23T01:51:03.5717192Z 492 │ appliedInitialProjectKeyRef.current = directProjectKey; 2026-10-23T01:51:03.5717253Z 493 │ if ( 2026-10-23T01:51:03.5717397Z 494 │ selectedProject?.environmentId === directProject.environmentId && 2026-10-23T01:51:03.5717503Z 495 │ selectedProject.id === directProject.id 2026-10-23T01:51:03.5717564Z 496 │ ) { 2026-10-23T01:51:03.5717628Z 497 │ return; 2026-10-23T01:51:03.5717688Z 498 │ } 2026-10-23T01:51:03.5717770Z 499 │ setProject(directProject); 2026-10-23T01:51:03.5717831Z 500 │ return; 2026-10-23T01:51:03.5717888Z 501 │ } 2026-10-23T01:51:03.5717942Z 502 │ 2026-10-23T01:51:03.5718023Z 503 │ if (projects.length > 0) { 2026-10-23T01:51:03.5718120Z 504 │ setIsReturningToProjectPicker(true); 2026-10-23T01:51:03.5718268Z ·  ──────────────┬────────────── 2026-10-23T01:51:03.5718455Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T01:51:03.5718514Z 505 │ } 2026-10-23T01:51:03.5718565Z ╰──── 2026-10-23T01:51:03.5719191Z  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-23T01:51:03.5719524Z  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-23T01:51:03.5719526Z 2026-10-23T01:51:03.5719790Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T01:51:03.5719947Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:604:5] 2026-10-23T01:51:03.5719999Z 545 │ 2026-10-23T01:51:03.5720071Z 546 │ useEffect(() => { 2026-10-23T01:51:03.5720149Z ·  ────┬──── 2026-10-23T01:51:03.5720284Z · ╰── This is the containing effect 2026-10-23T01:51:03.5720378Z 547 │ const shareId = props.incomingShareId; 2026-10-23T01:51:03.5720463Z 548 │ const draftKey = flow.draftKey; 2026-10-23T01:51:03.5720567Z 549 │ const destinationProject = selectedProject; 2026-10-23T01:51:03.5720710Z 550 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-23T01:51:03.5720836Z 551 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-23T01:51:03.5720928Z 552 │ const selectedProjectMatchesRoute = 2026-10-23T01:51:03.5721008Z 553 │ !initialEnvironmentId || 2026-10-23T01:51:03.5721081Z 554 │ !initialProjectId || 2026-10-23T01:51:03.5721212Z 555 │ (destinationProject?.environmentId === initialEnvironmentId && 2026-10-23T01:51:03.5721383Z 556 │ destinationProject.id === initialProjectId); 2026-10-23T01:51:03.5721493Z 557 │ if ( 2026-10-23T01:51:03.5721590Z 558 │ !shareId || 2026-10-23T01:51:03.5721657Z 559 │ !draftKey || 2026-10-23T01:51:03.5721733Z 560 │ !destinationProject || 2026-10-23T01:51:03.5721824Z 561 │ !selectedProjectMatchesRoute || 2026-10-23T01:51:03.5721914Z 562 │ cancelledIncomingShareId === shareId 2026-10-23T01:51:03.5721972Z 563 │ ) { 2026-10-23T01:51:03.5722034Z 564 │ return; 2026-10-23T01:51:03.5722091Z 565 │ } 2026-10-23T01:51:03.5722188Z 566 │ const importKey = `${shareId}:${draftKey}`; 2026-10-23T01:51:03.5722247Z 567 │ if ( 2026-10-23T01:51:03.5722361Z 568 │ startedShareImportKeyRef.current === importKey || 2026-10-23T01:51:03.5722474Z 569 │ cancellingShareImportKeyRef.current === importKey 2026-10-23T01:51:03.5722535Z 570 │ ) { 2026-10-23T01:51:03.5722601Z 571 │ return; 2026-10-23T01:51:03.5722659Z 572 │ } 2026-10-23T01:51:03.5722714Z 573 │ 2026-10-23T01:51:03.5722782Z 574 │ if (!incomingShare) { 2026-10-23T01:51:03.5722988Z 575 │ if (isIncomingShareUnavailable && alertedUnavailableIncomingShareIdRef.current !== shareId) { 2026-10-23T01:51:03.5723118Z 576 │ alertedUnavailableIncomingShareIdRef.current = shareId; 2026-10-23T01:51:03.5723188Z 577 │ Dialog.alert( 2026-10-23T01:51:03.5723271Z 578 │ "Shared content unavailable", 2026-10-23T01:51:03.5723450Z 579 │ "The shared content is no longer in the inbox. You can continue editing this task draft.", 2026-10-23T01:51:03.5723511Z 580 │ ); 2026-10-23T01:51:03.5723566Z 581 │ } 2026-10-23T01:51:03.5723629Z 582 │ return; 2026-10-23T01:51:03.5723691Z 583 │ } 2026-10-23T01:51:03.5723750Z 584 │ 2026-10-23T01:51:03.5723806Z 585 │ if ( 2026-10-23T01:51:03.5723970Z 586 │ incomingShare.attachments.some((attachment) => attachment.type === "file") && 2026-10-23T01:51:03.5724075Z 587 │ selectedEnvironmentServerConfig === null 2026-10-23T01:51:03.5724132Z 588 │ ) { 2026-10-23T01:51:03.5724192Z 589 │ return; 2026-10-23T01:51:03.5724249Z 590 │ } 2026-10-23T01:51:03.5724303Z 591 │ 2026-10-23T01:51:03.5724442Z 592 │ if (alertedUnavailableIncomingShareIdRef.current === shareId) { 2026-10-23T01:51:03.5724565Z 593 │ alertedUnavailableIncomingShareIdRef.current = null; 2026-10-23T01:51:03.5724621Z 594 │ } 2026-10-23T01:51:03.5724730Z 595 │ startedShareImportKeyRef.current = importKey; 2026-10-23T01:51:03.5724800Z 596 │ const draftBackup = 2026-10-23T01:51:03.5724993Z 597 │ shareImportDraftBackupRef.current.get(importKey) ?? getComposerDraftSnapshot(draftKey); 2026-10-23T01:51:03.5725137Z 598 │ shareImportDraftBackupRef.current.set(importKey, draftBackup); 2026-10-23T01:51:03.5725228Z 599 │ const importToken = Symbol(importKey); 2026-10-23T01:51:03.5725308Z 600 │ let didReserveShare = false; 2026-10-23T01:51:03.5725383Z 601 │ let didConsumeShare = false; 2026-10-23T01:51:03.5725465Z 602 │ let needsDraftRestore = false; 2026-10-23T01:51:03.5725578Z 603 │ activeShareImportTokenRef.current = importToken; 2026-10-23T01:51:03.5725663Z 604 │ setImportingShareKey(importKey); 2026-10-23T01:51:03.5725752Z ·  ──────────┬───────── 2026-10-23T01:51:03.5725930Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T01:51:03.5726000Z 605 │ void (async () => { 2026-10-23T01:51:03.5726055Z ╰──── 2026-10-23T01:51:03.5726748Z  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-23T01:51:03.5727169Z  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-23T01:51:03.5727172Z 2026-10-23T01:51:03.5727381Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T01:51:03.5727539Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:524:5] 2026-10-23T01:51:03.5727617Z 523 │ props.initialProjectRef, 2026-10-23T01:51:03.5727694Z 524 │ props.incomingShareId, 2026-10-23T01:51:03.5727788Z ·  ──────────┬────────── 2026-10-23T01:51:03.5727964Z · ╰── Unnecessary dependency `props.incomingShareId` 2026-10-23T01:51:03.5728037Z 525 │ props.pendingTaskId, 2026-10-23T01:51:03.5728090Z ╰──── 2026-10-23T01:51:03.5728430Z  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-23T01:51:03.5728751Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.5728754Z 2026-10-23T01:51:03.5728975Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-23T01:51:03.5729132Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:543:5] 2026-10-23T01:51:03.5729255Z 542 │ loadedBranchesProjectKeyRef.current = projectKey; 2026-10-23T01:51:03.5729329Z 543 │ flow.loadBranches(); 2026-10-23T01:51:03.5729401Z ·  ──┬─ 2026-10-23T01:51:03.5729525Z · ╰── Missing dependency `flow` 2026-10-23T01:51:03.5729623Z 544 │ }, [flow.loadBranches, selectedProject]); 2026-10-23T01:51:03.5729711Z ·  ────────┬──────── 2026-10-23T01:51:03.5729917Z · ╰── Overly precise dependency `flow.loadBranches`, use `flow` instead 2026-10-23T01:51:03.5729970Z 545 │ 2026-10-23T01:51:03.5730026Z ╰──── 2026-10-23T01:51:03.5730468Z  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-23T01:51:03.5730791Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.5730794Z 2026-10-23T01:51:03.5731003Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T01:51:03.5731153Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:766:5] 2026-10-23T01:51:03.5731220Z 765 │ flow.draftKey, 2026-10-23T01:51:03.5731302Z 766 │ hasImportedIncomingShare, 2026-10-23T01:51:03.5731398Z ·  ────────────┬─────────── 2026-10-23T01:51:03.5731575Z · ╰── Unnecessary dependency `hasImportedIncomingShare` 2026-10-23T01:51:03.5731709Z 767 │ incomingShare, 2026-10-23T01:51:03.5731881Z 768 │ isIncomingShareInboxLoading, 2026-10-23T01:51:03.5731981Z ·  ─────────────┬───────────── 2026-10-23T01:51:03.5732163Z · ╰── Unnecessary dependency `isIncomingShareInboxLoading` 2026-10-23T01:51:03.5732246Z 769 │ isIncomingShareUnavailable, 2026-10-23T01:51:03.5732320Z 770 │ props.incomingShareId, 2026-10-23T01:51:03.5732419Z 771 │ props.initialProjectRef?.environmentId, 2026-10-23T01:51:03.5732508Z 772 │ props.initialProjectRef?.projectId, 2026-10-23T01:51:03.5732585Z 773 │ releaseShareReservation, 2026-10-23T01:51:03.5732651Z 774 │ reserveShare, 2026-10-23T01:51:03.5732741Z 775 │ selectedEnvironmentServerConfig, 2026-10-23T01:51:03.5732808Z 776 │ selectedProject, 2026-10-23T01:51:03.5732885Z 777 │ shareImportAttempt, 2026-10-23T01:51:03.5732977Z ·  ─────────┬──────── 2026-10-23T01:51:03.5733144Z · ╰── Unnecessary dependency `shareImportAttempt` 2026-10-23T01:51:03.5733201Z 778 │ ]); 2026-10-23T01:51:03.5733257Z ╰──── 2026-10-23T01:51:03.5733557Z  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-23T01:51:03.5733876Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.5733878Z 2026-10-23T01:51:03.5734048Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T01:51:03.5734296Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:697:76] 2026-10-23T01:51:03.5734486Z 696 │ const [snoozeGateClock, setSnoozeGateClock] = useState(() => ({ thread, now: Date.now() })); 2026-10-23T01:51:03.5734659Z 697 │ if (snoozeGateClock.thread !== thread) setSnoozeGateClock({ thread, now: Date.now() }); 2026-10-23T01:51:03.5734800Z ·  ─────┬──── 2026-10-23T01:51:03.5734992Z · ╰── Cannot call impure function 2026-10-23T01:51:03.5735130Z 698 │ const snoozeGateNow = new Date(snoozeGateClock.now).toISOString(); 2026-10-23T01:51:03.5735185Z ╰──── 2026-10-23T01:51:03.5735477Z  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-23T01:51:03.5735861Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T01:51:03.5735914Z 2026-10-23T01:51:03.5736160Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T01:51:03.5736323Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:718:71] 2026-10-23T01:51:03.5736406Z 717 │ const snoozePresets = useMemo( 2026-10-23T01:51:03.5736587Z 718 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-23T01:51:03.5736724Z ·  ─────┬──── 2026-10-23T01:51:03.5736914Z · ╰── Cannot call impure function 2026-10-23T01:51:03.5737038Z 719 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-23T01:51:03.5737090Z ╰──── 2026-10-23T01:51:03.5737376Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-23T01:51:03.5737677Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T01:51:03.5737679Z 2026-10-23T01:51:03.5737866Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-23T01:51:03.5738025Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:719:6] 2026-10-23T01:51:03.5738228Z 718 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-23T01:51:03.5738350Z 719 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-23T01:51:03.5738450Z ·  ────────────┬─────────── 2026-10-23T01:51:03.5738630Z · ╰── Unnecessary dependency `props.snoozePresetMinute` 2026-10-23T01:51:03.5738687Z 720 │ ); 2026-10-23T01:51:03.5738741Z ╰──── 2026-10-23T01:51:03.5739066Z  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-23T01:51:03.5739386Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.5739389Z 2026-10-23T01:51:03.5739572Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-23T01:51:03.5739734Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:765:7] 2026-10-23T01:51:03.5739808Z 764 │ thread.pinnedAt, 2026-10-23T01:51:03.5739874Z 765 │ variant, 2026-10-23T01:51:03.5739949Z ·  ───┬─── 2026-10-23T01:51:03.5740086Z · ╰── Unnecessary dependency `variant` 2026-10-23T01:51:03.5740145Z 766 │ ], 2026-10-23T01:51:03.5740199Z ╰──── 2026-10-23T01:51:03.5740520Z  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-23T01:51:03.5740834Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.5740837Z 2026-10-23T01:51:03.5741106Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T01:51:03.5741356Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:1215:21] 2026-10-23T01:51:03.5741494Z 1214 │ {providerDrivers.slice(0, -1).map((driver, index) => ( 2026-10-23T01:51:03.5741630Z 1215 │ 2026-10-23T01:51:03.5741748Z ·  ────────────────────────── 2026-10-23T01:51:03.5741863Z 1216 │ 2026-10-23T01:51:03.5741919Z ╰──── 2026-10-23T01:51:03.5742067Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-23T01:51:03.5742073Z 2026-10-23T01:51:03.5742456Z ⚠ 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-23T01:51:03.5742586Z ╭─[apps/server/src/auth/RpcAuthorization.ts:236:17] 2026-10-23T01:51:03.5742725Z 235 │ const requiredScopesForSettingsUpdate = (payload: unknown) => { 2026-10-23T01:51:03.5742860Z 236 │ const input = Schema.decodeUnknownSync(SettingsUpdate)(payload); 2026-10-23T01:51:03.5742968Z ·  ──────────────────────── 2026-10-23T01:51:03.5743109Z 237 │ const scopes = requiredScopesForServerSettingsPatch(input.patch); 2026-10-23T01:51:03.5743163Z ╰──── 2026-10-23T01:51:03.5743165Z 2026-10-23T01:51:03.5743540Z ⚠ 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-23T01:51:03.5743673Z ╭─[apps/server/src/auth/RpcAuthorization.ts:255:26] 2026-10-23T01:51:03.5743780Z 254 │ if (method === WS_METHODS.assetsCreateUrl) { 2026-10-23T01:51:03.5743938Z 255 │ const { resource } = Schema.decodeUnknownSync(AssetCreateUrlInput)(payload); 2026-10-23T01:51:03.5744056Z ·  ──────────────────────── 2026-10-23T01:51:03.5744118Z 256 │ return [ 2026-10-23T01:51:03.5744174Z ╰──── 2026-10-23T01:51:03.5744176Z 2026-10-23T01:51:03.5744350Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T01:51:03.5744500Z ╭─[apps/web/src/components/chat/useThreadLifecycle.tsx:178:58] 2026-10-23T01:51:03.5744609Z 177 │ if (snoozeClockState.shell !== activeThreadShell) { 2026-10-23T01:51:03.5744777Z 178 │ setSnoozeClockState({ shell: activeThreadShell, now: new Date().toISOString() }); 2026-10-23T01:51:03.5744908Z ·  ─────┬──── 2026-10-23T01:51:03.5745088Z · ╰── Cannot call impure function 2026-10-23T01:51:03.5745146Z 179 │ } 2026-10-23T01:51:03.5745198Z ╰──── 2026-10-23T01:51:03.5745483Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-23T01:51:03.5745788Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T01:51:03.5745790Z 2026-10-23T01:51:03.5746078Z ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'. 2026-10-23T01:51:03.5746268Z ╭─[packages/provider-cursor/src/server/auth.ts:249:20] 2026-10-23T01:51:03.5746395Z 248 │ }, 2026-10-23T01:51:03.5746498Z 249 │ (effect, flow, stopSessions) => 2026-10-23T01:51:03.5746593Z ·  ──────┬───── 2026-10-23T01:51:03.5746746Z · ╰── 'stopSessions' is declared here 2026-10-23T01:51:03.5746816Z 250 │ effect.pipe( 2026-10-23T01:51:03.5746870Z ╰──── 2026-10-23T01:51:03.5746978Z  help: Consider removing this parameter. 2026-10-23T01:51:03.5746981Z 2026-10-23T01:51:03.5747149Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-23T01:51:03.5747274Z ╭─[apps/server/src/processRunner.test.ts:266:14] 2026-10-23T01:51:03.5747330Z 265 │ 2026-10-23T01:51:03.5747443Z 266 │ for (const {} of ["timeout", "success"] as const) { 2026-10-23T01:51:03.5747519Z ·  ── 2026-10-23T01:51:03.5747576Z 267 │ } 2026-10-23T01:51:03.5747631Z ╰──── 2026-10-23T01:51:03.5747867Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-23T01:51:03.5747870Z 2026-10-23T01:51:03.5748195Z ⚠ eslint(no-unused-vars): Variable 'legacyCredentials' is declared but never used. Unused variables should start with a '_'. 2026-10-23T01:51:03.5748359Z ╭─[packages/provider-cursor/src/server/credentialStore.test.ts:15:7] 2026-10-23T01:51:03.5748415Z 14 │ 2026-10-23T01:51:03.5748495Z 15 │ const legacyCredentials = { 2026-10-23T01:51:03.5748580Z ·  ────────┬──────── 2026-10-23T01:51:03.5748737Z · ╰── 'legacyCredentials' is declared here 2026-10-23T01:51:03.5748811Z 16 │ version: 1 as const, 2026-10-23T01:51:03.5748866Z ╰──── 2026-10-23T01:51:03.5748973Z  help: Consider removing this declaration. 2026-10-23T01:51:03.5748976Z 2026-10-23T01:51:03.5749145Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-23T01:51:03.5749289Z ╭─[apps/server/src/process/externalLauncher.test.ts:186:12] 2026-10-23T01:51:03.5749345Z 185 │ 2026-10-23T01:51:03.5749447Z 186 │ for (const {} of ["darwin", "linux"] as const) { 2026-10-23T01:51:03.5749520Z ·  ── 2026-10-23T01:51:03.5749576Z 187 │ } 2026-10-23T01:51:03.5749629Z ╰──── 2026-10-23T01:51:03.5749859Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-23T01:51:03.5749867Z 2026-10-23T01:51:03.5750039Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-23T01:51:03.5750180Z ╭─[apps/server/src/process/externalLauncher.test.ts:189:12] 2026-10-23T01:51:03.5750237Z 188 │ 2026-10-23T01:51:03.5750301Z 189 │ for (const {} of [ 2026-10-23T01:51:03.5750375Z ·  ── 2026-10-23T01:51:03.5750470Z 190 │ { kind: "browser", folderVerb: "none" }, 2026-10-23T01:51:03.5750524Z ╰──── 2026-10-23T01:51:03.5750754Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-23T01:51:03.5750759Z 2026-10-23T01:51:03.5750924Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-23T01:51:03.5751133Z ╭─[apps/server/src/process/externalLauncher.test.ts:311:12] 2026-10-23T01:51:03.5751254Z 310 │ 2026-10-23T01:51:03.5751405Z 311 │ for (const {} of ["rejected", "spawn-error", "stalled"] as const) { 2026-10-23T01:51:03.5751477Z ·  ── 2026-10-23T01:51:03.5751533Z 312 │ } 2026-10-23T01:51:03.5751586Z ╰──── 2026-10-23T01:51:03.5751816Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-23T01:51:03.5751823Z 2026-10-23T01:51:03.5751988Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-23T01:51:03.5752133Z ╭─[apps/server/src/process/externalLauncher.test.ts:314:12] 2026-10-23T01:51:03.5752189Z 313 │ 2026-10-23T01:51:03.5752257Z 314 │ for (const {} of [ 2026-10-23T01:51:03.5752326Z ·  ── 2026-10-23T01:51:03.5752390Z 315 │ { 2026-10-23T01:51:03.5752453Z ╰──── 2026-10-23T01:51:03.5752684Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-23T01:51:03.5752690Z 2026-10-23T01:51:03.5753168Z ⚠ 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-23T01:51:03.5753294Z ╭─[packages/effect-acp/src/errors.test.ts:129:28] 2026-10-23T01:51:03.5753392Z 128 │ const secret = "acp-summary-secret"; 2026-10-23T01:51:03.5753507Z 129 │ const cause = yield* Schema.decodeUnknownEffect( 2026-10-23T01:51:03.5753625Z ·  ────────────────────────── 2026-10-23T01:51:03.5753704Z 130 │ Schema.Struct({ 2026-10-23T01:51:03.5753762Z ╰──── 2026-10-23T01:51:03.5753765Z 2026-10-23T01:51:03.5754145Z ⚠ 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-23T01:51:03.5754261Z ╭─[packages/effect-acp/src/client.ts:1269:11] 2026-10-23T01:51:03.5754414Z 1268 │ extNotificationHandlers.set(CLIENT_METHODS.mcp_message, (params) => 2026-10-23T01:51:03.5754592Z 1269 │ Schema.decodeUnknownEffect(AcpSchemaV2.MessageMcpNotification)(params).pipe( 2026-10-23T01:51:03.5754699Z ·  ────────────────────────── 2026-10-23T01:51:03.5754847Z 1270 │ Effect.mapError(() => AcpError.AcpRequestError.invalidParams()), 2026-10-23T01:51:03.5754902Z ╰──── 2026-10-23T01:51:03.5754904Z 2026-10-23T01:51:03.5755255Z ⚠ 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-23T01:51:03.5755378Z ╭─[packages/effect-acp/src/schema.test.ts:18:12] 2026-10-23T01:51:03.5755545Z 17 │ const command = { name: "plan", description: "Make a plan", input: { hint: "Task" } }; 2026-10-23T01:51:03.5755669Z 18 │ expect(Schema.is(V1.AvailableCommand)(command)).toBe(true); 2026-10-23T01:51:03.5755752Z ·  ───────── 2026-10-23T01:51:03.5755818Z 19 │ expect( 2026-10-23T01:51:03.5755872Z ╰──── 2026-10-23T01:51:03.5755875Z 2026-10-23T01:51:03.5756211Z ⚠ 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-23T01:51:03.5756395Z ╭─[packages/effect-acp/src/schema.test.ts:20:7] 2026-10-23T01:51:03.5756521Z 19 │ expect( 2026-10-23T01:51:03.5756710Z 20 │ Schema.is(V2.AvailableCommand)({ ...command, input: { type: "text", hint: "Task" } }), 2026-10-23T01:51:03.5756786Z ·  ───────── 2026-10-23T01:51:03.5756856Z 21 │ ).toBe(true); 2026-10-23T01:51:03.5756910Z ╰──── 2026-10-23T01:51:03.5756913Z 2026-10-23T01:51:03.5757400Z ⚠ 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-23T01:51:03.5757531Z ╭─[apps/server/src/usage/UsageService.test.ts:2383:7] 2026-10-23T01:51:03.5757634Z 2382 │ let orphanedAt: number | undefined; 2026-10-23T01:51:03.5757887Z 2383 │ ╭─▶ for (let interruptAt = 1; interruptAt <= 31; interruptAt += 1) { 2026-10-23T01:51:03.5758017Z 2384 │ │ const tasks: Array<() => void> = []; 2026-10-23T01:51:03.5758208Z 2385 │ │ const dispatcher: Scheduler.SchedulerDispatcher = { 2026-10-23T01:51:03.5758344Z 2386 │ │ scheduleTask: (task) => tasks.push(task), 2026-10-23T01:51:03.5758448Z 2387 │ │ flush: () => { 2026-10-23T01:51:03.5758575Z 2388 │ │ let task: (() => void) | undefined; 2026-10-23T01:51:03.5758726Z 2389 │ │ while ((task = tasks.shift()) !== undefined) task(); 2026-10-23T01:51:03.5758809Z 2390 │ │ }, 2026-10-23T01:51:03.5758892Z 2391 │ │ }; 2026-10-23T01:51:03.5758974Z 2392 │ │ 2026-10-23T01:51:03.5759142Z 2393 │ │ let requestFiber: Fiber.Fiber | undefined; 2026-10-23T01:51:03.5759252Z 2394 │ │ let requestChecks = 0; 2026-10-23T01:51:03.5759388Z 2395 │ │ const scheduler: Scheduler.Scheduler = { 2026-10-23T01:51:03.5759500Z 2396 │ │ executionMode: "async", 2026-10-23T01:51:03.5759623Z 2397 │ │ makeDispatcher: () => dispatcher, 2026-10-23T01:51:03.5759735Z 2398 │ │ shouldYield: (fiber) => { 2026-10-23T01:51:03.5759872Z 2399 │ │ if (fiber !== requestFiber) return false; 2026-10-23T01:51:03.5759982Z 2400 │ │ requestChecks += 1; 2026-10-23T01:51:03.5760193Z 2401 │ │ if (requestChecks !== interruptAt) return false; 2026-10-23T01:51:03.5760388Z 2402 │ │ fiber.interruptUnsafe(); 2026-10-23T01:51:03.5760490Z 2403 │ │ return true; 2026-10-23T01:51:03.5760574Z 2404 │ │ }, 2026-10-23T01:51:03.5760659Z 2405 │ │ }; 2026-10-23T01:51:03.5760730Z 2406 │ │ 2026-10-23T01:51:03.5760856Z 2407 │ │ const input: UsageSummaryInput = { 2026-10-23T01:51:03.5760954Z 2408 │ │ ...WINDOW, 2026-10-23T01:51:03.5761087Z 2409 │ │ sinceDay: UsageDay.make("2026-09-01"), 2026-10-23T01:51:03.5761288Z 2410 │ │ untilDay: UsageDay.make(`2026-08-${String(interruptAt).padStart(2, "0")}`), 2026-10-23T01:51:03.5761377Z 2411 │ │ }; 2026-10-23T01:51:03.5761496Z 2412 │ │ const first = yield* service 2026-10-23T01:51:03.5761604Z 2413 │ │ .readSummary(input) 2026-10-23T01:51:03.5761695Z 2414 │ │ .pipe( 2026-10-23T01:51:03.5761797Z 2415 │ │ Effect.exit, 2026-10-23T01:51:03.5761962Z 2416 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-23T01:51:03.5762067Z 2417 │ │ Effect.forkChild, 2026-10-23T01:51:03.5762148Z 2418 │ │ ); 2026-10-23T01:51:03.5762253Z 2419 │ │ requestFiber = first; 2026-10-23T01:51:03.5762362Z 2420 │ │ yield* Effect.yieldNow; 2026-10-23T01:51:03.5762472Z 2421 │ │ dispatcher.flush(); 2026-10-23T01:51:03.5762545Z 2422 │ │ 2026-10-23T01:51:03.5762701Z 2423 │ │ const second = yield* service.readSummary(input).pipe( 2026-10-23T01:51:03.5762802Z 2424 │ │ Effect.match({ 2026-10-23T01:51:03.5762931Z 2425 │ │ onFailure: (error) => error.reason, 2026-10-23T01:51:03.5763057Z 2426 │ │ onSuccess: () => "success" as const, 2026-10-23T01:51:03.5763142Z 2427 │ │ }), 2026-10-23T01:51:03.5763309Z 2428 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-23T01:51:03.5763419Z 2429 │ │ Effect.forkChild, 2026-10-23T01:51:03.5763502Z 2430 │ │ ); 2026-10-23T01:51:03.5763622Z 2431 │ │ yield* Effect.yieldNow; 2026-10-23T01:51:03.5763736Z 2432 │ │ dispatcher.flush(); 2026-10-23T01:51:03.5763870Z 2433 │ │ const secondExit = second.pollUnsafe(); 2026-10-23T01:51:03.5763990Z 2434 │ │ if (secondExit === undefined) { 2026-10-23T01:51:03.5764108Z 2435 │ │ second.interruptUnsafe(); 2026-10-23T01:51:03.5816941Z 2436 │ │ orphanedAt = interruptAt; 2026-10-23T01:51:03.5817348Z 2437 │ │ break; 2026-10-23T01:51:03.5817438Z 2438 │ │ } 2026-10-23T01:51:03.5817576Z 2439 │ │ if (Exit.isFailure(secondExit)) { 2026-10-23T01:51:03.5818098Z 2440 │ │ assert.fail("the matching request fiber was interrupted"); 2026-10-23T01:51:03.5818381Z 2441 │ │ } 2026-10-23T01:51:03.5818622Z 2442 │ │ assert.strictEqual(secondExit.value, "invalidWindow"); 2026-10-23T01:51:03.5818797Z 2443 │ ╰─▶ } 2026-10-23T01:51:03.5818856Z 2444 │ 2026-10-23T01:51:03.5818912Z ╰──── 2026-10-23T01:51:03.5818916Z 2026-10-23T01:51:03.5819412Z ⚠ 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-23T01:51:03.5819547Z ╭─[packages/effect-acp/src/protocol.test.ts:500:31] 2026-10-23T01:51:03.5819605Z 499 │ 2026-10-23T01:51:03.5819731Z 500 │ const response = yield* Schema.decodeUnknownEffect( 2026-10-23T01:51:03.5819874Z ·  ────────────────────────── 2026-10-23T01:51:03.5819990Z 501 │ Schema.fromJsonString(JsonRpcErrorResponse), 2026-10-23T01:51:03.5820043Z ╰──── 2026-10-23T01:51:03.5820046Z 2026-10-23T01:51:03.5820331Z ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'. 2026-10-23T01:51:03.5820451Z ╭─[apps/server/src/usage/UsageService.ts:169:7] 2026-10-23T01:51:03.5820506Z 168 │ 2026-10-23T01:51:03.5820590Z 169 │ const layerTest = Layer.succeed( 2026-10-23T01:51:03.5820669Z ·  ────┬──── 2026-10-23T01:51:03.5820806Z · ╰── 'layerTest' is declared here 2026-10-23T01:51:03.5820875Z 170 │ UsageService, 2026-10-23T01:51:03.5820937Z ╰──── 2026-10-23T01:51:03.5821048Z  help: Consider removing this declaration. 2026-10-23T01:51:03.5821052Z 2026-10-23T01:51:03.5821512Z ⚠ 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-23T01:51:03.5821645Z ╭─[apps/server/src/assets/AssetAccess.test.ts:1043:32] 2026-10-23T01:51:03.5821784Z 1042 │ expect(error._tag).toBe("AssetGitHubMediaUrlValidationError"); 2026-10-23T01:51:03.5821976Z 1043 │ const encoded = yield* Schema.encodeEffect(Schema.fromJsonString(AssetAccessError))(error); 2026-10-23T01:51:03.5822093Z ·  ─────────────────── 2026-10-23T01:51:03.5822190Z 1044 │ expect(encoded).not.toContain(url); 2026-10-23T01:51:03.5822250Z ╰──── 2026-10-23T01:51:03.5822258Z 2026-10-23T01:51:03.5822526Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-23T01:51:03.5822652Z ╭─[apps/server/src/serverRuntimeStartup.ts:728:7] 2026-10-23T01:51:03.5822706Z 727 │ 2026-10-23T01:51:03.5822788Z 728 │ const layer = layerWithOptions(); 2026-10-23T01:51:03.5822860Z ·  ──┬── 2026-10-23T01:51:03.5822986Z · ╰── 'layer' is declared here 2026-10-23T01:51:03.5823040Z ╰──── 2026-10-23T01:51:03.5823147Z  help: Consider removing this declaration. 2026-10-23T01:51:03.5823150Z 2026-10-23T01:51:03.5823331Z ⚠ unicorn(no-new-array): Do not use `new Array(singleArgument)`. 2026-10-23T01:51:03.5823552Z ╭─[apps/web/src/terminal/ghostty/core.ts:194:19] 2026-10-23T01:51:03.5823750Z 193 │ const count = Math.min(CHUNK_SIZE, graphemeLength - start); 2026-10-23T01:51:03.5823842Z 194 │ const codes = new Array(count); 2026-10-23T01:51:03.5823952Z ·  ──────────────────────── 2026-10-23T01:51:03.5824053Z 195 │ for (let index = 0; index < count; index += 1) { 2026-10-23T01:51:03.5824105Z ╰──── 2026-10-23T01:51:03.5824544Z  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-23T01:51:03.5824547Z 2026-10-23T01:51:03.5824811Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-23T01:51:03.5824993Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts:10555:7] 2026-10-23T01:51:03.5825051Z 10554 │ 2026-10-23T01:51:03.5825126Z 10555 │ const layer: Layer.Layer< 2026-10-23T01:51:03.5825200Z ·  ──┬── 2026-10-23T01:51:03.5825332Z · ╰── 'layer' is declared here 2026-10-23T01:51:03.5825429Z 10556 │ ProviderAdapter.ProviderAdapterV2, 2026-10-23T01:51:03.5825485Z ╰──── 2026-10-23T01:51:03.5825589Z  help: Consider removing this declaration. 2026-10-23T01:51:03.5825592Z 2026-10-23T01:51:03.5825851Z ⚠ eslint(no-unused-vars): Function 'layerClaudeAgentSdkReplayQueryRunner' is declared but never used. 2026-10-23T01:51:03.5826033Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.testkit.ts:960:10] 2026-10-23T01:51:03.5826094Z 959 │ 2026-10-23T01:51:03.5826211Z 960 │ function layerClaudeAgentSdkReplayQueryRunner( 2026-10-23T01:51:03.5826329Z ·  ──────────────────┬───────────────── 2026-10-23T01:51:03.5826539Z · ╰── 'layerClaudeAgentSdkReplayQueryRunner' is declared here 2026-10-23T01:51:03.5826643Z 961 │ transcript: ClaudeAgentSdkReplayTranscript, 2026-10-23T01:51:03.5826697Z ╰──── 2026-10-23T01:51:03.5826801Z  help: Consider removing this declaration. 2026-10-23T01:51:03.5826803Z 2026-10-23T01:51:03.5827278Z ⚠ 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-23T01:51:03.5827469Z ╭─[apps/server/src/scheduledTasks/ScheduledTaskService.webhook.test.ts:521:13] 2026-10-23T01:51:03.5827544Z 520 │ })).delivery; 2026-10-23T01:51:03.5827748Z 521 │ ╭─▶ while (delivery.outcome === "accepted") { 2026-10-23T01:51:03.5827867Z 522 │ │ yield* Effect.yieldNow; 2026-10-23T01:51:03.5828016Z 523 │ │ delivery = (yield* service.getWebhookDelivery({ 2026-10-23T01:51:03.5828117Z 524 │ │ id: task.id, 2026-10-23T01:51:03.5828273Z 525 │ │ deliveryId: deliveryId!, 2026-10-23T01:51:03.5828375Z 526 │ │ })).delivery; 2026-10-23T01:51:03.5828519Z 527 │ ╰─▶ } 2026-10-23T01:51:03.5828692Z 528 │ assert.equal(delivery.outcome, "dispatch_failed"); 2026-10-23T01:51:03.5828785Z ╰──── 2026-10-23T01:51:03.5828788Z 2026-10-23T01:51:03.5829021Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-23T01:51:03.5829193Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:1998:15] 2026-10-23T01:51:03.5829262Z 1997 │ assert.equal( 2026-10-23T01:51:03.5829415Z 1998 │ items.filter((item) => item.type === "assistant_message").at(-1)?.text, 2026-10-23T01:51:03.5829498Z ·  ────── 2026-10-23T01:51:03.5829575Z 1999 │ "authoritative answer", 2026-10-23T01:51:03.5829628Z ╰──── 2026-10-23T01:51:03.5829801Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-23T01:51:03.5829804Z 2026-10-23T01:51:03.5830284Z ⚠ 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-23T01:51:03.5830458Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:3951:7] 2026-10-23T01:51:03.5830640Z 3950 │ const closeFiber = yield* Scope.close(sessionScope, Exit.void).pipe(Effect.forkScoped); 2026-10-23T01:51:03.5830848Z 3951 │ ╭─▶ while (!responseLifecycle.includes("failed")) { 2026-10-23T01:51:03.5830957Z 3952 │ │ yield* Effect.yieldNow; 2026-10-23T01:51:03.5831091Z 3953 │ ╰─▶ } 2026-10-23T01:51:03.5831217Z 3954 │ const responseExit = yield* Fiber.join(responseFiber); 2026-10-23T01:51:03.5831274Z ╰──── 2026-10-23T01:51:03.5831276Z 2026-10-23T01:51:03.5831743Z ⚠ 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-23T01:51:03.5831913Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6062:9] 2026-10-23T01:51:03.5832003Z 6061 │ .pipe(Effect.forkScoped); 2026-10-23T01:51:03.5832192Z 6062 │ ╭─▶ while (promptGates.length < 1) { 2026-10-23T01:51:03.5832305Z 6063 │ │ yield* Effect.yieldNow; 2026-10-23T01:51:03.5832448Z 6064 │ ╰─▶ } 2026-10-23T01:51:03.5832623Z 6065 │ assert.isDefined(sessionUpdateHandler, "session update handler must be wired"); 2026-10-23T01:51:03.5832674Z ╰──── 2026-10-23T01:51:03.5832677Z 2026-10-23T01:51:03.5833142Z ⚠ 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-23T01:51:03.5833309Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6197:9] 2026-10-23T01:51:03.5833398Z 6196 │ .pipe(Effect.forkScoped); 2026-10-23T01:51:03.5833584Z 6197 │ ╭─▶ while (promptGates.length < 2) { 2026-10-23T01:51:03.5833750Z 6198 │ │ yield* Effect.yieldNow; 2026-10-23T01:51:03.5833925Z 6199 │ ╰─▶ } 2026-10-23T01:51:03.5834093Z 6200 │ if (sessionUpdateHandler === undefined || capturedMutation.current === null) { 2026-10-23T01:51:03.5834146Z ╰──── 2026-10-23T01:51:03.5834149Z 2026-10-23T01:51:03.5834359Z ⚠ eslint(no-unused-vars): Function 'describeSchedule' is declared but never used. 2026-10-23T01:51:03.5834485Z ╭─[apps/server/src/scheduledTasks/Schedule.ts:79:10] 2026-10-23T01:51:03.5834539Z 78 │ 2026-10-23T01:51:03.5834676Z 79 │ function describeSchedule(schedule: ScheduledTaskSchedule): string { 2026-10-23T01:51:03.5834763Z ·  ────────┬─────── 2026-10-23T01:51:03.5834914Z · ╰── 'describeSchedule' is declared here 2026-10-23T01:51:03.5835031Z 80 │ if (schedule.type === "webhook") return "On webhook"; 2026-10-23T01:51:03.5835087Z ╰──── 2026-10-23T01:51:03.5835190Z  help: Consider removing this declaration. 2026-10-23T01:51:03.5835192Z 2026-10-23T01:51:03.5835535Z ⚠ eslint(no-unused-vars): Variable 'layerCodexAppServerClientFactoryCommand' is declared but never used. Unused variables should start with a '_'. 2026-10-23T01:51:03.5835700Z ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1444:7] 2026-10-23T01:51:03.5835759Z 1443 │ 2026-10-23T01:51:03.5835874Z 1444 │ const layerCodexAppServerClientFactoryCommand = ( 2026-10-23T01:51:03.5835995Z ·  ───────────────────┬─────────────────── 2026-10-23T01:51:03.5836207Z · ╰── 'layerCodexAppServerClientFactoryCommand' is declared here 2026-10-23T01:51:03.5836335Z 1445 │ options: CodexClient.CodexAppServerClientOptions & { 2026-10-23T01:51:03.5836389Z ╰──── 2026-10-23T01:51:03.5836494Z  help: Consider removing this declaration. 2026-10-23T01:51:03.5836497Z 2026-10-23T01:51:03.5836757Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-23T01:51:03.5836919Z ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1680:7] 2026-10-23T01:51:03.5836974Z 1679 │ 2026-10-23T01:51:03.5837045Z 1680 │ const layer: Layer.Layer< 2026-10-23T01:51:03.5837117Z ·  ──┬── 2026-10-23T01:51:03.5837246Z · ╰── 'layer' is declared here 2026-10-23T01:51:03.5837339Z 1681 │ ProviderAdapter.ProviderAdapterV2, 2026-10-23T01:51:03.5837391Z ╰──── 2026-10-23T01:51:03.5837554Z  help: Consider removing this declaration. 2026-10-23T01:51:03.5837586Z 2026-10-23T01:51:03.5837783Z ⚠ eslint(no-unused-vars): Identifier 'Fiber' is imported but never used. 2026-10-23T01:51:03.5837878Z ╭─[apps/server/src/ws.ts:10:13] 2026-10-23T01:51:03.5837965Z  9 │ import * as Effect from "effect/Effect"; 2026-10-23T01:51:03.5838051Z 10 │ import * as Fiber from "effect/Fiber"; 2026-10-23T01:51:03.5838127Z ·  ──┬── 2026-10-23T01:51:03.5838291Z · ╰── 'Fiber' is imported here 2026-10-23T01:51:03.5838396Z 11 │ import * as FileSystem from "effect/FileSystem"; 2026-10-23T01:51:03.5838450Z ╰──── 2026-10-23T01:51:03.5838549Z  help: Consider removing this import. 2026-10-23T01:51:03.5838552Z 2026-10-23T01:51:03.5838759Z ⚠ eslint(no-unused-vars): Identifier 'Schedule' is imported but never used. 2026-10-23T01:51:03.5838855Z ╭─[apps/server/src/ws.ts:17:13] 2026-10-23T01:51:03.5838938Z 16 │ import * as Ref from "effect/Ref"; 2026-10-23T01:51:03.5839031Z 17 │ import * as Schedule from "effect/Schedule"; 2026-10-23T01:51:03.5839110Z ·  ────┬─── 2026-10-23T01:51:03.5839245Z · ╰── 'Schedule' is imported here 2026-10-23T01:51:03.5839332Z 18 │ import * as Schema from "effect/Schema"; 2026-10-23T01:51:03.5839386Z ╰──── 2026-10-23T01:51:03.5839481Z  help: Consider removing this import. 2026-10-23T01:51:03.5839485Z 2026-10-23T01:51:03.5839790Z ⚠ eslint(no-unused-vars): Variable 'projectSetupScriptRunner' is declared but never used. Unused variables should start with a '_'. 2026-10-23T01:51:03.5839898Z ╭─[apps/server/src/ws.ts:1290:13] 2026-10-23T01:51:03.5840059Z 1289 │ const usageLimitSources = yield* UsageLimitSources.UsageLimitSources; 2026-10-23T01:51:03.5840261Z 1290 │ const projectSetupScriptRunner = yield* ProjectSetupScriptRunner.ProjectSetupScriptRunner; 2026-10-23T01:51:03.5840365Z ·  ────────────┬─────────── 2026-10-23T01:51:03.5840540Z · ╰── 'projectSetupScriptRunner' is declared here 2026-10-23T01:51:03.5840713Z 1291 │ const worktreeSetupTracker = yield* WorktreeSetupTracker.WorktreeSetupTracker; 2026-10-23T01:51:03.5840766Z ╰──── 2026-10-23T01:51:03.5840867Z  help: Consider removing this declaration. 2026-10-23T01:51:03.5840870Z 2026-10-23T01:51:03.5841144Z ⚠ unicorn(prefer-add-event-listener): Prefer `addEventListener()` over their `on`-function counterparts. 2026-10-23T01:51:03.5841294Z ╭─[apps/web/src/components/device/deviceHubApi.test.ts:12:14] 2026-10-23T01:51:03.5841453Z 11 │ addEventListener(_type: string, listener: (event: { data: string }) => void) { 2026-10-23T01:51:03.5841530Z 12 │ this.onmessage = listener; 2026-10-23T01:51:03.5841611Z ·  ───────── 2026-10-23T01:51:03.5841669Z 13 │ } 2026-10-23T01:51:03.5841723Z ╰──── 2026-10-23T01:51:03.5842052Z  help: `addEventListener()` can register multiple handlers and accepts options such as `{ once: true }`; assigning to `on` replaces any previously registered handler. 2026-10-23T01:51:03.5842057Z 2026-10-23T01:51:03.5842269Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable. 2026-10-23T01:51:03.5842477Z ╭─[apps/web/src/components/device/deviceHubApi.test.ts:16:9] 2026-10-23T01:51:03.5842575Z 15 │ constructor() { 2026-10-23T01:51:03.5842641Z 16 │ source = this; 2026-10-23T01:51:03.5842713Z ·  ────── 2026-10-23T01:51:03.5842771Z 17 │ } 2026-10-23T01:51:03.5842823Z ╰──── 2026-10-23T01:51:03.5843105Z  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-23T01:51:03.5843112Z 2026-10-23T01:51:03.5843269Z ⚠ react(immutability): This value cannot be modified 2026-10-23T01:51:03.5843444Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:93:5] 2026-10-23T01:51:03.5843500Z 90 │ }) { 2026-10-23T01:51:03.5843617Z 91 │ const rotation = useSharedValue(props.hidden ? 1 : 0); 2026-10-23T01:51:03.5843697Z ·  ────┬─── 2026-10-23T01:51:03.5843836Z · ╰── `rotation` originates here 2026-10-23T01:51:03.5843908Z 92 │ useLayoutEffect(() => { 2026-10-23T01:51:03.5844050Z 93 │ rotation.value = withTiming(props.hidden ? 1 : 0, TOOLBAR_FLIP_TIMING); 2026-10-23T01:51:03.5844121Z ·  ────┬─── 2026-10-23T01:51:03.5844256Z · ╰── `rotation` cannot be modified 2026-10-23T01:51:03.5844335Z 94 │ }, [props.hidden, rotation]); 2026-10-23T01:51:03.5844387Z ╰──── 2026-10-23T01:51:03.5844654Z  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-23T01:51:03.5844994Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T01:51:03.5844999Z 2026-10-23T01:51:03.5845157Z ⚠ react(immutability): This value cannot be modified 2026-10-23T01:51:03.5845337Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:269:5] 2026-10-23T01:51:03.5845431Z 266 │ const variant = props.variant ?? "plain"; 2026-10-23T01:51:03.5845568Z 267 │ const loadingVisibility = useSharedValue(props.loading ? 1 : 0); 2026-10-23T01:51:03.5845656Z ·  ────────┬──────── 2026-10-23T01:51:03.5845809Z · ╰── `loadingVisibility` originates here 2026-10-23T01:51:03.5845878Z 268 │ useLayoutEffect(() => { 2026-10-23T01:51:03.5846038Z 269 │ loadingVisibility.value = withTiming(props.loading ? 1 : 0, DICTATION_TIMING); 2026-10-23T01:51:03.5846124Z ·  ────────┬──────── 2026-10-23T01:51:03.5846285Z · ╰── `loadingVisibility` cannot be modified 2026-10-23T01:51:03.5846380Z 270 │ }, [loadingVisibility, props.loading]); 2026-10-23T01:51:03.5846433Z ╰──── 2026-10-23T01:51:03.5846705Z  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-23T01:51:03.5847016Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T01:51:03.5847018Z 2026-10-23T01:51:03.5847175Z ⚠ react(immutability): This value cannot be modified 2026-10-23T01:51:03.5847345Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:328:5] 2026-10-23T01:51:03.5847402Z 325 │ }) { 2026-10-23T01:51:03.5847622Z 326 │ const recordingVisibility = useSharedValue(props.phase === "recording" ? 1 : 0); 2026-10-23T01:51:03.5847747Z ·  ─────────┬───────── 2026-10-23T01:51:03.5847901Z · ╰── `recordingVisibility` originates here 2026-10-23T01:51:03.5847974Z 327 │ useLayoutEffect(() => { 2026-10-23T01:51:03.5848196Z 328 │ recordingVisibility.value = withTiming(props.phase === "recording" ? 1 : 0, DICTATION_TIMING); 2026-10-23T01:51:03.5848284Z ·  ─────────┬───────── 2026-10-23T01:51:03.5848439Z · ╰── `recordingVisibility` cannot be modified 2026-10-23T01:51:03.5848533Z 329 │ }, [props.phase, recordingVisibility]); 2026-10-23T01:51:03.5848586Z ╰──── 2026-10-23T01:51:03.5848862Z  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-23T01:51:03.5849173Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T01:51:03.5849177Z 2026-10-23T01:51:03.5849331Z ⚠ react(immutability): This value cannot be modified 2026-10-23T01:51:03.5849501Z ╭─[apps/mobile/src/features/voice-input/GlobalVoiceInputControl.tsx:68:5] 2026-10-23T01:51:03.5849605Z 65 │ const [expanded, setExpanded] = useState(false); 2026-10-23T01:51:03.5849690Z 66 │ const progress = useSharedValue(0); 2026-10-23T01:51:03.5849763Z ·  ────┬─── 2026-10-23T01:51:03.5849897Z · ╰── `progress` originates here 2026-10-23T01:51:03.5849965Z 67 │ useEffect(() => { 2026-10-23T01:51:03.5850096Z 68 │ progress.value = withTiming(expanded ? 1 : 0, MORPH_TIMING); 2026-10-23T01:51:03.5850169Z ·  ────┬─── 2026-10-23T01:51:03.5850304Z · ╰── `progress` cannot be modified 2026-10-23T01:51:03.5850376Z 69 │ }, [expanded, progress]); 2026-10-23T01:51:03.5850427Z ╰──── 2026-10-23T01:51:03.5850692Z  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-23T01:51:03.5851001Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T01:51:03.5851004Z 2026-10-23T01:51:03.5851152Z ⚠ react(refs): Cannot access refs during render 2026-10-23T01:51:03.5851320Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:122:38] 2026-10-23T01:51:03.5851482Z 121 │ const audioLevelsRef = useRef(Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-23T01:51:03.5851607Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-23T01:51:03.5851734Z ·  ───────────┬────────── 2026-10-23T01:51:03.5851916Z · ╰── Cannot access ref value during render 2026-10-23T01:51:03.5852035Z 123 │ const sessionRef = useRef(null); 2026-10-23T01:51:03.5852089Z ╰──── 2026-10-23T01:51:03.5852628Z  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-23T01:51:03.5852986Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T01:51:03.5852989Z 2026-10-23T01:51:03.5853135Z ⚠ react(refs): Cannot access refs during render 2026-10-23T01:51:03.5853293Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:8] 2026-10-23T01:51:03.5853350Z 125 │ 2026-10-23T01:51:03.5853462Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-23T01:51:03.5853552Z ·  ─────────┬──────── 2026-10-23T01:51:03.5853702Z · ╰── Cannot access ref value during render 2026-10-23T01:51:03.5853807Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-23T01:51:03.5853862Z ╰──── 2026-10-23T01:51:03.5854659Z  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-23T01:51:03.5854958Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T01:51:03.5854962Z 2026-10-23T01:51:03.5855107Z ⚠ react(refs): Cannot access refs during render 2026-10-23T01:51:03.5855267Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:7] 2026-10-23T01:51:03.5855323Z 125 │ 2026-10-23T01:51:03.5855433Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-23T01:51:03.5855519Z ·  ─────────┬───────── 2026-10-23T01:51:03.5855679Z · ╰── Cannot access ref value during render 2026-10-23T01:51:03.5855786Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-23T01:51:03.5855840Z ╰──── 2026-10-23T01:51:03.5856309Z  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-23T01:51:03.5856602Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T01:51:03.5856605Z 2026-10-23T01:51:03.5856751Z ⚠ react(refs): Cannot access refs during render 2026-10-23T01:51:03.5856917Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:31] 2026-10-23T01:51:03.5856973Z 125 │ 2026-10-23T01:51:03.5857078Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-23T01:51:03.5857196Z ·  ─────────┬───────── 2026-10-23T01:51:03.5857370Z · ╰── Cannot access ref value during render 2026-10-23T01:51:03.5857471Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-23T01:51:03.5857523Z ╰──── 2026-10-23T01:51:03.5857993Z  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-23T01:51:03.5858451Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T01:51:03.5858510Z 2026-10-23T01:51:03.5858659Z ⚠ react(refs): Cannot access refs during render 2026-10-23T01:51:03.5858817Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:30] 2026-10-23T01:51:03.5858872Z 125 │ 2026-10-23T01:51:03.5858984Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-23T01:51:03.5859098Z ·  ──────────┬───────── 2026-10-23T01:51:03.5859266Z · ╰── Cannot access ref value during render 2026-10-23T01:51:03.5859366Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-23T01:51:03.5859419Z ╰──── 2026-10-23T01:51:03.5859895Z  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-23T01:51:03.5860192Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T01:51:03.5860195Z 2026-10-23T01:51:03.5860340Z ⚠ react(refs): Cannot access refs during render 2026-10-23T01:51:03.5860500Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:127:46] 2026-10-23T01:51:03.5860621Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-23T01:51:03.5860822Z 127 │ ╭─▶ const recorder = createLazyVoiceRecorder({ 2026-10-23T01:51:03.5861003Z 128 │ │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-23T01:51:03.5861135Z 129 │ │ onStatus: (status: RecordingStatus) => { 2026-10-23T01:51:03.5861292Z 130 │ │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-23T01:51:03.5861413Z 131 │ │ isFinished: status.isFinished, 2026-10-23T01:51:03.5861597Z 132 │ │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-23T01:51:03.5861701Z 133 │ │ error: status.error, 2026-10-23T01:51:03.5861802Z 134 │ │ url: status.url, 2026-10-23T01:51:03.5861886Z 135 │ │ }); 2026-10-23T01:51:03.5861966Z 136 │ │ }, 2026-10-23T01:51:03.5862221Z 137 │ │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-23T01:51:03.5862374Z 138 │ │ selectInput: (inputs) => { 2026-10-23T01:51:03.5862531Z 139 │ │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-23T01:51:03.5862680Z 140 │ │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-23T01:51:03.5862848Z 141 │ │ const known = microphoneOrder(preferences.value.microphones); 2026-10-23T01:51:03.5862991Z 142 │ │ const order = rememberMicrophones(known, inputs); 2026-10-23T01:51:03.5863096Z 143 │ │ if (order !== known) { 2026-10-23T01:51:03.5863239Z 144 │ │ registry.set(updateMobilePreferencesAtom, { 2026-10-23T01:51:03.5863360Z 145 │ │ transform: (current) => ({ 2026-10-23T01:51:03.5863576Z 146 │ │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-23T01:51:03.5863667Z 147 │ │ }), 2026-10-23T01:51:03.5863753Z 148 │ │ }); 2026-10-23T01:51:03.5863831Z 149 │ │ } 2026-10-23T01:51:03.5863977Z 150 │ │ return preferredMicrophoneInput(inputs, order); 2026-10-23T01:51:03.5864056Z 151 │ │ }, 2026-10-23T01:51:03.5864191Z 152 │ ├─▶ }); 2026-10-23T01:51:03.5864433Z · ╰──── Passing a ref to a function may read its value during render 2026-10-23T01:51:03.5864530Z 153 │ recorderRef.current = recorder; 2026-10-23T01:51:03.5864588Z ╰──── 2026-10-23T01:51:03.5865062Z  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-23T01:51:03.5865356Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T01:51:03.5865359Z 2026-10-23T01:51:03.5865505Z ⚠ react(refs): Cannot access refs during render 2026-10-23T01:51:03.5865668Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:153:16] 2026-10-23T01:51:03.5865728Z 152 │ }); 2026-10-23T01:51:03.5865812Z 153 │ recorderRef.current = recorder; 2026-10-23T01:51:03.5865929Z ·  ─────┬─────────┬─── 2026-10-23T01:51:03.5866121Z · │ ╰── Cannot update ref value during render 2026-10-23T01:51:03.5866242Z · ╰── This value is a ref 2026-10-23T01:51:03.5866349Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-23T01:51:03.5866400Z ╰──── 2026-10-23T01:51:03.5866874Z  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-23T01:51:03.5867168Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T01:51:03.5867222Z 2026-10-23T01:51:03.5867405Z ⚠ react(refs): Cannot access refs during render 2026-10-23T01:51:03.5867569Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:48] 2026-10-23T01:51:03.5867654Z 153 │ recorderRef.current = recorder; 2026-10-23T01:51:03.5867853Z 154 │ ╭─▶ sessionRef.current = new VoiceInputSession({ 2026-10-23T01:51:03.5867941Z 155 │ │ recorder, 2026-10-23T01:51:03.5868074Z 156 │ │ getTranscriber: getLocalVoiceTranscriber, 2026-10-23T01:51:03.5868330Z 157 │ │ requestPermission: async () => { 2026-10-23T01:51:03.5868502Z 158 │ │ const permission = await requestRecordingPermissionsAsync(); 2026-10-23T01:51:03.5868706Z 159 │ │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-23T01:51:03.5868790Z 160 │ │ }, 2026-10-23T01:51:03.5868934Z 161 │ │ configureRecording: configureVoiceRecordingAudio, 2026-10-23T01:51:03.5869073Z 162 │ │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-23T01:51:03.5869210Z 163 │ │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-23T01:51:03.5869324Z 164 │ │ onStateChange: (nextState) => 2026-10-23T01:51:03.5869417Z 165 │ │ setState({ 2026-10-23T01:51:03.5869518Z 166 │ │ state: nextState, 2026-10-23T01:51:03.5869659Z 167 │ │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-23T01:51:03.5869797Z 168 │ │ label: sessionRef.current?.label ?? null, 2026-10-23T01:51:03.5869883Z 169 │ │ }), 2026-10-23T01:51:03.5870012Z 170 │ ├─▶ }); 2026-10-23T01:51:03.5870215Z · ╰──── Cannot access ref value during render 2026-10-23T01:51:03.5870276Z 171 │ } 2026-10-23T01:51:03.5870333Z ╰──── 2026-10-23T01:51:03.5870805Z  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-23T01:51:03.5871106Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T01:51:03.5871113Z 2026-10-23T01:51:03.5871260Z ⚠ react(refs): Cannot access refs during render 2026-10-23T01:51:03.5871424Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:15] 2026-10-23T01:51:03.5871505Z 153 │ recorderRef.current = recorder; 2026-10-23T01:51:03.5871609Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-23T01:51:03.5871723Z ·  ─────┬────────┬─── 2026-10-23T01:51:03.5871913Z · │ ╰── Cannot update ref value during render 2026-10-23T01:51:03.5872032Z · ╰── This value is a ref 2026-10-23T01:51:03.5872098Z 155 │ recorder, 2026-10-23T01:51:03.5872152Z ╰──── 2026-10-23T01:51:03.5872705Z  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-23T01:51:03.5873035Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T01:51:03.5873037Z 2026-10-23T01:51:03.5873182Z ⚠ react(refs): Cannot access refs during render 2026-10-23T01:51:03.5873345Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:7] 2026-10-23T01:51:03.5873434Z 184 │ return () => subscription.remove(); 2026-10-23T01:51:03.5873506Z 185 │ }, [controller]); 2026-10-23T01:51:03.5873582Z ·  ─────┬──── 2026-10-23T01:51:03.5873737Z · ╰── Cannot access ref value during render 2026-10-23T01:51:03.5873795Z 186 │ 2026-10-23T01:51:03.5873849Z ╰──── 2026-10-23T01:51:03.5874318Z  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-23T01:51:03.5874612Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T01:51:03.5874614Z 2026-10-23T01:51:03.5874761Z ⚠ react(refs): Cannot access refs during render 2026-10-23T01:51:03.5874923Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:6] 2026-10-23T01:51:03.5875016Z 184 │ return () => subscription.remove(); 2026-10-23T01:51:03.5875082Z 185 │ }, [controller]); 2026-10-23T01:51:03.5875161Z ·  ──────┬───── 2026-10-23T01:51:03.5875309Z · ╰── Cannot access ref value during render 2026-10-23T01:51:03.5875364Z 186 │ 2026-10-23T01:51:03.5875414Z ╰──── 2026-10-23T01:51:03.5875891Z  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-23T01:51:03.5876185Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T01:51:03.5876188Z 2026-10-23T01:51:03.5876339Z ⚠ react(refs): Cannot access refs during render 2026-10-23T01:51:03.5876503Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:6] 2026-10-23T01:51:03.5876559Z 191 │ }, 2026-10-23T01:51:03.5876633Z 192 │ [controller, recorder], 2026-10-23T01:51:03.5876711Z ·  ─────┬──── 2026-10-23T01:51:03.5876858Z · ╰── Cannot access ref value during render 2026-10-23T01:51:03.5876916Z 193 │ ); 2026-10-23T01:51:03.5876969Z ╰──── 2026-10-23T01:51:03.5877444Z  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-23T01:51:03.5877795Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T01:51:03.5877828Z 2026-10-23T01:51:03.5877974Z ⚠ react(refs): Cannot access refs during render 2026-10-23T01:51:03.5878136Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:175:20] 2026-10-23T01:51:03.5878258Z 174 │ const controller = session.controller; 2026-10-23T01:51:03.5878349Z 175 │ const recorder = recorderRef.current; 2026-10-23T01:51:03.5878455Z ·  ─────────┬───────── 2026-10-23T01:51:03.5878620Z · ╰── Cannot access ref value during render 2026-10-23T01:51:03.5878676Z 176 │ 2026-10-23T01:51:03.5878731Z ╰──── 2026-10-23T01:51:03.5879210Z  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-23T01:51:03.5879509Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T01:51:03.5879511Z 2026-10-23T01:51:03.5879660Z ⚠ react(refs): Cannot access refs during render 2026-10-23T01:51:03.5879820Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:5] 2026-10-23T01:51:03.5879878Z 191 │ }, 2026-10-23T01:51:03.5879950Z 192 │ [controller, recorder], 2026-10-23T01:51:03.5880042Z ·  ───────────┬────────── 2026-10-23T01:51:03.5880195Z · ╰── Cannot access ref value during render 2026-10-23T01:51:03.5880256Z 193 │ ); 2026-10-23T01:51:03.5880312Z ╰──── 2026-10-23T01:51:03.5880783Z  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-23T01:51:03.5881077Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T01:51:03.5881079Z 2026-10-23T01:51:03.5881223Z ⚠ react(refs): Cannot access refs during render 2026-10-23T01:51:03.5881384Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:20] 2026-10-23T01:51:03.5881475Z 245 │ return () => clearInterval(intervalId); 2026-10-23T01:51:03.5881591Z 246 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-23T01:51:03.5881684Z ·  ─────┬──── 2026-10-23T01:51:03.5881842Z · ╰── Cannot access ref value during render 2026-10-23T01:51:03.5881895Z 247 │ 2026-10-23T01:51:03.5881948Z ╰──── 2026-10-23T01:51:03.5882418Z  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-23T01:51:03.5882710Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T01:51:03.5882713Z 2026-10-23T01:51:03.5882910Z ⚠ react(refs): Cannot access refs during render 2026-10-23T01:51:03.5883105Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:6] 2026-10-23T01:51:03.5883198Z 245 │ return () => clearInterval(intervalId); 2026-10-23T01:51:03.5883309Z 246 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-23T01:51:03.5883439Z ·  ────────────────────────┬─────────────────────── 2026-10-23T01:51:03.5883603Z · ╰── Cannot access ref value during render 2026-10-23T01:51:03.5883658Z 247 │ 2026-10-23T01:51:03.5883711Z ╰──── 2026-10-23T01:51:03.5884178Z  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-23T01:51:03.5884478Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T01:51:03.5884484Z 2026-10-23T01:51:03.5884633Z ⚠ react(refs): Cannot access refs during render 2026-10-23T01:51:03.5884795Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:261:5] 2026-10-23T01:51:03.5884865Z 260 │ setOwnerFocused, 2026-10-23T01:51:03.5884926Z 261 │ session, 2026-10-23T01:51:03.5885002Z ·  ───┬─── 2026-10-23T01:51:03.5885145Z · ╰── Cannot access ref value during render 2026-10-23T01:51:03.5885208Z 262 │ stop, 2026-10-23T01:51:03.5885260Z ╰──── 2026-10-23T01:51:03.5885736Z  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-23T01:51:03.5886033Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T01:51:03.5886035Z 2026-10-23T01:51:03.5886181Z ⚠ react(refs): Cannot access refs during render 2026-10-23T01:51:03.5886342Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:251:10] 2026-10-23T01:51:03.5886396Z 250 │ 2026-10-23T01:51:03.5886540Z 251 │ ╭─▶ return { 2026-10-23T01:51:03.5886754Z 252 │ │ isAvailable: getLocalVoiceTranscriber() !== null || getNativeShowcaseScene() !== null, 2026-10-23T01:51:03.5886843Z 253 │ │ state, 2026-10-23T01:51:03.5886933Z 254 │ │ audioLevels, 2026-10-23T01:51:03.5887029Z 255 │ │ elapsedSeconds, 2026-10-23T01:51:03.5887161Z 256 │ │ isBusy: voiceInputBlocksSubmission(state), 2026-10-23T01:51:03.5887244Z 257 │ │ ownerKey, 2026-10-23T01:51:03.5887322Z 258 │ │ label, 2026-10-23T01:51:03.5887416Z 259 │ │ focusedOwners, 2026-10-23T01:51:03.5887512Z 260 │ │ setOwnerFocused, 2026-10-23T01:51:03.5887597Z 261 │ │ session, 2026-10-23T01:51:03.5887674Z 262 │ │ stop, 2026-10-23T01:51:03.5887755Z 263 │ │ cancel, 2026-10-23T01:51:03.5887949Z 264 │ ├─▶ }; 2026-10-23T01:51:03.5888217Z · ╰──── Cannot access ref value during render 2026-10-23T01:51:03.5888273Z 265 │ } 2026-10-23T01:51:03.5888330Z ╰──── 2026-10-23T01:51:03.5888807Z  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-23T01:51:03.5889101Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T01:51:03.5889104Z 2026-10-23T01:51:03.5889262Z ⚠ react(immutability): This value cannot be modified 2026-10-23T01:51:03.5889429Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7] 2026-10-23T01:51:03.5889594Z 121 │ const audioLevelsRef = useRef(Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-23T01:51:03.5889720Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-23T01:51:03.5889802Z ·  ─────┬───── 2026-10-23T01:51:03.5889939Z · ╰── `audioLevels` originates here 2026-10-23T01:51:03.5890060Z 123 │ const sessionRef = useRef(null); 2026-10-23T01:51:03.5890209Z 124 │ const recorderRef = useRef | null>(null); 2026-10-23T01:51:03.5890263Z 125 │ 2026-10-23T01:51:03.5890369Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-23T01:51:03.5890471Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-23T01:51:03.5890620Z 128 │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-23T01:51:03.5890720Z 129 │ onStatus: (status: RecordingStatus) => { 2026-10-23T01:51:03.5890840Z 130 │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-23T01:51:03.5890929Z 131 │ isFinished: status.isFinished, 2026-10-23T01:51:03.5891076Z 132 │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-23T01:51:03.5891152Z 133 │ error: status.error, 2026-10-23T01:51:03.5891220Z 134 │ url: status.url, 2026-10-23T01:51:03.5891282Z 135 │ }); 2026-10-23T01:51:03.5891341Z 136 │ }, 2026-10-23T01:51:03.5891507Z 137 │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-23T01:51:03.5891587Z 138 │ selectInput: (inputs) => { 2026-10-23T01:51:03.5891781Z 139 │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-23T01:51:03.5891931Z 140 │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-23T01:51:03.5892062Z 141 │ const known = microphoneOrder(preferences.value.microphones); 2026-10-23T01:51:03.5892172Z 142 │ const order = rememberMicrophones(known, inputs); 2026-10-23T01:51:03.5892247Z 143 │ if (order !== known) { 2026-10-23T01:51:03.5892355Z 144 │ registry.set(updateMobilePreferencesAtom, { 2026-10-23T01:51:03.5892438Z 145 │ transform: (current) => ({ 2026-10-23T01:51:03.5892616Z 146 │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-23T01:51:03.5892680Z 147 │ }), 2026-10-23T01:51:03.5892747Z 148 │ }); 2026-10-23T01:51:03.5892805Z 149 │ } 2026-10-23T01:51:03.5892915Z 150 │ return preferredMicrophoneInput(inputs, order); 2026-10-23T01:51:03.5892981Z 151 │ }, 2026-10-23T01:51:03.5893041Z 152 │ }); 2026-10-23T01:51:03.5893123Z 153 │ recorderRef.current = recorder; 2026-10-23T01:51:03.5893226Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-23T01:51:03.5893289Z 155 │ recorder, 2026-10-23T01:51:03.5893390Z 156 │ getTranscriber: getLocalVoiceTranscriber, 2026-10-23T01:51:03.5893473Z 157 │ requestPermission: async () => { 2026-10-23T01:51:03.5893607Z 158 │ const permission = await requestRecordingPermissionsAsync(); 2026-10-23T01:51:03.5893765Z 159 │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-23T01:51:03.5893824Z 160 │ }, 2026-10-23T01:51:03.5893933Z 161 │ configureRecording: configureVoiceRecordingAudio, 2026-10-23T01:51:03.5894042Z 162 │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-23T01:51:03.5894151Z 163 │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-23T01:51:03.5894342Z 164 │ onStateChange: (nextState) => 2026-10-23T01:51:03.5894417Z 165 │ setState({ 2026-10-23T01:51:03.5894491Z 166 │ state: nextState, 2026-10-23T01:51:03.5894600Z 167 │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-23T01:51:03.5894702Z 168 │ label: sessionRef.current?.label ?? null, 2026-10-23T01:51:03.5894762Z 169 │ }), 2026-10-23T01:51:03.5894819Z 170 │ }); 2026-10-23T01:51:03.5894877Z 171 │ } 2026-10-23T01:51:03.5894928Z 172 │ 2026-10-23T01:51:03.5895015Z 173 │ const session = sessionRef.current; 2026-10-23T01:51:03.5895105Z 174 │ const controller = session.controller; 2026-10-23T01:51:03.5895194Z 175 │ const recorder = recorderRef.current; 2026-10-23T01:51:03.5895246Z 176 │ 2026-10-23T01:51:03.5895320Z 177 │ useEffect(() => { 2026-10-23T01:51:03.5895473Z 178 │ const subscription = AppState.addEventListener("change", (nextState) => { 2026-10-23T01:51:03.5895617Z 179 │ // iOS reports `inactive` while its permission dialog is open. Only the 2026-10-23T01:51:03.5895754Z 180 │ // real background state cancels preparation; recorder status handles 2026-10-23T01:51:03.5895861Z 181 │ // calls and route interruptions during capture. 2026-10-23T01:51:03.5895999Z 182 │ if (nextState === "background") controller.appMovedToBackground(); 2026-10-23T01:51:03.5896058Z 183 │ }); 2026-10-23T01:51:03.5896142Z 184 │ return () => subscription.remove(); 2026-10-23T01:51:03.5896209Z 185 │ }, [controller]); 2026-10-23T01:51:03.5896263Z 186 │ 2026-10-23T01:51:03.5896326Z 187 │ useEffect( 2026-10-23T01:51:03.5896387Z 188 │ () => () => { 2026-10-23T01:51:03.5896551Z 189 │ controller.dispose(); 2026-10-23T01:51:03.5896671Z 190 │ recorder.release(); 2026-10-23T01:51:03.5896729Z 191 │ }, 2026-10-23T01:51:03.5896798Z 192 │ [controller, recorder], 2026-10-23T01:51:03.5896854Z 193 │ ); 2026-10-23T01:51:03.5896909Z 194 │ 2026-10-23T01:51:03.5896973Z 195 │ useEffect(() => { 2026-10-23T01:51:03.5897069Z 196 │ if (state.phase !== "recording") return; 2026-10-23T01:51:03.5897123Z 197 │ 2026-10-23T01:51:03.5897276Z 198 │ const tag = `voice-input:${keepAwakeId}:${++keepAwakeSessionRef.current}`; 2026-10-23T01:51:03.5897384Z 199 │ const activation = activateKeepAwakeAsync(tag); 2026-10-23T01:51:03.5897471Z 200 │ void activation.catch(() => {}); 2026-10-23T01:51:03.5897539Z 201 │ return () => { 2026-10-23T01:51:03.5897693Z 202 │ // Release after activation settles, even if the recording ends immediately. 2026-10-23T01:51:03.5897838Z 203 │ void activation.then(() => deactivateKeepAwake(tag)).catch(() => {}); 2026-10-23T01:51:03.5897899Z 204 │ }; 2026-10-23T01:51:03.5897981Z 205 │ }, [keepAwakeId, state.phase]); 2026-10-23T01:51:03.5898034Z 206 │ 2026-10-23T01:51:03.5898098Z 207 │ useEffect(() => { 2026-10-23T01:51:03.5898273Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-23T01:51:03.5898328Z 209 │ 2026-10-23T01:51:03.5898453Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-23T01:51:03.5898609Z 211 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-23T01:51:03.5898716Z 212 │ audioLevels.value = audioLevelsRef.current; 2026-10-23T01:51:03.5898797Z ·  ─────┬───── 2026-10-23T01:51:03.5898942Z · ╰── `audioLevels` cannot be modified 2026-10-23T01:51:03.5899003Z 213 │ } 2026-10-23T01:51:03.5899061Z ╰──── 2026-10-23T01:51:03.5899333Z  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-23T01:51:03.5899645Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T01:51:03.5899648Z 2026-10-23T01:51:03.5899853Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-23T01:51:03.5900017Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7] 2026-10-23T01:51:03.5900071Z 206 │ 2026-10-23T01:51:03.5900139Z 207 │ useEffect(() => { 2026-10-23T01:51:03.5900217Z ·  ───┬─── 2026-10-23T01:51:03.5900449Z · ╰── This function may (indirectly) reassign or modify `audioLevels` after render 2026-10-23T01:51:03.5900593Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-23T01:51:03.5900653Z 209 │ 2026-10-23T01:51:03.5900773Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-23T01:51:03.5900930Z 211 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-23T01:51:03.5901034Z 212 │ audioLevels.value = audioLevelsRef.current; 2026-10-23T01:51:03.5901113Z ·  ─────┬───── 2026-10-23T01:51:03.5901247Z · ╰── This modifies `audioLevels` 2026-10-23T01:51:03.5901307Z 213 │ } 2026-10-23T01:51:03.5901361Z ╰──── 2026-10-23T01:51:03.5901772Z  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-23T01:51:03.5902123Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T01:51:03.5902126Z 2026-10-23T01:51:03.5902272Z ⚠ react(refs): Cannot access refs during render 2026-10-23T01:51:03.5902393Z ╭─[apps/mobile/src/native/StackHeader.tsx:184:9] 2026-10-23T01:51:03.5902460Z 183 │ "options", 2026-10-23T01:51:03.5902556Z 184 │ latestOptionFunctionsRef.current, 2026-10-23T01:51:03.5902667Z ·  ────────────────┬─────────────── 2026-10-23T01:51:03.5902873Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T01:51:03.5902974Z 185 │ optionFunctionWrappersRef.current, 2026-10-23T01:51:03.5903029Z ╰──── 2026-10-23T01:51:03.5903505Z  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-23T01:51:03.5903801Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T01:51:03.5903803Z 2026-10-23T01:51:03.5903951Z ⚠ react(refs): Cannot access refs during render 2026-10-23T01:51:03.5904070Z ╭─[apps/mobile/src/native/StackHeader.tsx:185:9] 2026-10-23T01:51:03.5904166Z 184 │ latestOptionFunctionsRef.current, 2026-10-23T01:51:03.5904263Z 185 │ optionFunctionWrappersRef.current, 2026-10-23T01:51:03.5904380Z ·  ────────────────┬──────────────── 2026-10-23T01:51:03.5904580Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T01:51:03.5904673Z 186 │ ) as NativeStackNavigationOptions) 2026-10-23T01:51:03.5904724Z ╰──── 2026-10-23T01:51:03.5905196Z  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-23T01:51:03.5905489Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T01:51:03.5905492Z 2026-10-23T01:51:03.5905645Z ⚠ react(refs): Cannot access refs during render 2026-10-23T01:51:03.5905818Z ╭─[apps/mobile/src/features/voice-input/useVoiceInputController.ts:27:14] 2026-10-23T01:51:03.5905901Z 26 │ const latestInput = useRef(input); 2026-10-23T01:51:03.5905980Z 27 │ latestInput.current = input; 2026-10-23T01:51:03.5906093Z ·  ─────┬─────────┬─── 2026-10-23T01:51:03.5906284Z · │ ╰── Cannot update ref value during render 2026-10-23T01:51:03.5906400Z · ╰── This value is a ref 2026-10-23T01:51:03.5906478Z 28 │ const mounted = useRef(true); 2026-10-23T01:51:03.5906532Z ╰──── 2026-10-23T01:51:03.5907066Z  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-23T01:51:03.5907398Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T01:51:03.5907400Z 2026-10-23T01:51:03.5907666Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T01:51:03.5907860Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:107:5] 2026-10-23T01:51:03.5907915Z 104 │ 2026-10-23T01:51:03.5907982Z 105 │ useEffect(() => { 2026-10-23T01:51:03.5908054Z ·  ────┬──── 2026-10-23T01:51:03.5908230Z · ╰── This is the containing effect 2026-10-23T01:51:03.5908316Z 106 │ clearReviewCommentTarget(); 2026-10-23T01:51:03.5908414Z 107 │ setPendingNativeCommentSelection(null); 2026-10-23T01:51:03.5908525Z ·  ────────────────┬─────────────── 2026-10-23T01:51:03.5908708Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T01:51:03.5908786Z 108 │ }, [selectedSection?.id]); 2026-10-23T01:51:03.5908837Z ╰──── 2026-10-23T01:51:03.5909454Z  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-23T01:51:03.5909790Z  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-23T01:51:03.5909796Z 2026-10-23T01:51:03.5910058Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T01:51:03.5910248Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:112:7] 2026-10-23T01:51:03.5910302Z 109 │ 2026-10-23T01:51:03.5910367Z 110 │ useEffect(() => { 2026-10-23T01:51:03.5910440Z ·  ────┬──── 2026-10-23T01:51:03.5910571Z · ╰── This is the containing effect 2026-10-23T01:51:03.5910657Z 111 │ if (activeCommentTarget === null) { 2026-10-23T01:51:03.5910761Z 112 │ setPendingNativeCommentSelection(null); 2026-10-23T01:51:03.5910878Z ·  ────────────────┬─────────────── 2026-10-23T01:51:03.5911065Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T01:51:03.5911121Z 113 │ } 2026-10-23T01:51:03.5911175Z ╰──── 2026-10-23T01:51:03.5911783Z  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-23T01:51:03.5912108Z  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-23T01:51:03.5912111Z 2026-10-23T01:51:03.5912376Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T01:51:03.5912599Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:108:7] 2026-10-23T01:51:03.5912699Z 107 │ setPendingNativeCommentSelection(null); 2026-10-23T01:51:03.5912774Z 108 │ }, [selectedSection?.id]); 2026-10-23T01:51:03.5912865Z ·  ─────────┬───────── 2026-10-23T01:51:03.5913029Z · ╰── Unnecessary dependency `selectedSection?.id` 2026-10-23T01:51:03.5913084Z 109 │ 2026-10-23T01:51:03.5913137Z ╰──── 2026-10-23T01:51:03.5913436Z  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-23T01:51:03.5913760Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.5913766Z 2026-10-23T01:51:03.5914024Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T01:51:03.5914194Z ╭─[apps/mobile/src/features/review/ReviewCommentComposerSheet.tsx:103:7] 2026-10-23T01:51:03.5914249Z 100 │ 2026-10-23T01:51:03.5914316Z 101 │ useEffect(() => { 2026-10-23T01:51:03.5914387Z ·  ────┬──── 2026-10-23T01:51:03.5914519Z · ╰── This is the containing effect 2026-10-23T01:51:03.5914624Z 102 │ if (!target || selectedLines.length === 0) { 2026-10-23T01:51:03.5914711Z 103 │ setHighlightedLinesById({}); 2026-10-23T01:51:03.5914802Z ·  ───────────┬─────────── 2026-10-23T01:51:03.5914988Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T01:51:03.5915055Z 104 │ return; 2026-10-23T01:51:03.5915109Z ╰──── 2026-10-23T01:51:03.5915717Z  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-23T01:51:03.5916046Z  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-23T01:51:03.5916049Z 2026-10-23T01:51:03.5916311Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T01:51:03.5916496Z ╭─[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:60:5] 2026-10-23T01:51:03.5916552Z 55 │ 2026-10-23T01:51:03.5916616Z 56 │ useEffect(() => { 2026-10-23T01:51:03.5916690Z ·  ────┬──── 2026-10-23T01:51:03.5916820Z · ╰── This is the containing effect 2026-10-23T01:51:03.5916891Z 57 │ scheduler.reset(); 2026-10-23T01:51:03.5916990Z 58 │ highlightedRowIdsRef.current = new Set(); 2026-10-23T01:51:03.5917080Z 59 │ visibleChunkIndexRef.current = 0; 2026-10-23T01:51:03.5917200Z 60 │ setVisibleRange({ firstRowIndex: 0, lastRowIndex: 80 }); 2026-10-23T01:51:03.5917283Z ·  ───────┬─────── 2026-10-23T01:51:03.5917455Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T01:51:03.5917631Z 61 │ setTokensPatchJson(createEmptyTokenPatch(resetKey)); 2026-10-23T01:51:03.5917732Z ╰──── 2026-10-23T01:51:03.5918368Z  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-23T01:51:03.5918692Z  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-23T01:51:03.5918697Z 2026-10-23T01:51:03.5918903Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T01:51:03.5919082Z ╭─[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:63:7] 2026-10-23T01:51:03.5919169Z 62 │ return () => scheduler.cancel(); 2026-10-23T01:51:03.5919275Z 63 │ }, [enabled, resetKey, rows.length, scheduler]); 2026-10-23T01:51:03.5919405Z ·  ───┬─── ─────┬───── 2026-10-23T01:51:03.5919604Z · │ ╰── Unnecessary dependency `rows.length` 2026-10-23T01:51:03.5919744Z · ╰── Unnecessary dependency `enabled` 2026-10-23T01:51:03.5919799Z 64 │ 2026-10-23T01:51:03.5919850Z ╰──── 2026-10-23T01:51:03.5920150Z  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-23T01:51:03.5920473Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.5920480Z 2026-10-23T01:51:03.5920700Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-23T01:51:03.5920835Z ╭─[apps/web/src/lib/composerContextReferences.ts:90:40] 2026-10-23T01:51:03.5920912Z 89 │ let cursor = prompt.length; 2026-10-23T01:51:03.5921020Z 90 │ for (const occurrence of occurrences.reverse()) { 2026-10-23T01:51:03.5921128Z ·  ─────── 2026-10-23T01:51:03.5921207Z 91 │ let { start, end } = occurrence; 2026-10-23T01:51:03.5921261Z ╰──── 2026-10-23T01:51:03.5921530Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-23T01:51:03.5921533Z 2026-10-23T01:51:03.5921847Z ⚠ eslint(no-unused-vars): Function 'normalizeTerminalContextSelection' is declared but never used. 2026-10-23T01:51:03.5921996Z ╭─[apps/web/src/lib/terminalContext.ts:56:10] 2026-10-23T01:51:03.5922049Z 55 │ 2026-10-23T01:51:03.5922154Z 56 │ function normalizeTerminalContextSelection( 2026-10-23T01:51:03.5922268Z ·  ────────────────┬──────────────── 2026-10-23T01:51:03.5922468Z · ╰── 'normalizeTerminalContextSelection' is declared here 2026-10-23T01:51:03.5922556Z 57 │ selection: TerminalContextSelection, 2026-10-23T01:51:03.5922610Z ╰──── 2026-10-23T01:51:03.5922718Z  help: Consider removing this declaration. 2026-10-23T01:51:03.5922721Z 2026-10-23T01:51:03.5922926Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T01:51:03.5923103Z ╭─[apps/web/src/components/pullRequest/PullRequestChecksPopover.tsx:88:15] 2026-10-23T01:51:03.5923168Z 87 │
  • { 2026-10-23T01:51:03.5924435Z ·  ───────┬─────── 2026-10-23T01:51:03.5924568Z · ╰── This is the containing effect 2026-10-23T01:51:03.5924631Z 39 │ reset(); 2026-10-23T01:51:03.5924702Z 40 │ setInitialized(true); 2026-10-23T01:51:03.5924781Z ·  ───────┬────── 2026-10-23T01:51:03.5924951Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T01:51:03.5925015Z 41 │ }, [reset]); 2026-10-23T01:51:03.5925068Z ╰──── 2026-10-23T01:51:03.5925684Z  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-23T01:51:03.5926015Z  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-23T01:51:03.5926017Z 2026-10-23T01:51:03.5926274Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T01:51:03.5926438Z ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:93:5] 2026-10-23T01:51:03.5926492Z 88 │ 2026-10-23T01:51:03.5926559Z 89 │ useEffect(() => { 2026-10-23T01:51:03.5926629Z ·  ────┬──── 2026-10-23T01:51:03.5926820Z · ╰── This is the containing effect 2026-10-23T01:51:03.5927024Z 90 │ if (!needsPreparation || !initialProjectRef.branch || waitingForProject) return; 2026-10-23T01:51:03.5927129Z 91 │ const branchName = initialProjectRef.branch; 2026-10-23T01:51:03.5927195Z 92 │ let active = true; 2026-10-23T01:51:03.5927293Z 93 │ setPendingCheckouts((count) => count + 1); 2026-10-23T01:51:03.5927381Z ·  ─────────┬───────── 2026-10-23T01:51:03.5927555Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T01:51:03.5927710Z 94 │ // Serialize replacements: ignoring a stale result cannot undo its Git mutation. 2026-10-23T01:51:03.5927766Z ╰──── 2026-10-23T01:51:03.5928414Z  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-23T01:51:03.5928747Z  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-23T01:51:03.5928749Z 2026-10-23T01:51:03.5929011Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T01:51:03.5929179Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:215:7] 2026-10-23T01:51:03.5929237Z 211 │ }; 2026-10-23T01:51:03.5929306Z 212 │ useEffect(() => { 2026-10-23T01:51:03.5929380Z ·  ────┬──── 2026-10-23T01:51:03.5929517Z · ╰── This is the containing effect 2026-10-23T01:51:03.5929698Z 213 │ const inserted = ownerKey ? readComposerDraftSelection(ownerKey, draftMessage) : null; 2026-10-23T01:51:03.5929764Z 214 │ if (inserted) { 2026-10-23T01:51:03.5929846Z 215 │ setSelection((current) => 2026-10-23T01:51:03.5929925Z ·  ──────┬───── 2026-10-23T01:51:03.5930098Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T01:51:03.5930273Z 216 │ current.start === inserted.start && current.end === inserted.end ? current : inserted, 2026-10-23T01:51:03.5930329Z ╰──── 2026-10-23T01:51:03.5930940Z  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-23T01:51:03.5931271Z  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-23T01:51:03.5931273Z 2026-10-23T01:51:03.5931536Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T01:51:03.5931709Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:296:7] 2026-10-23T01:51:03.5931790Z 284 │ }, [hasWorkspaceSnapshot]); 2026-10-23T01:51:03.5931855Z 285 │ useEffect(() => { 2026-10-23T01:51:03.5931930Z ·  ────┬──── 2026-10-23T01:51:03.5932062Z · ╰── This is the containing effect 2026-10-23T01:51:03.5932270Z 286 │ if (!environmentId || !projectCwd || !selectedProviderInstanceId) return; 2026-10-23T01:51:03.5932629Z 287 │ const key = `${environmentId}:${selectedProviderInstanceId}:${projectCwd}`; 2026-10-23T01:51:03.5932705Z 288 │ const now = Date.now(); 2026-10-23T01:51:03.5932822Z 289 │ const lastRequest = workspaceRefreshKeyRef.current; 2026-10-23T01:51:03.5932883Z 290 │ if ( 2026-10-23T01:51:03.5932960Z 291 │ lastRequest?.key === key && 2026-10-23T01:51:03.5933104Z 292 │ now - lastRequest.requestedAt < PROVIDER_WORKSPACE_SNAPSHOT_TTL_MS 2026-10-23T01:51:03.5933160Z 293 │ ) 2026-10-23T01:51:03.5933224Z 294 │ return; 2026-10-23T01:51:03.5933400Z 295 │ if (hasCurrentProviderWorkspaceSnapshot(selectedProviderStatus, projectCwd, now)) { 2026-10-23T01:51:03.5933491Z 296 │ setWorkspaceRefreshRetry(null); 2026-10-23T01:51:03.5933590Z ·  ────────────┬─────────── 2026-10-23T01:51:03.5933780Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T01:51:03.5933843Z 297 │ return; 2026-10-23T01:51:03.5933897Z ╰──── 2026-10-23T01:51:03.5934632Z  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-23T01:51:03.5934964Z  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-23T01:51:03.5934967Z 2026-10-23T01:51:03.5935178Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T01:51:03.5935347Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:326:5] 2026-10-23T01:51:03.5935411Z 325 │ }, [ 2026-10-23T01:51:03.5935478Z 326 │ draftMessage, 2026-10-23T01:51:03.5935557Z ·  ──────┬───── 2026-10-23T01:51:03.5935703Z · ╰── Unnecessary dependency `draftMessage` 2026-10-23T01:51:03.5935772Z 327 │ environmentId, 2026-10-23T01:51:03.5935825Z ╰──── 2026-10-23T01:51:03.5936127Z  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-23T01:51:03.5936442Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.5936445Z 2026-10-23T01:51:03.5936655Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T01:51:03.5936798Z ╭─[apps/mobile/src/features/review/ReviewSheet.tsx:454:7] 2026-10-23T01:51:03.5936885Z 453 │ showAuxiliaryPane("inspector"); 2026-10-23T01:51:03.5936994Z 454 │ }, [environmentId, showAuxiliaryPane, threadId]); 2026-10-23T01:51:03.5937143Z ·  ──────┬────── ────┬─── 2026-10-23T01:51:03.5937350Z · │ ╰── Unnecessary dependency `threadId` 2026-10-23T01:51:03.5937502Z · ╰── Unnecessary dependency `environmentId` 2026-10-23T01:51:03.5937565Z 455 │ const { 2026-10-23T01:51:03.5937616Z ╰──── 2026-10-23T01:51:03.5938005Z  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-23T01:51:03.5938419Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.5938422Z 2026-10-23T01:51:03.5938614Z ⚠ react(static-components): Cannot create components during render 2026-10-23T01:51:03.5938752Z ╭─[apps/mobile/src/features/review/ReviewSheet.tsx:725:20] 2026-10-23T01:51:03.5938819Z 492 │ // same check. 2026-10-23T01:51:03.5938948Z 493 │ const NativeReviewDiffView = resolveNativeReviewDiffView(); 2026-10-23T01:51:03.5939072Z ·  ─────────────┬───────────── 2026-10-23T01:51:03.5939263Z · ╰── The component is created during render here 2026-10-23T01:51:03.5939422Z 494 │ const nativeReviewDiffViewRef = useRef(null); 2026-10-23T01:51:03.5939546Z 495 │ const showcasedReviewDrawRef = useRef(null); 2026-10-23T01:51:03.5939678Z 496 │ const [isPullRefreshing, setIsPullRefreshing] = useState(false); 2026-10-23T01:51:03.5939770Z 497 │ const handlePullToRefresh = async () => { 2026-10-23T01:51:03.5939851Z 498 │ setIsPullRefreshing(true); 2026-10-23T01:51:03.5939936Z 499 │ await refreshSelectedSection(); 2026-10-23T01:51:03.5940013Z 500 │ setIsPullRefreshing(false); 2026-10-23T01:51:03.5940068Z 501 │ }; 2026-10-23T01:51:03.5940214Z 502 │ const reviewFileNavigatorRef = useRef(null); 2026-10-23T01:51:03.5940365Z 503 │ const reviewFiles = parsedDiff.kind === "files" ? parsedDiff.files : []; 2026-10-23T01:51:03.5940477Z 504 │ const fileVisibility = useReviewFileVisibility({ 2026-10-23T01:51:03.5940563Z 505 │ threadKey: reviewCache.threadKey, 2026-10-23T01:51:03.5940655Z 506 │ sectionId: selectedSection?.id ?? null, 2026-10-23T01:51:03.5940726Z 507 │ files: reviewFiles, 2026-10-23T01:51:03.5940827Z 508 │ cachedExpandedFileIds: selectedSection?.id 2026-10-23T01:51:03.5940963Z 509 │ ? reviewCache.expandedFileIdsBySection[selectedSection.id] 2026-10-23T01:51:03.5941029Z 510 │ : undefined, 2026-10-23T01:51:03.5941127Z 511 │ cachedViewedFileIds: selectedSection?.id 2026-10-23T01:51:03.5941253Z 512 │ ? reviewCache.viewedFileIdsBySection[selectedSection.id] 2026-10-23T01:51:03.5941315Z 513 │ : undefined, 2026-10-23T01:51:03.5941372Z 514 │ }); 2026-10-23T01:51:03.5941571Z 515 │ const { collapsedFileIds, toggleExpandedFile, toggleViewedFile, viewedFileIds } = fileVisibility; 2026-10-23T01:51:03.5941708Z 516 │ const commentSelection = useReviewCommentSelectionController({ 2026-10-23T01:51:03.5941770Z 517 │ environmentId, 2026-10-23T01:51:03.5941833Z 518 │ threadId, 2026-10-23T01:51:03.5941900Z 519 │ selectedSection, 2026-10-23T01:51:03.5941973Z 520 │ nativeReviewDiffData, 2026-10-23T01:51:03.5942029Z 521 │ }); 2026-10-23T01:51:03.5942137Z 522 │ const nativeBridge = useNativeReviewDiffBridge({ 2026-10-23T01:51:03.5942225Z 523 │ threadKey: reviewCache.threadKey, 2026-10-23T01:51:03.5942317Z 524 │ sectionId: selectedSection?.id ?? null, 2026-10-23T01:51:03.5942393Z 525 │ diff: selectedSection?.diff, 2026-10-23T01:51:03.5942472Z 526 │ data: nativeReviewDiffData, 2026-10-23T01:51:03.5942540Z 527 │ collapsedFileIds, 2026-10-23T01:51:03.5942603Z 528 │ viewedFileIds, 2026-10-23T01:51:03.5942786Z 529 │ selectedRowIds: commentSelection.selectedRowIds, 2026-10-23T01:51:03.5942921Z 530 │ canHighlight: parsedDiff.kind === "files", 2026-10-23T01:51:03.5942976Z 531 │ }); 2026-10-23T01:51:03.5943049Z 532 │ const showcaseReviewKey = 2026-10-23T01:51:03.5943184Z 533 │ SHOWCASE_ENABLED && parsedDiff.kind === "files" && selectedSection 2026-10-23T01:51:03.5943396Z 534 │ ? `${reviewCache.threadKey}:${selectedSection.id}:${nativeBridge.tokensResetKey}:${nativeBridge.themeId}` 2026-10-23T01:51:03.5943459Z 535 │ : null; 2026-10-23T01:51:03.5943626Z 536 │ const handleNativeDebug = (event: NativeSyntheticEvent>) => { 2026-10-23T01:51:03.5943710Z 537 │ nativeBridge.onDebug(event); 2026-10-23T01:51:03.5943768Z 538 │ if ( 2026-10-23T01:51:03.5943850Z 539 │ showcaseReviewKey === null || 2026-10-23T01:51:03.5943978Z 540 │ showcasedReviewDrawRef.current === showcaseReviewKey || 2026-10-23T01:51:03.5944093Z 541 │ !isNativeReviewDiffDrawEvent(event.nativeEvent) 2026-10-23T01:51:03.5944151Z 542 │ ) { 2026-10-23T01:51:03.5944220Z 543 │ return; 2026-10-23T01:51:03.5944275Z 544 │ } 2026-10-23T01:51:03.5944394Z 545 │ showcasedReviewDrawRef.current = showcaseReviewKey; 2026-10-23T01:51:03.5944565Z 546 │ reportShowcaseSceneRendered({ scene: "review", themeId: nativeBridge.themeId }); 2026-10-23T01:51:03.5944627Z 547 │ }; 2026-10-23T01:51:03.5944681Z 548 │ 2026-10-23T01:51:03.5944806Z 549 │ const handleSelectFile = async (fileId: string | null) => { 2026-10-23T01:51:03.5944891Z 550 │ loadVisibleFile(fileId, true); 2026-10-23T01:51:03.5944984Z 551 │ commentSelection.clearSelection(); 2026-10-23T01:51:03.5945112Z 552 │ if (fileId !== null && collapsedFileIds.includes(fileId)) { 2026-10-23T01:51:03.5945202Z 553 │ toggleExpandedFile(fileId); 2026-10-23T01:51:03.5945268Z 554 │ } 2026-10-23T01:51:03.5945387Z 555 │ const nativeView = nativeReviewDiffViewRef.current; 2026-10-23T01:51:03.5945459Z 556 │ if (!nativeView) return; 2026-10-23T01:51:03.5945561Z 557 │ const result = await settlePromise(() => 2026-10-23T01:51:03.5945743Z 558 │ fileId === null ? nativeView.scrollToTop(true) : nativeView.scrollToFile(fileId, true), 2026-10-23T01:51:03.5945805Z 559 │ ); 2026-10-23T01:51:03.5945894Z 560 │ if (AsyncResult.isFailure(result)) { 2026-10-23T01:51:03.5946085Z 561 │ console.error("[review] Failed to navigate to diff file", squashAtomCommandFailure(result)); 2026-10-23T01:51:03.5946146Z 562 │ } 2026-10-23T01:51:03.5946205Z 563 │ }; 2026-10-23T01:51:03.5946291Z 564 │ const handleVisibleFileChange = ( 2026-10-23T01:51:03.5946501Z 565 │ event: NativeSyntheticEvent<{ readonly fileId?: string | null }>, 2026-10-23T01:51:03.5946602Z 566 │ ) => { 2026-10-23T01:51:03.5946711Z 567 │ loadVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-23T01:51:03.5946886Z 568 │ reviewFileNavigatorRef.current?.setVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-23T01:51:03.5946944Z 569 │ }; 2026-10-23T01:51:03.5947030Z 570 │ const renderInspector = () => ( 2026-10-23T01:51:03.5947101Z 571 │ void handleSelectFile(fileId)} 2026-10-23T01:51:03.5947646Z 577 │ /> 2026-10-23T01:51:03.5947711Z 578 │ ); 2026-10-23T01:51:03.5947768Z 579 │ 2026-10-23T01:51:03.5947961Z 580 │ const handleNativeToggleFile = (event: NativeSyntheticEvent<{ readonly fileId?: string }>) => { 2026-10-23T01:51:03.5948053Z 581 │ const { fileId } = event.nativeEvent; 2026-10-23T01:51:03.5948124Z 582 │ if (fileId) { 2026-10-23T01:51:03.5948245Z 583 │ loadVisibleFile(fileId, true); 2026-10-23T01:51:03.5948327Z 584 │ toggleExpandedFile(fileId); 2026-10-23T01:51:03.5948386Z 585 │ } 2026-10-23T01:51:03.5948500Z 586 │ }; 2026-10-23T01:51:03.5948568Z 587 │ 2026-10-23T01:51:03.5948696Z 588 │ const handleNativeToggleViewedFile = ( 2026-10-23T01:51:03.5948989Z 589 │ event: NativeSyntheticEvent<{ readonly fileId?: string }>, 2026-10-23T01:51:03.5949078Z 590 │ ) => { 2026-10-23T01:51:03.5949198Z 591 │ const { fileId } = event.nativeEvent; 2026-10-23T01:51:03.5949305Z 592 │ if (fileId) { 2026-10-23T01:51:03.5949416Z 593 │ toggleViewedFile(fileId); 2026-10-23T01:51:03.5949503Z 594 │ } 2026-10-23T01:51:03.5949600Z 595 │ }; 2026-10-23T01:51:03.5949686Z 596 │ 2026-10-23T01:51:03.5949774Z 597 │ const parsedDiffNotice = 2026-10-23T01:51:03.5949966Z 598 │ parsedDiff.kind === "files" || parsedDiff.kind === "raw" ? parsedDiff.notice : null; 2026-10-23T01:51:03.5950152Z 599 │ const hasCachedSelectedDiff = selectedSection?.diff != null; 2026-10-23T01:51:03.5950495Z 600 │ const hasAnyCachedDiff = reviewSections.some((section) => section.diff != null); 2026-10-23T01:51:03.5950650Z 601 │ const sectionMenu = buildReviewSectionMenu(reviewSections); 2026-10-23T01:51:03.5950828Z 602 │ const { showConnectionNotice, showSectionToolbar } = resolveReviewAvailability({ 2026-10-23T01:51:03.5950986Z 603 │ hasEnvironmentPresentation: environment.isReady, 2026-10-23T01:51:03.5951135Z 604 │ isEnvironmentConnected: isEnvironmentReady, 2026-10-23T01:51:03.5951240Z 605 │ hasCachedSelectedDiff, 2026-10-23T01:51:03.5951322Z 606 │ hasAnyCachedDiff, 2026-10-23T01:51:03.5951408Z 607 │ }); 2026-10-23T01:51:03.5951552Z 608 │ const handleRetryEnvironment = () => { 2026-10-23T01:51:03.5951672Z 609 │ void retryEnvironment(environmentId); 2026-10-23T01:51:03.5951741Z 610 │ }; 2026-10-23T01:51:03.5951866Z 611 │ const handleReturnToThread = () => { 2026-10-23T01:51:03.5951985Z 612 │ if (navigation.canGoBack()) { 2026-10-23T01:51:03.5952104Z 613 │ navigation.goBack(); 2026-10-23T01:51:03.5952183Z 614 │ return; 2026-10-23T01:51:03.5952273Z 615 │ } 2026-10-23T01:51:03.5952381Z 616 │ navigation.navigate("Thread", { 2026-10-23T01:51:03.5952502Z 617 │ environmentId: String(environmentId), 2026-10-23T01:51:03.5952835Z 618 │ threadId: String(threadId), 2026-10-23T01:51:03.5952964Z 619 │ }); 2026-10-23T01:51:03.5953049Z 620 │ }; 2026-10-23T01:51:03.5953137Z 621 │ const androidHeaderSubtitle = [ 2026-10-23T01:51:03.5953266Z 622 │ selectedSection?.title, 2026-10-23T01:51:03.5953382Z 623 │ headerDiffSummary.additions, 2026-10-23T01:51:03.5953493Z 624 │ headerDiffSummary.deletions, 2026-10-23T01:51:03.5953563Z 625 │ ] 2026-10-23T01:51:03.5953709Z 626 │ .filter((part): part is string => Boolean(part)) 2026-10-23T01:51:03.5953818Z 627 │ .join(" · "); 2026-10-23T01:51:03.5953908Z 628 │ 2026-10-23T01:51:03.5954003Z 629 │ const showChangedFilesPane = 2026-10-23T01:51:03.5954105Z 630 │ !showConnectionNotice && 2026-10-23T01:51:03.5954246Z 631 │ selectedSection !== null && 2026-10-23T01:51:03.5954358Z 632 │ parsedDiff.kind === "files" && 2026-10-23T01:51:03.5954461Z 633 │ NativeReviewDiffView !== null; 2026-10-23T01:51:03.5954673Z 634 │ useRegisterWorkspaceInspector(showChangedFilesPane ? renderInspector : undefined); 2026-10-23T01:51:03.5954889Z 635 │ const showChangedFilesToggle = panes.supportsAuxiliaryPane && showChangedFilesPane; 2026-10-23T01:51:03.5955121Z 636 │ 2026-10-23T01:51:03.5955213Z 637 │ const listHeader = (() => { 2026-10-23T01:51:03.5955336Z 638 │ const children: ReactElement[] = []; 2026-10-23T01:51:03.5955412Z 639 │ 2026-10-23T01:51:03.5955532Z 640 │ if (error) { 2026-10-23T01:51:03.5955617Z 641 │ children.push( 2026-10-23T01:51:03.5955711Z 642 │ 2026-10-23T01:51:03.5956611Z 649 │ Review unavailable 2026-10-23T01:51:03.5956811Z 650 │ {error} 2026-10-23T01:51:03.5956907Z 651 │ , 2026-10-23T01:51:03.5956998Z 652 │ ); 2026-10-23T01:51:03.5957067Z 653 │ } 2026-10-23T01:51:03.5957301Z 654 │ 2026-10-23T01:51:03.5957406Z 655 │ if (parsedDiffNotice) { 2026-10-23T01:51:03.5957600Z 656 │ children.push(); 2026-10-23T01:51:03.5957675Z 657 │ } 2026-10-23T01:51:03.5957764Z 658 │ 2026-10-23T01:51:03.5957886Z 659 │ if (children.length === 0) { 2026-10-23T01:51:03.5957988Z 660 │ return null; 2026-10-23T01:51:03.5958055Z 661 │ } 2026-10-23T01:51:03.5958134Z 662 │ 2026-10-23T01:51:03.5958321Z 663 │ return <>{children}; 2026-10-23T01:51:03.5958392Z 664 │ })(); 2026-10-23T01:51:03.5958499Z 665 │ const headerSubtitle = [ 2026-10-23T01:51:03.5958616Z 666 │ headerDiffSummary.additions, 2026-10-23T01:51:03.5958734Z 667 │ headerDiffSummary.deletions, 2026-10-23T01:51:03.5958840Z 668 │ pendingReviewCommentCount > 0 2026-10-23T01:51:03.5959049Z 669 │ ? `${pendingReviewCommentCount} comment${pendingReviewCommentCount === 1 ? "" : "s"}` 2026-10-23T01:51:03.5959145Z 670 │ : null, 2026-10-23T01:51:03.5959223Z 671 │ ] 2026-10-23T01:51:03.5959446Z 672 │ .filter(Boolean) 2026-10-23T01:51:03.5959552Z 673 │ .join(" · "); 2026-10-23T01:51:03.5959797Z 674 │ const headerTitleText = selectedSection?.title ?? "Review changes"; 2026-10-23T01:51:03.5959917Z 675 │ 2026-10-23T01:51:03.5959983Z 676 │ return ( 2026-10-23T01:51:03.5960092Z 677 │ <> 2026-10-23T01:51:03.5960192Z 678 │ 2026-10-23T01:51:03.5962174Z 694 │ 2026-10-23T01:51:03.5962295Z 695 │ 2026-10-23T01:51:03.5962433Z 696 │ 2026-10-23T01:51:03.5962547Z 697 │ {showConnectionNotice ? ( 2026-10-23T01:51:03.5962724Z 698 │ 2026-10-23T01:51:03.5962858Z 699 │ 2026-10-23T01:51:03.5964390Z 711 │ 2026-10-23T01:51:03.5964576Z 712 │ ) : selectedSection && parsedDiff.kind === "files" && NativeReviewDiffView ? ( 2026-10-23T01:51:03.5964676Z 713 │ 2026-10-23T01:51:03.5965326Z 719 │ 2026-10-23T01:51:03.5965812Z 723 │ {listHeader} 2026-10-23T01:51:03.5966146Z 724 │ 2026-10-23T01:51:03.5966299Z 725 │ { 2026-10-23T01:51:03.5987140Z 167 │ const record = 2026-10-23T01:51:03.5987242Z 168 │ token.type === "context" 2026-10-23T01:51:03.5987445Z 169 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-23T01:51:03.5987672Z 170 │ : undefined; 2026-10-23T01:51:03.5987814Z 171 │ const presentation = contextChipPresentation( 2026-10-23T01:51:03.5987955Z 172 │ token.type === "context" ? token.kind : token.type, 2026-10-23T01:51:03.5988027Z 173 │ record, 2026-10-23T01:51:03.5988214Z 174 │ ); 2026-10-23T01:51:03.5988331Z 175 │ const icon = contextChipIcon( 2026-10-23T01:51:03.5988431Z 176 │ presentation, 2026-10-23T01:51:03.5988591Z 177 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-23T01:51:03.5996178Z 178 │ ); 2026-10-23T01:51:03.5996303Z 179 │ return { 2026-10-23T01:51:03.5996380Z 180 │ type: token.type, 2026-10-23T01:51:03.5996462Z 181 │ source: token.source, 2026-10-23T01:51:03.5996539Z 182 │ start: token.start, 2026-10-23T01:51:03.5996618Z 183 │ end: token.end, 2026-10-23T01:51:03.5996718Z 184 │ accent: presentation.accent, 2026-10-23T01:51:03.5996783Z 185 │ label: 2026-10-23T01:51:03.5996861Z 186 │ token.type === "skill" 2026-10-23T01:51:03.5996973Z 187 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-23T01:51:03.5997059Z 188 │ : token.type === "context" 2026-10-23T01:51:03.5997304Z 189 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-23T01:51:03.5997390Z 190 │ : basename(token.value), 2026-10-23T01:51:03.5997537Z 191 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-23T01:51:03.5997634Z 192 │ iconUri: contextChipIconUri(icon), 2026-10-23T01:51:03.5997836Z 193 │ tintsIcon: icon.kind === "chip", 2026-10-23T01:51:03.5997938Z 194 │ }; 2026-10-23T01:51:03.5997996Z 195 │ }), 2026-10-23T01:51:03.5998056Z 196 │ ); 2026-10-23T01:51:03.5998194Z 197 │ }, [props.value, props.context, skillLabels]); 2026-10-23T01:51:03.5998320Z ·  ────────────────────┬──────────────────── 2026-10-23T01:51:03.5998530Z · ╰── This dependency list is missing values used by the callback 2026-10-23T01:51:03.5998677Z 198 │ // Every render resolves against the snapshot history, so a render whose 2026-10-23T01:51:03.5998731Z ╰──── 2026-10-23T01:51:03.5998944Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-23T01:51:03.5999282Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.5999290Z 2026-10-23T01:51:03.5999484Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-23T01:51:03.5999627Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:259:5] 2026-10-23T01:51:03.5999760Z 251 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-23T01:51:03.5999862Z 252 │ nativeEventSnapshotsRef.current.push({ 2026-10-23T01:51:03.5999960Z ·  ───────────┬─────────── 2026-10-23T01:51:03.6000436Z · ╰── 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-23T01:51:03.6000530Z 253 │ eventCount: acknowledgedEventCount, 2026-10-23T01:51:03.6000600Z 254 │ value, 2026-10-23T01:51:03.6000688Z 255 │ selection: nextSelection, 2026-10-23T01:51:03.6000749Z 256 │ }); 2026-10-23T01:51:03.6000835Z 257 │ return acknowledgedEventCount; 2026-10-23T01:51:03.6000892Z 258 │ }, 2026-10-23T01:51:03.6000949Z 259 │ [], 2026-10-23T01:51:03.6001020Z ·  ─┬ 2026-10-23T01:51:03.6001206Z · ╰── This dependency list is missing values used by the callback 2026-10-23T01:51:03.6001262Z 260 │ ); 2026-10-23T01:51:03.6001315Z ╰──── 2026-10-23T01:51:03.6001524Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-23T01:51:03.6001849Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.6001854Z 2026-10-23T01:51:03.6002053Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T01:51:03.6002207Z ╭─[apps/mobile/src/features/review/ReviewCommentCard.tsx:223:31] 2026-10-23T01:51:03.6002316Z 222 │ ? snippetTokens.map((line, lineIndex) => ( 2026-10-23T01:51:03.6002412Z 223 │ 2026-10-23T01:51:03.6002521Z ·  ─────────────── 2026-10-23T01:51:03.6002613Z 224 │ {lineIndex > 0 ? "\n" : ""} 2026-10-23T01:51:03.6002666Z ╰──── 2026-10-23T01:51:03.6002816Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-23T01:51:03.6002819Z 2026-10-23T01:51:03.6003081Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T01:51:03.6003273Z ╭─[apps/mobile/src/features/review/ReviewCommentCard.tsx:227:25] 2026-10-23T01:51:03.6003353Z 226 │ { 2026-10-23T01:51:03.6004467Z ·  ────┬──── 2026-10-23T01:51:03.6004601Z · ╰── This is the containing effect 2026-10-23T01:51:03.6004664Z 261 │ stop(); 2026-10-23T01:51:03.6004734Z ·  ──┬─ 2026-10-23T01:51:03.6004903Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T01:51:03.6004969Z 262 │ }, [orderVersion]); 2026-10-23T01:51:03.6005024Z ╰──── 2026-10-23T01:51:03.6005648Z  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-23T01:51:03.6005981Z  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-23T01:51:03.6005984Z 2026-10-23T01:51:03.6006205Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-23T01:51:03.6006369Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5] 2026-10-23T01:51:03.6006436Z 260 │ useEffect(() => { 2026-10-23T01:51:03.6006499Z 261 │ stop(); 2026-10-23T01:51:03.6006568Z ·  ──┬─ 2026-10-23T01:51:03.6006693Z · ╰── Missing dependency `stop` 2026-10-23T01:51:03.6006759Z 262 │ }, [orderVersion]); 2026-10-23T01:51:03.6006842Z ·  ──────┬───── 2026-10-23T01:51:03.6007000Z · ╰── Unnecessary dependency `orderVersion` 2026-10-23T01:51:03.6007065Z 263 │ useEffect( 2026-10-23T01:51:03.6007117Z ╰──── 2026-10-23T01:51:03.6007544Z  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-23T01:51:03.6007860Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.6007863Z 2026-10-23T01:51:03.6008008Z ⚠ react(refs): Cannot access refs during render 2026-10-23T01:51:03.6008207Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:96:9] 2026-10-23T01:51:03.6008346Z 95 │ const latest = useRef(props); 2026-10-23T01:51:03.6008455Z 96 │ latest.current = props; 2026-10-23T01:51:03.6008561Z ·  ───┬──────┬─── 2026-10-23T01:51:03.6008747Z · │ ╰── Cannot update ref value during render 2026-10-23T01:51:03.6008862Z · ╰── This value is a ref 2026-10-23T01:51:03.6008935Z 97 │ const gesture = useMemo( 2026-10-23T01:51:03.6008990Z ╰──── 2026-10-23T01:51:03.6009467Z  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-23T01:51:03.6009770Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T01:51:03.6009776Z 2026-10-23T01:51:03.6009928Z ⚠ react(refs): Cannot access refs during render 2026-10-23T01:51:03.6010092Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:104:18] 2026-10-23T01:51:03.6010157Z 103 │ .runOnJS(true) 2026-10-23T01:51:03.6010260Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-23T01:51:03.6010378Z ·  ───────────────┬────────────── 2026-10-23T01:51:03.6010583Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T01:51:03.6010717Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-23T01:51:03.6010771Z ╰──── 2026-10-23T01:51:03.6011252Z  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-23T01:51:03.6011551Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T01:51:03.6011554Z 2026-10-23T01:51:03.6011703Z ⚠ react(refs): Cannot access refs during render 2026-10-23T01:51:03.6011865Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:105:19] 2026-10-23T01:51:03.6011966Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-23T01:51:03.6012099Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-23T01:51:03.6012252Z ·  ──────────────────────────┬───────────────────────── 2026-10-23T01:51:03.6012469Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T01:51:03.6012595Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-23T01:51:03.6012652Z ╰──── 2026-10-23T01:51:03.6013124Z  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-23T01:51:03.6013419Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T01:51:03.6013421Z 2026-10-23T01:51:03.6013624Z ⚠ react(refs): Cannot access refs during render 2026-10-23T01:51:03.6013833Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:106:16] 2026-10-23T01:51:03.6013966Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-23T01:51:03.6014089Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-23T01:51:03.6014316Z ·  ──────────────────────────┬───────────────────────── 2026-10-23T01:51:03.6014530Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T01:51:03.6014658Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-23T01:51:03.6014714Z ╰──── 2026-10-23T01:51:03.6015194Z  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-23T01:51:03.6015490Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T01:51:03.6015493Z 2026-10-23T01:51:03.6015640Z ⚠ react(refs): Cannot access refs during render 2026-10-23T01:51:03.6015804Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:107:21] 2026-10-23T01:51:03.6015926Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-23T01:51:03.6016048Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-23T01:51:03.6016196Z ·  ───────────────────────┬────────────────────── 2026-10-23T01:51:03.6016412Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T01:51:03.6016483Z 108 │ [props.disabled], 2026-10-23T01:51:03.6016534Z ╰──── 2026-10-23T01:51:03.6017005Z  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-23T01:51:03.6017299Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T01:51:03.6017301Z 2026-10-23T01:51:03.6017448Z ⚠ react(refs): Cannot access refs during render 2026-10-23T01:51:03.6017698Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:249:9] 2026-10-23T01:51:03.6017859Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-23T01:51:03.6017969Z 249 │ latest.current = { rows, planners, moveThread }; 2026-10-23T01:51:03.6018075Z ·  ───┬──────┬─── 2026-10-23T01:51:03.6018294Z · │ ╰── Cannot update ref value during render 2026-10-23T01:51:03.6018409Z · ╰── This value is a ref 2026-10-23T01:51:03.6018466Z 250 │ 2026-10-23T01:51:03.6018518Z ╰──── 2026-10-23T01:51:03.6018995Z  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-23T01:51:03.6019294Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T01:51:03.6019297Z 2026-10-23T01:51:03.6019442Z ⚠ react(refs): Cannot access refs during render 2026-10-23T01:51:03.6019606Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:247:22] 2026-10-23T01:51:03.6019731Z 246 │ const [preview, setPreview] = useState(null); 2026-10-23T01:51:03.6019847Z 247 │ const translateY = useRef(new Animated.Value(0)).current; 2026-10-23T01:51:03.6019974Z ·  ──────────────────┬────────────────── 2026-10-23T01:51:03.6020146Z · ╰── Cannot access ref value during render 2026-10-23T01:51:03.6020265Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-23T01:51:03.6020321Z ╰──── 2026-10-23T01:51:03.6020792Z  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-23T01:51:03.6021089Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T01:51:03.6021092Z 2026-10-23T01:51:03.6021264Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T01:51:03.6021428Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:324:16] 2026-10-23T01:51:03.6021494Z 323 │ update(0); 2026-10-23T01:51:03.6021579Z 324 │ let last = performance.now(); 2026-10-23T01:51:03.6021680Z ·  ────────┬──────── 2026-10-23T01:51:03.6021825Z · ╰── Cannot call impure function 2026-10-23T01:51:03.6021896Z 325 │ const tick = () => { 2026-10-23T01:51:03.6021946Z ╰──── 2026-10-23T01:51:03.6022251Z  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-23T01:51:03.6022550Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T01:51:03.6022554Z 2026-10-23T01:51:03.6022745Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-23T01:51:03.6022971Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:99:15] 2026-10-23T01:51:03.6023070Z  98 │ () => 2026-10-23T01:51:03.6023140Z  99 │ Gesture.Pan() 2026-10-23T01:51:03.6023219Z ·  ─┬─ 2026-10-23T01:51:03.6023352Z · ╰── `Pan` may be a component 2026-10-23T01:51:03.6023433Z 100 │ .enabled(!props.disabled) 2026-10-23T01:51:03.6023485Z ╰──── 2026-10-23T01:51:03.6023769Z  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-23T01:51:03.6024227Z  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-23T01:51:03.6024236Z 2026-10-23T01:51:03.6024427Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-23T01:51:03.6024590Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:108:5] 2026-10-23T01:51:03.6024658Z 103 │ .runOnJS(true) 2026-10-23T01:51:03.6024759Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-23T01:51:03.6024849Z ·  ───┬── 2026-10-23T01:51:03.6025292Z · ╰── 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-23T01:51:03.6025429Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-23T01:51:03.6025560Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-23T01:51:03.6025690Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-23T01:51:03.6025756Z 108 │ [props.disabled], 2026-10-23T01:51:03.6025839Z ·  ────────┬─────── 2026-10-23T01:51:03.6026031Z · ╰── This dependency list is missing values used by the callback 2026-10-23T01:51:03.6026088Z 109 │ ); 2026-10-23T01:51:03.6026140Z ╰──── 2026-10-23T01:51:03.6026348Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-23T01:51:03.6026669Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.6026672Z 2026-10-23T01:51:03.6026878Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T01:51:03.6027050Z ╭─[apps/web/src/components/pullRequest/PullRequestSummaryTab.tsx:814:17] 2026-10-23T01:51:03.6027116Z 813 │
    { 2026-10-23T01:51:03.6044724Z 165 │ const record = 2026-10-23T01:51:03.6044805Z 166 │ token.type === "context" 2026-10-23T01:51:03.6044973Z 167 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-23T01:51:03.6045039Z 168 │ : undefined; 2026-10-23T01:51:03.6045149Z 169 │ const presentation = contextChipPresentation( 2026-10-23T01:51:03.6045266Z 170 │ token.type === "context" ? token.kind : token.type, 2026-10-23T01:51:03.6045335Z 171 │ record, 2026-10-23T01:51:03.6045393Z 172 │ ); 2026-10-23T01:51:03.6045480Z 173 │ const icon = contextChipIcon( 2026-10-23T01:51:03.6045550Z 174 │ presentation, 2026-10-23T01:51:03.6045698Z 175 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-23T01:51:03.6045756Z 176 │ ); 2026-10-23T01:51:03.6045820Z 177 │ return { 2026-10-23T01:51:03.6045894Z 178 │ type: token.type, 2026-10-23T01:51:03.6045972Z 179 │ source: token.source, 2026-10-23T01:51:03.6046044Z 180 │ start: token.start, 2026-10-23T01:51:03.6046113Z 181 │ end: token.end, 2026-10-23T01:51:03.6046201Z 182 │ accent: presentation.accent, 2026-10-23T01:51:03.6046271Z 183 │ label: 2026-10-23T01:51:03.6046352Z 184 │ token.type === "skill" 2026-10-23T01:51:03.6046461Z 185 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-23T01:51:03.6046546Z 186 │ : token.type === "context" 2026-10-23T01:51:03.6046784Z 187 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-23T01:51:03.6046866Z 188 │ : basename(token.value), 2026-10-23T01:51:03.6047013Z 189 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-23T01:51:03.6047107Z 190 │ iconUri: contextChipIconUri(icon), 2026-10-23T01:51:03.6047198Z 191 │ tintsIcon: icon.kind === "chip", 2026-10-23T01:51:03.6047256Z 192 │ }; 2026-10-23T01:51:03.6047315Z 193 │ }), 2026-10-23T01:51:03.6047373Z 194 │ ); 2026-10-23T01:51:03.6047537Z 195 │ }, [props.value, props.context, skillLabels]); 2026-10-23T01:51:03.6047701Z ·  ────────────────────┬──────────────────── 2026-10-23T01:51:03.6047905Z · ╰── This dependency list is missing values used by the callback 2026-10-23T01:51:03.6048047Z 196 │ // Every render resolves against the snapshot history, so a render whose 2026-10-23T01:51:03.6048101Z ╰──── 2026-10-23T01:51:03.6048342Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-23T01:51:03.6048662Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.6048665Z 2026-10-23T01:51:03.6048865Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-23T01:51:03.6049013Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:257:5] 2026-10-23T01:51:03.6049144Z 249 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-23T01:51:03.6049249Z 250 │ nativeEventSnapshotsRef.current.push({ 2026-10-23T01:51:03.6049344Z ·  ───────────┬─────────── 2026-10-23T01:51:03.6049813Z · ╰── 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-23T01:51:03.6049907Z 251 │ eventCount: acknowledgedEventCount, 2026-10-23T01:51:03.6049970Z 252 │ value, 2026-10-23T01:51:03.6050051Z 253 │ selection: nextSelection, 2026-10-23T01:51:03.6050116Z 254 │ }); 2026-10-23T01:51:03.6050204Z 255 │ return acknowledgedEventCount; 2026-10-23T01:51:03.6050262Z 256 │ }, 2026-10-23T01:51:03.6050320Z 257 │ [], 2026-10-23T01:51:03.6050389Z ·  ─┬ 2026-10-23T01:51:03.6050574Z · ╰── This dependency list is missing values used by the callback 2026-10-23T01:51:03.6050630Z 258 │ ); 2026-10-23T01:51:03.6050685Z ╰──── 2026-10-23T01:51:03.6050893Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-23T01:51:03.6051208Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.6051213Z 2026-10-23T01:51:03.6051483Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T01:51:03.6051625Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:60:5] 2026-10-23T01:51:03.6051682Z 57 │ 2026-10-23T01:51:03.6051750Z 58 │ useEffect(() => { 2026-10-23T01:51:03.6051821Z ·  ────┬──── 2026-10-23T01:51:03.6051954Z · ╰── This is the containing effect 2026-10-23T01:51:03.6052051Z 59 │ const controller = new AbortController(); 2026-10-23T01:51:03.6052128Z 60 │ setLoadState("pending"); 2026-10-23T01:51:03.6052205Z ·  ──────┬───── 2026-10-23T01:51:03.6052377Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T01:51:03.6052540Z 61 │ // A renewed signature is used on Retry, not as a reason to reset the native player. 2026-10-23T01:51:03.6052666Z ╰──── 2026-10-23T01:51:03.6053316Z  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-23T01:51:03.6053646Z  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-23T01:51:03.6053649Z 2026-10-23T01:51:03.6053856Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T01:51:03.6053992Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:71:7] 2026-10-23T01:51:03.6054076Z 70 │ return () => controller.abort(); 2026-10-23T01:51:03.6054176Z 71 │ }, [player, props.playRequested, attempt]); 2026-10-23T01:51:03.6054419Z ·  ───┬── ─────────┬───────── ───┬─── 2026-10-23T01:51:03.6054655Z · │ │ ╰── Unnecessary dependency `attempt` 2026-10-23T01:51:03.6054862Z · │ ╰── Unnecessary dependency `props.playRequested` 2026-10-23T01:51:03.6055002Z · ╰── Unnecessary dependency `player_0` 2026-10-23T01:51:03.6055058Z 72 │ 2026-10-23T01:51:03.6055113Z ╰──── 2026-10-23T01:51:03.6055415Z  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-23T01:51:03.6055738Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.6055748Z 2026-10-23T01:51:03.6055987Z ⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence. 2026-10-23T01:51:03.6056154Z ╭─[apps/web/src/components/pullRequest/pullRequestList.logic.ts:187:9] 2026-10-23T01:51:03.6056219Z 186 │ ): boolean { 2026-10-23T01:51:03.6056373Z 187 │ const labels = entry.labels.map((label) => label.name.trim().toLowerCase()); 2026-10-23T01:51:03.6056543Z ·  ───────────────────────────────────────────────────────────────────── 2026-10-23T01:51:03.6056695Z 188 │ const holds = (label: string) => labels.includes(label.trim().toLowerCase()); 2026-10-23T01:51:03.6056750Z ╰──── 2026-10-23T01:51:03.6056911Z  help: Switch to `Set` 2026-10-23T01:51:03.6056965Z 2026-10-23T01:51:03.6057243Z ⚠ eslint(no-unused-vars): Variable 'layerDaemon' is declared but never used. Unused variables should start with a '_'. 2026-10-23T01:51:03.6057386Z ╭─[apps/server/src/orchestration-v2/EffectWorker.ts:911:7] 2026-10-23T01:51:03.6057442Z 910 │ 2026-10-23T01:51:03.6057635Z 911 │ const layerDaemon: Layer.Layer = Layer.effectDiscard( 2026-10-23T01:51:03.6057711Z ·  ─────┬───── 2026-10-23T01:51:03.6057850Z · ╰── 'layerDaemon' is declared here 2026-10-23T01:51:03.6057939Z 912 │ runDaemon.pipe(Effect.forkScoped), 2026-10-23T01:51:03.6057993Z ╰──── 2026-10-23T01:51:03.6058100Z  help: Consider removing this declaration. 2026-10-23T01:51:03.6058110Z 2026-10-23T01:51:03.6058434Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-23T01:51:03.6058608Z ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:387:19] 2026-10-23T01:51:03.6058671Z 386 │ onFilters, 2026-10-23T01:51:03.6058741Z 387 │ authorOptions = [], 2026-10-23T01:51:03.6058823Z ·  ── 2026-10-23T01:51:03.6058893Z 388 │ labelOptions = [], 2026-10-23T01:51:03.6058948Z ╰──── 2026-10-23T01:51:03.6059273Z  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-23T01:51:03.6059276Z 2026-10-23T01:51:03.6059568Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-23T01:51:03.6059743Z ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:388:18] 2026-10-23T01:51:03.6059812Z 387 │ authorOptions = [], 2026-10-23T01:51:03.6059878Z 388 │ labelOptions = [], 2026-10-23T01:51:03.6059955Z ·  ── 2026-10-23T01:51:03.6060013Z 389 │ host, 2026-10-23T01:51:03.6060066Z ╰──── 2026-10-23T01:51:03.6060385Z  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-23T01:51:03.6060390Z 2026-10-23T01:51:03.6060585Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T01:51:03.6060743Z ╭─[apps/mobile/src/components/ComposerContextSheet.tsx:267:25] 2026-10-23T01:51:03.6060862Z 266 │ {record.elements?.map((element, index) => ( 2026-10-23T01:51:03.6061033Z 267 │ 2026-10-23T01:51:03.6061189Z ·  ─────────────────────────────────────────────────────── 2026-10-23T01:51:03.6061268Z 268 │ { 2026-10-23T01:51:03.6065336Z ·  ────┬──── 2026-10-23T01:51:03.6065467Z · ╰── This is the containing effect 2026-10-23T01:51:03.6065618Z 63 │ if (playbackUrl === null && resolvedUrl !== null) setPlaybackUrl(resolvedUrl); 2026-10-23T01:51:03.6065756Z ·  ───────┬────── 2026-10-23T01:51:03.6065969Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T01:51:03.6066050Z 64 │ }, [playbackUrl, resolvedUrl]); 2026-10-23T01:51:03.6066104Z ╰──── 2026-10-23T01:51:03.6066713Z  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-23T01:51:03.6067043Z  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-23T01:51:03.6067103Z 2026-10-23T01:51:03.6067348Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T01:51:03.6067481Z ╭─[apps/mobile/src/components/ComposerEditor.tsx:82:6] 2026-10-23T01:51:03.6067539Z 81 │ }, 2026-10-23T01:51:03.6067603Z 82 │ [draftKey], 2026-10-23T01:51:03.6067676Z ·  ────┬─── 2026-10-23T01:51:03.6067817Z · ╰── Unnecessary dependency `draftKey` 2026-10-23T01:51:03.6067874Z 83 │ ); 2026-10-23T01:51:03.6067928Z ╰──── 2026-10-23T01:51:03.6068261Z  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-23T01:51:03.6068584Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.6068589Z 2026-10-23T01:51:03.6069068Z ⚠ 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-23T01:51:03.6069244Z ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:566:7] 2026-10-23T01:51:03.6069351Z 565 │ let afterSequence = created[0]!.sequence; 2026-10-23T01:51:03.6069557Z 566 │ ╭─▶ for (let index = 1; index <= 32; index += 1) { 2026-10-23T01:51:03.6069668Z 567 │ │ const nextEvent = { 2026-10-23T01:51:03.6069840Z 568 │ │ id: EventId.make(`event:foundation-stream-race:${index}`), 2026-10-23T01:51:03.6069979Z 569 │ │ type: "thread.metadata-updated" as const, 2026-10-23T01:51:03.6070072Z 570 │ │ threadId, 2026-10-23T01:51:03.6070181Z 571 │ │ providerInstanceId, 2026-10-23T01:51:03.6070283Z 572 │ │ occurredAt: now, 2026-10-23T01:51:03.6070437Z 573 │ │ payload: { ...thread, title: `Race update ${index}` }, 2026-10-23T01:51:03.6070566Z 574 │ │ } satisfies OrchestrationV2DomainEvent; 2026-10-23T01:51:03.6070686Z 575 │ │ const reader = yield* eventSink 2026-10-23T01:51:03.6070812Z 576 │ │ .stream({ threadId, afterSequence }) 2026-10-23T01:51:03.6070953Z 577 │ │ .pipe(Stream.runHead, Effect.forkChild); 2026-10-23T01:51:03.6071063Z 578 │ │ yield* Effect.yieldNow; 2026-10-23T01:51:03.6071231Z 579 │ │ const written = yield* eventSink.write({ events: [nextEvent] }); 2026-10-23T01:51:03.6071363Z 580 │ │ const received = yield* Fiber.join(reader); 2026-10-23T01:51:03.6071481Z 581 │ │ if (Option.isNone(received)) { 2026-10-23T01:51:03.6071684Z 582 │ │ return yield* Effect.die("The event stream ended before delivering the live event."); 2026-10-23T01:51:03.6071768Z 583 │ │ } 2026-10-23T01:51:03.6071935Z 584 │ │ assert.equal(received.value.sequence, written[0]?.sequence); 2026-10-23T01:51:03.6072085Z 585 │ │ assert.equal(received.value.event.id, nextEvent.id); 2026-10-23T01:51:03.6072292Z 586 │ │ afterSequence = received.value.sequence; 2026-10-23T01:51:03.6072462Z 587 │ ╰─▶ } 2026-10-23T01:51:03.6072525Z 588 │ }), 2026-10-23T01:51:03.6072580Z ╰──── 2026-10-23T01:51:03.6072583Z 2026-10-23T01:51:03.6073055Z ⚠ 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-23T01:51:03.6073232Z ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:2327:9] 2026-10-23T01:51:03.6073313Z 2326 │ let settled = false; 2026-10-23T01:51:03.6073481Z 2327 │ ╭─▶ while (!settled) { 2026-10-23T01:51:03.6073652Z 2328 │ │ settled = (yield* outbox.listByCommandId(commandId)).every( 2026-10-23T01:51:03.6073789Z 2329 │ │ (effect) => effect.status === "succeeded", 2026-10-23T01:51:03.6073876Z 2330 │ │ ); 2026-10-23T01:51:03.6074004Z 2331 │ │ if (!settled) yield* Effect.yieldNow; 2026-10-23T01:51:03.6074145Z 2332 │ ╰─▶ } 2026-10-23T01:51:03.6074263Z 2333 │ }).pipe(Effect.provide(layerWorker), Effect.scoped); 2026-10-23T01:51:03.6074318Z ╰──── 2026-10-23T01:51:03.6074321Z 2026-10-23T01:51:03.6074560Z ⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence. 2026-10-23T01:51:03.6074705Z ╭─[apps/web/src/components/chat/useComposerSend.ts:978:13] 2026-10-23T01:51:03.6074832Z 977 │ const changedBeforeDecline = draftChangedSinceSend(); 2026-10-23T01:51:03.6075074Z 978 │ ╭─▶ const pendingIdsBeforeDecline = pendingApprovalsRef.current.map( 2026-10-23T01:51:03.6075198Z 979 │ │ (approval) => approval.requestId, 2026-10-23T01:51:03.6075334Z 980 │ ╰─▶ ); 2026-10-23T01:51:03.6075474Z 981 │ const approvalResponding = approvalsToDecline.some((approval) => 2026-10-23T01:51:03.6075525Z ╰──── 2026-10-23T01:51:03.6075605Z  help: Switch to `Set` 2026-10-23T01:51:03.6075607Z 2026-10-23T01:51:03.6075756Z ⚠ react(refs): Cannot access refs during render 2026-10-23T01:51:03.6075966Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:152:27] 2026-10-23T01:51:03.6076185Z 151 │ 2026-10-23T01:51:03.6076266Z 152 │ {props.children(open)} 2026-10-23T01:51:03.6076360Z ·  ──┬─ 2026-10-23T01:51:03.6076525Z · ╰── Cannot access ref value during render 2026-10-23T01:51:03.6076590Z 153 │ 2026-10-23T01:51:03.6076644Z ╰──── 2026-10-23T01:51:03.6077126Z  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-23T01:51:03.6077431Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T01:51:03.6077436Z 2026-10-23T01:51:03.6077638Z ⚠ react(memo-dependencies): Found missing/extra memoization dependencies 2026-10-23T01:51:03.6077789Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:140:9] 2026-10-23T01:51:03.6077874Z 139 │ if (action.id !== undefined) { 2026-10-23T01:51:03.6077957Z 140 │ props.onPressAction?.({ 2026-10-23T01:51:03.6078034Z ·  ──┬── 2026-10-23T01:51:03.6078167Z · ╰── Missing dependency `props` 2026-10-23T01:51:03.6078293Z 141 │ nativeEvent: { event: action.id }, 2026-10-23T01:51:03.6078443Z 142 │ } as Parameters>[0]); 2026-10-23T01:51:03.6078509Z 143 │ } 2026-10-23T01:51:03.6078567Z 144 │ }, 2026-10-23T01:51:03.6078651Z 145 │ [close, props.onPressAction], 2026-10-23T01:51:03.6078748Z ·  ─────────┬───────── 2026-10-23T01:51:03.6078970Z · ╰── Overly precise dependency `props.onPressAction`, use `props` instead 2026-10-23T01:51:03.6079025Z 146 │ ); 2026-10-23T01:51:03.6079078Z ╰──── 2026-10-23T01:51:03.6079571Z  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-23T01:51:03.6079898Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.6079903Z 2026-10-23T01:51:03.6080379Z ⚠ 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-23T01:51:03.6080528Z ╭─[apps/server/src/background/HostPowerMonitor.test.ts:133:11] 2026-10-23T01:51:03.6080664Z 132 │ const monitor = yield* HostPowerMonitor.HostPowerMonitor; 2026-10-23T01:51:03.6080812Z 133 │ ╭─▶ for ( 2026-10-23T01:51:03.6080918Z 134 │ │ let attempt = 0; 2026-10-23T01:51:03.6081089Z 135 │ │ attempt < 100 && (yield* monitor.snapshot).onBattery !== "true"; 2026-10-23T01:51:03.6081251Z 136 │ │ attempt += 1 2026-10-23T01:51:03.6081370Z 137 │ │ ) { 2026-10-23T01:51:03.6081483Z 138 │ │ yield* Effect.yieldNow; 2026-10-23T01:51:03.6081618Z 139 │ ╰─▶ } 2026-10-23T01:51:03.6081745Z 140 │ expect((yield* monitor.snapshot).onBattery).toBe("true"); 2026-10-23T01:51:03.6081799Z ╰──── 2026-10-23T01:51:03.6081802Z 2026-10-23T01:51:03.6082019Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-23T01:51:03.6082146Z ╭─[apps/mobile/src/lib/markdownDocument.ts:138:28] 2026-10-23T01:51:03.6082229Z 137 │ visit(parser.parse(markdown)); 2026-10-23T01:51:03.6082315Z 138 │ for (const edit of edits.reverse()) 2026-10-23T01:51:03.6082421Z ·  ─────── 2026-10-23T01:51:03.6082589Z 139 │ markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end); 2026-10-23T01:51:03.6082645Z ╰──── 2026-10-23T01:51:03.6082916Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-23T01:51:03.6082922Z 2026-10-23T01:51:03.6083139Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-23T01:51:03.6083265Z ╭─[apps/mobile/src/lib/markdownDocument.ts:169:28] 2026-10-23T01:51:03.6083342Z 168 │ visit(parser.parse(markdown)); 2026-10-23T01:51:03.6083428Z 169 │ for (const edit of edits.reverse()) 2026-10-23T01:51:03.6083524Z ·  ─────── 2026-10-23T01:51:03.6083696Z 170 │ markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end); 2026-10-23T01:51:03.6083751Z ╰──── 2026-10-23T01:51:03.6084014Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-23T01:51:03.6084017Z 2026-10-23T01:51:03.6084230Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-23T01:51:03.6084356Z ╭─[apps/mobile/src/lib/markdownDocument.ts:223:38] 2026-10-23T01:51:03.6084435Z 222 │ visit(parser.parse(markdown)); 2026-10-23T01:51:03.6084543Z 223 │ for (const lineStart of lineStarts.reverse()) { 2026-10-23T01:51:03.6084650Z ·  ─────── 2026-10-23T01:51:03.6084819Z 224 │ // The header row may be a lazy line without its container markers (`>` or list indent), 2026-10-23T01:51:03.6084876Z ╰──── 2026-10-23T01:51:03.6085145Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-23T01:51:03.6085147Z 2026-10-23T01:51:03.6085360Z ⚠ eslint(no-unused-vars): Identifier 'HostProcess' is imported but never used. 2026-10-23T01:51:03.6085528Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:25:13] 2026-10-23T01:51:03.6085618Z 24 │ import * as Schema from "effect/Schema"; 2026-10-23T01:51:03.6085737Z 25 │ import * as HostProcess from "@t3tools/shared/HostProcess"; 2026-10-23T01:51:03.6085822Z ·  ─────┬───── 2026-10-23T01:51:03.6085967Z · ╰── 'HostProcess' is imported here 2026-10-23T01:51:03.6086022Z 26 │ 2026-10-23T01:51:03.6086074Z ╰──── 2026-10-23T01:51:03.6086239Z  help: Consider removing this import. 2026-10-23T01:51:03.6086289Z 2026-10-23T01:51:03.6086570Z ⚠ eslint(no-unused-vars): Variable 'serverConfig' is declared but never used. Unused variables should start with a '_'. 2026-10-23T01:51:03.6086738Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:124:11] 2026-10-23T01:51:03.6086820Z 123 │ const path = yield* Path.Path; 2026-10-23T01:51:03.6086941Z 124 │ const serverConfig = yield* ServerConfig.ServerConfig; 2026-10-23T01:51:03.6087025Z ·  ──────┬───── 2026-10-23T01:51:03.6087169Z · ╰── 'serverConfig' is declared here 2026-10-23T01:51:03.6087312Z 125 │ const serverSettings = yield* ServerSettings.ServerSettingsService; 2026-10-23T01:51:03.6087365Z ╰──── 2026-10-23T01:51:03.6087479Z  help: Consider removing this declaration. 2026-10-23T01:51:03.6087485Z 2026-10-23T01:51:03.6087764Z ⚠ eslint(no-unused-vars): Variable 'serverSettings' is declared but never used. Unused variables should start with a '_'. 2026-10-23T01:51:03.6087929Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:125:11] 2026-10-23T01:51:03.6088045Z 124 │ const serverConfig = yield* ServerConfig.ServerConfig; 2026-10-23T01:51:03.6088222Z 125 │ const serverSettings = yield* ServerSettings.ServerSettingsService; 2026-10-23T01:51:03.6088311Z ·  ───────┬────── 2026-10-23T01:51:03.6088461Z · ╰── 'serverSettings' is declared here 2026-10-23T01:51:03.6088602Z 126 │ const gitWorkflow = yield* GitWorkflowService.GitWorkflowService; 2026-10-23T01:51:03.6088662Z ╰──── 2026-10-23T01:51:03.6088774Z  help: Consider removing this declaration. 2026-10-23T01:51:03.6088777Z 2026-10-23T01:51:03.6088965Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T01:51:03.6089104Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:121:27] 2026-10-23T01:51:03.6089270Z 120 │ const scope = makeScope(options.capabilities ?? new Set(["preview", "worktree"])); 2026-10-23T01:51:03.6089362Z 121 │ const dispatch = vi.fn((_: unknown) => 2026-10-23T01:51:03.6089448Z ·  ┬ 2026-10-23T01:51:03.6089580Z · ╰── '_' is declared here 2026-10-23T01:51:03.6089683Z 122 │ (options.dispatchGate ?? Effect.void).pipe( 2026-10-23T01:51:03.6089737Z ╰──── 2026-10-23T01:51:03.6089847Z  help: Consider removing this parameter. 2026-10-23T01:51:03.6089852Z 2026-10-23T01:51:03.6090037Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T01:51:03.6090176Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:134:39] 2026-10-23T01:51:03.6090233Z 133 │ ); 2026-10-23T01:51:03.6090341Z 134 │ const listLocalBranchNames = vi.fn((_: string) => 2026-10-23T01:51:03.6090440Z ·  ┬ 2026-10-23T01:51:03.6090586Z · ╰── '_' is declared here 2026-10-23T01:51:03.6090657Z 135 │ Effect.succeed( 2026-10-23T01:51:03.6090711Z ╰──── 2026-10-23T01:51:03.6090812Z  help: Consider removing this parameter. 2026-10-23T01:51:03.6090815Z 2026-10-23T01:51:03.6091059Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T01:51:03.6091234Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:178:31] 2026-10-23T01:51:03.6091292Z 177 │ }); 2026-10-23T01:51:03.6091391Z 178 │ const sendToThread = vi.fn((_: unknown) => { 2026-10-23T01:51:03.6091547Z ·  ┬ 2026-10-23T01:51:03.6091687Z · ╰── '_' is declared here 2026-10-23T01:51:03.6091789Z 179 │ switch (options.continuation ?? "queued") { 2026-10-23T01:51:03.6091840Z ╰──── 2026-10-23T01:51:03.6091944Z  help: Consider removing this parameter. 2026-10-23T01:51:03.6091946Z 2026-10-23T01:51:03.6092132Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T01:51:03.6092274Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:203:33] 2026-10-23T01:51:03.6092332Z 202 │ ); 2026-10-23T01:51:03.6092434Z 203 │ const removeWorktree = vi.fn((_: unknown) => 2026-10-23T01:51:03.6092528Z ·  ┬ 2026-10-23T01:51:03.6092669Z · ╰── '_' is declared here 2026-10-23T01:51:03.6092750Z 204 │ options.removeWorktreeFails 2026-10-23T01:51:03.6092804Z ╰──── 2026-10-23T01:51:03.6092907Z  help: Consider removing this parameter. 2026-10-23T01:51:03.6092911Z 2026-10-23T01:51:03.6093095Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T01:51:03.6093228Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:208:36] 2026-10-23T01:51:03.6093286Z 207 │ ); 2026-10-23T01:51:03.6093395Z 208 │ const deleteLocalBranch = vi.fn((_: unknown) => 2026-10-23T01:51:03.6093495Z ·  ┬ 2026-10-23T01:51:03.6093634Z · ╰── '_' is declared here 2026-10-23T01:51:03.6093723Z 209 │ options.deleteLocalBranchFails 2026-10-23T01:51:03.6093778Z ╰──── 2026-10-23T01:51:03.6093880Z  help: Consider removing this parameter. 2026-10-23T01:51:03.6093885Z 2026-10-23T01:51:03.6094067Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T01:51:03.6094282Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:213:42] 2026-10-23T01:51:03.6094340Z 212 │ ); 2026-10-23T01:51:03.6094455Z 213 │ const fetchWorktreeBaseCommit = vi.fn((_: unknown) => 2026-10-23T01:51:03.6094562Z ·  ┬ 2026-10-23T01:51:03.6094712Z · ╰── '_' is declared here 2026-10-23T01:51:03.6094799Z 214 │ options.fetchWorktreeBaseFails 2026-10-23T01:51:03.6094853Z ╰──── 2026-10-23T01:51:03.6094952Z  help: Consider removing this parameter. 2026-10-23T01:51:03.6094954Z 2026-10-23T01:51:03.6095138Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T01:51:03.6095275Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:254:30] 2026-10-23T01:51:03.6095331Z 253 │ ); 2026-10-23T01:51:03.6095423Z 254 │ const localStatus = vi.fn((_: unknown) => 2026-10-23T01:51:03.6095512Z ·  ┬ 2026-10-23T01:51:03.6095647Z · ╰── '_' is declared here 2026-10-23T01:51:03.6095802Z 255 │ Effect.succeed({ 2026-10-23T01:51:03.6095906Z ╰──── 2026-10-23T01:51:03.6096008Z  help: Consider removing this parameter. 2026-10-23T01:51:03.6096011Z 2026-10-23T01:51:03.6096194Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T01:51:03.6096331Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:264:32] 2026-10-23T01:51:03.6096387Z 263 │ ); 2026-10-23T01:51:03.6096538Z 264 │ const refreshStatus = vi.fn((_: string) => Effect.die("refreshStatus stub")); 2026-10-23T01:51:03.6096632Z ·  ┬ 2026-10-23T01:51:03.6096771Z · ╰── '_' is declared here 2026-10-23T01:51:03.6096917Z 265 │ const runForThread = vi.fn((input: { readonly worktreePath: string }) => { 2026-10-23T01:51:03.6096978Z ╰──── 2026-10-23T01:51:03.6097084Z  help: Consider removing this parameter. 2026-10-23T01:51:03.6097087Z 2026-10-23T01:51:03.6097385Z ⚠ eslint(no-unused-vars): Variable 'revokeActiveMcpThread' is declared but never used. Unused variables should start with a '_'. 2026-10-23T01:51:03.6097515Z ╭─[apps/server/src/mcp/McpSessionRegistry.ts:218:7] 2026-10-23T01:51:03.6097569Z 217 │ 2026-10-23T01:51:03.6097720Z 218 │ const revokeActiveMcpThread = (threadId: ThreadId): Effect.Effect => 2026-10-23T01:51:03.6097814Z ·  ──────────┬────────── 2026-10-23T01:51:03.6097976Z · ╰── 'revokeActiveMcpThread' is declared here 2026-10-23T01:51:03.6098166Z 219 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeThread(threadId) : Effect.void; 2026-10-23T01:51:03.6098263Z ╰──── 2026-10-23T01:51:03.6098376Z  help: Consider removing this declaration. 2026-10-23T01:51:03.6098378Z 2026-10-23T01:51:03.6098694Z ⚠ eslint(no-unused-vars): Variable 'revokeAllActiveMcpCredentials' is declared but never used. Unused variables should start with a '_'. 2026-10-23T01:51:03.6098818Z ╭─[apps/server/src/mcp/McpSessionRegistry.ts:221:7] 2026-10-23T01:51:03.6098874Z 220 │ 2026-10-23T01:51:03.6099011Z 221 │ const revokeAllActiveMcpCredentials = (): Effect.Effect => 2026-10-23T01:51:03.6099116Z ·  ──────────────┬────────────── 2026-10-23T01:51:03.6099296Z · ╰── 'revokeAllActiveMcpCredentials' is declared here 2026-10-23T01:51:03.6099463Z 222 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeAll : Effect.void; 2026-10-23T01:51:03.6099522Z ╰──── 2026-10-23T01:51:03.6099632Z  help: Consider removing this declaration. 2026-10-23T01:51:03.6099634Z 2026-10-23T01:51:03.6099842Z ⚠ eslint(no-unused-vars): Identifier 'HookForwarder' is imported but never used. 2026-10-23T01:51:03.6099947Z ╭─[infra/relay/src/http/Api.ts:69:13] 2026-10-23T01:51:03.6100088Z 68 │ import * as EnvironmentLinks from "../environments/EnvironmentLinks.ts"; 2026-10-23T01:51:03.6100206Z 69 │ import * as HookForwarder from "../hooks/HookForwarder.ts"; 2026-10-23T01:51:03.6100291Z ·  ──────┬────── 2026-10-23T01:51:03.6100436Z · ╰── 'HookForwarder' is imported here 2026-10-23T01:51:03.6100541Z 70 │ import * as HeldHooks from "../hooks/HeldHooks.ts"; 2026-10-23T01:51:03.6100595Z ╰──── 2026-10-23T01:51:03.6100757Z  help: Consider removing this import. 2026-10-23T01:51:03.6100798Z 2026-10-23T01:51:03.6100986Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T01:51:03.6101163Z ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:555:70] 2026-10-23T01:51:03.6101248Z 554 │ assert.deepStrictEqual( 2026-10-23T01:51:03.6101415Z 555 │ (yield* Ref.get(fixture.syncCommands)).map(({ commandId: _, ...rest }) => rest), 2026-10-23T01:51:03.6101539Z ·  ┬ 2026-10-23T01:51:03.6101708Z · ╰── '_' is declared here 2026-10-23T01:51:03.6101772Z 556 │ [ 2026-10-23T01:51:03.6101827Z ╰──── 2026-10-23T01:51:03.6101933Z  help: Consider removing this parameter. 2026-10-23T01:51:03.6101940Z 2026-10-23T01:51:03.6102125Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T01:51:03.6102303Z ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:1155:70] 2026-10-23T01:51:03.6102390Z 1154 │ assert.deepStrictEqual( 2026-10-23T01:51:03.6102556Z 1155 │ (yield* Ref.get(fixture.linkCommands)).map(({ commandId: _, ...rest }) => rest), 2026-10-23T01:51:03.6102683Z ·  ┬ 2026-10-23T01:51:03.6102853Z · ╰── '_' is declared here 2026-10-23T01:51:03.6102918Z 1156 │ [ 2026-10-23T01:51:03.6102973Z ╰──── 2026-10-23T01:51:03.6103083Z  help: Consider removing this parameter. 2026-10-23T01:51:03.6103089Z 2026-10-23T01:51:03.6103381Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T01:51:03.6103561Z ╭─[apps/mobile/src/features/threads/thread-inspector-content-stack.tsx:60:5] 2026-10-23T01:51:03.6103616Z 58 │ 2026-10-23T01:51:03.6103684Z 59 │ useEffect(() => { 2026-10-23T01:51:03.6103759Z ·  ────┬──── 2026-10-23T01:51:03.6103891Z · ╰── This is the containing effect 2026-10-23T01:51:03.6103972Z 60 │ setMountedModes((current) => { 2026-10-23T01:51:03.6104056Z ·  ───────┬─────── 2026-10-23T01:51:03.6104229Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T01:51:03.6104391Z 61 │ if (current.has(props.mode)) { 2026-10-23T01:51:03.6104479Z ╰──── 2026-10-23T01:51:03.6105095Z  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-23T01:51:03.6105428Z  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-23T01:51:03.6105430Z 2026-10-23T01:51:03.6105590Z ⚠ eslint(no-new): Do not use 'new' for side effects. 2026-10-23T01:51:03.6105719Z ╭─[apps/server/src/mcp/McpToolAccess.test.ts:168:3] 2026-10-23T01:51:03.6105837Z 167 │ // @ts-expect-error a declaration constructed directly 2026-10-23T01:51:03.6105941Z 168 │ new McpToolAccess.Declaration(unchecked); 2026-10-23T01:51:03.6106041Z ·  ───────────────────────────── 2026-10-23T01:51:03.6106172Z 169 │ // @ts-expect-error a handlers layer built outside McpToolAccess 2026-10-23T01:51:03.6106224Z ╰──── 2026-10-23T01:51:03.6106385Z  help: Assign the result of 'new' to a variable or compare it to a reference. 2026-10-23T01:51:03.6106388Z 2026-10-23T01:51:03.6106651Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T01:51:03.6106818Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:285:5] 2026-10-23T01:51:03.6106940Z 283 │ const [snoozeWakeTick, bumpSnoozeWakeTick] = useState(0); 2026-10-23T01:51:03.6107007Z 284 │ useEffect(() => { 2026-10-23T01:51:03.6107088Z ·  ────┬──── 2026-10-23T01:51:03.6107224Z · ╰── This is the containing effect 2026-10-23T01:51:03.6107314Z 285 │ setNow(new Date().toISOString()); 2026-10-23T01:51:03.6107386Z ·  ───┬── 2026-10-23T01:51:03.6107554Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T01:51:03.6107696Z 286 │ const id = setInterval(() => setNow(new Date().toISOString()), 60_000); 2026-10-23T01:51:03.6107750Z ╰──── 2026-10-23T01:51:03.6108392Z  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-23T01:51:03.6108727Z  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-23T01:51:03.6108732Z 2026-10-23T01:51:03.6108941Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T01:51:03.6109109Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:365:25] 2026-10-23T01:51:03.6109243Z 364 │ // range) the boundary string is identical and the chain would die. 2026-10-23T01:51:03.6109334Z 365 │ }, [nextSnoozeWakeAt, snoozeWakeTick]); 2026-10-23T01:51:03.6109439Z ·  ───────┬────── 2026-10-23T01:51:03.6109609Z · ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-23T01:51:03.6109785Z 366 │ const listItems = ((): readonly SidebarListItem[] => { 2026-10-23T01:51:03.6109874Z ╰──── 2026-10-23T01:51:03.6110175Z  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-23T01:51:03.6110494Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.6110496Z 2026-10-23T01:51:03.6110669Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T01:51:03.6110834Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:356:53] 2026-10-23T01:51:03.6110922Z 355 │ if (Number.isNaN(wakeAtMs)) return; 2026-10-23T01:51:03.6111088Z 356 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647); 2026-10-23T01:51:03.6111219Z ·  ─────┬──── 2026-10-23T01:51:03.6111390Z · ╰── Cannot call impure function 2026-10-23T01:51:03.6111468Z 357 │ const id = setTimeout(() => { 2026-10-23T01:51:03.6111522Z ╰──── 2026-10-23T01:51:03.6111814Z  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-23T01:51:03.6112112Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T01:51:03.6112115Z 2026-10-23T01:51:03.6112280Z ⚠ eslint(no-empty-pattern): Empty array binding pattern 2026-10-23T01:51:03.6112449Z ╭─[apps/server/src/pullRequest/PullRequestService.test.ts:1429:12] 2026-10-23T01:51:03.6112508Z 1428 │ 2026-10-23T01:51:03.6112578Z 1429 │ for (const [] of [ 2026-10-23T01:51:03.6112650Z ·  ── 2026-10-23T01:51:03.6112725Z 1430 │ ["github", "github.com"], 2026-10-23T01:51:03.6112780Z ╰──── 2026-10-23T01:51:03.6113065Z  help: Passing non-iterable values (null, undefined, numbers, booleans, etc.) will result in a runtime error because these values are not iterable. 2026-10-23T01:51:03.6113068Z 2026-10-23T01:51:03.6113215Z ⚠ react(refs): Cannot access refs during render 2026-10-23T01:51:03.6113337Z ╭─[apps/mobile/src/components/ui/Menu.tsx:54:36] 2026-10-23T01:51:03.6113520Z 53 │ const child = children as ReactElement>; 2026-10-23T01:51:03.6113704Z 54 │ ╭─▶ children = cloneElement(child, { 2026-10-23T01:51:03.6113812Z 55 │ │ onTouchStart: (event) => { 2026-10-23T01:51:03.6113975Z 56 │ │ // Reset for a new touch, not onPressIn, which also fires when a 2026-10-23T01:51:03.6114137Z 57 │ │ // finger moves out of the row and back during the same gesture. 2026-10-23T01:51:03.6114266Z 58 │ │ menuPress.current.isPreparing = false; 2026-10-23T01:51:03.6114435Z 59 │ │ menuPress.current.suppressPress = menuPress.current.isOpen; 2026-10-23T01:51:03.6114547Z 60 │ │ pendingPress.current = null; 2026-10-23T01:51:03.6114670Z 61 │ │ child.props.onTouchStart?.(event); 2026-10-23T01:51:03.6114942Z 62 │ │ }, 2026-10-23T01:51:03.6115102Z 63 │ │ onPress: (event) => { 2026-10-23T01:51:03.6115274Z 64 │ │ // Accessibility clicks have no touch identifier and must not inherit 2026-10-23T01:51:03.6115414Z 65 │ │ // cancellation from a previous physical gesture. 2026-10-23T01:51:03.6115584Z 66 │ │ const isTouch = typeof event.nativeEvent.identifier === "number"; 2026-10-23T01:51:03.6115779Z 67 │ │ if (isTouch ? menuPress.current.suppressPress : menuPress.current.isOpen) { 2026-10-23T01:51:03.6115867Z 68 │ │ return; 2026-10-23T01:51:03.6115947Z 69 │ │ } 2026-10-23T01:51:03.6116091Z 70 │ │ if (isTouch && menuPress.current.isPreparing) { 2026-10-23T01:51:03.6116272Z 71 │ │ // A release can arrive between native menu preparation and display. 2026-10-23T01:51:03.6116443Z 72 │ │ // Let UIKit's display/cancel callback decide this press's outcome. 2026-10-23T01:51:03.6116545Z 73 │ │ event.persist(); 2026-10-23T01:51:03.6116710Z 74 │ │ pendingPress.current = () => child.props.onPress?.(event); 2026-10-23T01:51:03.6116798Z 75 │ │ return; 2026-10-23T01:51:03.6116874Z 76 │ │ } 2026-10-23T01:51:03.6116990Z 77 │ │ child.props.onPress?.(event); 2026-10-23T01:51:03.6117068Z 78 │ │ }, 2026-10-23T01:51:03.6117201Z 79 │ ├─▶ }); 2026-10-23T01:51:03.6117445Z · ╰──── Passing a ref to a function may read its value during render 2026-10-23T01:51:03.6117556Z 80 │ menuProps.onMenuInteractionStart = () => { 2026-10-23T01:51:03.6117610Z ╰──── 2026-10-23T01:51:03.6118091Z  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-23T01:51:03.6118432Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T01:51:03.6118435Z 2026-10-23T01:51:03.6118696Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T01:51:03.6118874Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:643:5] 2026-10-23T01:51:03.6118932Z 638 │ 2026-10-23T01:51:03.6119001Z 639 │ useEffect(() => { 2026-10-23T01:51:03.6119073Z ·  ────┬──── 2026-10-23T01:51:03.6119207Z · ╰── This is the containing effect 2026-10-23T01:51:03.6119321Z 640 │ if (pendingLaunchEntry.key === launchTargetKey) { 2026-10-23T01:51:03.6119385Z 641 │ return; 2026-10-23T01:51:03.6119440Z 642 │ } 2026-10-23T01:51:03.6119518Z 643 │ setPendingLaunchEntry({ 2026-10-23T01:51:03.6119608Z ·  ──────────┬────────── 2026-10-23T01:51:03.6119784Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T01:51:03.6119855Z 644 │ key: launchTargetKey, 2026-10-23T01:51:03.6119970Z ╰──── 2026-10-23T01:51:03.6120614Z  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-23T01:51:03.6120942Z  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-23T01:51:03.6120945Z 2026-10-23T01:51:03.6121205Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T01:51:03.6121374Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:653:5] 2026-10-23T01:51:03.6121431Z 648 │ 2026-10-23T01:51:03.6121506Z 649 │ useEffect(() => { 2026-10-23T01:51:03.6121582Z ·  ────┬──── 2026-10-23T01:51:03.6121711Z · ╰── This is the containing effect 2026-10-23T01:51:03.6121830Z 650 │ if (initialAttachGridEntry.key === launchTargetKey) { 2026-10-23T01:51:03.6121897Z 651 │ return; 2026-10-23T01:51:03.6121955Z 652 │ } 2026-10-23T01:51:03.6122036Z 653 │ setInitialAttachGridEntry({ 2026-10-23T01:51:03.6122134Z ·  ────────────┬──────────── 2026-10-23T01:51:03.6122315Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T01:51:03.6122390Z 654 │ key: launchTargetKey, 2026-10-23T01:51:03.6122443Z ╰──── 2026-10-23T01:51:03.6123060Z  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-23T01:51:03.6123392Z  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-23T01:51:03.6123394Z 2026-10-23T01:51:03.6123655Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T01:51:03.6123827Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:746:7] 2026-10-23T01:51:03.6123879Z 743 │ 2026-10-23T01:51:03.6123946Z 744 │ useEffect(() => { 2026-10-23T01:51:03.6124018Z ·  ────┬──── 2026-10-23T01:51:03.6124153Z · ╰── This is the containing effect 2026-10-23T01:51:03.6124260Z 745 │ if (!routeEnvironmentId || !routeThreadId) { 2026-10-23T01:51:03.6124331Z 746 │ setLastGridSize({ 2026-10-23T01:51:03.6124417Z ·  ───────┬─────── 2026-10-23T01:51:03.6124590Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T01:51:03.6124673Z 747 │ cols: DEFAULT_TERMINAL_COLS, 2026-10-23T01:51:03.6124728Z ╰──── 2026-10-23T01:51:03.6125338Z  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-23T01:51:03.6125732Z  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-23T01:51:03.6125772Z 2026-10-23T01:51:03.6125978Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T01:51:03.6126151Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:538:24] 2026-10-23T01:51:03.6126211Z 537 │ }); 2026-10-23T01:51:03.6126338Z 538 │ }, [terminal.buffer, terminal.buffer.length, terminalKey]); 2026-10-23T01:51:03.6126453Z ·  ───────────┬────────── 2026-10-23T01:51:03.6126704Z · ╰── Overly precise dependency `terminal.buffer.length`, use `terminal.buffer` instead 2026-10-23T01:51:03.6126876Z 539 │ const cwd = terminal.summary?.cwd ?? selectedThreadProject?.workspaceRoot ?? null; 2026-10-23T01:51:03.6126934Z ╰──── 2026-10-23T01:51:03.6127237Z  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-23T01:51:03.6127550Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.6127553Z 2026-10-23T01:51:03.6127758Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T01:51:03.6127929Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:709:7] 2026-10-23T01:51:03.6128029Z 708 │ sentInitialInputKeyRef.current = null; 2026-10-23T01:51:03.6128097Z 709 │ }, [terminalKey]); 2026-10-23T01:51:03.6128201Z ·  ─────┬───── 2026-10-23T01:51:03.6128353Z · ╰── Unnecessary dependency `terminalKey` 2026-10-23T01:51:03.6128409Z 710 │ 2026-10-23T01:51:03.6128459Z ╰──── 2026-10-23T01:51:03.6128761Z  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-23T01:51:03.6129080Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.6129083Z 2026-10-23T01:51:03.6129287Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T01:51:03.6129460Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:800:52] 2026-10-23T01:51:03.6129522Z 799 │ }; 2026-10-23T01:51:03.6129708Z 800 │ }, [canOperateTerminal, isRunning, pasteSession, terminal.lifecycleVersion, terminalKey]); 2026-10-23T01:51:03.6129893Z ·  ────────────┬──────────── ─────┬───── 2026-10-23T01:51:03.6130134Z · │ ╰── Unnecessary dependency `terminalKey` 2026-10-23T01:51:03.6130352Z · ╰── Unnecessary dependency `terminal.lifecycleVersion` 2026-10-23T01:51:03.6130406Z 801 │ 2026-10-23T01:51:03.6130459Z ╰──── 2026-10-23T01:51:03.6130821Z  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-23T01:51:03.6131176Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.6131178Z 2026-10-23T01:51:03.6131323Z ⚠ react(refs): Cannot access refs during render 2026-10-23T01:51:03.6131496Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:793:24] 2026-10-23T01:51:03.6131554Z 792 │ } 2026-10-23T01:51:03.6131664Z 793 │ const pasteSession = pasteSessionRef.current; 2026-10-23T01:51:03.6131778Z ·  ───────────┬─────────── 2026-10-23T01:51:03.6131946Z · ╰── Cannot access ref value during render 2026-10-23T01:51:03.6132001Z 794 │ 2026-10-23T01:51:03.6132062Z ╰──── 2026-10-23T01:51:03.6132541Z  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-23T01:51:03.6132835Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T01:51:03.6132838Z 2026-10-23T01:51:03.6133127Z ⚠ eslint(no-unused-vars): Variable 'layerUnavailable' is declared but never used. Unused variables should start with a '_'. 2026-10-23T01:51:03.6133275Z ╭─[apps/server/src/orchestration-v2/Orchestrator.ts:12235:7] 2026-10-23T01:51:03.6133333Z 12234 │ 2026-10-23T01:51:03.6133482Z 12235 │ const layerUnavailable: Layer.Layer = Layer.succeed( 2026-10-23T01:51:03.6133572Z ·  ────────┬─────── 2026-10-23T01:51:03.6133725Z · ╰── 'layerUnavailable' is declared here 2026-10-23T01:51:03.6133795Z 12236 │ OrchestratorV2, 2026-10-23T01:51:03.6133848Z ╰──── 2026-10-23T01:51:03.6133956Z  help: Consider removing this declaration. 2026-10-23T01:51:03.6133959Z 2026-10-23T01:51:03.6134617Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T01:51:03.6134757Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:68:5] 2026-10-23T01:51:03.6134864Z 66 │ const { id: attachmentId, fileUri } = attachment; 2026-10-23T01:51:03.6134934Z 67 │ useEffect(() => { 2026-10-23T01:51:03.6135008Z ·  ────┬──── 2026-10-23T01:51:03.6135219Z · ╰── This is the containing effect 2026-10-23T01:51:03.6135334Z 68 │ setUri(null); 2026-10-23T01:51:03.6135407Z ·  ───┬── 2026-10-23T01:51:03.6135578Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T01:51:03.6135645Z 69 │ setError(null); 2026-10-23T01:51:03.6135699Z ╰──── 2026-10-23T01:51:03.6136312Z  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-23T01:51:03.6136647Z  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-23T01:51:03.6136653Z 2026-10-23T01:51:03.6136857Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T01:51:03.6136994Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:91:7] 2026-10-23T01:51:03.6137049Z 90 │ }; 2026-10-23T01:51:03.6137129Z 91 │ }, [attachmentId, fileUri]); 2026-10-23T01:51:03.6137249Z ·  ──────┬───── ───┬─── 2026-10-23T01:51:03.6137435Z · │ ╰── Unnecessary dependency `fileUri` 2026-10-23T01:51:03.6137583Z · ╰── Unnecessary dependency `attachmentId` 2026-10-23T01:51:03.6137718Z 92 │ const mimeType = videoMimeType(attachment) ?? attachment.mimeType; 2026-10-23T01:51:03.6137781Z ╰──── 2026-10-23T01:51:03.6138085Z  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-23T01:51:03.6138440Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.6138448Z 2026-10-23T01:51:03.6138667Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-23T01:51:03.6138811Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:213:34] 2026-10-23T01:51:03.6138880Z 212 │ useEffect(() => { 2026-10-23T01:51:03.6138996Z 213 │ if (!isFocused && hasSource) props.onRequestClose(); 2026-10-23T01:51:03.6139096Z ·  ──┬── 2026-10-23T01:51:03.6139257Z · ╰── Missing dependency `props` 2026-10-23T01:51:03.6139371Z 214 │ }, [isFocused, hasSource, props.onRequestClose]); 2026-10-23T01:51:03.6139485Z ·  ──────────┬───────── 2026-10-23T01:51:03.6139716Z · ╰── Overly precise dependency `props.onRequestClose`, use `props` instead 2026-10-23T01:51:03.6139793Z 215 │ const { source } = props; 2026-10-23T01:51:03.6139848Z ╰──── 2026-10-23T01:51:03.6140279Z  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-23T01:51:03.6140652Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.6140701Z 2026-10-23T01:51:03.6141176Z ⚠ 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-23T01:51:03.6141313Z ╭─[apps/server/src/project/ProjectService.test.ts:94:3] 2026-10-23T01:51:03.6141373Z 93 │ ) { 2026-10-23T01:51:03.6141583Z 94 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-23T01:51:03.6141762Z 95 │ │ const project = Option.getOrThrow(yield* service.getById(projectId)); 2026-10-23T01:51:03.6141891Z 96 │ │ if (predicate(project)) return project; 2026-10-23T01:51:03.6141997Z 97 │ │ yield* Effect.yieldNow; 2026-10-23T01:51:03.6142126Z 98 │ ╰─▶ } 2026-10-23T01:51:03.6142277Z 99 │ return yield* Effect.die(`Project ${projectId} was not enriched in time.`); 2026-10-23T01:51:03.6142332Z ╰──── 2026-10-23T01:51:03.6142334Z 2026-10-23T01:51:03.6142598Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T01:51:03.6142733Z ╭─[apps/mobile/src/components/ProjectFavicon.tsx:158:5] 2026-10-23T01:51:03.6142926Z 153 │ const [activeFaviconRequest, setActiveFaviconRequest] = useState(null); 2026-10-23T01:51:03.6142997Z 154 │ useLayoutEffect(() => { 2026-10-23T01:51:03.6143080Z ·  ───────┬─────── 2026-10-23T01:51:03.6143223Z · ╰── This is the containing effect 2026-10-23T01:51:03.6143319Z 155 │ if (faviconRequest === null) return; 2026-10-23T01:51:03.6143372Z 156 │ 2026-10-23T01:51:03.6143507Z 157 │ const endRequest = beginProjectFaviconRequest(faviconRequest); 2026-10-23T01:51:03.6143607Z 158 │ setActiveFaviconRequest(faviconRequest); 2026-10-23T01:51:03.6143698Z ·  ───────────┬─────────── 2026-10-23T01:51:03.6143876Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T01:51:03.6143947Z 159 │ return endRequest; 2026-10-23T01:51:03.6144002Z ╰──── 2026-10-23T01:51:03.6144621Z  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-23T01:51:03.6144952Z  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-23T01:51:03.6144955Z 2026-10-23T01:51:03.6145218Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T01:51:03.6145381Z ╭─[apps/mobile/src/features/terminal/terminalLaunchContext.ts:117:5] 2026-10-23T01:51:03.6145556Z 112 │ const [entry, setEntry] = useState(() => ({ key: input.targetKey, location: candidate })); 2026-10-23T01:51:03.6145624Z 113 │ useEffect(() => { 2026-10-23T01:51:03.6145695Z ·  ────┬──── 2026-10-23T01:51:03.6145889Z · ╰── This is the containing effect 2026-10-23T01:51:03.6146096Z 114 │ if (entry.key === input.targetKey && (entry.location !== null || candidate === null)) { 2026-10-23T01:51:03.6146160Z 115 │ return; 2026-10-23T01:51:03.6146215Z 116 │ } 2026-10-23T01:51:03.6146335Z 117 │ setEntry({ key: input.targetKey, location: candidate }); 2026-10-23T01:51:03.6146410Z ·  ────┬─── 2026-10-23T01:51:03.6146580Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T01:51:03.6146699Z 118 │ }, [candidate, entry.key, entry.location, input.targetKey]); 2026-10-23T01:51:03.6146756Z ╰──── 2026-10-23T01:51:03.6147370Z  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-23T01:51:03.6147701Z  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-23T01:51:03.6147704Z 2026-10-23T01:51:03.6147902Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T01:51:03.6148065Z ╭─[apps/mobile/src/features/terminal/TerminalContextSheet.tsx:72:15] 2026-10-23T01:51:03.6148134Z 71 │ { 2026-10-23T01:51:03.6149893Z 201 │ terminalDebugLog("native:surface", { 2026-10-23T01:51:03.6149982Z 202 │ terminalKey: props.terminalKey, 2026-10-23T01:51:03.6150062Z 203 │ native: hasNativeSurface, 2026-10-23T01:51:03.6150200Z 204 │ hardwareKeyRevision: getNativeTerminalHardwareKeyRevision(), 2026-10-23T01:51:03.6150289Z 205 │ bufferLen: props.buffer.length, 2026-10-23T01:51:03.6150371Z 206 │ isRunning: props.isRunning, 2026-10-23T01:51:03.6150431Z 207 │ }); 2026-10-23T01:51:03.6150593Z 208 │ }, [hasNativeSurface, props.buffer.length, props.isRunning, props.terminalKey]); 2026-10-23T01:51:03.6150682Z 209 │ const handleNativeInput = useCallback( 2026-10-23T01:51:03.6150798Z 210 │ (event: NativeSyntheticEvent) => { 2026-10-23T01:51:03.6150964Z 211 │ if (!props.isRunning || props.readOnly) { 2026-10-23T01:51:03.6151066Z 212 │ return; 2026-10-23T01:51:03.6151123Z 213 │ } 2026-10-23T01:51:03.6151214Z 214 │ terminalDebugLog("native:onInput", { 2026-10-23T01:51:03.6151368Z 215 │ codes: Array.from(event.nativeEvent.data, (char) => char.codePointAt(0)), 2026-10-23T01:51:03.6151428Z 216 │ }); 2026-10-23T01:51:03.6151516Z 217 │ onInput(event.nativeEvent.data); 2026-10-23T01:51:03.6151575Z 218 │ }, 2026-10-23T01:51:03.6151676Z 219 │ [onInput, props.isRunning, props.readOnly], 2026-10-23T01:51:03.6151730Z 220 │ ); 2026-10-23T01:51:03.6151822Z 221 │ const handleNativeResize = useCallback( 2026-10-23T01:51:03.6151941Z 222 │ (event: NativeSyntheticEvent) => { 2026-10-23T01:51:03.6152005Z 223 │ onResize({ 2026-10-23T01:51:03.6152097Z 224 │ cols: event.nativeEvent.cols, 2026-10-23T01:51:03.6152185Z 225 │ rows: event.nativeEvent.rows, 2026-10-23T01:51:03.6152245Z 226 │ }); 2026-10-23T01:51:03.6152303Z 227 │ }, 2026-10-23T01:51:03.6152364Z 228 │ [onResize], 2026-10-23T01:51:03.6152420Z 229 │ ); 2026-10-23T01:51:03.6152474Z 230 │ 2026-10-23T01:51:03.6152559Z 231 │ if (NativeTerminalSurfaceView) { 2026-10-23T01:51:03.6152618Z 232 │ return ( 2026-10-23T01:51:03.6152698Z 233 │ 2026-10-23T01:51:03.6152780Z 234 │ Date.now()); 2026-10-23T01:51:03.6155975Z 84 │ useEffect(() => { 2026-10-23T01:51:03.6156049Z ·  ────┬──── 2026-10-23T01:51:03.6156182Z · ╰── This is the containing effect 2026-10-23T01:51:03.6156269Z 85 │ if (!actionState.isRunning) return; 2026-10-23T01:51:03.6156340Z 86 │ setNowMs(Date.now()); 2026-10-23T01:51:03.6156415Z ·  ────┬─── 2026-10-23T01:51:03.6156583Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T01:51:03.6156715Z 87 │ const interval = setInterval(() => setNowMs(Date.now()), 1000); 2026-10-23T01:51:03.6156769Z ╰──── 2026-10-23T01:51:03.6157390Z  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-23T01:51:03.6157724Z  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-23T01:51:03.6157727Z 2026-10-23T01:51:03.6158232Z ⚠ 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-23T01:51:03.6158392Z ╭─[apps/server/src/project/ProjectEnrichmentService.test.ts:28:3] 2026-10-23T01:51:03.6158452Z 27 │ ) { 2026-10-23T01:51:03.6158663Z 28 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-23T01:51:03.6158814Z 29 │ │ const available = yield* service.peek(workspaceRoot); 2026-10-23T01:51:03.6158940Z 30 │ │ if (predicate(available)) return available; 2026-10-23T01:51:03.6159045Z 31 │ │ yield* Effect.yieldNow; 2026-10-23T01:51:03.6159172Z 32 │ ╰─▶ } 2026-10-23T01:51:03.6159356Z 33 │ return yield* Effect.die(`Project metadata for ${workspaceRoot} was not resolved in time.`); 2026-10-23T01:51:03.6159407Z ╰──── 2026-10-23T01:51:03.6159410Z 2026-10-23T01:51:03.6159600Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-23T01:51:03.6159761Z ╭─[apps/mobile/src/features/threads/ThreadQueueControl.tsx:602:27] 2026-10-23T01:51:03.6159989Z 601 │ const onEnd = useEffectEvent((y: number, success: boolean) => props.onEnd(y, success)); 2026-10-23T01:51:03.6160237Z 602 │ const gesture = Gesture.Pan() 2026-10-23T01:51:03.6160327Z ·  ─┬─ 2026-10-23T01:51:03.6160474Z · ╰── `Pan` may be a component 2026-10-23T01:51:03.6160553Z 603 │ .enabled(!props.disabled) 2026-10-23T01:51:03.6160604Z ╰──── 2026-10-23T01:51:03.6160891Z  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-23T01:51:03.6161350Z  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-23T01:51:03.6161355Z 2026-10-23T01:51:03.6161594Z ⚠ eslint(no-unneeded-ternary): Unnecessary use of boolean literals in conditional expression 2026-10-23T01:51:03.6161722Z ╭─[packages/shared/src/serverSettings.test.ts:35:7] 2026-10-23T01:51:03.6161905Z 34 │ const fallback = fallbackTextGenerationModelSelection(providerInstances, (instanceId) => 2026-10-23T01:51:03.6162003Z 35 │ instanceId === configured ? true : false, 2026-10-23T01:51:03.6162124Z ·  ──────────────────────────────────────── 2026-10-23T01:51:03.6162181Z 36 │ ); 2026-10-23T01:51:03.6162231Z ╰──── 2026-10-23T01:51:03.6162328Z  help: Remove this ternary operator 2026-10-23T01:51:03.6162331Z 2026-10-23T01:51:03.6162599Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T01:51:03.6162757Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:57:5] 2026-10-23T01:51:03.6162809Z 55 │ 2026-10-23T01:51:03.6162878Z 56 │ useEffect(() => { 2026-10-23T01:51:03.6162951Z ·  ────┬──── 2026-10-23T01:51:03.6163084Z · ╰── This is the containing effect 2026-10-23T01:51:03.6163153Z 57 │ setDecodedSize(null); 2026-10-23T01:51:03.6163234Z ·  ───────┬────── 2026-10-23T01:51:03.6163407Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T01:51:03.6163478Z 58 │ }, [props.sourceKey]); 2026-10-23T01:51:03.6163529Z ╰──── 2026-10-23T01:51:03.6164208Z  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-23T01:51:03.6164540Z  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-23T01:51:03.6164543Z 2026-10-23T01:51:03.6164803Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T01:51:03.6164956Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:61:5] 2026-10-23T01:51:03.6165009Z 59 │ 2026-10-23T01:51:03.6165077Z 60 │ useEffect(() => { 2026-10-23T01:51:03.6165150Z ·  ────┬──── 2026-10-23T01:51:03.6165337Z · ╰── This is the containing effect 2026-10-23T01:51:03.6165445Z 61 │ setFailedUri(null); 2026-10-23T01:51:03.6165525Z ·  ──────┬───── 2026-10-23T01:51:03.6165695Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T01:51:03.6165762Z 62 │ }, [props.uri]); 2026-10-23T01:51:03.6165812Z ╰──── 2026-10-23T01:51:03.6166422Z  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-23T01:51:03.6166755Z  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-23T01:51:03.6166760Z 2026-10-23T01:51:03.6166980Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-23T01:51:03.6167133Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:7:10] 2026-10-23T01:51:03.6167258Z 6 │ import { parse, SvgAst, type JsxAST } from "react-native-svg"; 2026-10-23T01:51:03.6167440Z 7 │ import { ActivityIndicator, Pressable, StyleSheet, View, type ViewStyle } from "react-native"; 2026-10-23T01:51:03.6167533Z ·  ────────┬──────── 2026-10-23T01:51:03.6167686Z · ╰── 'ActivityIndicator' is imported here 2026-10-23T01:51:03.6167739Z 8 │ 2026-10-23T01:51:03.6167795Z ╰──── 2026-10-23T01:51:03.6167897Z  help: Consider removing this import. 2026-10-23T01:51:03.6167901Z 2026-10-23T01:51:03.6168114Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T01:51:03.6168303Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:58:7] 2026-10-23T01:51:03.6168376Z 57 │ setDecodedSize(null); 2026-10-23T01:51:03.6168450Z 58 │ }, [props.sourceKey]); 2026-10-23T01:51:03.6168538Z ·  ───────┬─────── 2026-10-23T01:51:03.6168692Z · ╰── Unnecessary dependency `props.sourceKey` 2026-10-23T01:51:03.6168747Z 59 │ 2026-10-23T01:51:03.6168799Z ╰──── 2026-10-23T01:51:03.6169097Z  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-23T01:51:03.6169418Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.6169425Z 2026-10-23T01:51:03.6169628Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T01:51:03.6169782Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:62:7] 2026-10-23T01:51:03.6169853Z 61 │ setFailedUri(null); 2026-10-23T01:51:03.6170001Z 62 │ }, [props.uri]); 2026-10-23T01:51:03.6173358Z ·  ────┬──── 2026-10-23T01:51:03.6173513Z · ╰── Unnecessary dependency `props.uri` 2026-10-23T01:51:03.6173567Z 63 │ 2026-10-23T01:51:03.6173618Z ╰──── 2026-10-23T01:51:03.6173917Z  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-23T01:51:03.6174414Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.6174474Z 2026-10-23T01:51:03.6174625Z ⚠ react(refs): Cannot access refs during render 2026-10-23T01:51:03.6174790Z ╭─[apps/mobile/src/features/diffs/nativeReviewDiffSurface.ts:277:39] 2026-10-23T01:51:03.6174846Z 276 │ 2026-10-23T01:51:03.6175035Z 277 │ ╭─▶ return createElement(RawNativeView, { 2026-10-23T01:51:03.6175132Z 278 │ │ ...nativeProps, 2026-10-23T01:51:03.6175282Z 279 │ │ refreshEnabled: props.onPullToRefresh !== undefined, 2026-10-23T01:51:03.6175372Z 280 │ │ ref: nativeRef, 2026-10-23T01:51:03.6175513Z 281 │ ├─▶ }); 2026-10-23T01:51:03.6175759Z · ╰──── Passing a ref to a function may read its value during render 2026-10-23T01:51:03.6175818Z 282 │ } 2026-10-23T01:51:03.6175869Z ╰──── 2026-10-23T01:51:03.6176351Z  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-23T01:51:03.6176649Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T01:51:03.6176652Z 2026-10-23T01:51:03.6176864Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T01:51:03.6176987Z ╭─[apps/mobile/src/state/thread-order.ts:29:7] 2026-10-23T01:51:03.6177061Z 28 │ getPendingThreadOrder(); 2026-10-23T01:51:03.6177145Z 29 │ }, [nowMinute, snoozeWakeTick]); 2026-10-23T01:51:03.6177274Z ·  ────┬──── ───────┬────── 2026-10-23T01:51:03.6177473Z · │ ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-23T01:51:03.6177611Z · ╰── Unnecessary dependency `nowMinute` 2026-10-23T01:51:03.6177678Z 30 │ return pending; 2026-10-23T01:51:03.6177732Z ╰──── 2026-10-23T01:51:03.6178030Z  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-23T01:51:03.6178391Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.6178401Z 2026-10-23T01:51:03.6178682Z ⚠ eslint(no-unused-vars): Variable 'useDragRegion' is declared but never used. Unused variables should start with a '_'. 2026-10-23T01:51:03.6178832Z ╭─[apps/web/src/components/preview/PreviewPanelShell.tsx:61:9] 2026-10-23T01:51:03.6178887Z 60 │ ) { 2026-10-23T01:51:03.6179061Z 61 │ const useDragRegion = isElectron && props.mode !== "sheet" && props.mode !== "embedded"; 2026-10-23T01:51:03.6179141Z ·  ──────┬────── 2026-10-23T01:51:03.6179284Z · ╰── 'useDragRegion' is declared here 2026-10-23T01:51:03.6179441Z 62 │ const isInline = props.mode === "inline"; 2026-10-23T01:51:03.6179531Z ╰──── 2026-10-23T01:51:03.6179637Z  help: Consider removing this declaration. 2026-10-23T01:51:03.6179639Z 2026-10-23T01:51:03.6179869Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-23T01:51:03.6180008Z ╭─[apps/mobile/src/state/use-composer-drafts.ts:1022:15] 2026-10-23T01:51:03.6180079Z 1021 │ instanceId, 2026-10-23T01:51:03.6180223Z 1022 │ { ...(persisted.modelOptionMemory[instanceId] ?? {}), ...models }, 2026-10-23T01:51:03.6180366Z ·  ────────────────────────────────────────────────── 2026-10-23T01:51:03.6180433Z 1023 │ ]), 2026-10-23T01:51:03.6180489Z ╰──── 2026-10-23T01:51:03.6180765Z  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-23T01:51:03.6180771Z 2026-10-23T01:51:03.6181241Z ⚠ 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-23T01:51:03.6181369Z ╭─[packages/contracts/src/baseSchemas.test.ts:39:9] 2026-10-23T01:51:03.6181439Z 38 │ JSON.stringify( 2026-10-23T01:51:03.6181559Z 39 │ Schema.encodeUnknownSync(Schema.toCodecJson(Named))([ 2026-10-23T01:51:03.6181655Z ·  ──────────────────────── 2026-10-23T01:51:03.6181724Z 40 │ { name: "a" }, 2026-10-23T01:51:03.6181776Z ╰──── 2026-10-23T01:51:03.6181779Z 2026-10-23T01:51:03.6181973Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-23T01:51:03.6182165Z ╭─[apps/mobile/src/features/keyboard/HardwareKeyboardCommandProvider.tsx:116:34] 2026-10-23T01:51:03.6182235Z 115 │ return [...commands]; 2026-10-23T01:51:03.6182371Z 116 │ }, [activeThreadRef, pathname, registrationVersion, navigation]); 2026-10-23T01:51:03.6182490Z ·  ─────────┬───────── 2026-10-23T01:51:03.6182676Z · ╰── Unnecessary dependency `registrationVersion` 2026-10-23T01:51:03.6182731Z 117 │ 2026-10-23T01:51:03.6182784Z ╰──── 2026-10-23T01:51:03.6183104Z  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-23T01:51:03.6183424Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.6183429Z 2026-10-23T01:51:03.6183653Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-23T01:51:03.6183792Z ╭─[apps/mobile/src/state/use-model-option-memory.ts:21:7] 2026-10-23T01:51:03.6183860Z 20 │ [instanceId]: { 2026-10-23T01:51:03.6183938Z 21 │ ...(state[instanceId] ?? {}), 2026-10-23T01:51:03.6184044Z ·  ──────────────────────────── 2026-10-23T01:51:03.6184114Z 22 │ [model]: options, 2026-10-23T01:51:03.6184166Z ╰──── 2026-10-23T01:51:03.6184433Z  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-23T01:51:03.6184440Z 2026-10-23T01:51:03.6184974Z ⚠ 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-23T01:51:03.6185149Z ╭─[packages/contracts/src/composerContext.test.ts:181:18] 2026-10-23T01:51:03.6185286Z 180 │ it("sends a message without the records the wire cannot carry", () => { 2026-10-23T01:51:03.6185470Z 181 │ const wire = Schema.encodeUnknownSync(Schema.toCodecJson(OrchestrationMessageContext))({ 2026-10-23T01:51:03.6185579Z ·  ──────────────────────── 2026-10-23T01:51:03.6185647Z 182 │ version: 1, 2026-10-23T01:51:03.6185700Z ╰──── 2026-10-23T01:51:03.6185703Z 2026-10-23T01:51:03.6185918Z ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed 2026-10-23T01:51:03.6186025Z ╭─[packages/contracts/src/rpc.ts:295:8] 2026-10-23T01:51:03.6186094Z 294 │ } from "./device.ts"; 2026-10-23T01:51:03.6186189Z 295 │ import {} from "./previewAutomation.ts"; 2026-10-23T01:51:03.6186259Z ·  ── 2026-10-23T01:51:03.6186318Z 296 │ import { 2026-10-23T01:51:03.6186372Z ╰──── 2026-10-23T01:51:03.6186455Z  help: Remove empty braces 2026-10-23T01:51:03.6186458Z 2026-10-23T01:51:03.6186692Z ⚠ eslint(no-unused-vars): Function 'resolveThreadWorkspaceCwd' is declared but never used. 2026-10-23T01:51:03.6186811Z ╭─[apps/server/src/checkpointing/Utils.ts:12:10] 2026-10-23T01:51:03.6186864Z 11 │ 2026-10-23T01:51:03.6186963Z 12 │ function resolveThreadWorkspaceCwd(input: { 2026-10-23T01:51:03.6187073Z ·  ────────────┬──────────── 2026-10-23T01:51:03.6187247Z · ╰── 'resolveThreadWorkspaceCwd' is declared here 2026-10-23T01:51:03.6187316Z 13 │ readonly thread: { 2026-10-23T01:51:03.6187370Z ╰──── 2026-10-23T01:51:03.6187477Z  help: Consider removing this declaration. 2026-10-23T01:51:03.6187480Z 2026-10-23T01:51:03.6187681Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T01:51:03.6187825Z ╭─[apps/mobile/src/state/use-thread-outbox-drain.ts:1315:5] 2026-10-23T01:51:03.6187908Z 1314 │ queuedMessagesByThreadKey, 2026-10-23T01:51:03.6187974Z 1315 │ retryTick, 2026-10-23T01:51:03.6188049Z ·  ────┬──── 2026-10-23T01:51:03.6188229Z · ╰── Unnecessary dependency `retryTick` 2026-10-23T01:51:03.6188364Z 1316 │ restoreQueuedMessage, 2026-10-23T01:51:03.6188479Z ╰──── 2026-10-23T01:51:03.6188778Z  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-23T01:51:03.6189095Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.6189098Z 2026-10-23T01:51:03.6189283Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-23T01:51:03.6189446Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:100:85] 2026-10-23T01:51:03.6189550Z  99 │ const startEditor = startScheduledTaskEditor; 2026-10-23T01:51:03.6189737Z 100 │ const resetEditor = useCallback(() => startEditor(defaultEditor), [defaultEditor, startEditor]); 2026-10-23T01:51:03.6189891Z ·  ─────┬───── 2026-10-23T01:51:03.6190099Z · ╰── Unnecessary dependency `startEditor` 2026-10-23T01:51:03.6190181Z 101 │ const readEditor = useCallback( 2026-10-23T01:51:03.6190233Z ╰──── 2026-10-23T01:51:03.6190551Z  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-23T01:51:03.6190867Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.6190871Z 2026-10-23T01:51:03.6191062Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-23T01:51:03.6191227Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:121:7] 2026-10-23T01:51:03.6191290Z 120 │ setEditor, 2026-10-23T01:51:03.6191358Z 121 │ startEditor, 2026-10-23T01:51:03.6191436Z ·  ─────┬───── 2026-10-23T01:51:03.6191584Z · ╰── Unnecessary dependency `startEditor` 2026-10-23T01:51:03.6191647Z 122 │ hasChanges, 2026-10-23T01:51:03.6191699Z ╰──── 2026-10-23T01:51:03.6192015Z  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-23T01:51:03.6192335Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.6192340Z 2026-10-23T01:51:03.6192713Z ⚠ 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-23T01:51:03.6192829Z ╭─[packages/contracts/src/auth.test.ts:17:12] 2026-10-23T01:51:03.6192988Z 16 │ it("decodes legacy review credentials without offering them in new grants", () => { 2026-10-23T01:51:03.6193158Z 17 │ expect(Schema.decodeUnknownSync(AuthEnvironmentScopes)(["review:write"])).toEqual([ 2026-10-23T01:51:03.6193263Z ·  ──────────────────────── 2026-10-23T01:51:03.6193329Z 18 │ "review:write", 2026-10-23T01:51:03.6193384Z ╰──── 2026-10-23T01:51:03.6193386Z 2026-10-23T01:51:03.6193813Z ⚠ 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-23T01:51:03.6194098Z ╭─[packages/contracts/src/auth.test.ts:20:18] 2026-10-23T01:51:03.6194155Z 19 │ ]); 2026-10-23T01:51:03.6194319Z 20 │ expect(() => Schema.decodeUnknownSync(AuthGrantScopes)(["review:write"])).toThrow(); 2026-10-23T01:51:03.6194429Z ·  ──────────────────────── 2026-10-23T01:51:03.6194562Z 21 │ expect(AuthStandardClientScopes).not.toContain("review:write"); 2026-10-23T01:51:03.6194612Z ╰──── 2026-10-23T01:51:03.6194615Z 2026-10-23T01:51:03.6194985Z ⚠ 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-23T01:51:03.6195104Z ╭─[packages/contracts/src/auth.test.ts:58:21] 2026-10-23T01:51:03.6195281Z 57 │ it("ignores unknown response permissions without falling back to broader scopes", () => { 2026-10-23T01:51:03.6195407Z 58 │ const session = Schema.decodeUnknownSync(AuthSessionState)({ 2026-10-23T01:51:03.6195518Z ·  ──────────────────────── 2026-10-23T01:51:03.6195591Z 59 │ authenticated: true, 2026-10-23T01:51:03.6195643Z ╰──── 2026-10-23T01:51:03.6195646Z 2026-10-23T01:51:03.6195852Z ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed 2026-10-23T01:51:03.6196022Z ╭─[apps/server/src/sourceControl/SourceControlProviderRegistry.ts:15:13] 2026-10-23T01:51:03.6196096Z 14 │ } from "@t3tools/contracts"; 2026-10-23T01:51:03.6196187Z 15 │ import type {} from "@t3tools/contracts"; 2026-10-23T01:51:03.6196263Z ·  ── 2026-10-23T01:51:03.6196447Z 16 │ import { detectSourceControlProviderFromRemoteUrl } from "@t3tools/shared/sourceControl"; 2026-10-23T01:51:03.6196501Z ╰──── 2026-10-23T01:51:03.6196586Z  help: Remove empty braces 2026-10-23T01:51:03.6196589Z 2026-10-23T01:51:03.6196756Z ⚠ eslint(no-control-regex): Unexpected control character 2026-10-23T01:51:03.6196953Z ╭─[apps/mobile/src/features/settings/SettingsProviderAccountsRouteScreen.tsx:220:46] 2026-10-23T01:51:03.6197097Z 219 │ 2026-10-23T01:51:03.6197248Z 220 │ {interaction.output.replace(/\x1b\[[0-?]*[ -/]*[@-~]/g, "")} 2026-10-23T01:51:03.6197359Z ·  ──┬─ 2026-10-23T01:51:03.6197534Z · ╰── 'U+001B' is a control character. 2026-10-23T01:51:03.6197604Z 221 │ 2026-10-23T01:51:03.6197656Z ╰──── 2026-10-23T01:51:03.6197894Z  help: Avoid matching control characters in regular expressions. If intentional, disable this rule for the expression. 2026-10-23T01:51:03.6197897Z 2026-10-23T01:51:03.6198094Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T01:51:03.6198276Z ╭─[apps/mobile/modules/t3-source-text/src/SourceText.tsx:36:9] 2026-10-23T01:51:03.6198367Z 35 │ 2026-10-23T01:51:03.6199329Z 8 │ Gesture.Hover() 2026-10-23T01:51:03.6199404Z ·  ──┬── 2026-10-23T01:51:03.6199540Z · ╰── `Hover` may be a component 2026-10-23T01:51:03.6199616Z 9 │ .manualActivation(true) 2026-10-23T01:51:03.6199670Z ╰──── 2026-10-23T01:51:03.6200118Z  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-23T01:51:03.6200588Z  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-23T01:51:03.6200591Z 2026-10-23T01:51:03.6200812Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-23T01:51:03.6200961Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:771:7] 2026-10-23T01:51:03.6201068Z 770 │ if (settingsSheetPresentation.isActive) { 2026-10-23T01:51:03.6201198Z 771 │ settingsRoutePresentation.present(settingsRouteSession); 2026-10-23T01:51:03.6201296Z ·  ────────────┬──────────── 2026-10-23T01:51:03.6201476Z · ╰── Missing dependency `settingsRoutePresentation` 2026-10-23T01:51:03.6201539Z 772 │ } 2026-10-23T01:51:03.6201745Z 773 │ }, [settingsRoutePresentation.present, settingsRouteSession, settingsSheetPresentation.isActive]); 2026-10-23T01:51:03.6201856Z ·  ────────────────┬──────────────── 2026-10-23T01:51:03.6202146Z · ╰── Overly precise dependency `settingsRoutePresentation.present`, use `settingsRoutePresentation` instead 2026-10-23T01:51:03.6202202Z 774 │ 2026-10-23T01:51:03.6202253Z ╰──── 2026-10-23T01:51:03.6202686Z  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-23T01:51:03.6203014Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.6203020Z 2026-10-23T01:51:03.6203181Z ⚠ react(immutability): This value cannot be modified 2026-10-23T01:51:03.6203326Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:389:5] 2026-10-23T01:51:03.6203484Z 385 │ typeof props.style.borderRadius === "number" ? props.style.borderRadius : 0; 2026-10-23T01:51:03.6203622Z 386 │ const animatedBorderRadius = useSharedValue(targetBorderRadius); 2026-10-23T01:51:03.6203716Z ·  ──────────┬───────── 2026-10-23T01:51:03.6203876Z · ╰── `animatedBorderRadius` originates here 2026-10-23T01:51:03.6204035Z 387 │ const shouldAnimate = props.animateLayout !== false && Platform.OS !== "android"; 2026-10-23T01:51:03.6204172Z 388 │ useLayoutEffect(() => { 2026-10-23T01:51:03.6204310Z 389 │ animatedBorderRadius.value = shouldAnimate 2026-10-23T01:51:03.6204399Z ·  ──────────┬───────── 2026-10-23T01:51:03.6204559Z · ╰── `animatedBorderRadius` cannot be modified 2026-10-23T01:51:03.6204650Z 390 │ ? withTiming(targetBorderRadius, { 2026-10-23T01:51:03.6204703Z ╰──── 2026-10-23T01:51:03.6204976Z  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-23T01:51:03.6205285Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T01:51:03.6205287Z 2026-10-23T01:51:03.6205457Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-23T01:51:03.6205657Z ╭─[packages/provider-opencode/src/server/OpenCodeRuntime.environment.test.ts:53:14] 2026-10-23T01:51:03.6205715Z 52 │ 2026-10-23T01:51:03.6205781Z 53 │ for (const {} of [ 2026-10-23T01:51:03.6205853Z ·  ── 2026-10-23T01:51:03.6205920Z 54 │ { healthy: true }, 2026-10-23T01:51:03.6205973Z ╰──── 2026-10-23T01:51:03.6206205Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-23T01:51:03.6206210Z 2026-10-23T01:51:03.6206471Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T01:51:03.6206662Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:119:10] 2026-10-23T01:51:03.6206718Z 117 │ 2026-10-23T01:51:03.6206791Z 118 │ useEffect(() => { 2026-10-23T01:51:03.6206863Z ·  ────┬──── 2026-10-23T01:51:03.6206995Z · ╰── This is the containing effect 2026-10-23T01:51:03.6207077Z 119 │ void refreshNotifications(); 2026-10-23T01:51:03.6207167Z ·  ──────────┬───────── 2026-10-23T01:51:03.6207348Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T01:51:03.6207494Z 120 │ const subscription = AppState.addEventListener("change", (state) => { 2026-10-23T01:51:03.6207547Z ╰──── 2026-10-23T01:51:03.6208259Z  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-23T01:51:03.6208628Z  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-23T01:51:03.6208634Z 2026-10-23T01:51:03.6208892Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T01:51:03.6209084Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:128:7] 2026-10-23T01:51:03.6209138Z 125 │ 2026-10-23T01:51:03.6209204Z 126 │ useEffect(() => { 2026-10-23T01:51:03.6209274Z ·  ────┬──── 2026-10-23T01:51:03.6209405Z · ╰── This is the containing effect 2026-10-23T01:51:03.6209471Z 127 │ if (!isLoaded) { 2026-10-23T01:51:03.6209565Z 128 │ setLiveActivityStatus("checking"); 2026-10-23T01:51:03.6209660Z ·  ──────────┬────────── 2026-10-23T01:51:03.6209836Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T01:51:03.6209901Z 129 │ return; 2026-10-23T01:51:03.6209952Z ╰──── 2026-10-23T01:51:03.6210563Z  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-23T01:51:03.6210891Z  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-23T01:51:03.6210899Z 2026-10-23T01:51:03.6211122Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-23T01:51:03.6211263Z ╭─[packages/shared/src/composerContextLegacySend.ts:19:45] 2026-10-23T01:51:03.6211390Z 18 │ const occurrences = collectComposerContextReferences(text); 2026-10-23T01:51:03.6211499Z 19 │ for (const occurrence of [...occurrences].reverse()) { 2026-10-23T01:51:03.6211612Z ·  ─────── 2026-10-23T01:51:03.6211725Z 20 │ const record = recordsById.get(occurrence.contextId); 2026-10-23T01:51:03.6211775Z ╰──── 2026-10-23T01:51:03.6212040Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-23T01:51:03.6212044Z 2026-10-23T01:51:03.6212274Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-23T01:51:03.6212398Z ╭─[packages/shared/src/serverSettings.ts:346:9] 2026-10-23T01:51:03.6212504Z 345 │ const entry: ProjectSettingsOverrides = { 2026-10-23T01:51:03.6212634Z 346 │ ...(entries.get(projectId) ?? currentEntries[projectId] ?? {}), 2026-10-23T01:51:03.6212792Z ·  ────────────────────────────────────────────────────────────── 2026-10-23T01:51:03.6212850Z 347 │ }; 2026-10-23T01:51:03.6212902Z ╰──── 2026-10-23T01:51:03.6213171Z  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-23T01:51:03.6213173Z 2026-10-23T01:51:03.6213453Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in Array.prototype.reduce() 2026-10-23T01:51:03.6213620Z ╭─[packages/shared/src/serverSettings.ts:448:24] 2026-10-23T01:51:03.6213686Z 447 │ const favorites = 2026-10-23T01:51:03.6213793Z 448 │ setModelFavorites?.reduce((current, change) => { 2026-10-23T01:51:03.6213883Z ·  ───┬── 2026-10-23T01:51:03.6214010Z · ╰── For this reduce 2026-10-23T01:51:03.6214094Z 449 │ const exists = current.some( 2026-10-23T01:51:03.6214368Z 450 │ (favorite) => favorite.provider === change.provider && favorite.model === change.model, 2026-10-23T01:51:03.6214458Z 451 │ ); 2026-10-23T01:51:03.6214533Z 452 │ return change.favorite 2026-10-23T01:51:03.6214596Z 453 │ ? exists 2026-10-23T01:51:03.6214658Z 454 │ ? current 2026-10-23T01:51:03.6214804Z 455 │ : [...current, { provider: change.provider, model: change.model }] 2026-10-23T01:51:03.6214894Z ·  ─────┬──── 2026-10-23T01:51:03.6215017Z · ╰── From this spread 2026-10-23T01:51:03.6215085Z 456 │ : current.filter( 2026-10-23T01:51:03.6215140Z ╰──── 2026-10-23T01:51:03.6215368Z  help: Consider using `Object.assign()` or `Array.prototype.push()` to mutate the accumulator instead. 2026-10-23T01:51:03.6215584Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-23T01:51:03.6215587Z 2026-10-23T01:51:03.6215776Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-23T01:51:03.6215896Z ╭─[packages/shared/src/serverSettings.ts:466:3] 2026-10-23T01:51:03.6215957Z 464 │ null; 2026-10-23T01:51:03.6216079Z 465 │ let nextModelPreferences = initialModelPreferences; 2026-10-23T01:51:03.6216172Z ·  ──────────┬───────── 2026-10-23T01:51:03.6216301Z · ╰── From this accumulator 2026-10-23T01:51:03.6216401Z 466 │ for (const change of setModelsHidden ?? []) { 2026-10-23T01:51:03.6216470Z ·  ─┬─ 2026-10-23T01:51:03.6216576Z · ╰── For this loop 2026-10-23T01:51:03.6216714Z 467 │ const preferences = nextModelPreferences?.[change.provider] ?? { 2026-10-23T01:51:03.6216786Z 468 │ hiddenModels: [], 2026-10-23T01:51:03.6216856Z 469 │ modelOrder: [], 2026-10-23T01:51:03.6216913Z 470 │ }; 2026-10-23T01:51:03.6217095Z 471 │ const hiddenModels = preferences.hiddenModels.filter((model) => model !== change.model); 2026-10-23T01:51:03.6217214Z 472 │ if (change.hidden) hiddenModels.push(change.model); 2026-10-23T01:51:03.6217297Z 473 │ nextModelPreferences = { 2026-10-23T01:51:03.6217374Z 474 │ ...nextModelPreferences, 2026-10-23T01:51:03.6217473Z ·  ───────────┬─────────── 2026-10-23T01:51:03.6217599Z · ╰── From this spread 2026-10-23T01:51:03.6217715Z 475 │ [change.provider]: { ...preferences, hiddenModels }, 2026-10-23T01:51:03.6217768Z ╰──── 2026-10-23T01:51:03.6217926Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-23T01:51:03.6218085Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-23T01:51:03.6218087Z 2026-10-23T01:51:03.6218487Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-23T01:51:03.6218686Z ╭─[packages/provider-opencode/src/server/adapter.ts:3755:7] 2026-10-23T01:51:03.6218743Z 3754 │ 2026-10-23T01:51:03.6218945Z 3755 │ const layer: Layer.Layer = 2026-10-23T01:51:03.6219020Z ·  ──┬── 2026-10-23T01:51:03.6219146Z · ╰── 'layer' is declared here 2026-10-23T01:51:03.6219213Z 3756 │ Layer.effect( 2026-10-23T01:51:03.6219267Z ╰──── 2026-10-23T01:51:03.6219376Z  help: Consider removing this declaration. 2026-10-23T01:51:03.6219378Z 2026-10-23T01:51:03.6219670Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-23T01:51:03.6219833Z ╭─[apps/web/src/components/settings/SettingInheritance.tsx:163:24] 2026-10-23T01:51:03.6219896Z 162 │ keys, 2026-10-23T01:51:03.6219970Z 163 │ overridingProjects = [], 2026-10-23T01:51:03.6220055Z ·  ── 2026-10-23T01:51:03.6220121Z 164 │ onClearOverrides, 2026-10-23T01:51:03.6220174Z ╰──── 2026-10-23T01:51:03.6220499Z  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-23T01:51:03.6220502Z 2026-10-23T01:51:03.6220671Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T01:51:03.6220807Z ╭─[apps/web/src/components/CustomSnoozeDialog.tsx:140:58] 2026-10-23T01:51:03.6220944Z 139 │ {...(weekStartsOn === undefined ? {} : { weekStartsOn })} 2026-10-23T01:51:03.6221103Z 140 │ disabled={{ before: new Date(new Date().setHours(0, 0, 0, 0)) }} 2026-10-23T01:51:03.6221234Z ·  ─────┬──── 2026-10-23T01:51:03.6221408Z · ╰── Cannot call impure function 2026-10-23T01:51:03.6221509Z 141 │ onSelect={(selected) => { 2026-10-23T01:51:03.6221562Z ╰──── 2026-10-23T01:51:03.6221848Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-23T01:51:03.6222148Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T01:51:03.6222154Z 2026-10-23T01:51:03.6222634Z ⚠ 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-23T01:51:03.6222821Z ╭─[apps/mobile/src/features/agent-awareness/remoteRegistration.test.ts:223:5] 2026-10-23T01:51:03.6222895Z 222 │ let idlePasses = 0; 2026-10-23T01:51:03.6223042Z 223 │ ╭─▶ for (;;) { 2026-10-23T01:51:03.6223181Z 224 │ │ yield* Effect.promise(() => Promise.resolve()); 2026-10-23T01:51:03.6223330Z 225 │ │ const pending = backgroundRuntime.pending.shift(); 2026-10-23T01:51:03.6223428Z 226 │ │ if (!pending) { 2026-10-23T01:51:03.6223581Z 227 │ │ idlePasses++; 2026-10-23T01:51:03.6223723Z 228 │ │ if (idlePasses >= 3) { 2026-10-23T01:51:03.6223813Z 229 │ │ return; 2026-10-23T01:51:03.6223893Z 230 │ │ } 2026-10-23T01:51:03.6223982Z 231 │ │ continue; 2026-10-23T01:51:03.6224058Z 232 │ │ } 2026-10-23T01:51:03.6224155Z 233 │ │ idlePasses = 0; 2026-10-23T01:51:03.6224274Z 234 │ │ const exit = yield* Effect.exit( 2026-10-23T01:51:03.6224494Z 235 │ │ pending.operation as Effect.Effect, 2026-10-23T01:51:03.6224571Z 236 │ │ ); 2026-10-23T01:51:03.6224680Z 237 │ │ yield* Effect.sync(() => { 2026-10-23T01:51:03.6224793Z 238 │ │ pending.resolve(exit); 2026-10-23T01:51:03.6224876Z 239 │ │ }); 2026-10-23T01:51:03.6225009Z 240 │ ╰─▶ } 2026-10-23T01:51:03.6225070Z 241 │ }, 2026-10-23T01:51:03.6225124Z ╰──── 2026-10-23T01:51:03.6225126Z 2026-10-23T01:51:03.6225510Z ⚠ 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-23T01:51:03.6225635Z ╭─[packages/shared/src/otelEnvironment.ts:146:14] 2026-10-23T01:51:03.6225694Z 145 │ name, 2026-10-23T01:51:03.6225836Z 146 │ (raw) => Schema.decodeUnknownOption(OtlpProtocol)(raw.toLowerCase()), 2026-10-23T01:51:03.6225951Z ·  ────────────────────────── 2026-10-23T01:51:03.6226079Z 147 │ `${name} is not http/protobuf or http/json, ${NOT_EXPORTED}`, 2026-10-23T01:51:03.6226131Z ╰──── 2026-10-23T01:51:03.6226133Z 2026-10-23T01:51:03.6226386Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-23T01:51:03.6226548Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:290:50] 2026-10-23T01:51:03.6226611Z 289 │ return ( 2026-10-23T01:51:03.6226744Z 290 │ 2026-10-23T01:51:03.6226870Z ·  ───────────── 2026-10-23T01:51:03.6226941Z 291 │ {props.children} 2026-10-23T01:51:03.6226994Z ╰──── 2026-10-23T01:51:03.6227230Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-23T01:51:03.6227378Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-23T01:51:03.6227381Z 2026-10-23T01:51:03.6227628Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-23T01:51:03.6227786Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:654:44] 2026-10-23T01:51:03.6227845Z 653 │ return ( 2026-10-23T01:51:03.6227968Z 654 │ 2026-10-23T01:51:03.6228085Z ·  ───────────── 2026-10-23T01:51:03.6228155Z 655 │ {props.children} 2026-10-23T01:51:03.6228245Z ╰──── 2026-10-23T01:51:03.6228548Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-23T01:51:03.6228727Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-23T01:51:03.6228730Z 2026-10-23T01:51:03.6228976Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-23T01:51:03.6229141Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:1462:55] 2026-10-23T01:51:03.6229202Z 1461 │ return ( 2026-10-23T01:51:03.6229368Z 1462 │ 2026-10-23T01:51:03.6229504Z ·  ──────────────────── 2026-10-23T01:51:03.6229607Z 1463 │ { 2026-10-23T01:51:03.6231503Z 458 │ let result: Array = divisor.map((_) => 0); 2026-10-23T01:51:03.6231603Z ·  ┬ 2026-10-23T01:51:03.6231753Z · ╰── '_' is declared here 2026-10-23T01:51:03.6231825Z 459 │ for (const b of data) { 2026-10-23T01:51:03.6231878Z ╰──── 2026-10-23T01:51:03.6231982Z  help: Consider removing this parameter. 2026-10-23T01:51:03.6231985Z 2026-10-23T01:51:03.6232200Z ⚠ react(immutability): This value cannot be modified 2026-10-23T01:51:03.6232404Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:111:5] 2026-10-23T01:51:03.6232462Z 107 │ ); 2026-10-23T01:51:03.6232615Z 108 │ const separationProgress = useSharedValue(props.showScrollToEnd ? 1 : 0); 2026-10-23T01:51:03.6232707Z ·  ─────────┬──────── 2026-10-23T01:51:03.6232863Z · ╰── `separationProgress` originates here 2026-10-23T01:51:03.6232920Z 109 │ 2026-10-23T01:51:03.6232985Z 110 │ useEffect(() => { 2026-10-23T01:51:03.6233165Z 111 │ separationProgress.value = withTiming(props.showScrollToEnd ? 1 : 0, CONTROL_TIMING); 2026-10-23T01:51:03.6233252Z ·  ─────────┬──────── 2026-10-23T01:51:03.6233415Z · ╰── `separationProgress` cannot be modified 2026-10-23T01:51:03.6233531Z 112 │ }, [props.showScrollToEnd, separationProgress]); 2026-10-23T01:51:03.6233585Z ╰──── 2026-10-23T01:51:03.6233860Z  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-23T01:51:03.6234174Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T01:51:03.6234177Z 2026-10-23T01:51:03.6234335Z ⚠ react(immutability): This value cannot be modified 2026-10-23T01:51:03.6234499Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5] 2026-10-23T01:51:03.6234611Z 128 │ // and repeatedly retargets the animation as it grows. 2026-10-23T01:51:03.6234735Z 129 │ const capsuleWidth = useSharedValue(null); 2026-10-23T01:51:03.6234822Z ·  ──────┬───── 2026-10-23T01:51:03.6234963Z · ╰── `capsuleWidth` originates here 2026-10-23T01:51:03.6235077Z 130 │ const measuredWidthRef = useRef(null); 2026-10-23T01:51:03.6235195Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-23T01:51:03.6235305Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-23T01:51:03.6235401Z 133 │ if (width === measuredWidthRef.current) { 2026-10-23T01:51:03.6235466Z 134 │ return; 2026-10-23T01:51:03.6235524Z 135 │ } 2026-10-23T01:51:03.6235632Z 136 │ const first = measuredWidthRef.current === null; 2026-10-23T01:51:03.6235721Z 137 │ measuredWidthRef.current = width; 2026-10-23T01:51:03.6235871Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-23T01:51:03.6235953Z ·  ──────┬───── 2026-10-23T01:51:03.6236098Z · ╰── `capsuleWidth` cannot be modified 2026-10-23T01:51:03.6236154Z 139 │ }; 2026-10-23T01:51:03.6236209Z ╰──── 2026-10-23T01:51:03.6236478Z  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-23T01:51:03.6236788Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T01:51:03.6236790Z 2026-10-23T01:51:03.6236946Z ⚠ react(immutability): This value cannot be modified 2026-10-23T01:51:03.6237182Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7] 2026-10-23T01:51:03.6237333Z 128 │ // and repeatedly retargets the animation as it grows. 2026-10-23T01:51:03.6237450Z 129 │ const capsuleWidth = useSharedValue(null); 2026-10-23T01:51:03.6237529Z ·  ──────┬───── 2026-10-23T01:51:03.6237669Z · ╰── `capsuleWidth` originates here 2026-10-23T01:51:03.6237781Z 130 │ const measuredWidthRef = useRef(null); 2026-10-23T01:51:03.6237898Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-23T01:51:03.6238004Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-23T01:51:03.6238104Z 133 │ if (width === measuredWidthRef.current) { 2026-10-23T01:51:03.6238168Z 134 │ return; 2026-10-23T01:51:03.6238267Z 135 │ } 2026-10-23T01:51:03.6238374Z 136 │ const first = measuredWidthRef.current === null; 2026-10-23T01:51:03.6238467Z 137 │ measuredWidthRef.current = width; 2026-10-23T01:51:03.6238613Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-23T01:51:03.6238670Z 139 │ }; 2026-10-23T01:51:03.6238761Z 140 │ const hasStatus = props.status !== null; 2026-10-23T01:51:03.6238900Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-23T01:51:03.6238969Z 142 │ useEffect(() => { 2026-10-23T01:51:03.6239037Z 143 │ if (!hasStatus) { 2026-10-23T01:51:03.6239124Z 144 │ measuredWidthRef.current = null; 2026-10-23T01:51:03.6239204Z 145 │ capsuleWidth.value = null; 2026-10-23T01:51:03.6239285Z ·  ──────┬───── 2026-10-23T01:51:03.6239430Z · ╰── `capsuleWidth` cannot be modified 2026-10-23T01:51:03.6239486Z 146 │ } 2026-10-23T01:51:03.6239546Z ╰──── 2026-10-23T01:51:03.6239819Z  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-23T01:51:03.6240129Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T01:51:03.6240132Z 2026-10-23T01:51:03.6240334Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-23T01:51:03.6240502Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7] 2026-10-23T01:51:03.6240639Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-23T01:51:03.6240706Z 142 │ useEffect(() => { 2026-10-23T01:51:03.6240784Z ·  ───┬─── 2026-10-23T01:51:03.6241016Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-23T01:51:03.6241087Z 143 │ if (!hasStatus) { 2026-10-23T01:51:03.6241180Z 144 │ measuredWidthRef.current = null; 2026-10-23T01:51:03.6241257Z 145 │ capsuleWidth.value = null; 2026-10-23T01:51:03.6241336Z ·  ──────┬───── 2026-10-23T01:51:03.6241473Z · ╰── This modifies `capsuleWidth` 2026-10-23T01:51:03.6241530Z 146 │ } 2026-10-23T01:51:03.6241582Z ╰──── 2026-10-23T01:51:03.6241931Z  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-23T01:51:03.6242306Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T01:51:03.6242352Z 2026-10-23T01:51:03.6242555Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-23T01:51:03.6242720Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5] 2026-10-23T01:51:03.6242831Z 130 │ const measuredWidthRef = useRef(null); 2026-10-23T01:51:03.6242949Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-23T01:51:03.6243077Z ·  ───────────────┬─────────────── 2026-10-23T01:51:03.6243324Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-23T01:51:03.6243429Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-23T01:51:03.6243537Z 133 │ if (width === measuredWidthRef.current) { 2026-10-23T01:51:03.6243603Z 134 │ return; 2026-10-23T01:51:03.6243660Z 135 │ } 2026-10-23T01:51:03.6243765Z 136 │ const first = measuredWidthRef.current === null; 2026-10-23T01:51:03.6243853Z 137 │ measuredWidthRef.current = width; 2026-10-23T01:51:03.6243997Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-23T01:51:03.6244077Z ·  ──────┬───── 2026-10-23T01:51:03.6244212Z · ╰── This modifies `capsuleWidth` 2026-10-23T01:51:03.6244269Z 139 │ }; 2026-10-23T01:51:03.6244323Z ╰──── 2026-10-23T01:51:03.6244669Z  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-23T01:51:03.6244985Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T01:51:03.6244992Z 2026-10-23T01:51:03.6245165Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T01:51:03.6245316Z ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:372:47] 2026-10-23T01:51:03.6245448Z 371 │ const { open, onOpenChange, onSnooze, timestampFormat } = props; 2026-10-23T01:51:03.6245603Z 372 │ const presets = open ? resolveSnoozePresets(new Date(), timestampFormat) : []; 2026-10-23T01:51:03.6245719Z ·  ─────┬──── 2026-10-23T01:51:03.6245885Z · ╰── Cannot call impure function 2026-10-23T01:51:03.6245953Z 373 │ return ( 2026-10-23T01:51:03.6246009Z ╰──── 2026-10-23T01:51:03.6246292Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-23T01:51:03.6246592Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T01:51:03.6246595Z 2026-10-23T01:51:03.6246765Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T01:51:03.6246914Z ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:853:39] 2026-10-23T01:51:03.6247009Z 852 │ if (snoozeGateClock.thread !== thread) { 2026-10-23T01:51:03.6247140Z 853 │ setSnoozeGateClock({ thread, now: new Date().toISOString() }); 2026-10-23T01:51:03.6247311Z ·  ─────┬──── 2026-10-23T01:51:03.6247508Z · ╰── Cannot call impure function 2026-10-23T01:51:03.6247563Z 854 │ } 2026-10-23T01:51:03.6247617Z ╰──── 2026-10-23T01:51:03.6247901Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-23T01:51:03.6248228Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T01:51:03.6248230Z 2026-10-23T01:51:03.6248451Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-23T01:51:03.6248629Z ╭─[apps/mobile/src/features/threads/NewTaskContextPickerScreens.tsx:370:7] 2026-10-23T01:51:03.6248714Z 369 │ mountedRef.current = false; 2026-10-23T01:51:03.6248792Z 370 │ flow.setBranchQuery(""); 2026-10-23T01:51:03.6248864Z ·  ──┬─ 2026-10-23T01:51:03.6248991Z · ╰── Missing dependency `flow` 2026-10-23T01:51:03.6249050Z 371 │ }; 2026-10-23T01:51:03.6249126Z 372 │ }, [flow.setBranchQuery]); 2026-10-23T01:51:03.6249216Z ·  ─────────┬───────── 2026-10-23T01:51:03.6249422Z · ╰── Overly precise dependency `flow.setBranchQuery`, use `flow` instead 2026-10-23T01:51:03.6249480Z 373 │ 2026-10-23T01:51:03.6249534Z ╰──── 2026-10-23T01:51:03.6249970Z  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-23T01:51:03.6250291Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.6250294Z 2026-10-23T01:51:03.6250502Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T01:51:03.6250669Z ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:215:7] 2026-10-23T01:51:03.6250728Z 214 │ } 2026-10-23T01:51:03.6250796Z 215 │ }, [wrappedRender]); 2026-10-23T01:51:03.6250877Z ·  ──────┬────── 2026-10-23T01:51:03.6251033Z · ╰── Unnecessary dependency `wrappedRender` 2026-10-23T01:51:03.6251089Z 216 │ 2026-10-23T01:51:03.6251140Z ╰──── 2026-10-23T01:51:03.6251441Z  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-23T01:51:03.6251762Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T01:51:03.6251765Z 2026-10-23T01:51:03.6252011Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-23T01:51:03.6252177Z ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:817:35] 2026-10-23T01:51:03.6252234Z 816 │ > 2026-10-23T01:51:03.6252350Z 817 │ 2026-10-23T01:51:03.6252525Z ·  ──────────────────── 2026-10-23T01:51:03.6252773Z 818 │ 2026-10-23T01:51:03.6253798Z 832 │ 2026-10-23T01:51:03.6253929Z ·  ──────────────────── 2026-10-23T01:51:03.6254034Z 833 │ 2026-10-23T01:51:03.6254088Z ╰──── 2026-10-23T01:51:03.6254382Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-23T01:51:03.6254519Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-23T01:51:03.6254522Z 2026-10-23T01:51:03.6254679Z ⚠ react(immutability): This value cannot be modified 2026-10-23T01:51:03.6254842Z ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:42:5] 2026-10-23T01:51:03.6254897Z 35 │ 2026-10-23T01:51:03.6255038Z 36 │ const inspectorProgress = useSharedValue(inspectorVisible ? 1 : 0); 2026-10-23T01:51:03.6255128Z ·  ────────┬──────── 2026-10-23T01:51:03.6255281Z · ╰── `inspectorProgress` originates here 2026-10-23T01:51:03.6255382Z 37 │ const { renderedInspectorWidth } = props; 2026-10-23T01:51:03.6255517Z 38 │ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0); 2026-10-23T01:51:03.6255572Z 39 │ 2026-10-23T01:51:03.6255653Z 40 │ const onClosed = props.onClosed; 2026-10-23T01:51:03.6255721Z 41 │ useEffect(() => { 2026-10-23T01:51:03.6255812Z 42 │ inspectorProgress.value = withTiming( 2026-10-23T01:51:03.6255896Z ·  ────────┬──────── 2026-10-23T01:51:03.6256049Z · ╰── `inspectorProgress` cannot be modified 2026-10-23T01:51:03.6256129Z 43 │ inspectorVisible ? 1 : 0, 2026-10-23T01:51:03.6256183Z ╰──── 2026-10-23T01:51:03.6256543Z  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-23T01:51:03.6256914Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T01:51:03.6256917Z 2026-10-23T01:51:03.6257078Z ⚠ react(immutability): This value cannot be modified 2026-10-23T01:51:03.6257243Z ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:67:7] 2026-10-23T01:51:03.6257339Z 37 │ const { renderedInspectorWidth } = props; 2026-10-23T01:51:03.6257469Z 38 │ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0); 2026-10-23T01:51:03.6257564Z ·  ──────────┬───────── 2026-10-23T01:51:03.6257723Z · ╰── `renderedContentWidth` originates here 2026-10-23T01:51:03.6257784Z 39 │ 2026-10-23T01:51:03.6257869Z 40 │ const onClosed = props.onClosed; 2026-10-23T01:51:03.6257935Z 41 │ useEffect(() => { 2026-10-23T01:51:03.6258030Z 42 │ inspectorProgress.value = withTiming( 2026-10-23T01:51:03.6258111Z 43 │ inspectorVisible ? 1 : 0, 2026-10-23T01:51:03.6258182Z 44 │ WORKSPACE_PANE_TIMING, 2026-10-23T01:51:03.6258286Z 45 │ (finished) => { 2026-10-23T01:51:03.6258429Z 46 │ if (finished === true && !inspectorVisible && onClosed !== undefined) { 2026-10-23T01:51:03.6258506Z 47 │ runOnJS(onClosed)(); 2026-10-23T01:51:03.6258565Z 48 │ } 2026-10-23T01:51:03.6258624Z 49 │ }, 2026-10-23T01:51:03.6258681Z 50 │ ); 2026-10-23T01:51:03.6258813Z 51 │ const targetWidth = inspectorVisible ? (inspectorWidth ?? 0) : 0; 2026-10-23T01:51:03.6258891Z 52 │ renderedInspectorWidth.set( 2026-10-23T01:51:03.6259048Z 53 │ resizing ? targetWidth : withTiming(targetWidth, WORKSPACE_PANE_TIMING), 2026-10-23T01:51:03.6259107Z 54 │ ); 2026-10-23T01:51:03.6259159Z 55 │ }, [ 2026-10-23T01:51:03.6259231Z 56 │ inspectorProgress, 2026-10-23T01:51:03.6259300Z 57 │ inspectorVisible, 2026-10-23T01:51:03.6259368Z 58 │ inspectorWidth, 2026-10-23T01:51:03.6259427Z 59 │ onClosed, 2026-10-23T01:51:03.6259503Z 60 │ renderedInspectorWidth, 2026-10-23T01:51:03.6259564Z 61 │ resizing, 2026-10-23T01:51:03.6259621Z 62 │ ]); 2026-10-23T01:51:03.6259673Z 63 │ 2026-10-23T01:51:03.6259739Z 64 │ useEffect(() => { 2026-10-23T01:51:03.6259833Z 65 │ const targetWidth = inspectorWidth ?? 0; 2026-10-23T01:51:03.6259921Z 66 │ if (!inspectorVisible || resizing) { 2026-10-23T01:51:03.6260019Z 67 │ renderedContentWidth.value = targetWidth; 2026-10-23T01:51:03.6260117Z ·  ──────────┬───────── 2026-10-23T01:51:03.6260285Z · ╰── `renderedContentWidth` cannot be modified 2026-10-23T01:51:03.6260346Z 68 │ return; 2026-10-23T01:51:03.6260399Z ╰──── 2026-10-23T01:51:03.6260668Z  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-23T01:51:03.6260980Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T01:51:03.6260982Z 2026-10-23T01:51:03.6261326Z ⚠ 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-23T01:51:03.6261550Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:50:18] 2026-10-23T01:51:03.6261753Z 49 │ for (const tool of ["sendMessage", "followupTask", "interruptAgent", "listAgents"]) { 2026-10-23T01:51:03.6261927Z 50 │ assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true); 2026-10-23T01:51:03.6262016Z ·  ───────── 2026-10-23T01:51:03.6262201Z 51 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true); 2026-10-23T01:51:03.6262253Z ╰──── 2026-10-23T01:51:03.6262255Z 2026-10-23T01:51:03.6262597Z ⚠ 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-23T01:51:03.6262744Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:51:18] 2026-10-23T01:51:03.6262921Z 50 │ assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true); 2026-10-23T01:51:03.6263106Z 51 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true); 2026-10-23T01:51:03.6263193Z ·  ───────── 2026-10-23T01:51:03.6263249Z 52 │ } 2026-10-23T01:51:03.6263303Z ╰──── 2026-10-23T01:51:03.6263306Z 2026-10-23T01:51:03.6263643Z ⚠ 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-23T01:51:03.6263786Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:55:5] 2026-10-23T01:51:03.6263853Z 54 │ assert.equal( 2026-10-23T01:51:03.6264027Z 55 │ Schema.is(CodexSchema.ServerNotification__CollabAgentToolCallStatus)("interrupted"), 2026-10-23T01:51:03.6264104Z ·  ───────── 2026-10-23T01:51:03.6264167Z 56 │ true, 2026-10-23T01:51:03.6264221Z ╰──── 2026-10-23T01:51:03.6264224Z 2026-10-23T01:51:03.6264560Z ⚠ 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-23T01:51:03.6264701Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:59:5] 2026-10-23T01:51:03.6264763Z 58 │ assert.equal( 2026-10-23T01:51:03.6264949Z 59 │ Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentToolCallStatus)("interrupted"), 2026-10-23T01:51:03.6265023Z ·  ───────── 2026-10-23T01:51:03.6265080Z 60 │ true, 2026-10-23T01:51:03.6265134Z ╰──── 2026-10-23T01:51:03.6265137Z 2026-10-23T01:51:03.6265478Z ⚠ 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-23T01:51:03.6265632Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:103:16] 2026-10-23T01:51:03.6265690Z 102 │ 2026-10-23T01:51:03.6265860Z 103 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse)(resumeResponse), true); 2026-10-23T01:51:03.6265946Z ·  ───────── 2026-10-23T01:51:03.6266003Z 104 │ }); 2026-10-23T01:51:03.6266056Z ╰──── 2026-10-23T01:51:03.6266059Z 2026-10-23T01:51:03.6266276Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-23T01:51:03.6266384Z ╭─[apps/mobile/src/Stack.tsx:1044:21] 2026-10-23T01:51:03.6266450Z 1043 │ } 2026-10-23T01:51:03.6266789Z ·  ───────────────────────────────────────────── 2026-10-23T01:51:03.6266901Z 1045 │ screenListeners={{ 2026-10-23T01:51:03.6266956Z ╰──── 2026-10-23T01:51:03.6267328Z  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-23T01:51:03.6267331Z 2026-10-23T01:51:03.6267805Z ⚠ 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-23T01:51:03.6267944Z ╭─[packages/client-runtime/src/rpc/client.test.ts:131:9] 2026-10-23T01:51:03.6268008Z 130 │ ) { 2026-10-23T01:51:03.6268268Z 131 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-23T01:51:03.6268400Z 132 │ │ if (subscriptions.length >= count) { 2026-10-23T01:51:03.6268492Z 133 │ │ return; 2026-10-23T01:51:03.6268576Z 134 │ │ } 2026-10-23T01:51:03.6268687Z 135 │ │ yield* Effect.yieldNow; 2026-10-23T01:51:03.6268824Z 136 │ ╰─▶ } 2026-10-23T01:51:03.6268990Z 137 │ return yield* Effect.die(new Error(`Expected ${count} durable subscriptions.`)); 2026-10-23T01:51:03.6269043Z ╰──── 2026-10-23T01:51:03.6269046Z 2026-10-23T01:51:03.6269525Z ⚠ 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-23T01:51:03.6269664Z ╭─[packages/client-runtime/src/rpc/client.test.ts:252:7] 2026-10-23T01:51:03.6269828Z 251 │ yield* SubscriptionRef.set(activeSession, Option.some(session(firstClient))); 2026-10-23T01:51:03.6270090Z 252 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 1; attempt += 1) { 2026-10-23T01:51:03.6270199Z 253 │ │ yield* Effect.yieldNow; 2026-10-23T01:51:03.6270332Z 254 │ ╰─▶ } 2026-10-23T01:51:03.6270458Z 255 │ yield* SubscriptionRef.set(activeSession, Option.none()); 2026-10-23T01:51:03.6270510Z ╰──── 2026-10-23T01:51:03.6270513Z 2026-10-23T01:51:03.6270988Z ⚠ 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-23T01:51:03.6271127Z ╭─[packages/client-runtime/src/rpc/client.test.ts:258:7] 2026-10-23T01:51:03.6271184Z 257 │ 2026-10-23T01:51:03.6271440Z 258 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-23T01:51:03.6271549Z 259 │ │ yield* Effect.yieldNow; 2026-10-23T01:51:03.6271682Z 260 │ ╰─▶ } 2026-10-23T01:51:03.6271791Z 261 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-23T01:51:03.6271842Z ╰──── 2026-10-23T01:51:03.6271901Z 2026-10-23T01:51:03.6272556Z ⚠ 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-23T01:51:03.6272693Z ╭─[packages/client-runtime/src/rpc/client.test.ts:322:7] 2026-10-23T01:51:03.6272756Z 321 │ ); 2026-10-23T01:51:03.6273018Z 322 │ ╭─▶ for (let attempt = 0; attempt < 100 && observedFailures.length < 1; attempt += 1) { 2026-10-23T01:51:03.6273122Z 323 │ │ yield* Effect.yieldNow; 2026-10-23T01:51:03.6273254Z 324 │ ╰─▶ } 2026-10-23T01:51:03.6273311Z 325 │ 2026-10-23T01:51:03.6273365Z ╰──── 2026-10-23T01:51:03.6273373Z 2026-10-23T01:51:03.6273839Z ⚠ 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-23T01:51:03.6273973Z ╭─[packages/client-runtime/src/rpc/client.test.ts:330:7] 2026-10-23T01:51:03.6274139Z 329 │ yield* SubscriptionRef.set(activeSession, Option.some(session(secondClient))); 2026-10-23T01:51:03.6274392Z 330 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-23T01:51:03.6274498Z 331 │ │ yield* Effect.yieldNow; 2026-10-23T01:51:03.6274629Z 332 │ ╰─▶ } 2026-10-23T01:51:03.6274740Z 333 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-23T01:51:03.6274796Z ╰──── 2026-10-23T01:51:03.6274799Z 2026-10-23T01:51:03.6275265Z ⚠ 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-23T01:51:03.6275422Z ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1228:7] 2026-10-23T01:51:03.6275518Z 1227 │ yield* harness.replaceSession; 2026-10-23T01:51:03.6275730Z 1228 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-23T01:51:03.6275890Z 1229 │ │ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) { 2026-10-23T01:51:03.6275983Z 1230 │ │ break; 2026-10-23T01:51:03.6276068Z 1231 │ │ } 2026-10-23T01:51:03.6276180Z 1232 │ │ yield* Effect.yieldNow; 2026-10-23T01:51:03.6276315Z 1233 │ ╰─▶ } 2026-10-23T01:51:03.6276389Z 1234 │ yield* Queue.offer( 2026-10-23T01:51:03.6276443Z ╰──── 2026-10-23T01:51:03.6276446Z 2026-10-23T01:51:03.6276914Z ⚠ 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-23T01:51:03.6277069Z ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1337:7] 2026-10-23T01:51:03.6277221Z 1336 │ yield* harness.replaceSession; 2026-10-23T01:51:03.6277461Z 1337 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-23T01:51:03.6277627Z 1338 │ │ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) break; 2026-10-23T01:51:03.6277737Z 1339 │ │ yield* Effect.yieldNow; 2026-10-23T01:51:03.6277871Z 1340 │ ╰─▶ } 2026-10-23T01:51:03.6278001Z 1341 │ expect(yield* Ref.get(harness.subscriptionCount)).toBe(2); 2026-10-23T01:51:03.6278058Z ╰──── 2026-10-23T01:51:03.6278061Z 2026-10-23T01:51:03.6278561Z ⚠ 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-23T01:51:03.6278706Z ╭─[packages/client-runtime/src/rpc/session.test.ts:226:3] 2026-10-23T01:51:03.6278766Z 225 │ ) { 2026-10-23T01:51:03.6278970Z 226 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-23T01:51:03.6279084Z 227 │ │ const socket = sockets[index]; 2026-10-23T01:51:03.6279175Z 228 │ │ if (socket) { 2026-10-23T01:51:03.6279271Z 229 │ │ return socket; 2026-10-23T01:51:03.6279347Z 230 │ │ } 2026-10-23T01:51:03.6279452Z 231 │ │ yield* Effect.yieldNow; 2026-10-23T01:51:03.6279580Z 232 │ ╰─▶ } 2026-10-23T01:51:03.6279765Z 233 │ return yield* Effect.die(new Error("Expected the RPC protocol to create a websocket.")); 2026-10-23T01:51:03.6279821Z ╰──── 2026-10-23T01:51:03.6279823Z 2026-10-23T01:51:03.6280287Z ⚠ 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-23T01:51:03.6280426Z ╭─[packages/client-runtime/src/rpc/session.test.ts:240:3] 2026-10-23T01:51:03.6280485Z 239 │ ) { 2026-10-23T01:51:03.6280686Z 240 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-23T01:51:03.6280905Z 241 │ │ const request = socket.sent.map((message) => decodeJson(message)).filter(isRpcRequest)[index]; 2026-10-23T01:51:03.6281055Z 242 │ │ if (request) { 2026-10-23T01:51:03.6281192Z 243 │ │ return request; 2026-10-23T01:51:03.6281266Z 244 │ │ } 2026-10-23T01:51:03.6281369Z 245 │ │ yield* Effect.yieldNow; 2026-10-23T01:51:03.6281497Z 246 │ ╰─▶ } 2026-10-23T01:51:03.6281667Z 247 │ return yield* Effect.die(new Error("Expected the RPC protocol to send a request.")); 2026-10-23T01:51:03.6281719Z ╰──── 2026-10-23T01:51:03.6281724Z 2026-10-23T01:51:03.6281806Z Found 0 errors and 358 warnings in 5402 files (6.4s, 8 threads) 2026-10-23T01:51:03.6837202Z Post job cleanup. 2026-10-23T01:51:03.7591204Z Cache hit occurred on the primary key electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309, not saving cache. 2026-10-23T01:51:03.7682986Z Post job cleanup. 2026-10-23T01:51:03.7699201Z ##[start-action display=Cache full pnpm store;id=__99bb687e-9ab0-4bfe-873b-e8f8a6fc74db.__actions_cache] 2026-10-23T01:51:03.8486554Z Post job cleanup. 2026-10-23T01:51:03.9223427Z Cache hit occurred on the primary key pnpm-full-v1-Linux-X64-00e587c1edf31fe669c96bc4768c0e07a969fff8e8228235fb75ec6c0abf4161, not saving cache. 2026-10-23T01:51:03.9266425Z ##[end-action id=__99bb687e-9ab0-4bfe-873b-e8f8a6fc74db.__actions_cache;outcome=success;conclusion=success;duration_ms=156] 2026-10-23T01:51:03.9268712Z ##[start-action display=Cache Vite+;id=__99bb687e-9ab0-4bfe-873b-e8f8a6fc74db.vp_cache] 2026-10-23T01:51:03.9296090Z Post job cleanup. 2026-10-23T01:51:04.0016577Z 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-23T01:51:04.0058529Z ##[end-action id=__99bb687e-9ab0-4bfe-873b-e8f8a6fc74db.vp_cache;outcome=success;conclusion=success;duration_ms=78] 2026-10-23T01:51:04.0117091Z Post job cleanup. 2026-10-23T01:51:04.0593062Z [command]/usr/local/bin/git version 2026-10-23T01:51:04.0633443Z git version 2.55.0 2026-10-23T01:51:04.0663413Z Temporarily overriding HOME='/home/runner/_work/_temp/24ef0204-a28b-4bba-8ef9-8d46772b88ca' before making global git config changes 2026-10-23T01:51:04.0663789Z Adding repository directory to the temporary git global config as a safe directory 2026-10-23T01:51:04.0668865Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code 2026-10-23T01:51:04.0700311Z Removing SSH command configuration 2026-10-23T01:51:04.0705721Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand 2026-10-23T01:51:04.0736787Z [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-23T01:51:04.0877462Z fatal: No url found for submodule path '.repos/alchemy-effect/submodules/distilled' in .gitmodules 2026-10-23T01:51:04.0911180Z ##[warning]The process '/usr/local/bin/git' failed with exit code 128 2026-10-23T01:51:04.0971483Z A job completed hook has been configured by the self-hosted runner administrator 2026-10-23T01:51:04.0985649Z ##[group]Run '/job_completed.sh' 2026-10-23T01:51:04.0992865Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-23T01:51:04.0993042Z env: 2026-10-23T01:51:04.0993186Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 173 2026-10-23T01:51:04.0993335Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 444 2026-10-23T01:51:04.0993483Z BLACKSMITH_CHECK_RUN_ID: 120194814446 2026-10-23T01:51:04.0993628Z BLACKSMITH_JOB_DISPLAY_NAME: Lint 2026-10-23T01:51:04.0993774Z GITHUB_ACTIONS_CACHE_MODE: write 2026-10-23T01:51:04.0993910Z ##[endgroup] 2026-10-23T01:51:04.1081270Z Docker container cache not activated, skipping hash computation. 2026-10-23T01:51:04.1362287Z No active SSH sessions detected. Proceeding with shutdown immediately. 2026-10-23T01:51:04.1420096Z Cleaning up orphan processes