2026-10-24T23:07:38.7802558Z Current runner version: '2.338.1' 2026-10-24T23:07:38.7806161Z Runner name: 'blacksmith-8vcpu-ubuntu-2404-xxa7pfz3rioxwdeo' 2026-10-24T23:07:38.7806879Z Runner group name: 'blacksmith scale sets - blacksmith-8vcpu-ubuntu-2404' 2026-10-24T23:07:38.7807716Z Machine name: 'ip-172-31-73-130' 2026-10-24T23:07:38.7809296Z ##[group]GITHUB_TOKEN Permissions 2026-10-24T23:07:38.7810603Z Contents: read 2026-10-24T23:07:38.7811009Z Metadata: read 2026-10-24T23:07:38.7811406Z ##[endgroup] 2026-10-24T23:07:38.7812971Z Secret source: Actions 2026-10-24T23:07:38.7813612Z Cache mode: write 2026-10-24T23:07:38.7814117Z Prepare workflow directory 2026-10-24T23:07:38.7985484Z Prepare all required actions 2026-10-24T23:07:38.8010643Z Getting action download info 2026-10-24T23:07:38.9260413Z Download action repository 'actions/checkout@v6' (SHA:d23441a48e516b6c34aea4fa41551a30e30af803) 2026-10-24T23:07:38.9633100Z Download action repository 'actions/cache@v6' (SHA:55cc8345863c7cc4c66a329aec7e433d2d1c52a9) 2026-10-24T23:07:39.0669320Z Setting BLACKSMITH_ACTIONS_RESULTS_URL to https://results-receiver.actions.githubusercontent.com/ 2026-10-24T23:07:39.0705205Z Complete job name: Lint 2026-10-24T23:07:39.1044693Z A job started hook has been configured by the self-hosted runner administrator 2026-10-24T23:07:39.1106641Z ##[group]Run '/setup.sh' 2026-10-24T23:07:39.1116480Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T23:07:39.1116883Z env: 2026-10-24T23:07:39.1117101Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 141 2026-10-24T23:07:39.1117381Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 406 2026-10-24T23:07:39.1117665Z BLACKSMITH_CHECK_RUN_ID: 121013818614 2026-10-24T23:07:39.1117938Z BLACKSMITH_JOB_DISPLAY_NAME: Lint 2026-10-24T23:07:39.1118203Z GITHUB_ACTIONS_CACHE_MODE: write 2026-10-24T23:07:39.1118459Z ##[endgroup] 2026-10-24T23:07:39.1323837Z Logging daemon started (blacksmithd for logs) 2026-10-24T23:07:39.1429996Z Results daemon started (blacksmithd for results) 2026-10-24T23:07:39.1549794Z Background adoption and SSH setup started (PID: 3132) 2026-10-24T23:07:39.1551863Z 2026-10-24T23:07:39.1552214Z ---------------------------------------- 2026-10-24T23:07:39.1552980Z View this job: https://app.blacksmith.sh/pingdotgg/runs/40141432915/jobs/121013818614 2026-10-24T23:07:39.1553643Z SSH Access (using your GitHub SSH key): 2026-10-24T23:07:39.1554317Z ssh -p 64000 runner@blacksmith-8vcpu-ubuntu-2404-xxa7pfz3rioxwdeo.vm.blacksmith.sh 2026-10-24T23:07:39.1554805Z 2026-10-24T23:07:39.1554929Z No GitHub SSH key? Add one at: 2026-10-24T23:07:39.1555412Z https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account 2026-10-24T23:07:39.1555802Z 2026-10-24T23:07:39.1555908Z ---------------------------------------- 2026-10-24T23:07:39.1556081Z 2026-10-24T23:07:39.1556223Z VM ID: blacksmith-8vcpu-ubuntu-2404-xxa7pfz3rioxwdeo 2026-10-24T23:07:39.1556535Z Host: production-152.236.46.141-x8664 2026-10-24T23:07:39.1556798Z Host Agent PID: 236858 2026-10-24T23:07:39.1557032Z Host Agent Git SHA: 1637818df 2026-10-24T23:07:39.1557292Z Host CPU Manufacturer: AuthenticAMD 2026-10-24T23:07:39.1557565Z Blacksmith Host Generation: gen 2 2026-10-24T23:07:39.1557838Z Petname: production-famous-dory-b845e104 2026-10-24T23:07:39.1558110Z Region: us-east 2026-10-24T23:07:39.1558335Z Rootfs Version: ubuntu24-full-x64-081926 2026-10-24T23:07:39.1562734Z OS Version: Ubuntu 24.04.4 LTS 2026-10-24T23:07:39.1563230Z 2026-10-24T23:07:39.1563411Z Enabling Blacksmith transparent cache 2026-10-24T23:07:39.1832144Z ##[group]Run actions/checkout@v6 2026-10-24T23:07:39.1832436Z with: 2026-10-24T23:07:39.1832754Z sparse-checkout: /* !/.repos/ !/apps/mobile/modules/t3-terminal/Vendor/**/*.a 2026-10-24T23:07:39.1833138Z sparse-checkout-cone-mode: false 2026-10-24T23:07:39.1833406Z repository: pingdotgg/t3code 2026-10-24T23:07:39.1835165Z token: *** 2026-10-24T23:07:39.1835372Z ssh-strict: true 2026-10-24T23:07:39.1835582Z ssh-user: git 2026-10-24T23:07:39.1835799Z persist-credentials: true 2026-10-24T23:07:39.1836236Z clean: true 2026-10-24T23:07:39.1836443Z fetch-depth: 1 2026-10-24T23:07:39.1836648Z fetch-tags: false 2026-10-24T23:07:39.1836861Z show-progress: true 2026-10-24T23:07:39.1837079Z lfs: false 2026-10-24T23:07:39.1837278Z submodules: false 2026-10-24T23:07:39.1837496Z set-safe-directory: true 2026-10-24T23:07:39.1837743Z allow-unsafe-pr-checkout: false 2026-10-24T23:07:39.1837990Z env: 2026-10-24T23:07:39.1838219Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 141 2026-10-24T23:07:39.1838492Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 406 2026-10-24T23:07:39.1838762Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T23:07:39.1839014Z ##[endgroup] 2026-10-24T23:07:39.2905939Z Syncing repository: pingdotgg/t3code 2026-10-24T23:07:39.2906962Z ##[group]Getting Git version info 2026-10-24T23:07:39.2907293Z Working directory is '/home/runner/_work/t3code/t3code' 2026-10-24T23:07:39.2907756Z [command]/usr/local/bin/git version 2026-10-24T23:07:39.2960973Z git version 2.55.0 2026-10-24T23:07:39.2972838Z ##[endgroup] 2026-10-24T23:07:39.2980369Z Temporarily overriding HOME='/home/runner/_work/_temp/c38aa639-af95-467d-9fb7-0efb6167105c' before making global git config changes 2026-10-24T23:07:39.2981537Z Adding repository directory to the temporary git global config as a safe directory 2026-10-24T23:07:39.2984287Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code 2026-10-24T23:07:39.3013155Z Deleting the contents of '/home/runner/_work/t3code/t3code' 2026-10-24T23:07:39.3014618Z ##[group]Determining repository object format 2026-10-24T23:07:39.3015678Z ##[endgroup] 2026-10-24T23:07:39.3016029Z ##[group]Initializing the repository 2026-10-24T23:07:39.3018155Z [command]/usr/local/bin/git init /home/runner/_work/t3code/t3code 2026-10-24T23:07:39.3050461Z hint: Using 'master' as the name for the initial branch. This default branch name 2026-10-24T23:07:39.3050946Z hint: will change to "main" in Git 3.0. To configure the initial branch name 2026-10-24T23:07:39.3051394Z hint: to use in all of your new repositories, which will suppress this warning, 2026-10-24T23:07:39.3051742Z hint: call: 2026-10-24T23:07:39.3051940Z hint: 2026-10-24T23:07:39.3052198Z hint: git config --global init.defaultBranch 2026-10-24T23:07:39.3052496Z hint: 2026-10-24T23:07:39.3052774Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and 2026-10-24T23:07:39.3053211Z hint: 'development'. The just-created branch can be renamed via this command: 2026-10-24T23:07:39.3053566Z hint: 2026-10-24T23:07:39.3053767Z hint: git branch -m 2026-10-24T23:07:39.3053999Z hint: 2026-10-24T23:07:39.3054293Z hint: Disable this message with "git config set advice.defaultBranchName false" 2026-10-24T23:07:39.3054750Z Initialized empty Git repository in /home/runner/_work/t3code/t3code/.git/ 2026-10-24T23:07:39.3056599Z [command]/usr/local/bin/git remote add origin https://github.com/pingdotgg/t3code 2026-10-24T23:07:39.3078167Z ##[endgroup] 2026-10-24T23:07:39.3078549Z ##[group]Disabling automatic garbage collection 2026-10-24T23:07:39.3080427Z [command]/usr/local/bin/git config --local gc.auto 0 2026-10-24T23:07:39.3099075Z ##[endgroup] 2026-10-24T23:07:39.3099429Z ##[group]Setting up auth 2026-10-24T23:07:39.3099692Z Removing SSH command configuration 2026-10-24T23:07:39.3102933Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand 2026-10-24T23:07:39.3123311Z [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-24T23:07:39.3238999Z Removing HTTP extra header 2026-10-24T23:07:39.3241832Z [command]/usr/local/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader 2026-10-24T23:07:39.3262935Z [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-24T23:07:39.3350421Z Removing includeIf entries pointing to credentials config files 2026-10-24T23:07:39.3353659Z [command]/usr/local/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir: 2026-10-24T23:07:39.3410138Z [command]/usr/local/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url 2026-10-24T23:07:39.3499437Z [command]/usr/local/bin/git config --file /home/runner/_work/_temp/git-credentials-d307770d-fecd-4ce9-948b-762d58a0df9d.config http.https://github.com/.extraheader AUTHORIZATION: basic *** 2026-10-24T23:07:39.3520720Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git.path /home/runner/_work/_temp/git-credentials-d307770d-fecd-4ce9-948b-762d58a0df9d.config 2026-10-24T23:07:39.3538825Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git/worktrees/*.path /home/runner/_work/_temp/git-credentials-d307770d-fecd-4ce9-948b-762d58a0df9d.config 2026-10-24T23:07:39.3558704Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git.path /github/runner_temp/git-credentials-d307770d-fecd-4ce9-948b-762d58a0df9d.config 2026-10-24T23:07:39.3575497Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git/worktrees/*.path /github/runner_temp/git-credentials-d307770d-fecd-4ce9-948b-762d58a0df9d.config 2026-10-24T23:07:39.3591087Z ##[endgroup] 2026-10-24T23:07:39.3591431Z ##[group]Fetching the repository 2026-10-24T23:07:39.3595283Z [command]/usr/local/bin/git -c protocol.version=2 fetch --no-tags --prune --no-recurse-submodules --filter=blob:none --depth=1 origin +3108d3658579ff7e097eae114bbfe2aa7e9dc0e6:refs/remotes/pull/24584/merge 2026-10-24T23:07:39.5992853Z From https://github.com/pingdotgg/t3code 2026-10-24T23:07:39.5993750Z * [new ref] 3108d3658579ff7e097eae114bbfe2aa7e9dc0e6 -> pull/24584/merge 2026-10-24T23:07:39.6017811Z ##[endgroup] 2026-10-24T23:07:39.6018538Z ##[group]Determining the checkout info 2026-10-24T23:07:39.6019307Z ##[endgroup] 2026-10-24T23:07:39.6019942Z ##[group]Setting up sparse checkout 2026-10-24T23:07:39.6022088Z [command]/usr/local/bin/git config core.sparseCheckout true 2026-10-24T23:07:39.6044366Z [command]/usr/local/bin/git rev-parse --git-path info/sparse-checkout 2026-10-24T23:07:39.6059404Z .git/info/sparse-checkout 2026-10-24T23:07:39.6063710Z ##[endgroup] 2026-10-24T23:07:39.6064454Z ##[group]Checking out the ref 2026-10-24T23:07:39.6066211Z [command]/usr/local/bin/git checkout --progress --force refs/remotes/pull/24584/merge 2026-10-24T23:07:46.6069743Z Updating files: 0% (1/6402) 2026-10-24T23:07:46.6097348Z Updating files: 1% (65/6402) 2026-10-24T23:07:46.6114240Z Updating files: 2% (129/6402) 2026-10-24T23:07:46.6134603Z Updating files: 3% (193/6402) 2026-10-24T23:07:46.6154925Z Updating files: 4% (257/6402) 2026-10-24T23:07:46.6184607Z Updating files: 5% (321/6402) 2026-10-24T23:07:46.6207268Z Updating files: 6% (385/6402) 2026-10-24T23:07:46.6264163Z Updating files: 7% (449/6402) 2026-10-24T23:07:46.6294486Z Updating files: 8% (513/6402) 2026-10-24T23:07:46.6307301Z Updating files: 8% (562/6402) 2026-10-24T23:07:46.6329824Z Updating files: 9% (577/6402) 2026-10-24T23:07:46.6612755Z Updating files: 10% (641/6402) 2026-10-24T23:07:46.6628495Z Updating files: 11% (705/6402) 2026-10-24T23:07:46.6639116Z Updating files: 12% (769/6402) 2026-10-24T23:07:46.6654362Z Updating files: 13% (833/6402) 2026-10-24T23:07:46.6670525Z Updating files: 14% (897/6402) 2026-10-24T23:07:46.6688205Z Updating files: 15% (961/6402) 2026-10-24T23:07:46.6706640Z Updating files: 16% (1025/6402) 2026-10-24T23:07:46.6720886Z Updating files: 17% (1089/6402) 2026-10-24T23:07:46.6738914Z Updating files: 18% (1153/6402) 2026-10-24T23:07:46.6753512Z Updating files: 19% (1217/6402) 2026-10-24T23:07:46.6777360Z Updating files: 20% (1281/6402) 2026-10-24T23:07:46.6793490Z Updating files: 21% (1345/6402) 2026-10-24T23:07:46.6812486Z Updating files: 22% (1409/6402) 2026-10-24T23:07:46.6825533Z Updating files: 23% (1473/6402) 2026-10-24T23:07:46.6839490Z Updating files: 24% (1537/6402) 2026-10-24T23:07:46.6854891Z Updating files: 25% (1601/6402) 2026-10-24T23:07:46.6868617Z Updating files: 26% (1665/6402) 2026-10-24T23:07:46.6881205Z Updating files: 27% (1729/6402) 2026-10-24T23:07:46.6900781Z Updating files: 28% (1793/6402) 2026-10-24T23:07:46.6933655Z Updating files: 29% (1857/6402) 2026-10-24T23:07:46.6954780Z Updating files: 30% (1921/6402) 2026-10-24T23:07:46.6977725Z Updating files: 31% (1985/6402) 2026-10-24T23:07:46.7007208Z Updating files: 32% (2049/6402) 2026-10-24T23:07:46.7036146Z Updating files: 33% (2113/6402) 2026-10-24T23:07:46.7104319Z Updating files: 34% (2177/6402) 2026-10-24T23:07:46.7163640Z Updating files: 35% (2241/6402) 2026-10-24T23:07:46.7198411Z Updating files: 36% (2305/6402) 2026-10-24T23:07:46.7229769Z Updating files: 37% (2369/6402) 2026-10-24T23:07:46.7272691Z Updating files: 38% (2433/6402) 2026-10-24T23:07:46.7299079Z Updating files: 39% (2497/6402) 2026-10-24T23:07:46.7327924Z Updating files: 40% (2561/6402) 2026-10-24T23:07:46.7353586Z Updating files: 41% (2625/6402) 2026-10-24T23:07:46.7367918Z Updating files: 42% (2689/6402) 2026-10-24T23:07:46.7377703Z Updating files: 43% (2753/6402) 2026-10-24T23:07:46.7406902Z Updating files: 44% (2817/6402) 2026-10-24T23:07:46.7433585Z Updating files: 45% (2881/6402) 2026-10-24T23:07:46.7459846Z Updating files: 46% (2945/6402) 2026-10-24T23:07:46.7484769Z Updating files: 47% (3009/6402) 2026-10-24T23:07:46.7511213Z Updating files: 48% (3073/6402) 2026-10-24T23:07:46.7548275Z Updating files: 49% (3137/6402) 2026-10-24T23:07:46.7576269Z Updating files: 50% (3201/6402) 2026-10-24T23:07:46.7591389Z Updating files: 51% (3266/6402) 2026-10-24T23:07:46.7625917Z Updating files: 52% (3330/6402) 2026-10-24T23:07:46.7652935Z Updating files: 53% (3394/6402) 2026-10-24T23:07:46.7671509Z Updating files: 54% (3458/6402) 2026-10-24T23:07:46.7693207Z Updating files: 55% (3522/6402) 2026-10-24T23:07:46.7708012Z Updating files: 56% (3586/6402) 2026-10-24T23:07:46.7726758Z Updating files: 57% (3650/6402) 2026-10-24T23:07:46.7743735Z Updating files: 58% (3714/6402) 2026-10-24T23:07:46.8098022Z Updating files: 59% (3778/6402) 2026-10-24T23:07:46.8113140Z Updating files: 60% (3842/6402) 2026-10-24T23:07:46.8132621Z Updating files: 61% (3906/6402) 2026-10-24T23:07:46.8149983Z Updating files: 62% (3970/6402) 2026-10-24T23:07:46.8171309Z Updating files: 63% (4034/6402) 2026-10-24T23:07:46.8197640Z Updating files: 64% (4098/6402) 2026-10-24T23:07:46.8216621Z Updating files: 65% (4162/6402) 2026-10-24T23:07:46.8233043Z Updating files: 66% (4226/6402) 2026-10-24T23:07:46.8255312Z Updating files: 67% (4290/6402) 2026-10-24T23:07:46.8269351Z Updating files: 68% (4354/6402) 2026-10-24T23:07:46.8286309Z Updating files: 69% (4418/6402) 2026-10-24T23:07:46.8298694Z Updating files: 70% (4482/6402) 2026-10-24T23:07:46.8316485Z Updating files: 71% (4546/6402) 2026-10-24T23:07:46.8328803Z Updating files: 72% (4610/6402) 2026-10-24T23:07:46.8378305Z Updating files: 73% (4674/6402) 2026-10-24T23:07:46.8776226Z Updating files: 74% (4738/6402) 2026-10-24T23:07:46.8799490Z Updating files: 75% (4802/6402) 2026-10-24T23:07:46.8820696Z Updating files: 76% (4866/6402) 2026-10-24T23:07:46.8844591Z Updating files: 77% (4930/6402) 2026-10-24T23:07:46.8865116Z Updating files: 78% (4994/6402) 2026-10-24T23:07:46.8881907Z Updating files: 79% (5058/6402) 2026-10-24T23:07:46.8903163Z Updating files: 80% (5122/6402) 2026-10-24T23:07:46.8918988Z Updating files: 81% (5186/6402) 2026-10-24T23:07:46.8936206Z Updating files: 82% (5250/6402) 2026-10-24T23:07:46.8960471Z Updating files: 83% (5314/6402) 2026-10-24T23:07:46.8984560Z Updating files: 84% (5378/6402) 2026-10-24T23:07:46.9001363Z Updating files: 85% (5442/6402) 2026-10-24T23:07:46.9025420Z Updating files: 86% (5506/6402) 2026-10-24T23:07:46.9094897Z Updating files: 87% (5570/6402) 2026-10-24T23:07:46.9123524Z Updating files: 88% (5634/6402) 2026-10-24T23:07:46.9142323Z Updating files: 89% (5698/6402) 2026-10-24T23:07:46.9171977Z Updating files: 90% (5762/6402) 2026-10-24T23:07:46.9199778Z Updating files: 91% (5826/6402) 2026-10-24T23:07:46.9214195Z Updating files: 92% (5890/6402) 2026-10-24T23:07:46.9236257Z Updating files: 93% (5954/6402) 2026-10-24T23:07:46.9255728Z Updating files: 94% (6018/6402) 2026-10-24T23:07:46.9278582Z Updating files: 95% (6082/6402) 2026-10-24T23:07:46.9332628Z Updating files: 96% (6146/6402) 2026-10-24T23:07:46.9354981Z Updating files: 97% (6210/6402) 2026-10-24T23:07:46.9399991Z Updating files: 98% (6274/6402) 2026-10-24T23:07:46.9418935Z Updating files: 99% (6338/6402) 2026-10-24T23:07:46.9419172Z Updating files: 100% (6402/6402) 2026-10-24T23:07:46.9419333Z Updating files: 100% (6402/6402), done. 2026-10-24T23:07:46.9564248Z Note: switching to 'refs/remotes/pull/24584/merge'. 2026-10-24T23:07:46.9564428Z 2026-10-24T23:07:46.9564582Z You are in 'detached HEAD' state. You can look around, make experimental 2026-10-24T23:07:46.9564915Z changes and commit them, and you can discard any commits you make in this 2026-10-24T23:07:46.9565243Z state without impacting any branches by switching back to a branch. 2026-10-24T23:07:46.9565421Z 2026-10-24T23:07:46.9565567Z If you want to create a new branch to retain commits you create, you may 2026-10-24T23:07:46.9565884Z do so (now or later) by using -c with the switch command. Example: 2026-10-24T23:07:46.9566055Z 2026-10-24T23:07:46.9566158Z git switch -c 2026-10-24T23:07:46.9566284Z 2026-10-24T23:07:46.9566376Z Or undo this operation with: 2026-10-24T23:07:46.9566522Z 2026-10-24T23:07:46.9566611Z git switch - 2026-10-24T23:07:46.9566715Z 2026-10-24T23:07:46.9566874Z Turn off this advice by setting config variable advice.detachedHead to false 2026-10-24T23:07:46.9567074Z 2026-10-24T23:07:46.9567320Z HEAD is now at 3108d36 Merge e8058c32bac198a471de72f678e570efc0ba38e5 into 3cc31ed27c8956b36cee35a50509fb7c6869592b 2026-10-24T23:07:46.9576982Z ##[endgroup] 2026-10-24T23:07:46.9607854Z [command]/usr/local/bin/git log -1 --format=%H 2026-10-24T23:07:46.9629121Z 3108d3658579ff7e097eae114bbfe2aa7e9dc0e6 2026-10-24T23:07:46.9730205Z ##[group]Run files="$(git ls-files .github/pr-assets)" 2026-10-24T23:07:46.9730522Z files="$(git ls-files .github/pr-assets)" 2026-10-24T23:07:46.9730724Z if test -n "$files"; then 2026-10-24T23:07:46.9730957Z  printf 'PR evidence must be uploaded to GitHub, not committed:\n%s\n' "$files" >&2 2026-10-24T23:07:46.9731186Z  exit 1 2026-10-24T23:07:46.9731312Z fi 2026-10-24T23:07:46.9743912Z shell: /usr/bin/bash -e {0} 2026-10-24T23:07:46.9744069Z env: 2026-10-24T23:07:46.9744221Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 141 2026-10-24T23:07:46.9744387Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 406 2026-10-24T23:07:46.9744550Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T23:07:46.9744698Z ##[endgroup] 2026-10-24T23:07:46.9883985Z Prepare all required actions 2026-10-24T23:07:46.9884317Z Getting action download info 2026-10-24T23:07:47.0844376Z Download action repository 'voidzero-dev/setup-vp@v1' (SHA:250f29ce396baf5e8f24498e17c0dfdebabc26eb) 2026-10-24T23:07:47.1846689Z ##[group]Run ./.github/actions/setup-ci-deps 2026-10-24T23:07:47.1846973Z env: 2026-10-24T23:07:47.1847165Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 141 2026-10-24T23:07:47.1847332Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 406 2026-10-24T23:07:47.1847492Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T23:07:47.1847645Z ##[endgroup] 2026-10-24T23:07:47.1942037Z ##[start-action display=Resolve Vite+ version;id=__self.vp] 2026-10-24T23:07:47.1962365Z ##[group]Run echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-24T23:07:47.1962871Z echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-24T23:07:47.1963409Z echo "node=$(jq -r '.engines.node' package.json)" >> "$GITHUB_OUTPUT" 2026-10-24T23:07:47.1963857Z echo "pnpm=$(jq -r '.packageManager' package.json)" >> "$GITHUB_OUTPUT" 2026-10-24T23:07:47.1977488Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T23:07:47.1977708Z env: 2026-10-24T23:07:47.1977858Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 141 2026-10-24T23:07:47.1978026Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 406 2026-10-24T23:07:47.1978191Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T23:07:47.1978397Z ##[endgroup] 2026-10-24T23:07:47.2050488Z ##[end-action id=__self.vp;outcome=success;conclusion=success;duration_ms=10] 2026-10-24T23:07:47.2051836Z ##[start-action display=Cache Vite+;id=__self.vp_cache] 2026-10-24T23:07:47.2097074Z ##[group]Run actions/cache@v6 2026-10-24T23:07:47.2097232Z with: 2026-10-24T23:07:47.2097363Z path: ~/.vite-plus 2026-10-24T23:07:47.2097547Z key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T23:07:47.2097769Z enableCrossOsArchive: false 2026-10-24T23:07:47.2097921Z fail-on-cache-miss: false 2026-10-24T23:07:47.2098070Z lookup-only: false 2026-10-24T23:07:47.2098200Z save-always: false 2026-10-24T23:07:47.2098334Z env: 2026-10-24T23:07:47.2098464Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 141 2026-10-24T23:07:47.2098694Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 406 2026-10-24T23:07:47.2098863Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T23:07:47.2099029Z ##[endgroup] 2026-10-24T23:07:47.3993565Z Cache hit for: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T23:07:47.7661961Z Received 170349591 of 170349591 (100.0%), 469.5 MBs/sec 2026-10-24T23:07:47.7663151Z Cache Size: ~162 MB (170349591 B) 2026-10-24T23:07:47.7689994Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/88c42748-cf71-4841-a9c6-f294609c8982/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T23:07:48.3978048Z Cache restored successfully 2026-10-24T23:07:48.4113022Z Cache restored from key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T23:07:48.4185355Z ##[end-action id=__self.vp_cache;outcome=success;conclusion=success;duration_ms=1213] 2026-10-24T23:07:48.4187709Z ##[start-action display=Use cached Vite+;id=__self.__run] 2026-10-24T23:07:48.4206877Z ##[group]Run echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-24T23:07:48.4207096Z echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-24T23:07:48.4207276Z "$HOME/.vite-plus/bin/vp" env use "26.12.1" 2026-10-24T23:07:48.4219997Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T23:07:48.4220169Z env: 2026-10-24T23:07:48.4220288Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 141 2026-10-24T23:07:48.4220437Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 406 2026-10-24T23:07:48.4220596Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T23:07:48.4220732Z ##[endgroup] 2026-10-24T23:07:48.4257175Z Using Node.js v26.12.1 (resolved from 26.12.1) 2026-10-24T23:07:48.4263754Z ##[end-action id=__self.__run;outcome=success;conclusion=success;duration_ms=7] 2026-10-24T23:07:48.4264994Z ##[start-action display=Setup Vite+;id=__self.__voidzero-dev_setup-vp] 2026-10-24T23:07:48.4268634Z ##[end-action id=__self.__voidzero-dev_setup-vp;outcome=skipped;conclusion=skipped;duration_ms=0] 2026-10-24T23:07:48.4269673Z ##[start-action display=Resolve pnpm store path;id=__self.pnpm_store] 2026-10-24T23:07:48.4280058Z ##[group]Run store_path="$(vp pm cache dir)" 2026-10-24T23:07:48.4280233Z store_path="$(vp pm cache dir)" 2026-10-24T23:07:48.4280396Z echo "path=$store_path" >> "$GITHUB_OUTPUT" 2026-10-24T23:07:48.4291870Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T23:07:48.4292049Z env: 2026-10-24T23:07:48.4292179Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 141 2026-10-24T23:07:48.4292467Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 406 2026-10-24T23:07:48.4292606Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T23:07:48.4292748Z ##[endgroup] 2026-10-24T23:07:48.4415894Z ##[end-action id=__self.pnpm_store;outcome=success;conclusion=success;duration_ms=14] 2026-10-24T23:07:48.4417178Z ##[start-action display=Cache full pnpm store;id=__self.__actions_cache] 2026-10-24T23:07:48.4728425Z ##[group]Run actions/cache@v6 2026-10-24T23:07:48.4728580Z with: 2026-10-24T23:07:48.4728702Z path: /home/runner/.local/share/pnpm/store/v11 2026-10-24T23:07:48.4728959Z key: pnpm-full-v1-Linux-X64-bab31c3827e90e1352d302da4c761fd1b91963ae565f5f0ea70972d0942af1f6 2026-10-24T23:07:48.4729201Z restore-keys: pnpm-full-v1-Linux-X64- 2026-10-24T23:07:48.4729349Z enableCrossOsArchive: false 2026-10-24T23:07:48.4729476Z fail-on-cache-miss: false 2026-10-24T23:07:48.4729612Z lookup-only: false 2026-10-24T23:07:48.4729724Z save-always: false 2026-10-24T23:07:48.4729849Z env: 2026-10-24T23:07:48.4729956Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 141 2026-10-24T23:07:48.4730101Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 406 2026-10-24T23:07:48.4730240Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T23:07:48.4730371Z ##[endgroup] 2026-10-24T23:07:48.6570005Z Cache hit for: pnpm-full-v1-Linux-X64-bab31c3827e90e1352d302da4c761fd1b91963ae565f5f0ea70972d0942af1f6 2026-10-24T23:07:49.7123354Z Received 671088640 of 995395870 (67.4%), 616.0 MBs/sec 2026-10-24T23:07:50.1886177Z Received 995395870 of 995395870 (100.0%), 626.6 MBs/sec 2026-10-24T23:07:50.1886845Z Cache Size: ~949 MB (995395870 B) 2026-10-24T23:07:50.1931980Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/949d45ce-8c20-4e78-bed3-2e1712533611/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T23:07:55.2503291Z Cache restored successfully 2026-10-24T23:07:55.2951819Z Cache restored from key: pnpm-full-v1-Linux-X64-bab31c3827e90e1352d302da4c761fd1b91963ae565f5f0ea70972d0942af1f6 2026-10-24T23:07:55.3014553Z ##[end-action id=__self.__actions_cache;outcome=success;conclusion=success;duration_ms=6859] 2026-10-24T23:07:55.3016498Z ##[start-action display=Install dependencies;id=__self.__run_2] 2026-10-24T23:07:55.3027476Z ##[group]Run vp install 2026-10-24T23:07:55.3027615Z vp install 2026-10-24T23:07:55.3039724Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T23:07:55.3039890Z env: 2026-10-24T23:07:55.3040004Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 141 2026-10-24T23:07:55.3040147Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 406 2026-10-24T23:07:55.3040288Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T23:07:55.3040421Z ##[endgroup] 2026-10-24T23:07:55.3329967Z Scope: all 34 workspace projects 2026-10-24T23:07:55.4322950Z ? Verifying lockfile against supply-chain policies (2088 entries)... 2026-10-24T23:07:55.6819919Z Packages are hard linked from the content-addressable store to the virtual store. 2026-10-24T23:07:55.6820275Z Content-addressable store is at: /home/runner/.local/share/pnpm/store/v11 2026-10-24T23:07:55.6820515Z Virtual store is at: node_modules/.pnpm 2026-10-24T23:07:57.9218371Z ✓ Lockfile passes supply-chain policies (2088 entries in 2.5s) 2026-10-24T23:07:57.9218631Z Lockfile is up to date, resolution step is skipped 2026-10-24T23:07:57.9393612Z Packages: +1721 2026-10-24T23:07:57.9393807Z ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2026-10-24T23:07:57.9696290Z Progress: resolved 1721, reused 1718, downloaded 0, added 1721, done 2026-10-24T23:07:58.8226877Z . prepare$ vp config --no-agent 2026-10-24T23:07:58.9105793Z . prepare: Done 2026-10-24T23:07:58.9118689Z 2026-10-24T23:07:58.9118821Z devDependencies: 2026-10-24T23:07:58.9118964Z + @coderabbitai/config 1.1.0 2026-10-24T23:07:58.9119117Z + @shadcn/lint 0.1.5 2026-10-24T23:07:58.9119299Z + @types/node 24.12.4 2026-10-24T23:07:58.9119421Z + knip 6.34.0 2026-10-24T23:07:58.9119552Z + typescript <- @tsc-rs/typescript 0.8.0 2026-10-24T23:07:58.9119689Z + vite-plus 1.3.0 2026-10-24T23:07:58.9119753Z 2026-10-24T23:07:58.9127597Z Done in 3.6s using pnpm v12.14.0 2026-10-24T23:07:58.9265398Z ##[end-action id=__self.__run_2;outcome=success;conclusion=success;duration_ms=3624] 2026-10-24T23:07:58.9870891Z ##[group]Run actions/cache@v6 2026-10-24T23:07:58.9871050Z with: 2026-10-24T23:07:58.9871152Z path: ~/.cache/electron 2026-10-24T23:07:58.9871372Z key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T23:07:58.9871601Z enableCrossOsArchive: false 2026-10-24T23:07:58.9871729Z fail-on-cache-miss: false 2026-10-24T23:07:58.9871850Z lookup-only: false 2026-10-24T23:07:58.9871961Z save-always: false 2026-10-24T23:07:58.9872064Z env: 2026-10-24T23:07:58.9872170Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 141 2026-10-24T23:07:58.9872311Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 406 2026-10-24T23:07:58.9872468Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T23:07:58.9872597Z ##[endgroup] 2026-10-24T23:07:59.1779063Z Cache hit for: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T23:07:59.4137530Z Received 122906203 of 122906203 (100.0%), 535.2 MBs/sec 2026-10-24T23:07:59.4139118Z Cache Size: ~117 MB (122906203 B) 2026-10-24T23:07:59.4159382Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/952a58ba-ee1b-4fd2-869c-d15b7872b084/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T23:07:59.4980623Z Cache restored successfully 2026-10-24T23:07:59.5341516Z Cache restored from key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T23:07:59.5457173Z ##[group]Run vp run --filter @t3tools/desktop ensure:electron 2026-10-24T23:07:59.5457481Z vp run --filter @t3tools/desktop ensure:electron 2026-10-24T23:07:59.5475080Z shell: /usr/bin/bash -e {0} 2026-10-24T23:07:59.5475257Z env: 2026-10-24T23:07:59.5475612Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 141 2026-10-24T23:07:59.5475831Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 406 2026-10-24T23:07:59.5476092Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T23:07:59.5476334Z ##[endgroup] 2026-10-24T23:07:59.7196078Z ~/apps/desktop$ node scripts/ensure-electron-runtime.mjs ⊘ cache disabled 2026-10-24T23:08:00.2615829Z /home/runner/_work/t3code/t3code/node_modules/.pnpm/electron@44.9.3_supports-color@8.1.1/node_modules/electron/dist/electron 2026-10-24T23:08:00.2631574Z 2026-10-24T23:08:00.2707913Z ##[group]Run vp run knip:check 2026-10-24T23:08:00.2708085Z vp run knip:check 2026-10-24T23:08:00.2720447Z shell: /usr/bin/bash -e {0} 2026-10-24T23:08:00.2720570Z env: 2026-10-24T23:08:00.2720682Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 141 2026-10-24T23:08:00.2720830Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 406 2026-10-24T23:08:00.2720970Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T23:08:00.2721103Z ##[endgroup] 2026-10-24T23:08:00.4097861Z $ knip --include files,dependencies --no-config-hints ⊘ cache disabled 2026-10-24T23:08:03.9542001Z 2026-10-24T23:08:03.9546275Z $ 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-definitions --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-24T23:08:11.8246204Z 2026-10-24T23:08:11.8247884Z --- 2026-10-24T23:08:11.8248223Z vp run: 2/2 successful. (Run `vp run --last-details` for full details) 2026-10-24T23:08:11.8313598Z ##[group]Run vp run --filter @t3tools/source-control-github generate --check 2026-10-24T23:08:11.8313874Z vp run --filter @t3tools/source-control-github generate --check 2026-10-24T23:08:11.8326502Z shell: /usr/bin/bash -e {0} 2026-10-24T23:08:11.8326639Z env: 2026-10-24T23:08:11.8326755Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 141 2026-10-24T23:08:11.8326907Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 406 2026-10-24T23:08:11.8327047Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T23:08:11.8327180Z ##[endgroup] 2026-10-24T23:08:11.9778828Z ~/packages/source-control-github$ graphqlgen --check ⊘ cache disabled 2026-10-24T23:08:12.1538353Z 2026-10-24T23:08:12.1601589Z ##[group]Run vp run --filter t3 generate --check 2026-10-24T23:08:12.1601796Z vp run --filter t3 generate --check 2026-10-24T23:08:12.1614189Z shell: /usr/bin/bash -e {0} 2026-10-24T23:08:12.1614312Z env: 2026-10-24T23:08:12.1614436Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 141 2026-10-24T23:08:12.1614580Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 406 2026-10-24T23:08:12.1614719Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T23:08:12.1614850Z ##[endgroup] 2026-10-24T23:08:12.2997757Z ~/apps/server$ graphqlgen --check ⊘ cache disabled 2026-10-24T23:08:12.4446367Z 2026-10-24T23:08:12.4513657Z ##[group]Run vp check 2026-10-24T23:08:12.4513810Z vp check 2026-10-24T23:08:12.4525876Z shell: /usr/bin/bash -e {0} 2026-10-24T23:08:12.4526002Z env: 2026-10-24T23:08:12.4526108Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 141 2026-10-24T23:08:12.4526251Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 406 2026-10-24T23:08:12.4526390Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T23:08:12.4526522Z ##[endgroup] 2026-10-24T23:08:12.9858649Z pass: All 5751 files are correctly formatted (399ms, 8 threads) 2026-10-24T23:08:17.9817683Z warn: Lint warnings found 2026-10-24T23:08:17.9818481Z ⚠ eslint(no-unused-vars): Identifier 'Image' is imported but never used. 2026-10-24T23:08:17.9818855Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:17:10] 2026-10-24T23:08:17.9819182Z 16 │ import type { NativeSyntheticEvent, ViewProps } from "react-native"; 2026-10-24T23:08:17.9819457Z 17 │ import { Image, Platform, StyleSheet } from "react-native"; 2026-10-24T23:08:17.9819676Z ·  ──┬── 2026-10-24T23:08:17.9819908Z · ╰── 'Image' is imported here 2026-10-24T23:08:17.9820091Z 18 │ 2026-10-24T23:08:17.9820201Z ╰──── 2026-10-24T23:08:17.9820357Z  help: Consider removing this import. 2026-10-24T23:08:17.9820475Z 2026-10-24T23:08:17.9820694Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T23:08:17.9821039Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:229:6] 2026-10-24T23:08:17.9821346Z 225 │ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents( 2026-10-24T23:08:17.9821611Z 226 │ nativeEventSnapshotsRef.current, 2026-10-24T23:08:17.9821803Z ·  ───────────┬─────────── 2026-10-24T23:08:17.9822400Z · ╰── 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-24T23:08:17.9822900Z 227 │ mostRecentEventCount, 2026-10-24T23:08:17.9823051Z 228 │ ); 2026-10-24T23:08:17.9823233Z 229 │ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]); 2026-10-24T23:08:17.9823510Z ·  ──────────────────────────┬────────────────────────── 2026-10-24T23:08:17.9823834Z · ╰── This dependency list is missing values used by the callback 2026-10-24T23:08:17.9824098Z 230 │ const assumedValue = props.value; 2026-10-24T23:08:17.9824249Z ╰──── 2026-10-24T23:08:17.9824472Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T23:08:17.9824962Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:17.9825253Z 2026-10-24T23:08:17.9825463Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T23:08:17.9825799Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:237:7] 2026-10-24T23:08:17.9826097Z 236 │ nativeEventSnapshotsRef.current = assumeComposerControlledState( 2026-10-24T23:08:17.9826339Z 237 │ nativeEventSnapshotsRef.current, 2026-10-24T23:08:17.9826622Z ·  ───────────┬─────────── 2026-10-24T23:08:17.9827165Z · ╰── 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-24T23:08:17.9827926Z 238 │ controlledEventCount, 2026-10-24T23:08:17.9828083Z 239 │ assumedValue, 2026-10-24T23:08:17.9828219Z 240 │ ); 2026-10-24T23:08:17.9828439Z 241 │ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]); 2026-10-24T23:08:17.9828898Z ·  ───────────┬────────── 2026-10-24T23:08:17.9829281Z · ╰── Unnecessary dependency `controlledDocumentJson` 2026-10-24T23:08:17.9829553Z 242 │ const acceptNativeEvent = useCallback( 2026-10-24T23:08:17.9829712Z ╰──── 2026-10-24T23:08:17.9830214Z  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-24T23:08:17.9831187Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:17.9841798Z 2026-10-24T23:08:17.9842040Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:08:17.9842362Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29] 2026-10-24T23:08:17.9842642Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T23:08:17.9842897Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T23:08:17.9843144Z ·  ─────────────┬──────────── 2026-10-24T23:08:17.9843430Z · ╰── Cannot access ref value during render 2026-10-24T23:08:17.9843643Z 163 │ }); 2026-10-24T23:08:17.9843767Z ╰──── 2026-10-24T23:08:17.9844274Z  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-24T23:08:17.9844980Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:08:17.9845250Z 2026-10-24T23:08:17.9845394Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:08:17.9845681Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29] 2026-10-24T23:08:17.9845946Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T23:08:17.9846188Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T23:08:17.9846424Z ·  ─────────────┬──────────── 2026-10-24T23:08:17.9846752Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T23:08:17.9846996Z 163 │ }); 2026-10-24T23:08:17.9847119Z ╰──── 2026-10-24T23:08:17.9847627Z  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-24T23:08:17.9848311Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:08:17.9848579Z 2026-10-24T23:08:17.9848721Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:08:17.9849008Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:164:23] 2026-10-24T23:08:17.9849204Z 163 │ }); 2026-10-24T23:08:17.9849354Z 164 │ confirmedTokensRef.current = tokens; 2026-10-24T23:08:17.9849725Z ·  ─────────┬────────────┬─── 2026-10-24T23:08:17.9850111Z · │ ╰── Cannot update ref value during render 2026-10-24T23:08:17.9850395Z · ╰── This value is a ref 2026-10-24T23:08:17.9850588Z 165 │ return JSON.stringify( 2026-10-24T23:08:17.9850725Z ╰──── 2026-10-24T23:08:17.9851223Z  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-24T23:08:17.9851902Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:08:17.9852201Z 2026-10-24T23:08:17.9852349Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:08:17.9852636Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:206:5] 2026-10-24T23:08:17.9852848Z 205 │ mostRecentEventCount, 2026-10-24T23:08:17.9853021Z 206 │ nativeEventSnapshotsRef.current, 2026-10-24T23:08:17.9853231Z ·  ───────────────┬─────────────── 2026-10-24T23:08:17.9853511Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T23:08:17.9853740Z 207 │ ); 2026-10-24T23:08:17.9853851Z ╰──── 2026-10-24T23:08:17.9854355Z  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-24T23:08:17.9855033Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:08:17.9855302Z 2026-10-24T23:08:17.9855442Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:08:17.9855723Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:212:5] 2026-10-24T23:08:17.9855941Z 211 │ mostRecentEventCount, 2026-10-24T23:08:17.9856111Z 212 │ nativeEventSnapshotsRef.current, 2026-10-24T23:08:17.9856317Z ·  ───────────────┬─────────────── 2026-10-24T23:08:17.9856596Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T23:08:17.9856821Z 213 │ ); 2026-10-24T23:08:17.9856929Z ╰──── 2026-10-24T23:08:17.9857427Z  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-24T23:08:17.9858108Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:08:17.9858381Z 2026-10-24T23:08:17.9858566Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T23:08:17.9858878Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:197:6] 2026-10-24T23:08:17.9859144Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T23:08:17.9859388Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T23:08:17.9859716Z ·  ─────────┬──────── 2026-10-24T23:08:17.9860341Z · ╰── Missing dependency `confirmedTokensRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T23:08:17.9860796Z 163 │ }); 2026-10-24T23:08:17.9860949Z 164 │ confirmedTokensRef.current = tokens; 2026-10-24T23:08:17.9861131Z 165 │ return JSON.stringify( 2026-10-24T23:08:17.9861382Z 166 │ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => { 2026-10-24T23:08:17.9861624Z 167 │ const record = 2026-10-24T23:08:17.9861785Z 168 │ token.type === "context" 2026-10-24T23:08:17.9862070Z 169 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-24T23:08:17.9862306Z 170 │ : undefined; 2026-10-24T23:08:17.9862498Z 171 │ const presentation = contextChipPresentation( 2026-10-24T23:08:17.9862731Z 172 │ token.type === "context" ? token.kind : token.type, 2026-10-24T23:08:17.9862915Z 173 │ record, 2026-10-24T23:08:17.9863052Z 174 │ ); 2026-10-24T23:08:17.9863203Z 175 │ const icon = contextChipIcon( 2026-10-24T23:08:17.9863371Z 176 │ presentation, 2026-10-24T23:08:17.9863593Z 177 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-24T23:08:17.9863801Z 178 │ ); 2026-10-24T23:08:17.9863930Z 179 │ return { 2026-10-24T23:08:17.9864073Z 180 │ type: token.type, 2026-10-24T23:08:17.9864235Z 181 │ source: token.source, 2026-10-24T23:08:17.9864396Z 182 │ start: token.start, 2026-10-24T23:08:17.9864558Z 183 │ end: token.end, 2026-10-24T23:08:17.9864791Z 184 │ accent: contextChipAccent(presentation.accent, theme, chipTextColor), 2026-10-24T23:08:17.9865007Z 185 │ label: 2026-10-24T23:08:17.9865156Z 186 │ token.type === "skill" 2026-10-24T23:08:17.9865362Z 187 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-24T23:08:17.9865565Z 188 │ : token.type === "context" 2026-10-24T23:08:17.9865893Z 189 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-24T23:08:17.9866199Z 190 │ : basename(token.value), 2026-10-24T23:08:17.9866593Z 191 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-24T23:08:17.9866835Z 192 │ iconUri: contextChipIconUri(icon), 2026-10-24T23:08:17.9867035Z 193 │ tintsIcon: icon.kind === "chip", 2026-10-24T23:08:17.9867313Z 194 │ }; 2026-10-24T23:08:17.9867457Z 195 │ }), 2026-10-24T23:08:17.9867577Z 196 │ ); 2026-10-24T23:08:17.9867776Z 197 │ }, [props.value, props.context, skillLabels, theme, chipTextColor]); 2026-10-24T23:08:17.9868066Z ·  ───────────────────────────────┬─────────────────────────────── 2026-10-24T23:08:17.9868411Z · ╰── This dependency list is missing values used by the callback 2026-10-24T23:08:17.9868733Z 198 │ // Every render resolves against the snapshot history, so a render whose 2026-10-24T23:08:17.9868935Z ╰──── 2026-10-24T23:08:17.9869191Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T23:08:17.9869822Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:17.9870181Z 2026-10-24T23:08:17.9870623Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T23:08:17.9870950Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:259:5] 2026-10-24T23:08:17.9871224Z 251 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-24T23:08:17.9871471Z 252 │ nativeEventSnapshotsRef.current.push({ 2026-10-24T23:08:17.9871679Z ·  ───────────┬─────────── 2026-10-24T23:08:17.9872456Z · ╰── 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-24T23:08:17.9873103Z 253 │ eventCount: acknowledgedEventCount, 2026-10-24T23:08:17.9873291Z 254 │ value, 2026-10-24T23:08:17.9873448Z 255 │ selection: nextSelection, 2026-10-24T23:08:17.9873607Z 256 │ }); 2026-10-24T23:08:17.9873759Z 257 │ return acknowledgedEventCount; 2026-10-24T23:08:17.9873923Z 258 │ }, 2026-10-24T23:08:17.9874042Z 259 │ [], 2026-10-24T23:08:17.9874185Z ·  ─┬ 2026-10-24T23:08:17.9874461Z · ╰── This dependency list is missing values used by the callback 2026-10-24T23:08:17.9874691Z 260 │ ); 2026-10-24T23:08:17.9874808Z ╰──── 2026-10-24T23:08:17.9875072Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T23:08:17.9875606Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:17.9875906Z 2026-10-24T23:08:17.9876108Z ⚠ eslint(no-unused-vars): Type 'ThreadRunSummary' is imported but never used. 2026-10-24T23:08:17.9876406Z ╭─[apps/web/src/types.ts:22:3] 2026-10-24T23:08:17.9876585Z 21 │ EnvironmentThreadShell, 2026-10-24T23:08:17.9876740Z 22 │ ThreadRunSummary, 2026-10-24T23:08:17.9876901Z ·  ────────┬─────── 2026-10-24T23:08:17.9877137Z · ╰── 'ThreadRunSummary' is imported here 2026-10-24T23:08:17.9877349Z 23 │ ThreadRuntimeSummary, 2026-10-24T23:08:17.9877486Z ╰──── 2026-10-24T23:08:17.9877641Z  help: Consider removing this import. 2026-10-24T23:08:17.9877756Z 2026-10-24T23:08:17.9878163Z ⚠ typescript(no-extraneous-class): Unexpected class with only a constructor. 2026-10-24T23:08:17.9878566Z ╭─[apps/desktop/src/preview/Manager.test.ts:158:18] 2026-10-24T23:08:17.9878798Z 157 │ BrowserWindow: browserWindowConstructor, 2026-10-24T23:08:17.9879073Z 158 │ ╭─▶ ClipboardItem: class { 2026-10-24T23:08:17.9879361Z 159 │ │ constructor(data: Record) { 2026-10-24T23:08:17.9879620Z 160 │ │ clipboardItemConstructor(data); 2026-10-24T23:08:17.9879824Z 161 │ │ } 2026-10-24T23:08:17.9880042Z 162 │ ╰─▶ }, 2026-10-24T23:08:17.9880236Z 163 │ clipboard: { 2026-10-24T23:08:17.9880373Z ╰──── 2026-10-24T23:08:17.9880606Z  help: Try replacing this class with a standalone function or deleting it entirely 2026-10-24T23:08:17.9880779Z 2026-10-24T23:08:17.9880980Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T23:08:17.9881309Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:231:6] 2026-10-24T23:08:17.9881616Z 227 │ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents( 2026-10-24T23:08:17.9881879Z 228 │ nativeEventSnapshotsRef.current, 2026-10-24T23:08:17.9882104Z ·  ───────────┬─────────── 2026-10-24T23:08:17.9882657Z · ╰── 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-24T23:08:17.9883137Z 229 │ mostRecentEventCount, 2026-10-24T23:08:17.9883288Z 230 │ ); 2026-10-24T23:08:17.9883475Z 231 │ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]); 2026-10-24T23:08:17.9883744Z ·  ──────────────────────────┬────────────────────────── 2026-10-24T23:08:17.9884069Z · ╰── This dependency list is missing values used by the callback 2026-10-24T23:08:17.9884338Z 232 │ const assumedValue = props.value; 2026-10-24T23:08:17.9884494Z ╰──── 2026-10-24T23:08:17.9884720Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T23:08:17.9885198Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:17.9885493Z 2026-10-24T23:08:17.9885707Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T23:08:17.9886050Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:239:7] 2026-10-24T23:08:17.9886336Z 238 │ nativeEventSnapshotsRef.current = assumeComposerControlledState( 2026-10-24T23:08:17.9886577Z 239 │ nativeEventSnapshotsRef.current, 2026-10-24T23:08:17.9886775Z ·  ───────────┬─────────── 2026-10-24T23:08:17.9887317Z · ╰── 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-24T23:08:17.9887788Z 240 │ controlledEventCount, 2026-10-24T23:08:17.9887941Z 241 │ assumedValue, 2026-10-24T23:08:17.9888169Z 242 │ ); 2026-10-24T23:08:17.9888469Z 243 │ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]); 2026-10-24T23:08:17.9888771Z ·  ───────────┬────────── 2026-10-24T23:08:17.9889106Z · ╰── Unnecessary dependency `controlledDocumentJson` 2026-10-24T23:08:17.9889387Z 244 │ const acceptNativeEvent = useCallback( 2026-10-24T23:08:17.9889547Z ╰──── 2026-10-24T23:08:17.9890013Z  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-24T23:08:17.9890692Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:17.9890985Z 2026-10-24T23:08:17.9891130Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:08:17.9891405Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:29] 2026-10-24T23:08:17.9891671Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T23:08:17.9891916Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T23:08:17.9892198Z ·  ─────────────┬──────────── 2026-10-24T23:08:17.9892483Z · ╰── Cannot access ref value during render 2026-10-24T23:08:17.9892695Z 165 │ }); 2026-10-24T23:08:17.9892811Z ╰──── 2026-10-24T23:08:17.9893323Z  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-24T23:08:17.9894015Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:08:17.9894286Z 2026-10-24T23:08:17.9894426Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:08:17.9894704Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:29] 2026-10-24T23:08:17.9894965Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T23:08:17.9895209Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T23:08:17.9895447Z ·  ─────────────┬──────────── 2026-10-24T23:08:17.9895768Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T23:08:17.9896010Z 165 │ }); 2026-10-24T23:08:17.9896125Z ╰──── 2026-10-24T23:08:17.9896626Z  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-24T23:08:17.9897311Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:08:17.9897585Z 2026-10-24T23:08:17.9897726Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:08:17.9898091Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:166:23] 2026-10-24T23:08:17.9898352Z 165 │ }); 2026-10-24T23:08:17.9898507Z 166 │ confirmedTokensRef.current = tokens; 2026-10-24T23:08:17.9898738Z ·  ─────────┬────────────┬─── 2026-10-24T23:08:17.9899046Z · │ ╰── Cannot update ref value during render 2026-10-24T23:08:17.9899340Z · ╰── This value is a ref 2026-10-24T23:08:17.9899533Z 167 │ return JSON.stringify( 2026-10-24T23:08:17.9899675Z ╰──── 2026-10-24T23:08:17.9900185Z  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-24T23:08:17.9900894Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:08:17.9901169Z 2026-10-24T23:08:17.9901310Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:08:17.9901592Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:208:5] 2026-10-24T23:08:17.9901802Z 207 │ mostRecentEventCount, 2026-10-24T23:08:17.9901979Z 208 │ nativeEventSnapshotsRef.current, 2026-10-24T23:08:17.9902234Z ·  ───────────────┬─────────────── 2026-10-24T23:08:17.9902523Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T23:08:17.9902750Z 209 │ ); 2026-10-24T23:08:17.9902860Z ╰──── 2026-10-24T23:08:17.9903374Z  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-24T23:08:17.9904066Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:08:17.9904339Z 2026-10-24T23:08:17.9904478Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:08:17.9904755Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:214:5] 2026-10-24T23:08:17.9904969Z 213 │ mostRecentEventCount, 2026-10-24T23:08:17.9905143Z 214 │ nativeEventSnapshotsRef.current, 2026-10-24T23:08:17.9905358Z ·  ───────────────┬─────────────── 2026-10-24T23:08:17.9905661Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T23:08:17.9905895Z 215 │ ); 2026-10-24T23:08:17.9906005Z ╰──── 2026-10-24T23:08:17.9906583Z  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-24T23:08:17.9907271Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:08:17.9907542Z 2026-10-24T23:08:17.9907727Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T23:08:17.9908038Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:199:6] 2026-10-24T23:08:17.9908423Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T23:08:17.9908735Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T23:08:17.9908969Z ·  ─────────┬──────── 2026-10-24T23:08:17.9909541Z · ╰── Missing dependency `confirmedTokensRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T23:08:17.9909998Z 165 │ }); 2026-10-24T23:08:17.9910149Z 166 │ confirmedTokensRef.current = tokens; 2026-10-24T23:08:17.9910326Z 167 │ return JSON.stringify( 2026-10-24T23:08:17.9910577Z 168 │ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => { 2026-10-24T23:08:17.9910821Z 169 │ const record = 2026-10-24T23:08:17.9910984Z 170 │ token.type === "context" 2026-10-24T23:08:17.9911244Z 171 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-24T23:08:17.9911467Z 172 │ : undefined; 2026-10-24T23:08:17.9911656Z 173 │ const presentation = contextChipPresentation( 2026-10-24T23:08:17.9911885Z 174 │ token.type === "context" ? token.kind : token.type, 2026-10-24T23:08:17.9912098Z 175 │ record, 2026-10-24T23:08:17.9912234Z 176 │ ); 2026-10-24T23:08:17.9912386Z 177 │ const icon = contextChipIcon( 2026-10-24T23:08:17.9912553Z 178 │ presentation, 2026-10-24T23:08:17.9912777Z 179 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-24T23:08:17.9912985Z 180 │ ); 2026-10-24T23:08:17.9913112Z 181 │ return { 2026-10-24T23:08:17.9913262Z 182 │ type: token.type, 2026-10-24T23:08:17.9913426Z 183 │ source: token.source, 2026-10-24T23:08:17.9913589Z 184 │ start: token.start, 2026-10-24T23:08:17.9913742Z 185 │ end: token.end, 2026-10-24T23:08:17.9913969Z 186 │ accent: contextChipAccent(presentation.accent, theme, chipTextColor), 2026-10-24T23:08:17.9914182Z 187 │ label: 2026-10-24T23:08:17.9914333Z 188 │ token.type === "skill" 2026-10-24T23:08:17.9914536Z 189 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-24T23:08:17.9914737Z 190 │ : token.type === "context" 2026-10-24T23:08:17.9915070Z 191 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-24T23:08:17.9915373Z 192 │ : basename(token.value), 2026-10-24T23:08:17.9915707Z 193 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-24T23:08:17.9916008Z 194 │ iconUri: contextChipIconUri(icon), 2026-10-24T23:08:17.9916202Z 195 │ tintsIcon: icon.kind === "chip", 2026-10-24T23:08:17.9916363Z 196 │ }; 2026-10-24T23:08:17.9916484Z 197 │ }), 2026-10-24T23:08:17.9916607Z 198 │ ); 2026-10-24T23:08:17.9916802Z 199 │ }, [props.value, props.context, skillLabels, theme, chipTextColor]); 2026-10-24T23:08:17.9917103Z ·  ───────────────────────────────┬─────────────────────────────── 2026-10-24T23:08:17.9917456Z · ╰── This dependency list is missing values used by the callback 2026-10-24T23:08:17.9917782Z 200 │ // Every render resolves against the snapshot history, so a render whose 2026-10-24T23:08:17.9917978Z ╰──── 2026-10-24T23:08:17.9918245Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T23:08:17.9918751Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:17.9919041Z 2026-10-24T23:08:17.9919224Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T23:08:17.9919537Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:261:5] 2026-10-24T23:08:17.9919804Z 253 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-24T23:08:17.9920043Z 254 │ nativeEventSnapshotsRef.current.push({ 2026-10-24T23:08:17.9920250Z ·  ───────────┬─────────── 2026-10-24T23:08:17.9920811Z · ╰── 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-24T23:08:17.9921311Z 255 │ eventCount: acknowledgedEventCount, 2026-10-24T23:08:17.9921478Z 256 │ value, 2026-10-24T23:08:17.9921628Z 257 │ selection: nextSelection, 2026-10-24T23:08:17.9921779Z 258 │ }); 2026-10-24T23:08:17.9921928Z 259 │ return acknowledgedEventCount; 2026-10-24T23:08:17.9922124Z 260 │ }, 2026-10-24T23:08:17.9922240Z 261 │ [], 2026-10-24T23:08:17.9922371Z ·  ─┬ 2026-10-24T23:08:17.9922633Z · ╰── This dependency list is missing values used by the callback 2026-10-24T23:08:17.9922861Z 262 │ ); 2026-10-24T23:08:17.9922971Z ╰──── 2026-10-24T23:08:17.9923232Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T23:08:17.9923738Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:17.9924028Z 2026-10-24T23:08:17.9924396Z ⚠ 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-24T23:08:17.9924850Z ╭─[packages/shared/src/otelEnvironment.ts:146:14] 2026-10-24T23:08:17.9925046Z 145 │ name, 2026-10-24T23:08:17.9925250Z 146 │ (raw) => Schema.decodeUnknownOption(OtlpProtocol)(raw.toLowerCase()), 2026-10-24T23:08:17.9925505Z ·  ────────────────────────── 2026-10-24T23:08:17.9925822Z 147 │ `${name} is not http/protobuf or http/json, ${NOT_EXPORTED}`, 2026-10-24T23:08:17.9926073Z ╰──── 2026-10-24T23:08:17.9926132Z 2026-10-24T23:08:17.9926280Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:08:17.9926547Z ╭─[apps/mobile/src/native/StackHeader.tsx:185:9] 2026-10-24T23:08:17.9926744Z 184 │ "options", 2026-10-24T23:08:17.9926919Z 185 │ latestOptionFunctionsRef.current, 2026-10-24T23:08:17.9927139Z ·  ────────────────┬─────────────── 2026-10-24T23:08:17.9927445Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T23:08:17.9927729Z 186 │ optionFunctionWrappersRef.current, 2026-10-24T23:08:17.9927892Z ╰──── 2026-10-24T23:08:17.9928415Z  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-24T23:08:17.9929114Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:08:17.9929390Z 2026-10-24T23:08:17.9929537Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:08:17.9929805Z ╭─[apps/mobile/src/native/StackHeader.tsx:186:9] 2026-10-24T23:08:17.9930028Z 185 │ latestOptionFunctionsRef.current, 2026-10-24T23:08:17.9930230Z 186 │ optionFunctionWrappersRef.current, 2026-10-24T23:08:17.9930452Z ·  ────────────────┬──────────────── 2026-10-24T23:08:17.9930762Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T23:08:17.9931042Z 187 │ ) as NativeStackNavigationOptions) 2026-10-24T23:08:17.9931200Z ╰──── 2026-10-24T23:08:17.9931712Z  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-24T23:08:17.9932445Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:08:17.9932721Z 2026-10-24T23:08:17.9933000Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T23:08:17.9933432Z ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:473:19] 2026-10-24T23:08:17.9933671Z 472 │ onFilters, 2026-10-24T23:08:17.9933814Z 473 │ authorOptions = [], 2026-10-24T23:08:17.9933981Z ·  ── 2026-10-24T23:08:17.9934140Z 474 │ labelOptions = [], 2026-10-24T23:08:17.9934273Z ╰──── 2026-10-24T23:08:17.9934649Z  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-24T23:08:17.9934944Z 2026-10-24T23:08:17.9935220Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T23:08:17.9935645Z ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:474:18] 2026-10-24T23:08:17.9935971Z 473 │ authorOptions = [], 2026-10-24T23:08:17.9936183Z 474 │ labelOptions = [], 2026-10-24T23:08:17.9936344Z ·  ── 2026-10-24T23:08:17.9936503Z 475 │ optionScope, 2026-10-24T23:08:17.9936631Z ╰──── 2026-10-24T23:08:17.9937000Z  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-24T23:08:17.9937301Z 2026-10-24T23:08:17.9937537Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T23:08:17.9937886Z ╭─[packages/shared/src/composerContextLegacySend.ts:19:45] 2026-10-24T23:08:17.9938160Z 18 │ const occurrences = collectComposerContextReferences(text); 2026-10-24T23:08:17.9938417Z 19 │ for (const occurrence of [...occurrences].reverse()) { 2026-10-24T23:08:17.9938651Z ·  ─────── 2026-10-24T23:08:17.9938890Z 20 │ const record = recordsById.get(occurrence.contextId); 2026-10-24T23:08:17.9939068Z ╰──── 2026-10-24T23:08:17.9939397Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T23:08:17.9939644Z 2026-10-24T23:08:17.9939854Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable. 2026-10-24T23:08:17.9940179Z ╭─[apps/web/src/contextMenuFallback.test.ts:38:9] 2026-10-24T23:08:17.9940379Z 37 │ get isConnected() { 2026-10-24T23:08:17.9940560Z 38 │ let current: FakeElement | null = this; 2026-10-24T23:08:17.9940744Z ·  ─────── 2026-10-24T23:08:17.9940913Z 39 │ while (current?.parent) { 2026-10-24T23:08:17.9941063Z ╰──── 2026-10-24T23:08:17.9941390Z  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-24T23:08:17.9941682Z 2026-10-24T23:08:17.9941831Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:08:17.9942175Z ╭─[apps/mobile/src/features/diffs/nativeReviewDiffSurface.ts:277:39] 2026-10-24T23:08:17.9942399Z 276 │ 2026-10-24T23:08:17.9942648Z 277 │ ╭─▶ return createElement(RawNativeView, { 2026-10-24T23:08:17.9942925Z 278 │ │ ...nativeProps, 2026-10-24T23:08:17.9943185Z 279 │ │ refreshEnabled: props.onPullToRefresh !== undefined, 2026-10-24T23:08:17.9943439Z 280 │ │ ref: nativeRef, 2026-10-24T23:08:17.9943680Z 281 │ ├─▶ }); 2026-10-24T23:08:17.9944059Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T23:08:17.9944335Z 282 │ } 2026-10-24T23:08:17.9944458Z ╰──── 2026-10-24T23:08:17.9944979Z  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-24T23:08:17.9945683Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:08:17.9945959Z 2026-10-24T23:08:17.9946273Z ⚠ eslint(no-unneeded-ternary): Unnecessary use of boolean literals in conditional expression 2026-10-24T23:08:17.9946923Z ╭─[packages/shared/src/serverSettings.test.ts:35:7] 2026-10-24T23:08:17.9947246Z 34 │ const fallback = fallbackTextGenerationModelSelection(providerInstances, (instanceId) => 2026-10-24T23:08:17.9947532Z 35 │ instanceId === configured ? true : false, 2026-10-24T23:08:17.9947763Z ·  ──────────────────────────────────────── 2026-10-24T23:08:17.9947941Z 36 │ ); 2026-10-24T23:08:17.9948060Z ╰──── 2026-10-24T23:08:17.9948212Z  help: Remove this ternary operator 2026-10-24T23:08:17.9948321Z 2026-10-24T23:08:17.9948510Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T23:08:17.9948820Z ╭─[apps/mobile/src/lib/useHoverGesture.ts:8:15] 2026-10-24T23:08:17.9949007Z 7 │ () => 2026-10-24T23:08:17.9949142Z 8 │ Gesture.Hover() 2026-10-24T23:08:17.9949307Z ·  ──┬── 2026-10-24T23:08:17.9949536Z · ╰── `Hover` may be a component 2026-10-24T23:08:17.9949755Z 9 │ .manualActivation(true) 2026-10-24T23:08:17.9949900Z ╰──── 2026-10-24T23:08:17.9950233Z  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-24T23:08:17.9950933Z  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-24T23:08:17.9951338Z 2026-10-24T23:08:17.9951543Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:08:17.9951902Z ╭─[apps/mobile/src/features/workspace/WorkspaceToolbar.ios.tsx:114:33] 2026-10-24T23:08:17.9952214Z 113 │ return () => cancelAnimationFrame(frame); 2026-10-24T23:08:17.9952426Z 114 │ }, [restoreSearch, tabActive, bottomSearch]); 2026-10-24T23:08:17.9952651Z ·  ──────┬───── 2026-10-24T23:08:17.9952934Z · ╰── Unnecessary dependency `bottomSearch` 2026-10-24T23:08:17.9953207Z 115 │ const composeButton = nativeToolbarCompose ? ( 2026-10-24T23:08:17.9953381Z ╰──── 2026-10-24T23:08:17.9953731Z  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-24T23:08:17.9954421Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:17.9954782Z 2026-10-24T23:08:17.9955008Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-24T23:08:17.9955348Z ╭─[apps/server/src/terminal/Manager.test.ts:731:31] 2026-10-24T23:08:17.9955541Z 730 │ ); 2026-10-24T23:08:17.9955784Z 731 │ const snapshot = events.filter((event) => event.type === "snapshot").at(-1)?.snapshot; 2026-10-24T23:08:17.9956056Z ·  ────── 2026-10-24T23:08:17.9956283Z 732 │ expect(snapshot?.history).toBe("aa😀\rEND"); 2026-10-24T23:08:17.9956455Z ╰──── 2026-10-24T23:08:17.9956683Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T23:08:17.9956861Z 2026-10-24T23:08:17.9957231Z ⚠ 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-24T23:08:17.9957694Z ╭─[apps/server/src/assets/AssetAccess.test.ts:975:35] 2026-10-24T23:08:17.9957983Z 974 │ // Every client and server release spells the resource this way on the wire. 2026-10-24T23:08:17.9958296Z 975 │ const { resource } = yield* Schema.decodeUnknownEffect(AssetCreateUrlInput)({ 2026-10-24T23:08:17.9958584Z ·  ────────────────────────── 2026-10-24T23:08:17.9958827Z 976 │ resource: { _tag: "github-media", cwd: "/repo", url }, 2026-10-24T23:08:17.9959007Z ╰──── 2026-10-24T23:08:17.9959064Z 2026-10-24T23:08:17.9959513Z ⚠ 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-24T23:08:17.9960045Z ╭─[apps/server/src/assets/AssetAccess.test.ts:1012:32] 2026-10-24T23:08:17.9960324Z 1011 │ expect(error._tag).toBe("AssetGitHubMediaUrlValidationError"); 2026-10-24T23:08:17.9960662Z 1012 │ const encoded = yield* Schema.encodeEffect(Schema.fromJsonString(AssetAccessError))(error); 2026-10-24T23:08:17.9960968Z ·  ─────────────────── 2026-10-24T23:08:17.9961186Z 1013 │ expect(encoded).not.toContain(url); 2026-10-24T23:08:17.9961352Z ╰──── 2026-10-24T23:08:17.9961412Z 2026-10-24T23:08:17.9961648Z ⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence. 2026-10-24T23:08:17.9962068Z ╭─[apps/web/src/components/pullRequest/pullRequestList.logic.ts:262:9] 2026-10-24T23:08:17.9962299Z 261 │ ): boolean { 2026-10-24T23:08:17.9962530Z 262 │ const labels = entry.labels.map((label) => label.name.trim().toLowerCase()); 2026-10-24T23:08:17.9962864Z ·  ───────────────────────────────────────────────────────────────────── 2026-10-24T23:08:17.9963173Z 263 │ const holds = (label: string) => labels.includes(label.trim().toLowerCase()); 2026-10-24T23:08:17.9963380Z ╰──── 2026-10-24T23:08:17.9963513Z  help: Switch to `Set` 2026-10-24T23:08:17.9963610Z 2026-10-24T23:08:17.9963856Z ⚠ eslint(no-unused-vars): Function 'normalizeTerminalContextSelection' is declared but never used. 2026-10-24T23:08:17.9964292Z ╭─[apps/web/src/lib/terminalContext.ts:56:10] 2026-10-24T23:08:17.9964532Z 55 │ 2026-10-24T23:08:17.9964691Z 56 │ function normalizeTerminalContextSelection( 2026-10-24T23:08:17.9964918Z ·  ────────────────┬──────────────── 2026-10-24T23:08:17.9965226Z · ╰── 'normalizeTerminalContextSelection' is declared here 2026-10-24T23:08:17.9965495Z 57 │ selection: TerminalContextSelection, 2026-10-24T23:08:17.9965652Z ╰──── 2026-10-24T23:08:17.9965817Z  help: Consider removing this declaration. 2026-10-24T23:08:17.9965939Z 2026-10-24T23:08:17.9966129Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T23:08:17.9966483Z ╭─[apps/web/src/components/pullRequest/PullRequestSummaryTab.tsx:818:17] 2026-10-24T23:08:17.9966724Z 817 │
= Layer.effectDiscard( 2026-10-24T23:08:17.9990893Z ·  ─────┬───── 2026-10-24T23:08:17.9991126Z · ╰── 'layerDaemon' is declared here 2026-10-24T23:08:17.9991427Z 915 │ runDaemon.pipe(Effect.forkScoped), 2026-10-24T23:08:17.9991624Z ╰──── 2026-10-24T23:08:17.9991785Z  help: Consider removing this declaration. 2026-10-24T23:08:17.9991903Z 2026-10-24T23:08:17.9992219Z ⚠ eslint(no-unused-vars): Variable 'revokeActiveMcpThread' is declared but never used. Unused variables should start with a '_'. 2026-10-24T23:08:17.9992619Z ╭─[apps/server/src/mcp/McpSessionRegistry.ts:218:7] 2026-10-24T23:08:17.9992812Z 217 │ 2026-10-24T23:08:17.9993024Z 218 │ const revokeActiveMcpThread = (threadId: ThreadId): Effect.Effect => 2026-10-24T23:08:17.9993273Z ·  ──────────┬────────── 2026-10-24T23:08:17.9993535Z · ╰── 'revokeActiveMcpThread' is declared here 2026-10-24T23:08:17.9993877Z 219 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeThread(threadId) : Effect.void; 2026-10-24T23:08:17.9994124Z ╰──── 2026-10-24T23:08:17.9994281Z  help: Consider removing this declaration. 2026-10-24T23:08:17.9994399Z 2026-10-24T23:08:17.9994705Z ⚠ eslint(no-unused-vars): Variable 'revokeAllActiveMcpCredentials' is declared but never used. Unused variables should start with a '_'. 2026-10-24T23:08:17.9995106Z ╭─[apps/server/src/mcp/McpSessionRegistry.ts:221:7] 2026-10-24T23:08:17.9995297Z 220 │ 2026-10-24T23:08:17.9995489Z 221 │ const revokeAllActiveMcpCredentials = (): Effect.Effect => 2026-10-24T23:08:17.9995740Z ·  ──────────────┬────────────── 2026-10-24T23:08:17.9996026Z · ╰── 'revokeAllActiveMcpCredentials' is declared here 2026-10-24T23:08:17.9996366Z 222 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeAll : Effect.void; 2026-10-24T23:08:17.9996590Z ╰──── 2026-10-24T23:08:17.9996748Z  help: Consider removing this declaration. 2026-10-24T23:08:17.9996865Z 2026-10-24T23:08:17.9997031Z ⚠ eslint(no-control-regex): Unexpected control character 2026-10-24T23:08:17.9997386Z ╭─[apps/mobile/src/features/settings/SettingsProviderAccountsRouteScreen.tsx:220:46] 2026-10-24T23:08:17.9997721Z 219 │ 2026-10-24T23:08:17.9998014Z 220 │ {interaction.output.replace(/\x1b\[[0-?]*[ -/]*[@-~]/g, "")} 2026-10-24T23:08:17.9998277Z ·  ──┬─ 2026-10-24T23:08:17.9998561Z · ╰── 'U+001B' is a control character. 2026-10-24T23:08:17.9998795Z 221 │ 2026-10-24T23:08:17.9998934Z ╰──── 2026-10-24T23:08:17.9999223Z  help: Avoid matching control characters in regular expressions. If intentional, disable this rule for the expression. 2026-10-24T23:08:17.9999450Z 2026-10-24T23:08:17.9999602Z ⚠ eslint(no-new): Do not use 'new' for side effects. 2026-10-24T23:08:17.9999884Z ╭─[apps/server/src/mcp/McpToolAccess.test.ts:168:3] 2026-10-24T23:08:18.0000131Z 167 │ // @ts-expect-error a declaration constructed directly 2026-10-24T23:08:18.0000356Z 168 │ new McpToolAccess.Declaration(unchecked); 2026-10-24T23:08:18.0000568Z ·  ───────────────────────────── 2026-10-24T23:08:18.0000804Z 169 │ // @ts-expect-error a handlers layer built outside McpToolAccess 2026-10-24T23:08:18.0000994Z ╰──── 2026-10-24T23:08:18.0001275Z  help: Assign the result of 'new' to a variable or compare it to a reference. 2026-10-24T23:08:18.0001467Z 2026-10-24T23:08:18.0001648Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T23:08:18.0001997Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:100:85] 2026-10-24T23:08:18.0002289Z  99 │ const startEditor = startScheduledTaskEditor; 2026-10-24T23:08:18.0002582Z 100 │ const resetEditor = useCallback(() => startEditor(defaultEditor), [defaultEditor, startEditor]); 2026-10-24T23:08:18.0002914Z ·  ─────┬───── 2026-10-24T23:08:18.0003258Z · ╰── Unnecessary dependency `startEditor` 2026-10-24T23:08:18.0003528Z 101 │ const readEditor = useCallback( 2026-10-24T23:08:18.0003681Z ╰──── 2026-10-24T23:08:18.0004052Z  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-24T23:08:18.0004651Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:18.0004948Z 2026-10-24T23:08:18.0005127Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T23:08:18.0005465Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:121:7] 2026-10-24T23:08:18.0005692Z 120 │ setEditor, 2026-10-24T23:08:18.0005837Z 121 │ startEditor, 2026-10-24T23:08:18.0006001Z ·  ─────┬───── 2026-10-24T23:08:18.0006242Z · ╰── Unnecessary dependency `startEditor` 2026-10-24T23:08:18.0006459Z 122 │ hasChanges, 2026-10-24T23:08:18.0006588Z ╰──── 2026-10-24T23:08:18.0012369Z  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-24T23:08:18.0012991Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:18.0013285Z 2026-10-24T23:08:18.0013457Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T23:08:18.0013746Z ╭─[apps/web/src/hooks/useThreadActions.ts:821:56] 2026-10-24T23:08:18.0013988Z 820 │ const resolved = resolveThreadTarget(target); 2026-10-24T23:08:18.0014268Z 821 │ if (resolved && !canSnooze(resolved.thread, { now: new Date().toISOString() })) { 2026-10-24T23:08:18.0014552Z ·  ─────┬──── 2026-10-24T23:08:18.0014847Z · ╰── Cannot call impure function 2026-10-24T23:08:18.0015087Z 822 │ return AsyncResult.failure( 2026-10-24T23:08:18.0015240Z ╰──── 2026-10-24T23:08:18.0015568Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T23:08:18.0016122Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T23:08:18.0016400Z 2026-10-24T23:08:18.0016662Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T23:08:18.0016984Z ╭─[apps/web/src/hooks/useThreadActions.ts:709:46] 2026-10-24T23:08:18.0017184Z 708 │ const wokeAt = resolved 2026-10-24T23:08:18.0017412Z 709 │ ? threadWokeAt(resolved.thread, { now: new Date().toISOString() }) 2026-10-24T23:08:18.0017671Z ·  ─────┬──── 2026-10-24T23:08:18.0017950Z · ╰── Cannot call impure function 2026-10-24T23:08:18.0018167Z 710 │ : null; 2026-10-24T23:08:18.0018293Z ╰──── 2026-10-24T23:08:18.0018618Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T23:08:18.0019165Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T23:08:18.0019443Z 2026-10-24T23:08:18.0019636Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T23:08:18.0019994Z ╭─[apps/web/src/components/pullRequest/PullRequestChecksPopover.tsx:88:15] 2026-10-24T23:08:18.0020228Z 87 │
  • { 2026-10-24T23:08:18.0022677Z ·  ────┬──── 2026-10-24T23:08:18.0022894Z · ╰── This is the containing effect 2026-10-24T23:08:18.0023113Z 119 │ void refreshNotifications(); 2026-10-24T23:08:18.0023301Z ·  ──────────┬───────── 2026-10-24T23:08:18.0023579Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:08:18.0023897Z 120 │ const subscription = AppState.addEventListener("change", (state) => { 2026-10-24T23:08:18.0024103Z ╰──── 2026-10-24T23:08:18.0024751Z  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-24T23:08:18.0025594Z  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-24T23:08:18.0025894Z 2026-10-24T23:08:18.0026148Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:08:18.0026717Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:128:7] 2026-10-24T23:08:18.0027003Z 125 │ 2026-10-24T23:08:18.0027125Z 126 │ useEffect(() => { 2026-10-24T23:08:18.0027278Z ·  ────┬──── 2026-10-24T23:08:18.0027488Z · ╰── This is the containing effect 2026-10-24T23:08:18.0027688Z 127 │ if (!isLoaded) { 2026-10-24T23:08:18.0027859Z 128 │ setLiveActivityStatus("checking"); 2026-10-24T23:08:18.0028053Z ·  ──────────┬────────── 2026-10-24T23:08:18.0028319Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:08:18.0028550Z 129 │ return; 2026-10-24T23:08:18.0028672Z ╰──── 2026-10-24T23:08:18.0029318Z  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-24T23:08:18.0030158Z  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-24T23:08:18.0030455Z 2026-10-24T23:08:18.0030640Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T23:08:18.0030925Z ╭─[packages/shared/src/qrCode.ts:458:44] 2026-10-24T23:08:18.0031107Z 457 │ ): Array { 2026-10-24T23:08:18.0031289Z 458 │ let result: Array = divisor.map((_) => 0); 2026-10-24T23:08:18.0031507Z ·  ┬ 2026-10-24T23:08:18.0031763Z · ╰── '_' is declared here 2026-10-24T23:08:18.0031974Z 459 │ for (const b of data) { 2026-10-24T23:08:18.0032155Z ╰──── 2026-10-24T23:08:18.0032310Z  help: Consider removing this parameter. 2026-10-24T23:08:18.0032424Z 2026-10-24T23:08:18.0032633Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T23:08:18.0032958Z ╭─[apps/mobile/src/lib/markdownDocument.ts:259:28] 2026-10-24T23:08:18.0033189Z 258 │ visit(parser.parse(markdown), false, false); 2026-10-24T23:08:18.0033386Z 259 │ for (const edit of edits.reverse()) 2026-10-24T23:08:18.0033578Z ·  ─────── 2026-10-24T23:08:18.0033847Z 260 │ markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end); 2026-10-24T23:08:18.0034075Z ╰──── 2026-10-24T23:08:18.0034384Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T23:08:18.0034627Z 2026-10-24T23:08:18.0034832Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T23:08:18.0035149Z ╭─[apps/mobile/src/lib/markdownDocument.ts:290:28] 2026-10-24T23:08:18.0035359Z 289 │ visit(parser.parse(markdown)); 2026-10-24T23:08:18.0035536Z 290 │ for (const edit of edits.reverse()) 2026-10-24T23:08:18.0035729Z ·  ─────── 2026-10-24T23:08:18.0035992Z 291 │ markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end); 2026-10-24T23:08:18.0036212Z ╰──── 2026-10-24T23:08:18.0036573Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T23:08:18.0036854Z 2026-10-24T23:08:18.0037060Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T23:08:18.0037376Z ╭─[apps/mobile/src/lib/markdownDocument.ts:344:38] 2026-10-24T23:08:18.0037587Z 343 │ visit(parser.parse(markdown)); 2026-10-24T23:08:18.0037786Z 344 │ for (const lineStart of lineStarts.reverse()) { 2026-10-24T23:08:18.0038008Z ·  ─────── 2026-10-24T23:08:18.0038282Z 345 │ // The header row may be a lazy line without its container markers (`>` or list indent), 2026-10-24T23:08:18.0038500Z ╰──── 2026-10-24T23:08:18.0038815Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T23:08:18.0039063Z 2026-10-24T23:08:18.0039505Z ⚠ 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-24T23:08:18.0040021Z ╭─[apps/server/src/serverSettings.test.ts:1741:32] 2026-10-24T23:08:18.0040326Z 1740 │ const model = createModelSelection(ProviderInstanceId.make("codex"), "gpt-5.5"); 2026-10-24T23:08:18.0040681Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-24T23:08:18.0040981Z ·  ─────────────────── 2026-10-24T23:08:18.0041208Z 1742 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-24T23:08:18.0041386Z ╰──── 2026-10-24T23:08:18.0041441Z 2026-10-24T23:08:18.0041885Z ⚠ 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-24T23:08:18.0042443Z ╭─[apps/server/src/serverSettings.test.ts:1742:34] 2026-10-24T23:08:18.0042755Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-24T23:08:18.0043051Z 1742 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-24T23:08:18.0043287Z ·  ─────────────────── 2026-10-24T23:08:18.0043528Z 1743 │ Schema.fromJsonString(Schema.Array(ProjectScript)), 2026-10-24T23:08:18.0043711Z ╰──── 2026-10-24T23:08:18.0043770Z 2026-10-24T23:08:18.0044002Z ⚠ unicorn(no-new-array): Do not use `new Array(singleArgument)`. 2026-10-24T23:08:18.0044329Z ╭─[apps/web/src/terminal/ghostty/core.ts:194:19] 2026-10-24T23:08:18.0044580Z 193 │ const count = Math.min(CHUNK_SIZE, graphemeLength - start); 2026-10-24T23:08:18.0044810Z 194 │ const codes = new Array(count); 2026-10-24T23:08:18.0045026Z ·  ──────────────────────── 2026-10-24T23:08:18.0045245Z 195 │ for (let index = 0; index < count; index += 1) { 2026-10-24T23:08:18.0045415Z ╰──── 2026-10-24T23:08:18.0045886Z  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-24T23:08:18.0046257Z 2026-10-24T23:08:18.0046463Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T23:08:18.0046794Z ╭─[packages/client-runtime/src/state/filesystem.ts:3:8] 2026-10-24T23:08:18.0047006Z 2 │ AuthFilesystemReadScope, 2026-10-24T23:08:18.0047171Z 3 │ type AuthSessionState, 2026-10-24T23:08:18.0047343Z ·  ────────┬─────── 2026-10-24T23:08:18.0047589Z · ╰── 'AuthSessionState' is imported here 2026-10-24T23:08:18.0047807Z 4 │ type FilesystemBrowseEntry, 2026-10-24T23:08:18.0047954Z ╰──── 2026-10-24T23:08:18.0048106Z  help: Consider removing this import. 2026-10-24T23:08:18.0048220Z 2026-10-24T23:08:18.0048644Z ⚠ 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-24T23:08:18.0049172Z ╭─[apps/server/src/provider/acp/AntigravityProtocol.ts:263:20] 2026-10-24T23:08:18.0049410Z 262 │ ...(update._meta !== undefined 2026-10-24T23:08:18.0049678Z 263 │ ? { _meta: Schema.is(Schema.Record(Schema.String, Schema.Json))(meta) ? meta : null } 2026-10-24T23:08:18.0049939Z ·  ───────── 2026-10-24T23:08:18.0050105Z 264 │ : {}), 2026-10-24T23:08:18.0050232Z ╰──── 2026-10-24T23:08:18.0050292Z 2026-10-24T23:08:18.0050497Z ⚠ eslint(no-unused-vars): Function 'nonEmptyString' is declared but never used. 2026-10-24T23:08:18.0050845Z ╭─[packages/client-runtime/src/work-log/presentation.ts:237:10] 2026-10-24T23:08:18.0051053Z 236 │ 2026-10-24T23:08:18.0051229Z 237 │ function nonEmptyString(value: unknown): string | null { 2026-10-24T23:08:18.0051452Z ·  ───────┬────── 2026-10-24T23:08:18.0051700Z · ╰── 'nonEmptyString' is declared here 2026-10-24T23:08:18.0052019Z 238 │ return typeof value === "string" && value.trim().length > 0 ? value : null; 2026-10-24T23:08:18.0052221Z ╰──── 2026-10-24T23:08:18.0052385Z  help: Consider removing this declaration. 2026-10-24T23:08:18.0052503Z 2026-10-24T23:08:18.0052962Z ⚠ 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-24T23:08:18.0053495Z ╭─[packages/shared/src/atomicWrite.test.ts:139:5] 2026-10-24T23:08:18.0053705Z 138 │ Effect.gen(function* () { 2026-10-24T23:08:18.0054054Z 139 │ ╭─▶ while (fiber.pollUnsafe() === undefined) { 2026-10-24T23:08:18.0054392Z 140 │ │ yield* TestClock.adjust("100 millis"); 2026-10-24T23:08:18.0054847Z 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-24T23:08:18.0055325Z 142 │ │ yield* Effect.promise(() => new Promise((resolve) => setImmediate(resolve))); 2026-10-24T23:08:18.0055647Z 143 │ ╰─▶ } 2026-10-24T23:08:18.0055870Z 144 │ return yield* Fiber.join(fiber); 2026-10-24T23:08:18.0056025Z ╰──── 2026-10-24T23:08:18.0056084Z 2026-10-24T23:08:18.0056293Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:08:18.0056633Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:257:7] 2026-10-24T23:08:18.0056886Z 256 │ return () => cancelAnimationFrame(frame); 2026-10-24T23:08:18.0057076Z 257 │ }, [props.path, targetIndex]); 2026-10-24T23:08:18.0057256Z ·  ─────┬──── 2026-10-24T23:08:18.0057493Z · ╰── Unnecessary dependency `props.path` 2026-10-24T23:08:18.0057695Z 258 │ 2026-10-24T23:08:18.0057807Z ╰──── 2026-10-24T23:08:18.0058154Z  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-24T23:08:18.0058743Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:18.0059041Z 2026-10-24T23:08:18.0059236Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T23:08:18.0059569Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:293:23] 2026-10-24T23:08:18.0059797Z 292 │ 2026-10-24T23:08:18.0062047Z ·  ─────────── 2026-10-24T23:08:18.0062255Z 310 │ {body} 2026-10-24T23:08:18.0062392Z ╰──── 2026-10-24T23:08:18.0062592Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T23:08:18.0062745Z 2026-10-24T23:08:18.0062939Z ⚠ eslint(no-unused-vars): Type 'EnvironmentId' is imported but never used. 2026-10-24T23:08:18.0063271Z ╭─[packages/client-runtime/src/state/sharedSettings.ts:2:3] 2026-10-24T23:08:18.0063483Z 1 │ import type { 2026-10-24T23:08:18.0063621Z 2 │ EnvironmentId, 2026-10-24T23:08:18.0063836Z ·  ──────┬────── 2026-10-24T23:08:18.0064090Z · ╰── 'EnvironmentId' is imported here 2026-10-24T23:08:18.0064316Z 3 │ ExecutionEnvironmentCapabilities, 2026-10-24T23:08:18.0064474Z ╰──── 2026-10-24T23:08:18.0064631Z  help: Consider removing this import. 2026-10-24T23:08:18.0064743Z 2026-10-24T23:08:18.0064999Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:08:18.0065384Z ╭─[apps/mobile/src/features/files/FileTreeBrowser.tsx:155:5] 2026-10-24T23:08:18.0065586Z 150 │ 2026-10-24T23:08:18.0065716Z 151 │ useEffect(() => { 2026-10-24T23:08:18.0065873Z ·  ────┬──── 2026-10-24T23:08:18.0066090Z · ╰── This is the containing effect 2026-10-24T23:08:18.0066318Z 152 │ if (!controlledSelectedPath) { 2026-10-24T23:08:18.0066542Z 153 │ return; 2026-10-24T23:08:18.0066677Z 154 │ } 2026-10-24T23:08:18.0066827Z 155 │ setExpandedPaths((current) => { 2026-10-24T23:08:18.0067012Z ·  ────────┬─────── 2026-10-24T23:08:18.0067277Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:08:18.0067571Z 156 │ const ancestors = ancestorPaths(controlledSelectedPath); 2026-10-24T23:08:18.0067761Z ╰──── 2026-10-24T23:08:18.0068406Z  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-24T23:08:18.0069255Z  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-24T23:08:18.0069560Z 2026-10-24T23:08:18.0069779Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T23:08:18.0070107Z ╭─[packages/shared/src/serverSettings.ts:346:9] 2026-10-24T23:08:18.0070343Z 345 │ const entry: ProjectSettingsOverrides = { 2026-10-24T23:08:18.0070590Z 346 │ ...(entries.get(projectId) ?? currentEntries[projectId] ?? {}), 2026-10-24T23:08:18.0070889Z ·  ────────────────────────────────────────────────────────────── 2026-10-24T23:08:18.0071095Z 347 │ }; 2026-10-24T23:08:18.0071220Z ╰──── 2026-10-24T23:08:18.0071546Z  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-24T23:08:18.0071806Z 2026-10-24T23:08:18.0072052Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in Array.prototype.reduce() 2026-10-24T23:08:18.0072380Z ╭─[packages/shared/src/serverSettings.ts:448:24] 2026-10-24T23:08:18.0072577Z 447 │ const favorites = 2026-10-24T23:08:18.0072769Z 448 │ setModelFavorites?.reduce((current, change) => { 2026-10-24T23:08:18.0072982Z ·  ───┬── 2026-10-24T23:08:18.0073208Z · ╰── For this reduce 2026-10-24T23:08:18.0073415Z 449 │ const exists = current.some( 2026-10-24T23:08:18.0073688Z 450 │ (favorite) => favorite.provider === change.provider && favorite.model === change.model, 2026-10-24T23:08:18.0073984Z 451 │ ); 2026-10-24T23:08:18.0074171Z 452 │ return change.favorite 2026-10-24T23:08:18.0074326Z 453 │ ? exists 2026-10-24T23:08:18.0074468Z 454 │ ? current 2026-10-24T23:08:18.0074684Z 455 │ : [...current, { provider: change.provider, model: change.model }] 2026-10-24T23:08:18.0074916Z ·  ─────┬──── 2026-10-24T23:08:18.0075132Z · ╰── From this spread 2026-10-24T23:08:18.0075328Z 456 │ : current.filter( 2026-10-24T23:08:18.0075475Z ╰──── 2026-10-24T23:08:18.0075735Z  help: Consider using `Object.assign()` or `Array.prototype.push()` to mutate the accumulator instead. 2026-10-24T23:08:18.0076097Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T23:08:18.0076265Z 2026-10-24T23:08:18.0076457Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-24T23:08:18.0076762Z ╭─[packages/shared/src/serverSettings.ts:466:3] 2026-10-24T23:08:18.0076952Z 464 │ null; 2026-10-24T23:08:18.0077142Z 465 │ let nextModelPreferences = initialModelPreferences; 2026-10-24T23:08:18.0077358Z ·  ──────────┬───────── 2026-10-24T23:08:18.0077589Z · ╰── From this accumulator 2026-10-24T23:08:18.0077819Z 466 │ for (const change of setModelsHidden ?? []) { 2026-10-24T23:08:18.0078006Z ·  ─┬─ 2026-10-24T23:08:18.0078193Z · ╰── For this loop 2026-10-24T23:08:18.0078441Z 467 │ const preferences = nextModelPreferences?.[change.provider] ?? { 2026-10-24T23:08:18.0078655Z 468 │ hiddenModels: [], 2026-10-24T23:08:18.0078817Z 469 │ modelOrder: [], 2026-10-24T23:08:18.0078961Z 470 │ }; 2026-10-24T23:08:18.0079205Z 471 │ const hiddenModels = preferences.hiddenModels.filter((model) => model !== change.model); 2026-10-24T23:08:18.0079500Z 472 │ if (change.hidden) hiddenModels.push(change.model); 2026-10-24T23:08:18.0079700Z 473 │ nextModelPreferences = { 2026-10-24T23:08:18.0079873Z 474 │ ...nextModelPreferences, 2026-10-24T23:08:18.0080064Z ·  ───────────┬─────────── 2026-10-24T23:08:18.0080291Z · ╰── From this spread 2026-10-24T23:08:18.0080531Z 475 │ [change.provider]: { ...preferences, hiddenModels }, 2026-10-24T23:08:18.0080712Z ╰──── 2026-10-24T23:08:18.0080921Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-24T23:08:18.0081299Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T23:08:18.0081491Z 2026-10-24T23:08:18.0081648Z ⚠ react(immutability): This value cannot be modified 2026-10-24T23:08:18.0081980Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:93:5] 2026-10-24T23:08:18.0082241Z 90 │ }) { 2026-10-24T23:08:18.0082414Z 91 │ const rotation = useSharedValue(props.hidden ? 1 : 0); 2026-10-24T23:08:18.0082617Z ·  ────┬─── 2026-10-24T23:08:18.0082837Z · ╰── `rotation` originates here 2026-10-24T23:08:18.0083043Z 92 │ useLayoutEffect(() => { 2026-10-24T23:08:18.0083272Z 93 │ rotation.value = withTiming(props.hidden ? 1 : 0, TOOLBAR_FLIP_TIMING); 2026-10-24T23:08:18.0083496Z ·  ────┬─── 2026-10-24T23:08:18.0083721Z · ╰── `rotation` cannot be modified 2026-10-24T23:08:18.0083940Z 94 │ }, [props.hidden, rotation]); 2026-10-24T23:08:18.0084092Z ╰──── 2026-10-24T23:08:18.0084414Z  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-24T23:08:18.0084968Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:08:18.0085258Z 2026-10-24T23:08:18.0085415Z ⚠ react(immutability): This value cannot be modified 2026-10-24T23:08:18.0085741Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:269:5] 2026-10-24T23:08:18.0086014Z 266 │ const variant = props.variant ?? "plain"; 2026-10-24T23:08:18.0086264Z 267 │ const loadingVisibility = useSharedValue(props.loading ? 1 : 0); 2026-10-24T23:08:18.0086500Z ·  ────────┬──────── 2026-10-24T23:08:18.0086746Z · ╰── `loadingVisibility` originates here 2026-10-24T23:08:18.0086964Z 268 │ useLayoutEffect(() => { 2026-10-24T23:08:18.0087210Z 269 │ loadingVisibility.value = withTiming(props.loading ? 1 : 0, DICTATION_TIMING); 2026-10-24T23:08:18.0087458Z ·  ────────┬──────── 2026-10-24T23:08:18.0087707Z · ╰── `loadingVisibility` cannot be modified 2026-10-24T23:08:18.0088003Z 270 │ }, [loadingVisibility, props.loading]); 2026-10-24T23:08:18.0088167Z ╰──── 2026-10-24T23:08:18.0088481Z  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-24T23:08:18.0089041Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:08:18.0089333Z 2026-10-24T23:08:18.0089485Z ⚠ react(immutability): This value cannot be modified 2026-10-24T23:08:18.0089812Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:328:5] 2026-10-24T23:08:18.0090038Z 325 │ }) { 2026-10-24T23:08:18.0090266Z 326 │ const recordingVisibility = useSharedValue(props.phase === "recording" ? 1 : 0); 2026-10-24T23:08:18.0090519Z ·  ─────────┬───────── 2026-10-24T23:08:18.0090770Z · ╰── `recordingVisibility` originates here 2026-10-24T23:08:18.0090987Z 327 │ useLayoutEffect(() => { 2026-10-24T23:08:18.0091327Z 328 │ recordingVisibility.value = withTiming(props.phase === "recording" ? 1 : 0, DICTATION_TIMING); 2026-10-24T23:08:18.0091631Z ·  ─────────┬───────── 2026-10-24T23:08:18.0091885Z · ╰── `recordingVisibility` cannot be modified 2026-10-24T23:08:18.0092163Z 329 │ }, [props.phase, recordingVisibility]); 2026-10-24T23:08:18.0092333Z ╰──── 2026-10-24T23:08:18.0092650Z  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-24T23:08:18.0093202Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:08:18.0093488Z 2026-10-24T23:08:18.0093636Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:08:18.0093947Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:152:27] 2026-10-24T23:08:18.0094288Z 151 │ 2026-10-24T23:08:18.0094552Z 152 │ {props.children(open)} 2026-10-24T23:08:18.0094740Z ·  ──┬─ 2026-10-24T23:08:18.0095005Z · ╰── Cannot access ref value during render 2026-10-24T23:08:18.0095220Z 153 │ 2026-10-24T23:08:18.0095350Z ╰──── 2026-10-24T23:08:18.0095874Z  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-24T23:08:18.0096581Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:08:18.0096860Z 2026-10-24T23:08:18.0097057Z ⚠ react(memo-dependencies): Found missing/extra memoization dependencies 2026-10-24T23:08:18.0097399Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:140:9] 2026-10-24T23:08:18.0097634Z 139 │ if (action.id !== undefined) { 2026-10-24T23:08:18.0097812Z 140 │ props.onPressAction?.({ 2026-10-24T23:08:18.0097986Z ·  ──┬── 2026-10-24T23:08:18.0098203Z · ╰── Missing dependency `props` 2026-10-24T23:08:18.0098435Z 141 │ nativeEvent: { event: action.id }, 2026-10-24T23:08:18.0098689Z 142 │ } as Parameters>[0]); 2026-10-24T23:08:18.0098909Z 143 │ } 2026-10-24T23:08:18.0099033Z 144 │ }, 2026-10-24T23:08:18.0099182Z 145 │ [close, props.onPressAction], 2026-10-24T23:08:18.0099375Z ·  ─────────┬───────── 2026-10-24T23:08:18.0099692Z · ╰── Overly precise dependency `props.onPressAction`, use `props` instead 2026-10-24T23:08:18.0099949Z 146 │ ); 2026-10-24T23:08:18.0100064Z ╰──── 2026-10-24T23:08:18.0100599Z  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-24T23:08:18.0101402Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:18.0101725Z 2026-10-24T23:08:18.0101882Z ⚠ react(immutability): This value cannot be modified 2026-10-24T23:08:18.0102242Z ╭─[apps/mobile/src/features/voice-input/GlobalVoiceInputControl.tsx:68:5] 2026-10-24T23:08:18.0102513Z 65 │ const [expanded, setExpanded] = useState(false); 2026-10-24T23:08:18.0102719Z 66 │ const progress = useSharedValue(0); 2026-10-24T23:08:18.0102897Z ·  ────┬─── 2026-10-24T23:08:18.0103116Z · ╰── `progress` originates here 2026-10-24T23:08:18.0103327Z 67 │ useEffect(() => { 2026-10-24T23:08:18.0103532Z 68 │ progress.value = withTiming(expanded ? 1 : 0, MORPH_TIMING); 2026-10-24T23:08:18.0103740Z ·  ────┬─── 2026-10-24T23:08:18.0103960Z · ╰── `progress` cannot be modified 2026-10-24T23:08:18.0104174Z 69 │ }, [expanded, progress]); 2026-10-24T23:08:18.0104317Z ╰──── 2026-10-24T23:08:18.0104636Z  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-24T23:08:18.0105188Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:08:18.0105477Z 2026-10-24T23:08:18.0105665Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-24T23:08:18.0105973Z ╭─[packages/client-runtime/src/state/shell.ts:189:5] 2026-10-24T23:08:18.0106218Z 186 │ let waiting = yield* Ref.get(awaitingCompletion); 2026-10-24T23:08:18.0106410Z 187 │ let next = initial; 2026-10-24T23:08:18.0106627Z ·  ──┬─ 2026-10-24T23:08:18.0106842Z · ╰── From this accumulator 2026-10-24T23:08:18.0107056Z 188 │ let receivedSnapshot = false; 2026-10-24T23:08:18.0107231Z 189 │ for (const item of items) { 2026-10-24T23:08:18.0107395Z ·  ─┬─ 2026-10-24T23:08:18.0107585Z · ╰── For this loop 2026-10-24T23:08:18.0107788Z 190 │ if (item.kind === "synchronized") { 2026-10-24T23:08:18.0107962Z 191 │ waiting = false; 2026-10-24T23:08:18.0108140Z 192 │ if (Option.isSome(next.snapshot)) { 2026-10-24T23:08:18.0108367Z 193 │ next = { ...next, status: "live", error: Option.none() }; 2026-10-24T23:08:18.0108583Z ·  ───┬─── 2026-10-24T23:08:18.0108819Z · ╰── From this spread 2026-10-24T23:08:18.0109013Z 194 │ } 2026-10-24T23:08:18.0109138Z ╰──── 2026-10-24T23:08:18.0109346Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-24T23:08:18.0109658Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T23:08:18.0109821Z 2026-10-24T23:08:18.0109966Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:08:18.0110277Z ╭─[apps/mobile/src/features/voice-input/useVoiceInputController.ts:27:14] 2026-10-24T23:08:18.0110532Z 26 │ const latestInput = useRef(input); 2026-10-24T23:08:18.0110709Z 27 │ latestInput.current = input; 2026-10-24T23:08:18.0110920Z ·  ─────┬─────────┬─── 2026-10-24T23:08:18.0111292Z · │ ╰── Cannot update ref value during render 2026-10-24T23:08:18.0111618Z · ╰── This value is a ref 2026-10-24T23:08:18.0111816Z 28 │ const mounted = useRef(true); 2026-10-24T23:08:18.0111966Z ╰──── 2026-10-24T23:08:18.0112511Z  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-24T23:08:18.0113218Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:08:18.0113497Z 2026-10-24T23:08:18.0113640Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:08:18.0113954Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:122:38] 2026-10-24T23:08:18.0114278Z 121 │ const audioLevelsRef = useRef(Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-24T23:08:18.0114569Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-24T23:08:18.0114829Z ·  ───────────┬────────── 2026-10-24T23:08:18.0115127Z · ╰── Cannot access ref value during render 2026-10-24T23:08:18.0115410Z 123 │ const sessionRef = useRef(null); 2026-10-24T23:08:18.0115601Z ╰──── 2026-10-24T23:08:18.0116119Z  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-24T23:08:18.0116829Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:08:18.0117112Z 2026-10-24T23:08:18.0117252Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:08:18.0117560Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:8] 2026-10-24T23:08:18.0117775Z 125 │ 2026-10-24T23:08:18.0117946Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T23:08:18.0118156Z ·  ─────────┬──────── 2026-10-24T23:08:18.0118408Z · ╰── Cannot access ref value during render 2026-10-24T23:08:18.0118655Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T23:08:18.0118833Z ╰──── 2026-10-24T23:08:18.0119347Z  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-24T23:08:18.0120047Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:08:18.0120320Z 2026-10-24T23:08:18.0120463Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:08:18.0120768Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:7] 2026-10-24T23:08:18.0120981Z 125 │ 2026-10-24T23:08:18.0121147Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T23:08:18.0121413Z ·  ─────────┬───────── 2026-10-24T23:08:18.0121690Z · ╰── Cannot access ref value during render 2026-10-24T23:08:18.0121937Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T23:08:18.0122150Z ╰──── 2026-10-24T23:08:18.0122666Z  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-24T23:08:18.0123370Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:08:18.0123650Z 2026-10-24T23:08:18.0123791Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:08:18.0124097Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:31] 2026-10-24T23:08:18.0124317Z 125 │ 2026-10-24T23:08:18.0124481Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T23:08:18.0124720Z ·  ─────────┬───────── 2026-10-24T23:08:18.0124999Z · ╰── Cannot access ref value during render 2026-10-24T23:08:18.0125262Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T23:08:18.0125429Z ╰──── 2026-10-24T23:08:18.0125883Z  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-24T23:08:18.0126174Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:08:18.0126179Z 2026-10-24T23:08:18.0126320Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:08:18.0126479Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:30] 2026-10-24T23:08:18.0126531Z 125 │ 2026-10-24T23:08:18.0126639Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T23:08:18.0126754Z ·  ──────────┬───────── 2026-10-24T23:08:18.0126918Z · ╰── Cannot access ref value during render 2026-10-24T23:08:18.0127017Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T23:08:18.0127072Z ╰──── 2026-10-24T23:08:18.0127578Z  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-24T23:08:18.0127918Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:08:18.0127921Z 2026-10-24T23:08:18.0128063Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:08:18.0128217Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:127:46] 2026-10-24T23:08:18.0128331Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T23:08:18.0128523Z 127 │ ╭─▶ const recorder = createLazyVoiceRecorder({ 2026-10-24T23:08:18.0128700Z 128 │ │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-24T23:08:18.0128827Z 129 │ │ onStatus: (status: RecordingStatus) => { 2026-10-24T23:08:18.0128982Z 130 │ │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-24T23:08:18.0129102Z 131 │ │ isFinished: status.isFinished, 2026-10-24T23:08:18.0129279Z 132 │ │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-24T23:08:18.0129382Z 133 │ │ error: status.error, 2026-10-24T23:08:18.0129481Z 134 │ │ url: status.url, 2026-10-24T23:08:18.0129564Z 135 │ │ }); 2026-10-24T23:08:18.0129645Z 136 │ │ }, 2026-10-24T23:08:18.0129843Z 137 │ │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-24T23:08:18.0129954Z 138 │ │ selectInput: (inputs) => { 2026-10-24T23:08:18.0130111Z 139 │ │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-24T23:08:18.0130257Z 140 │ │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-24T23:08:18.0130421Z 141 │ │ const known = microphoneOrder(preferences.value.microphones); 2026-10-24T23:08:18.0130562Z 142 │ │ const order = rememberMicrophones(known, inputs); 2026-10-24T23:08:18.0130664Z 143 │ │ if (order !== known) { 2026-10-24T23:08:18.0130802Z 144 │ │ registry.set(updateMobilePreferencesAtom, { 2026-10-24T23:08:18.0130922Z 145 │ │ transform: (current) => ({ 2026-10-24T23:08:18.0131126Z 146 │ │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-24T23:08:18.0131213Z 147 │ │ }), 2026-10-24T23:08:18.0131295Z 148 │ │ }); 2026-10-24T23:08:18.0131376Z 149 │ │ } 2026-10-24T23:08:18.0131513Z 150 │ │ return preferredMicrophoneInput(inputs, order); 2026-10-24T23:08:18.0131593Z 151 │ │ }, 2026-10-24T23:08:18.0131726Z 152 │ ├─▶ }); 2026-10-24T23:08:18.0131962Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T23:08:18.0132124Z 153 │ recorderRef.current = recorder; 2026-10-24T23:08:18.0132213Z ╰──── 2026-10-24T23:08:18.0132669Z  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-24T23:08:18.0132956Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:08:18.0132958Z 2026-10-24T23:08:18.0133102Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:08:18.0133259Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:153:16] 2026-10-24T23:08:18.0133320Z 152 │ }); 2026-10-24T23:08:18.0133405Z 153 │ recorderRef.current = recorder; 2026-10-24T23:08:18.0133525Z ·  ─────┬─────────┬─── 2026-10-24T23:08:18.0133708Z · │ ╰── Cannot update ref value during render 2026-10-24T23:08:18.0133826Z · ╰── This value is a ref 2026-10-24T23:08:18.0133930Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T23:08:18.0133986Z ╰──── 2026-10-24T23:08:18.0134435Z  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-24T23:08:18.0134730Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:08:18.0134734Z 2026-10-24T23:08:18.0134876Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:08:18.0135032Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:48] 2026-10-24T23:08:18.0135118Z 153 │ recorderRef.current = recorder; 2026-10-24T23:08:18.0135311Z 154 │ ╭─▶ sessionRef.current = new VoiceInputSession({ 2026-10-24T23:08:18.0135398Z 155 │ │ recorder, 2026-10-24T23:08:18.0135527Z 156 │ │ getTranscriber: getLocalVoiceTranscriber, 2026-10-24T23:08:18.0135647Z 157 │ │ requestPermission: async () => { 2026-10-24T23:08:18.0135808Z 158 │ │ const permission = await requestRecordingPermissionsAsync(); 2026-10-24T23:08:18.0136005Z 159 │ │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-24T23:08:18.0136086Z 160 │ │ }, 2026-10-24T23:08:18.0136228Z 161 │ │ configureRecording: configureVoiceRecordingAudio, 2026-10-24T23:08:18.0136363Z 162 │ │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-24T23:08:18.0136498Z 163 │ │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-24T23:08:18.0136609Z 164 │ │ onStateChange: (nextState) => 2026-10-24T23:08:18.0136701Z 165 │ │ setState({ 2026-10-24T23:08:18.0136800Z 166 │ │ state: nextState, 2026-10-24T23:08:18.0136937Z 167 │ │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-24T23:08:18.0137116Z 168 │ │ label: sessionRef.current?.label ?? null, 2026-10-24T23:08:18.0137225Z 169 │ │ }), 2026-10-24T23:08:18.0137350Z 170 │ ├─▶ }); 2026-10-24T23:08:18.0137546Z · ╰──── Cannot access ref value during render 2026-10-24T23:08:18.0137606Z 171 │ } 2026-10-24T23:08:18.0137661Z ╰──── 2026-10-24T23:08:18.0138109Z  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-24T23:08:18.0138397Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:08:18.0138402Z 2026-10-24T23:08:18.0138545Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:08:18.0138702Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:15] 2026-10-24T23:08:18.0138786Z 153 │ recorderRef.current = recorder; 2026-10-24T23:08:18.0138885Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T23:08:18.0138998Z ·  ─────┬────────┬─── 2026-10-24T23:08:18.0139178Z · │ ╰── Cannot update ref value during render 2026-10-24T23:08:18.0139298Z · ╰── This value is a ref 2026-10-24T23:08:18.0139365Z 155 │ recorder, 2026-10-24T23:08:18.0139418Z ╰──── 2026-10-24T23:08:18.0139877Z  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-24T23:08:18.0140165Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:08:18.0140168Z 2026-10-24T23:08:18.0140311Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:08:18.0140464Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:7] 2026-10-24T23:08:18.0140552Z 184 │ return () => subscription.remove(); 2026-10-24T23:08:18.0140621Z 185 │ }, [controller]); 2026-10-24T23:08:18.0140699Z ·  ─────┬──── 2026-10-24T23:08:18.0140844Z · ╰── Cannot access ref value during render 2026-10-24T23:08:18.0140899Z 186 │ 2026-10-24T23:08:18.0140950Z ╰──── 2026-10-24T23:08:18.0141402Z  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-24T23:08:18.0141684Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:08:18.0141686Z 2026-10-24T23:08:18.0141828Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:08:18.0141997Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:6] 2026-10-24T23:08:18.0142160Z 184 │ return () => subscription.remove(); 2026-10-24T23:08:18.0142252Z 185 │ }, [controller]); 2026-10-24T23:08:18.0142329Z ·  ──────┬───── 2026-10-24T23:08:18.0142470Z · ╰── Cannot access ref value during render 2026-10-24T23:08:18.0142524Z 186 │ 2026-10-24T23:08:18.0142575Z ╰──── 2026-10-24T23:08:18.0143029Z  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-24T23:08:18.0143313Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:08:18.0143316Z 2026-10-24T23:08:18.0143460Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:08:18.0143617Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:6] 2026-10-24T23:08:18.0143672Z 191 │ }, 2026-10-24T23:08:18.0143743Z 192 │ [controller, recorder], 2026-10-24T23:08:18.0143820Z ·  ─────┬──── 2026-10-24T23:08:18.0143960Z · ╰── Cannot access ref value during render 2026-10-24T23:08:18.0144013Z 193 │ ); 2026-10-24T23:08:18.0144066Z ╰──── 2026-10-24T23:08:18.0144518Z  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-24T23:08:18.0144805Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:08:18.0144810Z 2026-10-24T23:08:18.0144950Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:08:18.0145102Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:175:20] 2026-10-24T23:08:18.0145193Z 174 │ const controller = session.controller; 2026-10-24T23:08:18.0145280Z 175 │ const recorder = recorderRef.current; 2026-10-24T23:08:18.0145384Z ·  ─────────┬───────── 2026-10-24T23:08:18.0145537Z · ╰── Cannot access ref value during render 2026-10-24T23:08:18.0145593Z 176 │ 2026-10-24T23:08:18.0145646Z ╰──── 2026-10-24T23:08:18.0146097Z  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-24T23:08:18.0146381Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:08:18.0146383Z 2026-10-24T23:08:18.0146742Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:08:18.0146898Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:5] 2026-10-24T23:08:18.0146956Z 191 │ }, 2026-10-24T23:08:18.0147026Z 192 │ [controller, recorder], 2026-10-24T23:08:18.0147116Z ·  ───────────┬────────── 2026-10-24T23:08:18.0147324Z · ╰── Cannot access ref value during render 2026-10-24T23:08:18.0147422Z 193 │ ); 2026-10-24T23:08:18.0147472Z ╰──── 2026-10-24T23:08:18.0147923Z  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-24T23:08:18.0148206Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:08:18.0148209Z 2026-10-24T23:08:18.0148349Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:08:18.0148503Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:20] 2026-10-24T23:08:18.0148591Z 245 │ return () => clearInterval(intervalId); 2026-10-24T23:08:18.0148707Z 246 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-24T23:08:18.0148799Z ·  ─────┬──── 2026-10-24T23:08:18.0148953Z · ╰── Cannot access ref value during render 2026-10-24T23:08:18.0149005Z 247 │ 2026-10-24T23:08:18.0149059Z ╰──── 2026-10-24T23:08:18.0149509Z  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-24T23:08:18.0149792Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:08:18.0149794Z 2026-10-24T23:08:18.0149939Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:08:18.0150093Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:6] 2026-10-24T23:08:18.0150184Z 245 │ return () => clearInterval(intervalId); 2026-10-24T23:08:18.0150294Z 246 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-24T23:08:18.0150426Z ·  ────────────────────────┬─────────────────────── 2026-10-24T23:08:18.0150581Z · ╰── Cannot access ref value during render 2026-10-24T23:08:18.0150637Z 247 │ 2026-10-24T23:08:18.0150690Z ╰──── 2026-10-24T23:08:18.0151140Z  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-24T23:08:18.0151429Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:08:18.0151437Z 2026-10-24T23:08:18.0151577Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:08:18.0151733Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:261:5] 2026-10-24T23:08:18.0151803Z 260 │ setOwnerFocused, 2026-10-24T23:08:18.0151863Z 261 │ session, 2026-10-24T23:08:18.0151937Z ·  ───┬─── 2026-10-24T23:08:18.0152106Z · ╰── Cannot access ref value during render 2026-10-24T23:08:18.0152168Z 262 │ stop, 2026-10-24T23:08:18.0152218Z ╰──── 2026-10-24T23:08:18.0152733Z  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-24T23:08:18.0153045Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:08:18.0153047Z 2026-10-24T23:08:18.0153190Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:08:18.0153344Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:251:10] 2026-10-24T23:08:18.0153398Z 250 │ 2026-10-24T23:08:18.0153539Z 251 │ ╭─▶ return { 2026-10-24T23:08:18.0153751Z 252 │ │ isAvailable: getLocalVoiceTranscriber() !== null || getNativeShowcaseScene() !== null, 2026-10-24T23:08:18.0153837Z 253 │ │ state, 2026-10-24T23:08:18.0153925Z 254 │ │ audioLevels, 2026-10-24T23:08:18.0154020Z 255 │ │ elapsedSeconds, 2026-10-24T23:08:18.0154150Z 256 │ │ isBusy: voiceInputBlocksSubmission(state), 2026-10-24T23:08:18.0154233Z 257 │ │ ownerKey, 2026-10-24T23:08:18.0154310Z 258 │ │ label, 2026-10-24T23:08:18.0154403Z 259 │ │ focusedOwners, 2026-10-24T23:08:18.0154498Z 260 │ │ setOwnerFocused, 2026-10-24T23:08:18.0154580Z 261 │ │ session, 2026-10-24T23:08:18.0154657Z 262 │ │ stop, 2026-10-24T23:08:18.0154737Z 263 │ │ cancel, 2026-10-24T23:08:18.0154872Z 264 │ ├─▶ }; 2026-10-24T23:08:18.0155071Z · ╰──── Cannot access ref value during render 2026-10-24T23:08:18.0155127Z 265 │ } 2026-10-24T23:08:18.0155182Z ╰──── 2026-10-24T23:08:18.0155634Z  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-24T23:08:18.0155915Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:08:18.0155918Z 2026-10-24T23:08:18.0156071Z ⚠ react(immutability): This value cannot be modified 2026-10-24T23:08:18.0156267Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7] 2026-10-24T23:08:18.0156450Z 121 │ const audioLevelsRef = useRef(Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-24T23:08:18.0156572Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-24T23:08:18.0156651Z ·  ─────┬───── 2026-10-24T23:08:18.0156782Z · ╰── `audioLevels` originates here 2026-10-24T23:08:18.0156902Z 123 │ const sessionRef = useRef(null); 2026-10-24T23:08:18.0157046Z 124 │ const recorderRef = useRef | null>(null); 2026-10-24T23:08:18.0157097Z 125 │ 2026-10-24T23:08:18.0157201Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T23:08:18.0157301Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T23:08:18.0157445Z 128 │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-24T23:08:18.0157543Z 129 │ onStatus: (status: RecordingStatus) => { 2026-10-24T23:08:18.0157660Z 130 │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-24T23:08:18.0157749Z 131 │ isFinished: status.isFinished, 2026-10-24T23:08:18.0157894Z 132 │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-24T23:08:18.0157970Z 133 │ error: status.error, 2026-10-24T23:08:18.0158036Z 134 │ url: status.url, 2026-10-24T23:08:18.0158099Z 135 │ }); 2026-10-24T23:08:18.0158156Z 136 │ }, 2026-10-24T23:08:18.0158318Z 137 │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-24T23:08:18.0158395Z 138 │ selectInput: (inputs) => { 2026-10-24T23:08:18.0158524Z 139 │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-24T23:08:18.0158638Z 140 │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-24T23:08:18.0158769Z 141 │ const known = microphoneOrder(preferences.value.microphones); 2026-10-24T23:08:18.0158873Z 142 │ const order = rememberMicrophones(known, inputs); 2026-10-24T23:08:18.0158945Z 143 │ if (order !== known) { 2026-10-24T23:08:18.0159050Z 144 │ registry.set(updateMobilePreferencesAtom, { 2026-10-24T23:08:18.0159131Z 145 │ transform: (current) => ({ 2026-10-24T23:08:18.0159299Z 146 │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-24T23:08:18.0159361Z 147 │ }), 2026-10-24T23:08:18.0159422Z 148 │ }); 2026-10-24T23:08:18.0159479Z 149 │ } 2026-10-24T23:08:18.0159591Z 150 │ return preferredMicrophoneInput(inputs, order); 2026-10-24T23:08:18.0159650Z 151 │ }, 2026-10-24T23:08:18.0159703Z 152 │ }); 2026-10-24T23:08:18.0159782Z 153 │ recorderRef.current = recorder; 2026-10-24T23:08:18.0159880Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T23:08:18.0159943Z 155 │ recorder, 2026-10-24T23:08:18.0160039Z 156 │ getTranscriber: getLocalVoiceTranscriber, 2026-10-24T23:08:18.0160121Z 157 │ requestPermission: async () => { 2026-10-24T23:08:18.0160248Z 158 │ const permission = await requestRecordingPermissionsAsync(); 2026-10-24T23:08:18.0160401Z 159 │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-24T23:08:18.0160456Z 160 │ }, 2026-10-24T23:08:18.0160565Z 161 │ configureRecording: configureVoiceRecordingAudio, 2026-10-24T23:08:18.0160669Z 162 │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-24T23:08:18.0160820Z 163 │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-24T23:08:18.0160929Z 164 │ onStateChange: (nextState) => 2026-10-24T23:08:18.0160991Z 165 │ setState({ 2026-10-24T23:08:18.0161062Z 166 │ state: nextState, 2026-10-24T23:08:18.0161166Z 167 │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-24T23:08:18.0161264Z 168 │ label: sessionRef.current?.label ?? null, 2026-10-24T23:08:18.0161320Z 169 │ }), 2026-10-24T23:08:18.0161373Z 170 │ }); 2026-10-24T23:08:18.0161425Z 171 │ } 2026-10-24T23:08:18.0161477Z 172 │ 2026-10-24T23:08:18.0161559Z 173 │ const session = sessionRef.current; 2026-10-24T23:08:18.0161644Z 174 │ const controller = session.controller; 2026-10-24T23:08:18.0161725Z 175 │ const recorder = recorderRef.current; 2026-10-24T23:08:18.0161778Z 176 │ 2026-10-24T23:08:18.0161848Z 177 │ useEffect(() => { 2026-10-24T23:08:18.0162029Z 178 │ const subscription = AppState.addEventListener("change", (nextState) => { 2026-10-24T23:08:18.0162168Z 179 │ // iOS reports `inactive` while its permission dialog is open. Only the 2026-10-24T23:08:18.0162306Z 180 │ // real background state cancels preparation; recorder status handles 2026-10-24T23:08:18.0162408Z 181 │ // calls and route interruptions during capture. 2026-10-24T23:08:18.0162542Z 182 │ if (nextState === "background") controller.appMovedToBackground(); 2026-10-24T23:08:18.0162597Z 183 │ }); 2026-10-24T23:08:18.0162680Z 184 │ return () => subscription.remove(); 2026-10-24T23:08:18.0162743Z 185 │ }, [controller]); 2026-10-24T23:08:18.0162795Z 186 │ 2026-10-24T23:08:18.0162853Z 187 │ useEffect( 2026-10-24T23:08:18.0162913Z 188 │ () => () => { 2026-10-24T23:08:18.0162993Z 189 │ controller.dispose(); 2026-10-24T23:08:18.0163062Z 190 │ recorder.release(); 2026-10-24T23:08:18.0163117Z 191 │ }, 2026-10-24T23:08:18.0163185Z 192 │ [controller, recorder], 2026-10-24T23:08:18.0163237Z 193 │ ); 2026-10-24T23:08:18.0163289Z 194 │ 2026-10-24T23:08:18.0163351Z 195 │ useEffect(() => { 2026-10-24T23:08:18.0163441Z 196 │ if (state.phase !== "recording") return; 2026-10-24T23:08:18.0163492Z 197 │ 2026-10-24T23:08:18.0163637Z 198 │ const tag = `voice-input:${keepAwakeId}:${++keepAwakeSessionRef.current}`; 2026-10-24T23:08:18.0163738Z 199 │ const activation = activateKeepAwakeAsync(tag); 2026-10-24T23:08:18.0163817Z 200 │ void activation.catch(() => {}); 2026-10-24T23:08:18.0163880Z 201 │ return () => { 2026-10-24T23:08:18.0164031Z 202 │ // Release after activation settles, even if the recording ends immediately. 2026-10-24T23:08:18.0164174Z 203 │ void activation.then(() => deactivateKeepAwake(tag)).catch(() => {}); 2026-10-24T23:08:18.0164230Z 204 │ }; 2026-10-24T23:08:18.0164308Z 205 │ }, [keepAwakeId, state.phase]); 2026-10-24T23:08:18.0164358Z 206 │ 2026-10-24T23:08:18.0164419Z 207 │ useEffect(() => { 2026-10-24T23:08:18.0164551Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-24T23:08:18.0164603Z 209 │ 2026-10-24T23:08:18.0164722Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-24T23:08:18.0164871Z 211 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-24T23:08:18.0164971Z 212 │ audioLevels.value = audioLevelsRef.current; 2026-10-24T23:08:18.0165047Z ·  ─────┬───── 2026-10-24T23:08:18.0165244Z · ╰── `audioLevels` cannot be modified 2026-10-24T23:08:18.0165325Z 213 │ } 2026-10-24T23:08:18.0165376Z ╰──── 2026-10-24T23:08:18.0165639Z  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-24T23:08:18.0165941Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:08:18.0165943Z 2026-10-24T23:08:18.0166142Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T23:08:18.0166295Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7] 2026-10-24T23:08:18.0166348Z 206 │ 2026-10-24T23:08:18.0166416Z 207 │ useEffect(() => { 2026-10-24T23:08:18.0166494Z ·  ───┬─── 2026-10-24T23:08:18.0166714Z · ╰── This function may (indirectly) reassign or modify `audioLevels` after render 2026-10-24T23:08:18.0166851Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-24T23:08:18.0166902Z 209 │ 2026-10-24T23:08:18.0167022Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-24T23:08:18.0167172Z 211 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-24T23:08:18.0167270Z 212 │ audioLevels.value = audioLevelsRef.current; 2026-10-24T23:08:18.0167346Z ·  ─────┬───── 2026-10-24T23:08:18.0167478Z · ╰── This modifies `audioLevels` 2026-10-24T23:08:18.0167530Z 213 │ } 2026-10-24T23:08:18.0167583Z ╰──── 2026-10-24T23:08:18.0167921Z  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-24T23:08:18.0168222Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:08:18.0168224Z 2026-10-24T23:08:18.0168687Z ⚠ 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-24T23:08:18.0168851Z ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:566:7] 2026-10-24T23:08:18.0168952Z 565 │ let afterSequence = created[0]!.sequence; 2026-10-24T23:08:18.0169147Z 566 │ ╭─▶ for (let index = 1; index <= 32; index += 1) { 2026-10-24T23:08:18.0169247Z 567 │ │ const nextEvent = { 2026-10-24T23:08:18.0169401Z 568 │ │ id: EventId.make(`event:foundation-stream-race:${index}`), 2026-10-24T23:08:18.0169530Z 569 │ │ type: "thread.metadata-updated" as const, 2026-10-24T23:08:18.0169620Z 570 │ │ threadId, 2026-10-24T23:08:18.0169721Z 571 │ │ providerInstanceId, 2026-10-24T23:08:18.0169816Z 572 │ │ occurredAt: now, 2026-10-24T23:08:18.0169961Z 573 │ │ payload: { ...thread, title: `Race update ${index}` }, 2026-10-24T23:08:18.0170087Z 574 │ │ } satisfies OrchestrationV2DomainEvent; 2026-10-24T23:08:18.0170250Z 575 │ │ const reader = yield* eventSink 2026-10-24T23:08:18.0170396Z 576 │ │ .stream({ threadId, afterSequence }) 2026-10-24T23:08:18.0170527Z 577 │ │ .pipe(Stream.runHead, Effect.forkChild); 2026-10-24T23:08:18.0170630Z 578 │ │ yield* Effect.yieldNow; 2026-10-24T23:08:18.0170789Z 579 │ │ const written = yield* eventSink.write({ events: [nextEvent] }); 2026-10-24T23:08:18.0170914Z 580 │ │ const received = yield* Fiber.join(reader); 2026-10-24T23:08:18.0171029Z 581 │ │ if (Option.isNone(received)) { 2026-10-24T23:08:18.0171226Z 582 │ │ return yield* Effect.die("The event stream ended before delivering the live event."); 2026-10-24T23:08:18.0171310Z 583 │ │ } 2026-10-24T23:08:18.0171470Z 584 │ │ assert.equal(received.value.sequence, written[0]?.sequence); 2026-10-24T23:08:18.0171611Z 585 │ │ assert.equal(received.value.event.id, nextEvent.id); 2026-10-24T23:08:18.0171738Z 586 │ │ afterSequence = received.value.sequence; 2026-10-24T23:08:18.0171867Z 587 │ ╰─▶ } 2026-10-24T23:08:18.0171927Z 588 │ }), 2026-10-24T23:08:18.0171976Z ╰──── 2026-10-24T23:08:18.0171990Z 2026-10-24T23:08:18.0172471Z ⚠ 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-24T23:08:18.0172645Z ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:2327:9] 2026-10-24T23:08:18.0172725Z 2326 │ let settled = false; 2026-10-24T23:08:18.0172880Z 2327 │ ╭─▶ while (!settled) { 2026-10-24T23:08:18.0173036Z 2328 │ │ settled = (yield* outbox.listByCommandId(commandId)).every( 2026-10-24T23:08:18.0173165Z 2329 │ │ (effect) => effect.status === "succeeded", 2026-10-24T23:08:18.0173247Z 2330 │ │ ); 2026-10-24T23:08:18.0173367Z 2331 │ │ if (!settled) yield* Effect.yieldNow; 2026-10-24T23:08:18.0173502Z 2332 │ ╰─▶ } 2026-10-24T23:08:18.0173621Z 2333 │ }).pipe(Effect.provide(layerWorker), Effect.scoped); 2026-10-24T23:08:18.0173679Z ╰──── 2026-10-24T23:08:18.0173684Z 2026-10-24T23:08:18.0173909Z ⚠ eslint(no-unused-vars): Type 'EnvironmentThreadSearchMatch' is imported but never used. 2026-10-24T23:08:18.0174034Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:15:8] 2026-10-24T23:08:18.0174105Z 14 │ threadSearchMatchKey, 2026-10-24T23:08:18.0174190Z 15 │ type EnvironmentThreadSearchMatch, 2026-10-24T23:08:18.0174299Z ·  ──────────────┬───────────── 2026-10-24T23:08:18.0174472Z · ╰── 'EnvironmentThreadSearchMatch' is imported here 2026-10-24T23:08:18.0174579Z 16 │ } from "@t3tools/client-runtime/state/thread-search"; 2026-10-24T23:08:18.0174631Z ╰──── 2026-10-24T23:08:18.0174730Z  help: Consider removing this import. 2026-10-24T23:08:18.0174733Z 2026-10-24T23:08:18.0174980Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:08:18.0175140Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:527:25] 2026-10-24T23:08:18.0175269Z 526 │ // range) the boundary string is identical and the chain would die. 2026-10-24T23:08:18.0175359Z 527 │ }, [nextSnoozeWakeAt, snoozeWakeTick]); 2026-10-24T23:08:18.0175456Z ·  ───────┬────── 2026-10-24T23:08:18.0175621Z · ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T23:08:18.0175757Z 528 │ const v2SearchQuery = props.searchQuery.trim().toLocaleLowerCase(); 2026-10-24T23:08:18.0188124Z ╰──── 2026-10-24T23:08:18.0188463Z  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-24T23:08:18.0188781Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:18.0188785Z 2026-10-24T23:08:18.0188957Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T23:08:18.0189092Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:518:53] 2026-10-24T23:08:18.0189182Z 517 │ if (Number.isNaN(wakeAtMs)) return; 2026-10-24T23:08:18.0189337Z 518 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647); 2026-10-24T23:08:18.0189457Z ·  ─────┬──── 2026-10-24T23:08:18.0189622Z · ╰── Cannot call impure function 2026-10-24T23:08:18.0189708Z 519 │ const id = setTimeout(() => { 2026-10-24T23:08:18.0189764Z ╰──── 2026-10-24T23:08:18.0190042Z  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-24T23:08:18.0190352Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T23:08:18.0190355Z 2026-10-24T23:08:18.0190610Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:08:18.0190739Z ╭─[apps/mobile/src/state/use-vcs-action-state.ts:86:5] 2026-10-24T23:08:18.0190849Z 83 │ const [nowMs, setNowMs] = useState(() => Date.now()); 2026-10-24T23:08:18.0190913Z 84 │ useEffect(() => { 2026-10-24T23:08:18.0190988Z ·  ────┬──── 2026-10-24T23:08:18.0191121Z · ╰── This is the containing effect 2026-10-24T23:08:18.0191208Z 85 │ if (!actionState.isRunning) return; 2026-10-24T23:08:18.0191273Z 86 │ setNowMs(Date.now()); 2026-10-24T23:08:18.0191344Z ·  ────┬─── 2026-10-24T23:08:18.0191508Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:08:18.0191630Z 87 │ const interval = setInterval(() => setNowMs(Date.now()), 1000); 2026-10-24T23:08:18.0191680Z ╰──── 2026-10-24T23:08:18.0192413Z  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-24T23:08:18.0192771Z  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-24T23:08:18.0192774Z 2026-10-24T23:08:18.0192919Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:08:18.0193070Z ╭─[apps/mobile/src/features/home/thread-swipe-actions.tsx:494:27] 2026-10-24T23:08:18.0193128Z 493 │ > 2026-10-24T23:08:18.0193208Z 494 │ {props.children(close)} 2026-10-24T23:08:18.0193297Z ·  ──┬── 2026-10-24T23:08:18.0193454Z · ╰── Cannot access ref value during render 2026-10-24T23:08:18.0193530Z 495 │ 2026-10-24T23:08:18.0193585Z ╰──── 2026-10-24T23:08:18.0194047Z  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-24T23:08:18.0194331Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:08:18.0194333Z 2026-10-24T23:08:18.0194547Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T23:08:18.0194680Z ╭─[apps/mobile/src/state/use-composer-drafts.ts:1022:15] 2026-10-24T23:08:18.0194749Z 1021 │ instanceId, 2026-10-24T23:08:18.0194893Z 1022 │ { ...(persisted.modelOptionMemory[instanceId] ?? {}), ...models }, 2026-10-24T23:08:18.0195028Z ·  ────────────────────────────────────────────────── 2026-10-24T23:08:18.0195090Z 1023 │ ]), 2026-10-24T23:08:18.0195142Z ╰──── 2026-10-24T23:08:18.0195401Z  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-24T23:08:18.0195403Z 2026-10-24T23:08:18.0195857Z ⚠ 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-24T23:08:18.0195999Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:169:7] 2026-10-24T23:08:18.0196060Z 168 │ }); 2026-10-24T23:08:18.0196260Z 169 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T23:08:18.0196452Z 170 │ │ if ((yield* SubscriptionRef.get(shellState)).status === "synchronizing") break; 2026-10-24T23:08:18.0196556Z 171 │ │ yield* Effect.yieldNow; 2026-10-24T23:08:18.0196685Z 172 │ ╰─▶ } 2026-10-24T23:08:18.0196739Z 173 │ 2026-10-24T23:08:18.0196790Z ╰──── 2026-10-24T23:08:18.0196793Z 2026-10-24T23:08:18.0197241Z ⚠ 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-24T23:08:18.0197436Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:178:7] 2026-10-24T23:08:18.0197571Z 177 │ yield* Deferred.succeed(releaseSave, undefined); 2026-10-24T23:08:18.0197757Z 178 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T23:08:18.0197889Z 179 │ │ if ((yield* Ref.get(saved)).length > 0) break; 2026-10-24T23:08:18.0197990Z 180 │ │ yield* Effect.yieldNow; 2026-10-24T23:08:18.0198118Z 181 │ ╰─▶ } 2026-10-24T23:08:18.0198170Z 182 │ 2026-10-24T23:08:18.0198220Z ╰──── 2026-10-24T23:08:18.0198223Z 2026-10-24T23:08:18.0198667Z ⚠ 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-24T23:08:18.0198812Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:307:7] 2026-10-24T23:08:18.0198937Z 306 │ yield* Deferred.succeed(releaseUnenrichedSave, undefined); 2026-10-24T23:08:18.0199123Z 307 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T23:08:18.0199243Z 308 │ │ const values = yield* Ref.get(saved); 2026-10-24T23:08:18.0199431Z 309 │ │ if (values.length > 0 && values.at(-1)?.projects[0]?.repositoryIdentity != null) { 2026-10-24T23:08:18.0199516Z 310 │ │ break; 2026-10-24T23:08:18.0199593Z 311 │ │ } 2026-10-24T23:08:18.0199694Z 312 │ │ yield* Effect.yieldNow; 2026-10-24T23:08:18.0199825Z 313 │ ╰─▶ } 2026-10-24T23:08:18.0199881Z 314 │ 2026-10-24T23:08:18.0199931Z ╰──── 2026-10-24T23:08:18.0199934Z 2026-10-24T23:08:18.0200378Z ⚠ 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-24T23:08:18.0200528Z ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1680:7] 2026-10-24T23:08:18.0200618Z 1679 │ yield* harness.replaceSession; 2026-10-24T23:08:18.0200820Z 1680 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T23:08:18.0201015Z 1681 │ │ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) { 2026-10-24T23:08:18.0201132Z 1682 │ │ break; 2026-10-24T23:08:18.0201210Z 1683 │ │ } 2026-10-24T23:08:18.0201314Z 1684 │ │ yield* Effect.yieldNow; 2026-10-24T23:08:18.0201443Z 1685 │ ╰─▶ } 2026-10-24T23:08:18.0201514Z 1686 │ yield* Queue.offer( 2026-10-24T23:08:18.0201566Z ╰──── 2026-10-24T23:08:18.0201568Z 2026-10-24T23:08:18.0202026Z ⚠ 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-24T23:08:18.0202211Z ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1789:7] 2026-10-24T23:08:18.0202305Z 1788 │ yield* harness.replaceSession; 2026-10-24T23:08:18.0202504Z 1789 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T23:08:18.0202661Z 1790 │ │ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) break; 2026-10-24T23:08:18.0202765Z 1791 │ │ yield* Effect.yieldNow; 2026-10-24T23:08:18.0202893Z 1792 │ ╰─▶ } 2026-10-24T23:08:18.0203018Z 1793 │ expect(yield* Ref.get(harness.subscriptionCount)).toBe(2); 2026-10-24T23:08:18.0203070Z ╰──── 2026-10-24T23:08:18.0203072Z 2026-10-24T23:08:18.0203235Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T23:08:18.0203391Z ╭─[apps/web/src/components/CommandPaletteThreadItems.tsx:152:58] 2026-10-24T23:08:18.0203567Z 151 │ if (threadSearchQuery.trim().length > 0 && !threadSearchQuery.startsWith(">") && !isOpen) { 2026-10-24T23:08:18.0203697Z 152 │ claimThreadOpen(thread.environmentId, thread.id, Date.now()); 2026-10-24T23:08:18.0203816Z ·  ─────┬──── 2026-10-24T23:08:18.0203980Z · ╰── Cannot call impure function 2026-10-24T23:08:18.0204035Z 153 │ } 2026-10-24T23:08:18.0204085Z ╰──── 2026-10-24T23:08:18.0204364Z  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-24T23:08:18.0204656Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T23:08:18.0204661Z 2026-10-24T23:08:18.0204856Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:08:18.0204992Z ╭─[apps/mobile/src/state/use-thread-outbox-drain.ts:1321:5] 2026-10-24T23:08:18.0205076Z 1320 │ queuedMessagesByThreadKey, 2026-10-24T23:08:18.0205139Z 1321 │ retryTick, 2026-10-24T23:08:18.0205212Z ·  ────┬──── 2026-10-24T23:08:18.0205348Z · ╰── Unnecessary dependency `retryTick` 2026-10-24T23:08:18.0205419Z 1322 │ restoreQueuedMessage, 2026-10-24T23:08:18.0205469Z ╰──── 2026-10-24T23:08:18.0205755Z  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-24T23:08:18.0206109Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:18.0206141Z 2026-10-24T23:08:18.0206325Z ⚠ eslint(no-unused-vars): Identifier 'Arr' is imported but never used. 2026-10-24T23:08:18.0206454Z ╭─[packages/client-runtime/src/state/threadSort.ts:4:13] 2026-10-24T23:08:18.0206570Z 3 │ import type { EnvironmentThreadShell } from "./models.ts"; 2026-10-24T23:08:18.0206649Z 4 │ import * as Arr from "effect/Array"; 2026-10-24T23:08:18.0206718Z ·  ─┬─ 2026-10-24T23:08:18.0206839Z · ╰── 'Arr' is imported here 2026-10-24T23:08:18.0206921Z 5 │ import * as Order from "effect/Order"; 2026-10-24T23:08:18.0206970Z ╰──── 2026-10-24T23:08:18.0207071Z  help: Consider removing this import. 2026-10-24T23:08:18.0207076Z 2026-10-24T23:08:18.0207262Z ⚠ eslint(no-unused-vars): Identifier 'Order' is imported but never used. 2026-10-24T23:08:18.0207389Z ╭─[packages/client-runtime/src/state/threadSort.ts:5:13] 2026-10-24T23:08:18.0207465Z 4 │ import * as Arr from "effect/Array"; 2026-10-24T23:08:18.0207543Z 5 │ import * as Order from "effect/Order"; 2026-10-24T23:08:18.0207615Z ·  ──┬── 2026-10-24T23:08:18.0207741Z · ╰── 'Order' is imported here 2026-10-24T23:08:18.0207793Z 6 │ 2026-10-24T23:08:18.0207842Z ╰──── 2026-10-24T23:08:18.0207936Z  help: Consider removing this import. 2026-10-24T23:08:18.0207939Z 2026-10-24T23:08:18.0208138Z ⚠ eslint(no-unused-vars): Identifier 'Duration' is imported but never used. 2026-10-24T23:08:18.0208273Z ╭─[packages/provider-pi/src/server/adapter.test.ts:24:13] 2026-10-24T23:08:18.0208363Z 23 │ import * as Deferred from "effect/Deferred"; 2026-10-24T23:08:18.0208454Z 24 │ import * as Duration from "effect/Duration"; 2026-10-24T23:08:18.0208531Z ·  ────┬─── 2026-10-24T23:08:18.0208661Z · ╰── 'Duration' is imported here 2026-10-24T23:08:18.0208744Z 25 │ import * as Effect from "effect/Effect"; 2026-10-24T23:08:18.0208794Z ╰──── 2026-10-24T23:08:18.0208886Z  help: Consider removing this import. 2026-10-24T23:08:18.0208888Z 2026-10-24T23:08:18.0209064Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T23:08:18.0209249Z ╭─[apps/mobile/src/features/keyboard/HardwareKeyboardCommandProvider.tsx:116:34] 2026-10-24T23:08:18.0209321Z 115 │ return [...commands]; 2026-10-24T23:08:18.0209451Z 116 │ }, [activeThreadRef, pathname, registrationVersion, navigation]); 2026-10-24T23:08:18.0209563Z ·  ─────────┬───────── 2026-10-24T23:08:18.0209739Z · ╰── Unnecessary dependency `registrationVersion` 2026-10-24T23:08:18.0209791Z 117 │ 2026-10-24T23:08:18.0209840Z ╰──── 2026-10-24T23:08:18.0210148Z  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-24T23:08:18.0210501Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:18.0210535Z 2026-10-24T23:08:18.0210782Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T23:08:18.0210906Z ╭─[packages/provider-pi/src/server/adapter.ts:3405:7] 2026-10-24T23:08:18.0210957Z 3404 │ 2026-10-24T23:08:18.0211141Z 3405 │ const layer: Layer.Layer = 2026-10-24T23:08:18.0211208Z ·  ──┬── 2026-10-24T23:08:18.0211332Z · ╰── 'layer' is declared here 2026-10-24T23:08:18.0211396Z 3406 │ Layer.effect( 2026-10-24T23:08:18.0211446Z ╰──── 2026-10-24T23:08:18.0211547Z  help: Consider removing this declaration. 2026-10-24T23:08:18.0211549Z 2026-10-24T23:08:18.0211880Z ⚠ 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-24T23:08:18.0212058Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:50:18] 2026-10-24T23:08:18.0212216Z 49 │ for (const tool of ["sendMessage", "followupTask", "interruptAgent", "listAgents"]) { 2026-10-24T23:08:18.0212381Z 50 │ assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true); 2026-10-24T23:08:18.0212465Z ·  ───────── 2026-10-24T23:08:18.0212639Z 51 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true); 2026-10-24T23:08:18.0212689Z ╰──── 2026-10-24T23:08:18.0212691Z 2026-10-24T23:08:18.0213016Z ⚠ 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-24T23:08:18.0213159Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:51:18] 2026-10-24T23:08:18.0213321Z 50 │ assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true); 2026-10-24T23:08:18.0213491Z 51 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true); 2026-10-24T23:08:18.0213572Z ·  ───────── 2026-10-24T23:08:18.0213623Z 52 │ } 2026-10-24T23:08:18.0213671Z ╰──── 2026-10-24T23:08:18.0213674Z 2026-10-24T23:08:18.0213993Z ⚠ 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-24T23:08:18.0214128Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:55:5] 2026-10-24T23:08:18.0214193Z 54 │ assert.equal( 2026-10-24T23:08:18.0214360Z 55 │ Schema.is(CodexSchema.ServerNotification__CollabAgentToolCallStatus)("interrupted"), 2026-10-24T23:08:18.0214431Z ·  ───────── 2026-10-24T23:08:18.0214486Z 56 │ true, 2026-10-24T23:08:18.0214534Z ╰──── 2026-10-24T23:08:18.0214536Z 2026-10-24T23:08:18.0214852Z ⚠ 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-24T23:08:18.0214988Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:59:5] 2026-10-24T23:08:18.0215048Z 58 │ assert.equal( 2026-10-24T23:08:18.0215221Z 59 │ Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentToolCallStatus)("interrupted"), 2026-10-24T23:08:18.0215290Z ·  ───────── 2026-10-24T23:08:18.0215345Z 60 │ true, 2026-10-24T23:08:18.0215443Z ╰──── 2026-10-24T23:08:18.0215474Z 2026-10-24T23:08:18.0215787Z ⚠ 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-24T23:08:18.0215930Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:103:16] 2026-10-24T23:08:18.0215981Z 102 │ 2026-10-24T23:08:18.0216145Z 103 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse)(resumeResponse), true); 2026-10-24T23:08:18.0216225Z ·  ───────── 2026-10-24T23:08:18.0216278Z 104 │ }); 2026-10-24T23:08:18.0216328Z ╰──── 2026-10-24T23:08:18.0216330Z 2026-10-24T23:08:18.0216532Z ⚠ eslint(no-unused-vars): Function 'summarizePayload' is declared but never used. 2026-10-24T23:08:18.0216670Z ╭─[packages/provider-acp/src/server/nativeLogging.ts:22:10] 2026-10-24T23:08:18.0216722Z 21 │ 2026-10-24T23:08:18.0216875Z 22 │ function summarizePayload(payload: unknown): Readonly> { 2026-10-24T23:08:18.0216957Z ·  ────────┬─────── 2026-10-24T23:08:18.0217098Z · ╰── 'summarizePayload' is declared here 2026-10-24T23:08:18.0217201Z 23 │ if (payload === null) return { valueType: "null" }; 2026-10-24T23:08:18.0217250Z ╰──── 2026-10-24T23:08:18.0217352Z  help: Consider removing this declaration. 2026-10-24T23:08:18.0217355Z 2026-10-24T23:08:18.0217538Z ⚠ eslint(require-yield): This generator function does not have `yield` 2026-10-24T23:08:18.0217681Z ╭─[packages/provider-acp/src/server/mcpOverAcpBridge.ts:81:78] 2026-10-24T23:08:18.0217734Z  80 │ 2026-10-24T23:08:18.0218004Z  81 │ ╭─▶ export const makeAcpMcpOverAcpBridge = Effect.fn("AcpMcpOverAcpBridge.make")(function* ( 2026-10-24T23:08:18.0218125Z  82 │ │ options: AcpMcpOverAcpBridgeOptions, 2026-10-24T23:08:18.0218249Z  83 │ │ ): Effect.fn.Return { 2026-10-24T23:08:18.0218411Z  84 │ │ const fetchImplementation = options.fetchImplementation ?? fetch; 2026-10-24T23:08:18.0218542Z  85 │ │ const connections = new Map(); 2026-10-24T23:08:18.0218609Z  86 │ │ 2026-10-24T23:08:18.0218813Z  87 │ │ const connectionFor = (connectionId: string): Effect.Effect => 2026-10-24T23:08:18.0218909Z  88 │ │ Effect.suspend(() => { 2026-10-24T23:08:18.0219048Z  89 │ │ const connection = connections.get(connectionId); 2026-10-24T23:08:18.0219159Z  90 │ │ return connection === undefined 2026-10-24T23:08:18.0219366Z  91 │ │ ? Effect.fail(new AcpMcpOverAcpError(`Unknown MCP-over-ACP connection "${connectionId}".`)) 2026-10-24T23:08:18.0219475Z  92 │ │ : Effect.succeed(connection); 2026-10-24T23:08:18.0219549Z  93 │ │ }); 2026-10-24T23:08:18.0219615Z  94 │ │ 2026-10-24T23:08:18.0219697Z  95 │ │ const send = ( 2026-10-24T23:08:18.0219794Z  96 │ │ connection: Connection, 2026-10-24T23:08:18.0219884Z  97 │ │ message: unknown, 2026-10-24T23:08:18.0220092Z  98 │ │ ): Effect.Effect, AcpMcpOverAcpError> => 2026-10-24T23:08:18.0220232Z  99 │ │ connection.mutex.withPermits(1)( 2026-10-24T23:08:18.0220335Z 100 │ │ Effect.gen(function* () { 2026-10-24T23:08:18.0220454Z 101 │ │ const body = JSON.stringify(message); 2026-10-24T23:08:18.0220589Z 102 │ │ if (Buffer.byteLength(body) > MAX_MESSAGE_BYTES) { 2026-10-24T23:08:18.0220793Z 103 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("MCP-over-ACP message exceeds 8 MiB.")); 2026-10-24T23:08:18.0220870Z 104 │ │ } 2026-10-24T23:08:18.0220998Z 105 │ │ const response = yield* Effect.tryPromise({ 2026-10-24T23:08:18.0221093Z 106 │ │ try: (signal) => 2026-10-24T23:08:18.0221227Z 107 │ │ fetchImplementation(options.endpoint, { 2026-10-24T23:08:18.0221329Z 108 │ │ method: "POST", 2026-10-24T23:08:18.0221419Z 109 │ │ signal, 2026-10-24T23:08:18.0221513Z 110 │ │ headers: { 2026-10-24T23:08:18.0221639Z 111 │ │ "content-type": "application/json", 2026-10-24T23:08:18.0221774Z 112 │ │ accept: "application/json, text/event-stream", 2026-10-24T23:08:18.0221903Z 113 │ │ authorization: options.authorization, 2026-10-24T23:08:18.0222036Z 114 │ │ ...(connection.sessionId === null 2026-10-24T23:08:18.0222157Z 115 │ │ ? {} 2026-10-24T23:08:18.0222301Z 116 │ │ : { "mcp-session-id": connection.sessionId }), 2026-10-24T23:08:18.0222431Z 117 │ │ ...(connection.protocolVersion === null 2026-10-24T23:08:18.0222519Z 118 │ │ ? {} 2026-10-24T23:08:18.0222679Z 119 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-24T23:08:18.0222760Z 120 │ │ }, 2026-10-24T23:08:18.0222846Z 121 │ │ body, 2026-10-24T23:08:18.0222932Z 122 │ │ }), 2026-10-24T23:08:18.0223031Z 123 │ │ catch: bridgeError, 2026-10-24T23:08:18.0223109Z 124 │ │ }); 2026-10-24T23:08:18.0223319Z 125 │ │ connection.sessionId = response.headers.get("mcp-session-id") ?? connection.sessionId; 2026-10-24T23:08:18.0223421Z 126 │ │ if (!response.ok) { 2026-10-24T23:08:18.0223524Z 127 │ │ yield* Effect.promise( 2026-10-24T23:08:18.0223701Z 128 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-24T23:08:18.0223779Z 129 │ │ ); 2026-10-24T23:08:18.0223888Z 130 │ │ return yield* Effect.fail( 2026-10-24T23:08:18.0224091Z 131 │ │ new AcpMcpOverAcpError(`T3 Code MCP endpoint responded with HTTP ${response.status}.`), 2026-10-24T23:08:18.0224167Z 132 │ │ ); 2026-10-24T23:08:18.0224242Z 133 │ │ } 2026-10-24T23:08:18.0224498Z 134 │ │ const payloads = [...(yield* Stream.runCollect(responsePayloads(response, bridgeError)))]; 2026-10-24T23:08:18.0224646Z 135 │ │ for (const payload of payloads) { 2026-10-24T23:08:18.0224853Z 136 │ │ connection.protocolVersion = protocolVersionOf(payload) ?? connection.protocolVersion; 2026-10-24T23:08:18.0224928Z 137 │ │ } 2026-10-24T23:08:18.0225024Z 138 │ │ return payloads; 2026-10-24T23:08:18.0225142Z 139 │ │ }).pipe(Effect.mapError(bridgeError)), 2026-10-24T23:08:18.0225214Z 140 │ │ ); 2026-10-24T23:08:18.0225281Z 141 │ │ 2026-10-24T23:08:18.0225450Z 142 │ │ const disconnect = Effect.fn("mcpOverAcpBridge.disconnect")(function* ( 2026-10-24T23:08:18.0225572Z 143 │ │ request: AcpSchema.DisconnectMcpRequest, 2026-10-24T23:08:18.0225755Z 144 │ │ ): Effect.fn.Return { 2026-10-24T23:08:18.0225914Z 145 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T23:08:18.0226036Z 146 │ │ connections.delete(request.connectionId); 2026-10-24T23:08:18.0226153Z 147 │ │ const sessionId = connection.sessionId; 2026-10-24T23:08:18.0226252Z 148 │ │ if (sessionId !== null) { 2026-10-24T23:08:18.0226378Z 149 │ │ const response = yield* Effect.tryPromise({ 2026-10-24T23:08:18.0226482Z 150 │ │ try: (signal) => 2026-10-24T23:08:18.0226648Z 151 │ │ fetchImplementation(options.endpoint, { 2026-10-24T23:08:18.0226750Z 152 │ │ method: "DELETE", 2026-10-24T23:08:18.0226838Z 153 │ │ signal, 2026-10-24T23:08:18.0226928Z 154 │ │ headers: { 2026-10-24T23:08:18.0227055Z 155 │ │ authorization: options.authorization, 2026-10-24T23:08:18.0227171Z 156 │ │ "mcp-session-id": sessionId, 2026-10-24T23:08:18.0227298Z 157 │ │ ...(connection.protocolVersion === null 2026-10-24T23:08:18.0227385Z 158 │ │ ? {} 2026-10-24T23:08:18.0227543Z 159 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-24T23:08:18.0227624Z 160 │ │ }, 2026-10-24T23:08:18.0227701Z 161 │ │ }), 2026-10-24T23:08:18.0227863Z 162 │ │ catch: bridgeError, 2026-10-24T23:08:18.0227976Z 163 │ │ }); 2026-10-24T23:08:18.0228108Z 164 │ │ if (!response.ok && response.status !== 404) { 2026-10-24T23:08:18.0228215Z 165 │ │ return yield* Effect.fail( 2026-10-24T23:08:18.0228324Z 166 │ │ new AcpMcpOverAcpError( 2026-10-24T23:08:18.0228506Z 167 │ │ `T3 Code MCP endpoint rejected disconnect with HTTP ${response.status}.`, 2026-10-24T23:08:18.0228586Z 168 │ │ ), 2026-10-24T23:08:18.0228662Z 169 │ │ ); 2026-10-24T23:08:18.0228740Z 170 │ │ } 2026-10-24T23:08:18.0228843Z 171 │ │ yield* Effect.promise( 2026-10-24T23:08:18.0229023Z 172 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-24T23:08:18.0229101Z 173 │ │ ); 2026-10-24T23:08:18.0229175Z 174 │ │ } 2026-10-24T23:08:18.0229259Z 175 │ │ return {}; 2026-10-24T23:08:18.0229334Z 176 │ │ }); 2026-10-24T23:08:18.0229400Z 177 │ │ 2026-10-24T23:08:18.0229481Z 178 │ │ return { 2026-10-24T23:08:18.0229652Z 179 │ │ connect: Effect.fn("mcpOverAcpBridge.connect")(function* (request) { 2026-10-24T23:08:18.0229771Z 180 │ │ if (request.serverId !== "t3-code") { 2026-10-24T23:08:18.0229877Z 181 │ │ return yield* Effect.fail( 2026-10-24T23:08:18.0230067Z 182 │ │ new AcpMcpOverAcpError(`Unknown ACP MCP server "${request.serverId}".`), 2026-10-24T23:08:18.0230149Z 183 │ │ ); 2026-10-24T23:08:18.0230225Z 184 │ │ } 2026-10-24T23:08:18.0230348Z 185 │ │ if (connections.size >= MAX_CONNECTIONS) { 2026-10-24T23:08:18.0230554Z 186 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("Too many MCP-over-ACP connections.")); 2026-10-24T23:08:18.0230636Z 187 │ │ } 2026-10-24T23:08:18.0230790Z 188 │ │ const connectionId = yield* options.allocateConnectionId; 2026-10-24T23:08:18.0230903Z 189 │ │ connections.set(connectionId, { 2026-10-24T23:08:18.0231020Z 190 │ │ mutex: yield* Semaphore.make(1), 2026-10-24T23:08:18.0231117Z 191 │ │ sessionId: null, 2026-10-24T23:08:18.0231227Z 192 │ │ protocolVersion: null, 2026-10-24T23:08:18.0231327Z 193 │ │ nextRequestId: 0, 2026-10-24T23:08:18.0231406Z 194 │ │ }); 2026-10-24T23:08:18.0231508Z 195 │ │ return { connectionId }; 2026-10-24T23:08:18.0231583Z 196 │ │ }), 2026-10-24T23:08:18.0231749Z 197 │ │ message: Effect.fn("mcpOverAcpBridge.message")(function* (request) { 2026-10-24T23:08:18.0231907Z 198 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T23:08:18.0232057Z 199 │ │ const id = ++connection.nextRequestId; 2026-10-24T23:08:18.0232183Z 200 │ │ const payloads = yield* send(connection, { 2026-10-24T23:08:18.0232344Z 201 │ │ jsonrpc: "2.0", 2026-10-24T23:08:18.0232454Z 202 │ │ id, 2026-10-24T23:08:18.0232557Z 203 │ │ method: request.method, 2026-10-24T23:08:18.0232714Z 204 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-24T23:08:18.0232789Z 205 │ │ }); 2026-10-24T23:08:18.0232975Z 206 │ │ const response = payloads.find((payload) => asEnvelope(payload)?.id === id); 2026-10-24T23:08:18.0233097Z 207 │ │ const envelope = asEnvelope(response); 2026-10-24T23:08:18.0233198Z 208 │ │ if (envelope === null) { 2026-10-24T23:08:18.0233306Z 209 │ │ return yield* Effect.fail( 2026-10-24T23:08:18.0233491Z 210 │ │ new AcpMcpOverAcpError("MCP server did not return a matching response."), 2026-10-24T23:08:18.0233571Z 211 │ │ ); 2026-10-24T23:08:18.0233647Z 212 │ │ } 2026-10-24T23:08:18.0233764Z 213 │ │ if (envelope.error !== undefined) { 2026-10-24T23:08:18.0233952Z 214 │ │ return yield* Effect.fail(new AcpMcpOverAcpError(errorMessage(envelope.error))); 2026-10-24T23:08:18.0234028Z 215 │ │ } 2026-10-24T23:08:18.0234195Z 216 │ │ return (envelope.result ?? null) as AcpSchema.MessageMcpResponse; 2026-10-24T23:08:18.0234270Z 217 │ │ }), 2026-10-24T23:08:18.0234455Z 218 │ │ notification: Effect.fn("mcpOverAcpBridge.notification")(function* (request) { 2026-10-24T23:08:18.0234617Z 219 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T23:08:18.0234723Z 220 │ │ yield* send(connection, { 2026-10-24T23:08:18.0234820Z 221 │ │ jsonrpc: "2.0", 2026-10-24T23:08:18.0234918Z 222 │ │ method: request.method, 2026-10-24T23:08:18.0235075Z 223 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-24T23:08:18.0235151Z 224 │ │ }); 2026-10-24T23:08:18.0235227Z 225 │ │ }), 2026-10-24T23:08:18.0235310Z 226 │ │ disconnect, 2026-10-24T23:08:18.0235419Z 227 │ │ dispose: Effect.suspend(() => 2026-10-24T23:08:18.0235515Z 228 │ │ Effect.forEach( 2026-10-24T23:08:18.0235620Z 229 │ │ [...connections.keys()], 2026-10-24T23:08:18.0235789Z 230 │ │ (connectionId) => disconnect({ connectionId }).pipe(Effect.ignore), 2026-10-24T23:08:18.0235891Z 231 │ │ { discard: true }, 2026-10-24T23:08:18.0235969Z 232 │ │ ), 2026-10-24T23:08:18.0236045Z 233 │ │ ), 2026-10-24T23:08:18.0236117Z 234 │ │ }; 2026-10-24T23:08:18.0236244Z 235 │ ╰─▶ }); 2026-10-24T23:08:18.0236297Z ╰──── 2026-10-24T23:08:18.0236547Z  help: Add a `yield` expression inside the generator body, or convert it to a regular function if iteration behavior is not needed. 2026-10-24T23:08:18.0236550Z 2026-10-24T23:08:18.0236744Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:08:18.0236960Z ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:155:7] 2026-10-24T23:08:18.0237044Z 154 │ } 2026-10-24T23:08:18.0237114Z 155 │ }, [wrappedRender]); 2026-10-24T23:08:18.0237192Z ·  ──────┬────── 2026-10-24T23:08:18.0237342Z · ╰── Unnecessary dependency `wrappedRender` 2026-10-24T23:08:18.0237396Z 156 │ 2026-10-24T23:08:18.0237449Z ╰──── 2026-10-24T23:08:18.0237736Z  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-24T23:08:18.0238044Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:18.0238047Z 2026-10-24T23:08:18.0238288Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T23:08:18.0238451Z ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:800:42] 2026-10-24T23:08:18.0238509Z 799 │ > 2026-10-24T23:08:18.0238633Z 800 │ 2026-10-24T23:08:18.0238758Z ·  ──────────────────── 2026-10-24T23:08:18.0238858Z 801 │ 2026-10-24T23:08:18.0238910Z ╰──── 2026-10-24T23:08:18.0239127Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T23:08:18.0239265Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T23:08:18.0239268Z 2026-10-24T23:08:18.0239427Z ⚠ react(immutability): This value cannot be modified 2026-10-24T23:08:18.0239587Z ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:42:5] 2026-10-24T23:08:18.0239638Z 35 │ 2026-10-24T23:08:18.0239776Z 36 │ const inspectorProgress = useSharedValue(inspectorVisible ? 1 : 0); 2026-10-24T23:08:18.0239862Z ·  ────────┬──────── 2026-10-24T23:08:18.0240007Z · ╰── `inspectorProgress` originates here 2026-10-24T23:08:18.0240099Z 37 │ const { renderedInspectorWidth } = props; 2026-10-24T23:08:18.0240231Z 38 │ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0); 2026-10-24T23:08:18.0240283Z 39 │ 2026-10-24T23:08:18.0240363Z 40 │ const onClosed = props.onClosed; 2026-10-24T23:08:18.0240426Z 41 │ useEffect(() => { 2026-10-24T23:08:18.0240520Z 42 │ inspectorProgress.value = withTiming( 2026-10-24T23:08:18.0240604Z ·  ────────┬──────── 2026-10-24T23:08:18.0240748Z · ╰── `inspectorProgress` cannot be modified 2026-10-24T23:08:18.0240824Z 43 │ inspectorVisible ? 1 : 0, 2026-10-24T23:08:18.0240877Z ╰──── 2026-10-24T23:08:18.0241140Z  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-24T23:08:18.0241440Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:08:18.0241443Z 2026-10-24T23:08:18.0241593Z ⚠ react(immutability): This value cannot be modified 2026-10-24T23:08:18.0241794Z ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:67:7] 2026-10-24T23:08:18.0241913Z 37 │ const { renderedInspectorWidth } = props; 2026-10-24T23:08:18.0242054Z 38 │ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0); 2026-10-24T23:08:18.0242170Z ·  ──────────┬───────── 2026-10-24T23:08:18.0242320Z · ╰── `renderedContentWidth` originates here 2026-10-24T23:08:18.0242373Z 39 │ 2026-10-24T23:08:18.0242452Z 40 │ const onClosed = props.onClosed; 2026-10-24T23:08:18.0242513Z 41 │ useEffect(() => { 2026-10-24T23:08:18.0242602Z 42 │ inspectorProgress.value = withTiming( 2026-10-24T23:08:18.0242680Z 43 │ inspectorVisible ? 1 : 0, 2026-10-24T23:08:18.0242752Z 44 │ WORKSPACE_PANE_TIMING, 2026-10-24T23:08:18.0242817Z 45 │ (finished) => { 2026-10-24T23:08:18.0242960Z 46 │ if (finished === true && !inspectorVisible && onClosed !== undefined) { 2026-10-24T23:08:18.0243036Z 47 │ runOnJS(onClosed)(); 2026-10-24T23:08:18.0243094Z 48 │ } 2026-10-24T23:08:18.0243147Z 49 │ }, 2026-10-24T23:08:18.0243202Z 50 │ ); 2026-10-24T23:08:18.0243333Z 51 │ const targetWidth = inspectorVisible ? (inspectorWidth ?? 0) : 0; 2026-10-24T23:08:18.0243409Z 52 │ renderedInspectorWidth.set( 2026-10-24T23:08:18.0243549Z 53 │ resizing ? targetWidth : withTiming(targetWidth, WORKSPACE_PANE_TIMING), 2026-10-24T23:08:18.0243604Z 54 │ ); 2026-10-24T23:08:18.0243665Z 55 │ }, [ 2026-10-24T23:08:18.0243738Z 56 │ inspectorProgress, 2026-10-24T23:08:18.0243802Z 57 │ inspectorVisible, 2026-10-24T23:08:18.0243866Z 58 │ inspectorWidth, 2026-10-24T23:08:18.0243927Z 59 │ onClosed, 2026-10-24T23:08:18.0244000Z 60 │ renderedInspectorWidth, 2026-10-24T23:08:18.0244063Z 61 │ resizing, 2026-10-24T23:08:18.0244120Z 62 │ ]); 2026-10-24T23:08:18.0244171Z 63 │ 2026-10-24T23:08:18.0244232Z 64 │ useEffect(() => { 2026-10-24T23:08:18.0244323Z 65 │ const targetWidth = inspectorWidth ?? 0; 2026-10-24T23:08:18.0244409Z 66 │ if (!inspectorVisible || resizing) { 2026-10-24T23:08:18.0244507Z 67 │ renderedContentWidth.value = targetWidth; 2026-10-24T23:08:18.0244592Z ·  ──────────┬───────── 2026-10-24T23:08:18.0244746Z · ╰── `renderedContentWidth` cannot be modified 2026-10-24T23:08:18.0244806Z 68 │ return; 2026-10-24T23:08:18.0244858Z ╰──── 2026-10-24T23:08:18.0245113Z  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-24T23:08:18.0245416Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:08:18.0245421Z 2026-10-24T23:08:18.0245671Z ⚠ eslint(no-unused-vars): Function 'promptResponseHasMissingXAiStopReason' is declared but never used. 2026-10-24T23:08:18.0245824Z ╭─[packages/provider-grok/src/server/xaiAcpExtension.ts:1620:10] 2026-10-24T23:08:18.0245880Z 1619 │ 2026-10-24T23:08:18.0246084Z 1620 │ function promptResponseHasMissingXAiStopReason(response: EffectAcpSchema.PromptResponse): boolean { 2026-10-24T23:08:18.0246203Z ·  ──────────────────┬────────────────── 2026-10-24T23:08:18.0246400Z · ╰── 'promptResponseHasMissingXAiStopReason' is declared here 2026-10-24T23:08:18.0246530Z 1621 │ const meta = response._meta; 2026-10-24T23:08:18.0246611Z ╰──── 2026-10-24T23:08:18.0246717Z  help: Consider removing this declaration. 2026-10-24T23:08:18.0246720Z 2026-10-24T23:08:18.0247171Z ⚠ 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-24T23:08:18.0247297Z ╭─[packages/effect-acp/src/protocol.test.ts:500:31] 2026-10-24T23:08:18.0247349Z 499 │ 2026-10-24T23:08:18.0247463Z 500 │ const response = yield* Schema.decodeUnknownEffect( 2026-10-24T23:08:18.0247582Z ·  ────────────────────────── 2026-10-24T23:08:18.0247690Z 501 │ Schema.fromJsonString(JsonRpcErrorResponse), 2026-10-24T23:08:18.0247739Z ╰──── 2026-10-24T23:08:18.0247748Z 2026-10-24T23:08:18.0248113Z ⚠ 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-24T23:08:18.0248227Z ╭─[packages/effect-acp/src/client.ts:1269:11] 2026-10-24T23:08:18.0248375Z 1268 │ extNotificationHandlers.set(CLIENT_METHODS.mcp_message, (params) => 2026-10-24T23:08:18.0248544Z 1269 │ Schema.decodeUnknownEffect(AcpSchemaV2.MessageMcpNotification)(params).pipe( 2026-10-24T23:08:18.0248645Z ·  ────────────────────────── 2026-10-24T23:08:18.0248789Z 1270 │ Effect.mapError(() => AcpError.AcpRequestError.invalidParams()), 2026-10-24T23:08:18.0248841Z ╰──── 2026-10-24T23:08:18.0248844Z 2026-10-24T23:08:18.0249100Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T23:08:18.0249227Z ╭─[packages/provider-grok/src/server/adapter.ts:408:7] 2026-10-24T23:08:18.0249282Z 407 │ 2026-10-24T23:08:18.0249353Z 408 │ const layer: Layer.Layer< 2026-10-24T23:08:18.0249422Z ·  ──┬── 2026-10-24T23:08:18.0249542Z · ╰── 'layer' is declared here 2026-10-24T23:08:18.0249634Z 409 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T23:08:18.0249687Z ╰──── 2026-10-24T23:08:18.0249789Z  help: Consider removing this declaration. 2026-10-24T23:08:18.0249791Z 2026-10-24T23:08:18.0250281Z ⚠ 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-24T23:08:18.0250436Z ╭─[packages/effect-acp/src/errors.test.ts:129:28] 2026-10-24T23:08:18.0250529Z 128 │ const secret = "acp-summary-secret"; 2026-10-24T23:08:18.0250639Z 129 │ const cause = yield* Schema.decodeUnknownEffect( 2026-10-24T23:08:18.0250752Z ·  ────────────────────────── 2026-10-24T23:08:18.0250820Z 130 │ Schema.Struct({ 2026-10-24T23:08:18.0250871Z ╰──── 2026-10-24T23:08:18.0250873Z 2026-10-24T23:08:18.0251325Z ⚠ 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-24T23:08:18.0251457Z ╭─[packages/client-runtime/src/rpc/client.test.ts:131:9] 2026-10-24T23:08:18.0251523Z 130 │ ) { 2026-10-24T23:08:18.0251733Z 131 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T23:08:18.0251856Z 132 │ │ if (subscriptions.length >= count) { 2026-10-24T23:08:18.0251946Z 133 │ │ return; 2026-10-24T23:08:18.0252034Z 134 │ │ } 2026-10-24T23:08:18.0252209Z 135 │ │ yield* Effect.yieldNow; 2026-10-24T23:08:18.0252370Z 136 │ ╰─▶ } 2026-10-24T23:08:18.0252534Z 137 │ return yield* Effect.die(new Error(`Expected ${count} durable subscriptions.`)); 2026-10-24T23:08:18.0252584Z ╰──── 2026-10-24T23:08:18.0252587Z 2026-10-24T23:08:18.0253039Z ⚠ 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-24T23:08:18.0253173Z ╭─[packages/client-runtime/src/rpc/client.test.ts:252:7] 2026-10-24T23:08:18.0253331Z 251 │ yield* SubscriptionRef.set(activeSession, Option.some(session(firstClient))); 2026-10-24T23:08:18.0253579Z 252 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 1; attempt += 1) { 2026-10-24T23:08:18.0253682Z 253 │ │ yield* Effect.yieldNow; 2026-10-24T23:08:18.0253811Z 254 │ ╰─▶ } 2026-10-24T23:08:18.0253933Z 255 │ yield* SubscriptionRef.set(activeSession, Option.none()); 2026-10-24T23:08:18.0253991Z ╰──── 2026-10-24T23:08:18.0253996Z 2026-10-24T23:08:18.0254438Z ⚠ 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-24T23:08:18.0254568Z ╭─[packages/client-runtime/src/rpc/client.test.ts:258:7] 2026-10-24T23:08:18.0254624Z 257 │ 2026-10-24T23:08:18.0254866Z 258 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-24T23:08:18.0254967Z 259 │ │ yield* Effect.yieldNow; 2026-10-24T23:08:18.0255095Z 260 │ ╰─▶ } 2026-10-24T23:08:18.0255247Z 261 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-24T23:08:18.0255350Z ╰──── 2026-10-24T23:08:18.0255353Z 2026-10-24T23:08:18.0255795Z ⚠ 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-24T23:08:18.0255923Z ╭─[packages/client-runtime/src/rpc/client.test.ts:322:7] 2026-10-24T23:08:18.0255984Z 321 │ ); 2026-10-24T23:08:18.0256233Z 322 │ ╭─▶ for (let attempt = 0; attempt < 100 && observedFailures.length < 1; attempt += 1) { 2026-10-24T23:08:18.0256336Z 323 │ │ yield* Effect.yieldNow; 2026-10-24T23:08:18.0256462Z 324 │ ╰─▶ } 2026-10-24T23:08:18.0256522Z 325 │ 2026-10-24T23:08:18.0256575Z ╰──── 2026-10-24T23:08:18.0256577Z 2026-10-24T23:08:18.0257019Z ⚠ 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-24T23:08:18.0257148Z ╭─[packages/client-runtime/src/rpc/client.test.ts:330:7] 2026-10-24T23:08:18.0257305Z 329 │ yield* SubscriptionRef.set(activeSession, Option.some(session(secondClient))); 2026-10-24T23:08:18.0257545Z 330 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-24T23:08:18.0257646Z 331 │ │ yield* Effect.yieldNow; 2026-10-24T23:08:18.0257776Z 332 │ ╰─▶ } 2026-10-24T23:08:18.0257877Z 333 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-24T23:08:18.0257930Z ╰──── 2026-10-24T23:08:18.0257932Z 2026-10-24T23:08:18.0258373Z ⚠ 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-24T23:08:18.0258505Z ╭─[packages/client-runtime/src/rpc/session.test.ts:226:3] 2026-10-24T23:08:18.0258560Z 225 │ ) { 2026-10-24T23:08:18.0258758Z 226 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T23:08:18.0258868Z 227 │ │ const socket = sockets[index]; 2026-10-24T23:08:18.0258959Z 228 │ │ if (socket) { 2026-10-24T23:08:18.0259052Z 229 │ │ return socket; 2026-10-24T23:08:18.0259126Z 230 │ │ } 2026-10-24T23:08:18.0259226Z 231 │ │ yield* Effect.yieldNow; 2026-10-24T23:08:18.0259348Z 232 │ ╰─▶ } 2026-10-24T23:08:18.0259516Z 233 │ return yield* Effect.die(new Error("Expected the RPC protocol to create a websocket.")); 2026-10-24T23:08:18.0259567Z ╰──── 2026-10-24T23:08:18.0259569Z 2026-10-24T23:08:18.0260011Z ⚠ 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-24T23:08:18.0260190Z ╭─[packages/client-runtime/src/rpc/session.test.ts:240:3] 2026-10-24T23:08:18.0260273Z 239 │ ) { 2026-10-24T23:08:18.0260466Z 240 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T23:08:18.0260675Z 241 │ │ const request = socket.sent.map((message) => decodeJson(message)).filter(isRpcRequest)[index]; 2026-10-24T23:08:18.0260766Z 242 │ │ if (request) { 2026-10-24T23:08:18.0260859Z 243 │ │ return request; 2026-10-24T23:08:18.0260931Z 244 │ │ } 2026-10-24T23:08:18.0261030Z 245 │ │ yield* Effect.yieldNow; 2026-10-24T23:08:18.0261154Z 246 │ ╰─▶ } 2026-10-24T23:08:18.0261319Z 247 │ return yield* Effect.die(new Error("Expected the RPC protocol to send a request.")); 2026-10-24T23:08:18.0261372Z ╰──── 2026-10-24T23:08:18.0261374Z 2026-10-24T23:08:18.0261701Z ⚠ 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-24T23:08:18.0261816Z ╭─[packages/effect-acp/src/schema.test.ts:18:12] 2026-10-24T23:08:18.0261976Z 17 │ const command = { name: "plan", description: "Make a plan", input: { hint: "Task" } }; 2026-10-24T23:08:18.0262157Z 18 │ expect(Schema.is(V1.AvailableCommand)(command)).toBe(true); 2026-10-24T23:08:18.0262235Z ·  ───────── 2026-10-24T23:08:18.0262294Z 19 │ expect( 2026-10-24T23:08:18.0262345Z ╰──── 2026-10-24T23:08:18.0262347Z 2026-10-24T23:08:18.0262671Z ⚠ 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-24T23:08:18.0262785Z ╭─[packages/effect-acp/src/schema.test.ts:20:7] 2026-10-24T23:08:18.0262847Z 19 │ expect( 2026-10-24T23:08:18.0263009Z 20 │ Schema.is(V2.AvailableCommand)({ ...command, input: { type: "text", hint: "Task" } }), 2026-10-24T23:08:18.0263082Z ·  ───────── 2026-10-24T23:08:18.0263144Z 21 │ ).toBe(true); 2026-10-24T23:08:18.0263195Z ╰──── 2026-10-24T23:08:18.0263197Z 2026-10-24T23:08:18.0263450Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:08:18.0263617Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:333:7] 2026-10-24T23:08:18.0263669Z 328 │ }; 2026-10-24T23:08:18.0263741Z 329 │ useEffect(() => { 2026-10-24T23:08:18.0263815Z ·  ────┬──── 2026-10-24T23:08:18.0263947Z · ╰── This is the containing effect 2026-10-24T23:08:18.0264043Z 330 │ if (!guidesEnabled && section === "guide") { 2026-10-24T23:08:18.0264137Z 331 │ requestedSection.current = "overview"; 2026-10-24T23:08:18.0264304Z 332 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-24T23:08:18.0264378Z 333 │ setSection("overview"); 2026-10-24T23:08:18.0264451Z ·  ─────┬──── 2026-10-24T23:08:18.0264620Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:08:18.0264674Z 334 │ } 2026-10-24T23:08:18.0264727Z ╰──── 2026-10-24T23:08:18.0265365Z  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-24T23:08:18.0265710Z  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-24T23:08:18.0265713Z 2026-10-24T23:08:18.0265915Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T23:08:18.0266082Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:335:6] 2026-10-24T23:08:18.0266180Z 330 │ if (!guidesEnabled && section === "guide") { 2026-10-24T23:08:18.0266272Z 331 │ requestedSection.current = "overview"; 2026-10-24T23:08:18.0266361Z ·  ────────┬─────── 2026-10-24T23:08:18.0266842Z · ╰── 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-24T23:08:18.0267005Z 332 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-24T23:08:18.0267149Z ·  ─────────┬───────── ──────┬────── 2026-10-24T23:08:18.0267632Z · │ ╰── 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-24T23:08:18.0268075Z · ╰── 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-24T23:08:18.0268152Z 333 │ setSection("overview"); 2026-10-24T23:08:18.0268207Z 334 │ } 2026-10-24T23:08:18.0268297Z 335 │ }, [guidesEnabled, section, insets.top]); 2026-10-24T23:08:18.0268409Z ·  ──────────────────┬───────────────── 2026-10-24T23:08:18.0268597Z · ╰── This dependency list is missing values used by the callback 2026-10-24T23:08:18.0268684Z 336 │ const tabContent = activityContent; 2026-10-24T23:08:18.0268734Z ╰──── 2026-10-24T23:08:18.0268899Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T23:08:18.0269211Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:18.0269217Z 2026-10-24T23:08:18.0269417Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T23:08:18.0269583Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:877:6] 2026-10-24T23:08:18.0269640Z 860 │ if ( 2026-10-24T23:08:18.0269755Z 861 │ lastSelection.current.path === route.params.path && 2026-10-24T23:08:18.0269835Z ·  ──────┬────── 2026-10-24T23:08:18.0270319Z · ╰── 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-24T23:08:18.0270488Z 862 │ lastSelection.current.id === route.params.fileSelectionId 2026-10-24T23:08:18.0270543Z 863 │ ) 2026-10-24T23:08:18.0270606Z 864 │ return; 2026-10-24T23:08:18.0270780Z 865 │ lastSelection.current = { path: route.params.path, id: route.params.fileSelectionId }; 2026-10-24T23:08:18.0270912Z 866 │ if (route.params.focus) navigation.setParams({ focus: undefined }); 2026-10-24T23:08:18.0270998Z 867 │ setJumpPath(route.params.path); 2026-10-24T23:08:18.0271071Z 868 │ setSelectedRowId(null); 2026-10-24T23:08:18.0271150Z 869 │ jumpStarted.current = false; 2026-10-24T23:08:18.0271293Z 870 │ const file = data.files.find((entry) => entry.path === route.params.path); 2026-10-24T23:08:18.0271388Z 871 │ if (!file || !nativeView.current) return; 2026-10-24T23:08:18.0271477Z ·  ─────┬──── 2026-10-24T23:08:18.0271904Z · ╰── 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-24T23:08:18.0272059Z 872 │ setCollapsedIds((ids) => ids.filter((id) => id !== file.id)); 2026-10-24T23:08:18.0272138Z 873 │ jumpStarted.current = true; 2026-10-24T23:08:18.0272274Z 874 │ void nativeView.current.scrollToFile(file.id, false).catch(() => { 2026-10-24T23:08:18.0272354Z 875 │ jumpStarted.current = false; 2026-10-24T23:08:18.0272409Z 876 │ }); 2026-10-24T23:08:18.0272602Z 877 │ }, [route.params.path, route.params.fileSelectionId, route.params.focus, data.files, navigation]); 2026-10-24T23:08:18.0272801Z ·  ──────────────────────────────────────────────┬────────────────────────────────────────────── 2026-10-24T23:08:18.0273021Z · ╰── This dependency list is missing values used by the callback 2026-10-24T23:08:18.0273136Z 878 │ const appliedFilter = useRef(filter.hideTestFiles); 2026-10-24T23:08:18.0273186Z ╰──── 2026-10-24T23:08:18.0273350Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T23:08:18.0273656Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:18.0273658Z 2026-10-24T23:08:18.0274155Z ⚠ 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-24T23:08:18.0274335Z ╭─[packages/client-runtime/src/connection/supervisor.test.ts:135:3] 2026-10-24T23:08:18.0274447Z 134 │ let lastState = yield* SubscriptionRef.get(state); 2026-10-24T23:08:18.0274655Z 135 │ ╭─▶ for (let iteration = 0; iteration < 100; iteration += 1) { 2026-10-24T23:08:18.0274791Z 136 │ │ lastState = yield* SubscriptionRef.get(state); 2026-10-24T23:08:18.0274897Z 137 │ │ if (predicate(lastState)) { 2026-10-24T23:08:18.0274991Z 138 │ │ return lastState; 2026-10-24T23:08:18.0275068Z 139 │ │ } 2026-10-24T23:08:18.0275169Z 140 │ │ yield* Effect.yieldNow; 2026-10-24T23:08:18.0275299Z 141 │ ╰─▶ } 2026-10-24T23:08:18.0275378Z 142 │ return yield* Effect.die( 2026-10-24T23:08:18.0275434Z ╰──── 2026-10-24T23:08:18.0275437Z 2026-10-24T23:08:18.0275580Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:08:18.0275696Z ╭─[apps/mobile/src/components/ui/Menu.tsx:54:36] 2026-10-24T23:08:18.0275871Z 53 │ const child = children as ReactElement>; 2026-10-24T23:08:18.0276039Z 54 │ ╭─▶ children = cloneElement(child, { 2026-10-24T23:08:18.0276142Z 55 │ │ onTouchStart: (event) => { 2026-10-24T23:08:18.0276300Z 56 │ │ // Reset for a new touch, not onPressIn, which also fires when a 2026-10-24T23:08:18.0276457Z 57 │ │ // finger moves out of the row and back during the same gesture. 2026-10-24T23:08:18.0276583Z 58 │ │ menuPress.current.isPreparing = false; 2026-10-24T23:08:18.0276748Z 59 │ │ menuPress.current.suppressPress = menuPress.current.isOpen; 2026-10-24T23:08:18.0276859Z 60 │ │ pendingPress.current = null; 2026-10-24T23:08:18.0276975Z 61 │ │ child.props.onTouchStart?.(event); 2026-10-24T23:08:18.0277052Z 62 │ │ }, 2026-10-24T23:08:18.0277154Z 63 │ │ onPress: (event) => { 2026-10-24T23:08:18.0277321Z 64 │ │ // Accessibility clicks have no touch identifier and must not inherit 2026-10-24T23:08:18.0277455Z 65 │ │ // cancellation from a previous physical gesture. 2026-10-24T23:08:18.0277625Z 66 │ │ const isTouch = typeof event.nativeEvent.identifier === "number"; 2026-10-24T23:08:18.0277815Z 67 │ │ if (isTouch ? menuPress.current.suppressPress : menuPress.current.isOpen) { 2026-10-24T23:08:18.0277900Z 68 │ │ return; 2026-10-24T23:08:18.0277974Z 69 │ │ } 2026-10-24T23:08:18.0278114Z 70 │ │ if (isTouch && menuPress.current.isPreparing) { 2026-10-24T23:08:18.0278282Z 71 │ │ // A release can arrive between native menu preparation and display. 2026-10-24T23:08:18.0278448Z 72 │ │ // Let UIKit's display/cancel callback decide this press's outcome. 2026-10-24T23:08:18.0278548Z 73 │ │ event.persist(); 2026-10-24T23:08:18.0278753Z 74 │ │ pendingPress.current = () => child.props.onPress?.(event); 2026-10-24T23:08:18.0278868Z 75 │ │ return; 2026-10-24T23:08:18.0278946Z 76 │ │ } 2026-10-24T23:08:18.0279060Z 77 │ │ child.props.onPress?.(event); 2026-10-24T23:08:18.0279133Z 78 │ │ }, 2026-10-24T23:08:18.0279264Z 79 │ ├─▶ }); 2026-10-24T23:08:18.0279497Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T23:08:18.0279602Z 80 │ menuProps.onMenuInteractionStart = () => { 2026-10-24T23:08:18.0279654Z ╰──── 2026-10-24T23:08:18.0280114Z  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-24T23:08:18.0280404Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:08:18.0280406Z 2026-10-24T23:08:18.0280661Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:08:18.0280846Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:107:5] 2026-10-24T23:08:18.0280897Z 104 │ 2026-10-24T23:08:18.0280967Z 105 │ useEffect(() => { 2026-10-24T23:08:18.0281040Z ·  ────┬──── 2026-10-24T23:08:18.0281170Z · ╰── This is the containing effect 2026-10-24T23:08:18.0281252Z 106 │ clearReviewCommentTarget(); 2026-10-24T23:08:18.0281354Z 107 │ setPendingNativeCommentSelection(null); 2026-10-24T23:08:18.0281459Z ·  ────────────────┬─────────────── 2026-10-24T23:08:18.0281633Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:08:18.0281705Z 108 │ }, [selectedSection?.id]); 2026-10-24T23:08:18.0281758Z ╰──── 2026-10-24T23:08:18.0282374Z  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-24T23:08:18.0282697Z  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-24T23:08:18.0282702Z 2026-10-24T23:08:18.0282954Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:08:18.0283134Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:112:7] 2026-10-24T23:08:18.0283189Z 109 │ 2026-10-24T23:08:18.0283255Z 110 │ useEffect(() => { 2026-10-24T23:08:18.0283329Z ·  ────┬──── 2026-10-24T23:08:18.0283456Z · ╰── This is the containing effect 2026-10-24T23:08:18.0283546Z 111 │ if (activeCommentTarget === null) { 2026-10-24T23:08:18.0283646Z 112 │ setPendingNativeCommentSelection(null); 2026-10-24T23:08:18.0283754Z ·  ────────────────┬─────────────── 2026-10-24T23:08:18.0283978Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:08:18.0284071Z 113 │ } 2026-10-24T23:08:18.0284124Z ╰──── 2026-10-24T23:08:18.0284700Z  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-24T23:08:18.0285012Z  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-24T23:08:18.0285015Z 2026-10-24T23:08:18.0285213Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:08:18.0285398Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:108:7] 2026-10-24T23:08:18.0285497Z 107 │ setPendingNativeCommentSelection(null); 2026-10-24T23:08:18.0285572Z 108 │ }, [selectedSection?.id]); 2026-10-24T23:08:18.0285657Z ·  ─────────┬───────── 2026-10-24T23:08:18.0285818Z · ╰── Unnecessary dependency `selectedSection?.id` 2026-10-24T23:08:18.0285872Z 109 │ 2026-10-24T23:08:18.0285922Z ╰──── 2026-10-24T23:08:18.0286209Z  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-24T23:08:18.0286513Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:18.0286521Z 2026-10-24T23:08:18.0286744Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-24T23:08:18.0286889Z ╭─[packages/client-runtime/src/operations/projects.ts:238:51] 2026-10-24T23:08:18.0286950Z 237 │ ): string { 2026-10-24T23:08:18.0287102Z 238 │ const folderName = workspaceRoot.split(/[\\/]/).filter(Boolean).at(-1) ?? ""; 2026-10-24T23:08:18.0287215Z ·  ────── 2026-10-24T23:08:18.0287345Z 239 │ return target.owner ? `${target.owner}/${folderName}` : folderName; 2026-10-24T23:08:18.0287395Z ╰──── 2026-10-24T23:08:18.0287566Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T23:08:18.0287568Z 2026-10-24T23:08:18.0287921Z ⚠ 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-24T23:08:18.0288058Z ╭─[apps/server/src/vcs/GitVcsDriverCore.test.ts:1786:34] 2026-10-24T23:08:18.0288190Z 1785 │ const stat = branch.files!.find((file) => file.path === path)!; 2026-10-24T23:08:18.0288335Z 1786 │ const request = yield* Schema.decodeEffect(ReviewDiffPreviewInput)({ 2026-10-24T23:08:18.0288451Z ·  ─────────────────── 2026-10-24T23:08:18.0288517Z 1787 │ cwd, 2026-10-24T23:08:18.0288571Z ╰──── 2026-10-24T23:08:18.0288573Z 2026-10-24T23:08:18.0288737Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T23:08:18.0288927Z ╭─[packages/provider-opencode/src/server/OpenCodeRuntime.environment.test.ts:53:14] 2026-10-24T23:08:18.0289033Z 52 │ 2026-10-24T23:08:18.0289132Z 53 │ for (const {} of [ 2026-10-24T23:08:18.0289202Z ·  ── 2026-10-24T23:08:18.0289271Z 54 │ { healthy: true }, 2026-10-24T23:08:18.0289325Z ╰──── 2026-10-24T23:08:18.0289551Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T23:08:18.0289553Z 2026-10-24T23:08:18.0289741Z ⚠ eslint(no-unused-vars): Identifier 'Fiber' is imported but never used. 2026-10-24T23:08:18.0289837Z ╭─[apps/server/src/ws.ts:10:13] 2026-10-24T23:08:18.0289926Z  9 │ import * as Effect from "effect/Effect"; 2026-10-24T23:08:18.0290012Z 10 │ import * as Fiber from "effect/Fiber"; 2026-10-24T23:08:18.0290085Z ·  ──┬── 2026-10-24T23:08:18.0290222Z · ╰── 'Fiber' is imported here 2026-10-24T23:08:18.0290326Z 11 │ import * as FileSystem from "effect/FileSystem"; 2026-10-24T23:08:18.0290381Z ╰──── 2026-10-24T23:08:18.0290476Z  help: Consider removing this import. 2026-10-24T23:08:18.0290478Z 2026-10-24T23:08:18.0290674Z ⚠ eslint(no-unused-vars): Identifier 'Schedule' is imported but never used. 2026-10-24T23:08:18.0290767Z ╭─[apps/server/src/ws.ts:17:13] 2026-10-24T23:08:18.0290846Z 16 │ import * as Ref from "effect/Ref"; 2026-10-24T23:08:18.0290935Z 17 │ import * as Schedule from "effect/Schedule"; 2026-10-24T23:08:18.0291015Z ·  ────┬─── 2026-10-24T23:08:18.0291150Z · ╰── 'Schedule' is imported here 2026-10-24T23:08:18.0291236Z 18 │ import * as Schema from "effect/Schema"; 2026-10-24T23:08:18.0291291Z ╰──── 2026-10-24T23:08:18.0291390Z  help: Consider removing this import. 2026-10-24T23:08:18.0291392Z 2026-10-24T23:08:18.0291685Z ⚠ eslint(no-unused-vars): Variable 'projectSetupScriptRunner' is declared but never used. Unused variables should start with a '_'. 2026-10-24T23:08:18.0291784Z ╭─[apps/server/src/ws.ts:1286:13] 2026-10-24T23:08:18.0291935Z 1285 │ const usageLimitSources = yield* UsageLimitSources.UsageLimitSources; 2026-10-24T23:08:18.0292171Z 1286 │ const projectSetupScriptRunner = yield* ProjectSetupScriptRunner.ProjectSetupScriptRunner; 2026-10-24T23:08:18.0292279Z ·  ────────────┬─────────── 2026-10-24T23:08:18.0292449Z · ╰── 'projectSetupScriptRunner' is declared here 2026-10-24T23:08:18.0292622Z 1287 │ const worktreeSetupTracker = yield* WorktreeSetupTracker.WorktreeSetupTracker; 2026-10-24T23:08:18.0292677Z ╰──── 2026-10-24T23:08:18.0292781Z  help: Consider removing this declaration. 2026-10-24T23:08:18.0292783Z 2026-10-24T23:08:18.0293235Z ⚠ 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-24T23:08:18.0293366Z ╭─[apps/server/src/usage/UsageService.test.ts:2615:7] 2026-10-24T23:08:18.0293459Z 2614 │ let orphanedAt: number | undefined; 2026-10-24T23:08:18.0293686Z 2615 │ ╭─▶ for (let interruptAt = 1; interruptAt <= 31; interruptAt += 1) { 2026-10-24T23:08:18.0293880Z 2616 │ │ const tasks: Array<() => void> = []; 2026-10-24T23:08:18.0294057Z 2617 │ │ const dispatcher: Scheduler.SchedulerDispatcher = { 2026-10-24T23:08:18.0294187Z 2618 │ │ scheduleTask: (task) => tasks.push(task), 2026-10-24T23:08:18.0294287Z 2619 │ │ flush: () => { 2026-10-24T23:08:18.0294409Z 2620 │ │ let task: (() => void) | undefined; 2026-10-24T23:08:18.0294558Z 2621 │ │ while ((task = tasks.shift()) !== undefined) task(); 2026-10-24T23:08:18.0294637Z 2622 │ │ }, 2026-10-24T23:08:18.0294720Z 2623 │ │ }; 2026-10-24T23:08:18.0294793Z 2624 │ │ 2026-10-24T23:08:18.0294958Z 2625 │ │ let requestFiber: Fiber.Fiber | undefined; 2026-10-24T23:08:18.0295064Z 2626 │ │ let requestChecks = 0; 2026-10-24T23:08:18.0295195Z 2627 │ │ const scheduler: Scheduler.Scheduler = { 2026-10-24T23:08:18.0295304Z 2628 │ │ executionMode: "async", 2026-10-24T23:08:18.0295425Z 2629 │ │ makeDispatcher: () => dispatcher, 2026-10-24T23:08:18.0295537Z 2630 │ │ shouldYield: (fiber) => { 2026-10-24T23:08:18.0295667Z 2631 │ │ if (fiber !== requestFiber) return false; 2026-10-24T23:08:18.0295773Z 2632 │ │ requestChecks += 1; 2026-10-24T23:08:18.0295916Z 2633 │ │ if (requestChecks !== interruptAt) return false; 2026-10-24T23:08:18.0296031Z 2634 │ │ fiber.interruptUnsafe(); 2026-10-24T23:08:18.0296133Z 2635 │ │ return true; 2026-10-24T23:08:18.0296219Z 2636 │ │ }, 2026-10-24T23:08:18.0296301Z 2637 │ │ }; 2026-10-24T23:08:18.0296372Z 2638 │ │ 2026-10-24T23:08:18.0296492Z 2639 │ │ const input: UsageSummaryInput = { 2026-10-24T23:08:18.0296585Z 2640 │ │ ...WINDOW, 2026-10-24T23:08:18.0296712Z 2641 │ │ sinceDay: UsageDay.make("2026-09-01"), 2026-10-24T23:08:18.0296906Z 2642 │ │ untilDay: UsageDay.make(`2026-08-${String(interruptAt).padStart(2, "0")}`), 2026-10-24T23:08:18.0296984Z 2643 │ │ }; 2026-10-24T23:08:18.0297095Z 2644 │ │ const first = yield* service 2026-10-24T23:08:18.0297251Z 2645 │ │ .readSummary(input) 2026-10-24T23:08:18.0297376Z 2646 │ │ .pipe( 2026-10-24T23:08:18.0297471Z 2647 │ │ Effect.exit, 2026-10-24T23:08:18.0297629Z 2648 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-24T23:08:18.0297734Z 2649 │ │ Effect.forkChild, 2026-10-24T23:08:18.0297817Z 2650 │ │ ); 2026-10-24T23:08:18.0297917Z 2651 │ │ requestFiber = first; 2026-10-24T23:08:18.0298025Z 2652 │ │ yield* Effect.yieldNow; 2026-10-24T23:08:18.0298129Z 2653 │ │ dispatcher.flush(); 2026-10-24T23:08:18.0298200Z 2654 │ │ 2026-10-24T23:08:18.0298353Z 2655 │ │ const second = yield* service.readSummary(input).pipe( 2026-10-24T23:08:18.0298455Z 2656 │ │ Effect.match({ 2026-10-24T23:08:18.0298580Z 2657 │ │ onFailure: (error) => error.reason, 2026-10-24T23:08:18.0298704Z 2658 │ │ onSuccess: () => "success" as const, 2026-10-24T23:08:18.0298784Z 2659 │ │ }), 2026-10-24T23:08:18.0298939Z 2660 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-24T23:08:18.0299041Z 2661 │ │ Effect.forkChild, 2026-10-24T23:08:18.0299123Z 2662 │ │ ); 2026-10-24T23:08:18.0299227Z 2663 │ │ yield* Effect.yieldNow; 2026-10-24T23:08:18.0299329Z 2664 │ │ dispatcher.flush(); 2026-10-24T23:08:18.0299460Z 2665 │ │ const secondExit = second.pollUnsafe(); 2026-10-24T23:08:18.0299578Z 2666 │ │ if (secondExit === undefined) { 2026-10-24T23:08:18.0299690Z 2667 │ │ second.interruptUnsafe(); 2026-10-24T23:08:18.0299803Z 2668 │ │ orphanedAt = interruptAt; 2026-10-24T23:08:18.0299889Z 2669 │ │ break; 2026-10-24T23:08:18.0299968Z 2670 │ │ } 2026-10-24T23:08:18.0300085Z 2671 │ │ if (Exit.isFailure(secondExit)) { 2026-10-24T23:08:18.0300243Z 2672 │ │ assert.fail("the matching request fiber was interrupted"); 2026-10-24T23:08:18.0300322Z 2673 │ │ } 2026-10-24T23:08:18.0300477Z 2674 │ │ assert.strictEqual(secondExit.value, "invalidWindow"); 2026-10-24T23:08:18.0300610Z 2675 │ ╰─▶ } 2026-10-24T23:08:18.0300669Z 2676 │ 2026-10-24T23:08:18.0300723Z ╰──── 2026-10-24T23:08:18.0300725Z 2026-10-24T23:08:18.0300987Z ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'. 2026-10-24T23:08:18.0301102Z ╭─[apps/server/src/usage/UsageService.ts:169:7] 2026-10-24T23:08:18.0301157Z 168 │ 2026-10-24T23:08:18.0301232Z 169 │ const layerTest = Layer.succeed( 2026-10-24T23:08:18.0301307Z ·  ────┬──── 2026-10-24T23:08:18.0301435Z · ╰── 'layerTest' is declared here 2026-10-24T23:08:18.0301502Z 170 │ UsageService, 2026-10-24T23:08:18.0301555Z ╰──── 2026-10-24T23:08:18.0301708Z  help: Consider removing this declaration. 2026-10-24T23:08:18.0301761Z 2026-10-24T23:08:18.0302240Z ⚠ 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-24T23:08:18.0302417Z ╭─[apps/mobile/src/features/agent-awareness/remoteRegistration.test.ts:223:5] 2026-10-24T23:08:18.0302490Z 222 │ let idlePasses = 0; 2026-10-24T23:08:18.0302630Z 223 │ ╭─▶ for (;;) { 2026-10-24T23:08:18.0302765Z 224 │ │ yield* Effect.promise(() => Promise.resolve()); 2026-10-24T23:08:18.0302905Z 225 │ │ const pending = backgroundRuntime.pending.shift(); 2026-10-24T23:08:18.0303006Z 226 │ │ if (!pending) { 2026-10-24T23:08:18.0303104Z 227 │ │ idlePasses++; 2026-10-24T23:08:18.0303209Z 228 │ │ if (idlePasses >= 3) { 2026-10-24T23:08:18.0303292Z 229 │ │ return; 2026-10-24T23:08:18.0303371Z 230 │ │ } 2026-10-24T23:08:18.0303456Z 231 │ │ continue; 2026-10-24T23:08:18.0303533Z 232 │ │ } 2026-10-24T23:08:18.0303626Z 233 │ │ idlePasses = 0; 2026-10-24T23:08:18.0303740Z 234 │ │ const exit = yield* Effect.exit( 2026-10-24T23:08:18.0303949Z 235 │ │ pending.operation as Effect.Effect, 2026-10-24T23:08:18.0304033Z 236 │ │ ); 2026-10-24T23:08:18.0304138Z 237 │ │ yield* Effect.sync(() => { 2026-10-24T23:08:18.0304243Z 238 │ │ pending.resolve(exit); 2026-10-24T23:08:18.0304323Z 239 │ │ }); 2026-10-24T23:08:18.0304450Z 240 │ ╰─▶ } 2026-10-24T23:08:18.0304507Z 241 │ }, 2026-10-24T23:08:18.0304559Z ╰──── 2026-10-24T23:08:18.0304561Z 2026-10-24T23:08:18.0304814Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T23:08:18.0304951Z ╭─[packages/provider-opencode/src/server/adapter.ts:3755:7] 2026-10-24T23:08:18.0305004Z 3754 │ 2026-10-24T23:08:18.0305206Z 3755 │ const layer: Layer.Layer = 2026-10-24T23:08:18.0305284Z ·  ──┬── 2026-10-24T23:08:18.0305410Z · ╰── 'layer' is declared here 2026-10-24T23:08:18.0305474Z 3756 │ Layer.effect( 2026-10-24T23:08:18.0305527Z ╰──── 2026-10-24T23:08:18.0305631Z  help: Consider removing this declaration. 2026-10-24T23:08:18.0305634Z 2026-10-24T23:08:18.0305886Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:08:18.0306050Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:123:7] 2026-10-24T23:08:18.0306103Z 118 │ 2026-10-24T23:08:18.0306167Z 119 │ useEffect(() => { 2026-10-24T23:08:18.0306238Z ·  ────┬──── 2026-10-24T23:08:18.0306417Z · ╰── This is the containing effect 2026-10-24T23:08:18.0306584Z 120 │ if (orientationSettled) return; 2026-10-24T23:08:18.0306697Z 121 │ const orientation = getNativeShowcaseOrientation(); 2026-10-24T23:08:18.0306772Z 122 │ if (orientation === null) { 2026-10-24T23:08:18.0306851Z 123 │ setOrientationSettled(true); 2026-10-24T23:08:18.0306943Z ·  ──────────┬────────── 2026-10-24T23:08:18.0307151Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:08:18.0307243Z 124 │ return; 2026-10-24T23:08:18.0307307Z ╰──── 2026-10-24T23:08:18.0307976Z  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-24T23:08:18.0308322Z  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-24T23:08:18.0308325Z 2026-10-24T23:08:18.0308589Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:08:18.0308783Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:304:7] 2026-10-24T23:08:18.0308876Z 292 │ 2026-10-24T23:08:18.0308978Z 293 │ useEffect(() => { 2026-10-24T23:08:18.0309061Z ·  ────┬──── 2026-10-24T23:08:18.0309217Z · ╰── This is the containing effect 2026-10-24T23:08:18.0309299Z 294 │ if ( 2026-10-24T23:08:18.0309417Z 295 │ scene === null || 2026-10-24T23:08:18.0309507Z 296 │ requestedScene === null || 2026-10-24T23:08:18.0309613Z 297 │ scene !== requestedScene || 2026-10-24T23:08:18.0309712Z 298 │ !hasFixture || 2026-10-24T23:08:18.0309840Z 299 │ !orientationSettled || 2026-10-24T23:08:18.0309926Z 300 │ !themeApplied || 2026-10-24T23:08:18.0310069Z 301 │ (scene === "agent-activity" && !agentActivityStaged) || 2026-10-24T23:08:18.0310227Z 302 │ !isShowcaseNativeContentReady({ scene, themeId, renderSignal }) 2026-10-24T23:08:18.0310308Z 303 │ ) { 2026-10-24T23:08:18.0310399Z 304 │ setReadyScene(null); 2026-10-24T23:08:18.0310511Z ·  ──────┬────── 2026-10-24T23:08:18.0310708Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:08:18.0310808Z 305 │ return; 2026-10-24T23:08:18.0310865Z ╰──── 2026-10-24T23:08:18.0311492Z  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-24T23:08:18.0311835Z  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-24T23:08:18.0311837Z 2026-10-24T23:08:18.0312158Z ⚠ eslint(no-unused-vars): Variable 'lastOutcome' is declared but never used. Unused variables should start with a '_'. 2026-10-24T23:08:18.0312347Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:128:9] 2026-10-24T23:08:18.0312526Z 127 │ let cancelled = false; 2026-10-24T23:08:18.0312669Z 128 │ let lastOutcome: string | null = null; 2026-10-24T23:08:18.0312774Z ·  ─────┬───── 2026-10-24T23:08:18.0312960Z · ╰── 'lastOutcome' is declared here 2026-10-24T23:08:18.0313163Z 129 │ void retryShowcaseOperation(async () => applyNativeShowcaseOrientation(orientation), { 2026-10-24T23:08:18.0313236Z ╰──── 2026-10-24T23:08:18.0313370Z  help: Consider removing this declaration. 2026-10-24T23:08:18.0313373Z 2026-10-24T23:08:18.0313598Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T23:08:18.0313749Z ╭─[packages/client-runtime/src/state/usageAccess.ts:3:8] 2026-10-24T23:08:18.0313843Z 2 │ AuthDiagnosticsReadScope, 2026-10-24T23:08:18.0313965Z 3 │ type AuthSessionState, 2026-10-24T23:08:18.0314081Z ·  ────────┬─────── 2026-10-24T23:08:18.0314249Z · ╰── 'AuthSessionState' is imported here 2026-10-24T23:08:18.0314323Z 4 │ sessionGrantsScope, 2026-10-24T23:08:18.0314425Z ╰──── 2026-10-24T23:08:18.0314550Z  help: Consider removing this import. 2026-10-24T23:08:18.0314553Z 2026-10-24T23:08:18.0314830Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:08:18.0314985Z ╭─[apps/mobile/src/components/VideoPreviewModal.ios.tsx:63:55] 2026-10-24T23:08:18.0315074Z 61 │ }, []); 2026-10-24T23:08:18.0315177Z 62 │ useEffect(() => { 2026-10-24T23:08:18.0315298Z ·  ────┬──── 2026-10-24T23:08:18.0315442Z · ╰── This is the containing effect 2026-10-24T23:08:18.0315613Z 63 │ if (playbackUrl === null && resolvedUrl !== null) setPlaybackUrl(resolvedUrl); 2026-10-24T23:08:18.0315780Z ·  ───────┬────── 2026-10-24T23:08:18.0316008Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:08:18.0316114Z 64 │ }, [playbackUrl, resolvedUrl]); 2026-10-24T23:08:18.0316176Z ╰──── 2026-10-24T23:08:18.0316794Z  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-24T23:08:18.0317147Z  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-24T23:08:18.0317152Z 2026-10-24T23:08:18.0317448Z ⚠ eslint(no-unused-vars): Variable 'useDragRegion' is declared but never used. Unused variables should start with a '_'. 2026-10-24T23:08:18.0317619Z ╭─[apps/web/src/components/preview/PreviewPanelShell.tsx:61:9] 2026-10-24T23:08:18.0317683Z 60 │ ) { 2026-10-24T23:08:18.0317893Z 61 │ const useDragRegion = isElectron && props.mode !== "sheet" && props.mode !== "embedded"; 2026-10-24T23:08:18.0318001Z ·  ──────┬────── 2026-10-24T23:08:18.0318165Z · ╰── 'useDragRegion' is declared here 2026-10-24T23:08:18.0318327Z 62 │ const isInline = props.mode === "inline"; 2026-10-24T23:08:18.0318440Z ╰──── 2026-10-24T23:08:18.0318605Z  help: Consider removing this declaration. 2026-10-24T23:08:18.0318608Z 2026-10-24T23:08:18.0318900Z ⚠ eslint(no-unused-vars): Variable 'claudeCaps' is declared but never used. Unused variables should start with a '_'. 2026-10-24T23:08:18.0319019Z ╭─[packages/shared/src/model.test.ts:36:7] 2026-10-24T23:08:18.0319093Z 35 │ 2026-10-24T23:08:18.0319264Z 36 │ const claudeCaps: ModelCapabilities = createModelCapabilities({ 2026-10-24T23:08:18.0319369Z ·  ─────┬──── 2026-10-24T23:08:18.0319514Z · ╰── 'claudeCaps' is declared here 2026-10-24T23:08:18.0319614Z 37 │ optionDescriptors: [ 2026-10-24T23:08:18.0319696Z ╰──── 2026-10-24T23:08:18.0319838Z  help: Consider removing this declaration. 2026-10-24T23:08:18.0319844Z 2026-10-24T23:08:18.0320064Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T23:08:18.0320221Z ╭─[apps/mobile/src/components/ComposerContextSheet.tsx:272:25] 2026-10-24T23:08:18.0320350Z 271 │ {record.elements?.map((element, index) => ( 2026-10-24T23:08:18.0320562Z 272 │ 2026-10-24T23:08:18.0320745Z ·  ─────────────────────────────────────────────────────── 2026-10-24T23:08:18.0320832Z 273 │ (null); 2026-10-24T23:08:18.0321864Z 168 │ useLayoutEffect(() => { 2026-10-24T23:08:18.0322005Z ·  ───────┬─────── 2026-10-24T23:08:18.0322190Z · ╰── This is the containing effect 2026-10-24T23:08:18.0322289Z 169 │ if (faviconRequest === null) return; 2026-10-24T23:08:18.0322373Z 170 │ 2026-10-24T23:08:18.0322535Z 171 │ const endRequest = beginProjectFaviconRequest(faviconRequest); 2026-10-24T23:08:18.0322671Z 172 │ setActiveFaviconRequest(faviconRequest); 2026-10-24T23:08:18.0322823Z ·  ───────────┬─────────── 2026-10-24T23:08:18.0323049Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:08:18.0323147Z 173 │ return endRequest; 2026-10-24T23:08:18.0323242Z ╰──── 2026-10-24T23:08:18.0323837Z  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-24T23:08:18.0324180Z  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-24T23:08:18.0324183Z 2026-10-24T23:08:18.0324469Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:08:18.0324657Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:60:5] 2026-10-24T23:08:18.0324744Z 57 │ 2026-10-24T23:08:18.0324822Z 58 │ useEffect(() => { 2026-10-24T23:08:18.0324925Z ·  ────┬──── 2026-10-24T23:08:18.0325073Z · ╰── This is the containing effect 2026-10-24T23:08:18.0325211Z 59 │ const controller = new AbortController(); 2026-10-24T23:08:18.0325295Z 60 │ setLoadState("pending"); 2026-10-24T23:08:18.0325398Z ·  ──────┬───── 2026-10-24T23:08:18.0325590Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:08:18.0325783Z 61 │ // A renewed signature is used on Retry, not as a reason to reset the native player. 2026-10-24T23:08:18.0325855Z ╰──── 2026-10-24T23:08:18.0326465Z  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-24T23:08:18.0326812Z  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-24T23:08:18.0326814Z 2026-10-24T23:08:18.0327031Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:08:18.0327205Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:71:7] 2026-10-24T23:08:18.0327301Z 70 │ return () => controller.abort(); 2026-10-24T23:08:18.0327432Z 71 │ }, [player, props.playRequested, attempt]); 2026-10-24T23:08:18.0327656Z ·  ───┬── ─────────┬───────── ───┬─── 2026-10-24T23:08:18.0327907Z · │ │ ╰── Unnecessary dependency `attempt` 2026-10-24T23:08:18.0328142Z · │ ╰── Unnecessary dependency `props.playRequested` 2026-10-24T23:08:18.0328293Z · ╰── Unnecessary dependency `player_0` 2026-10-24T23:08:18.0328373Z 72 │ 2026-10-24T23:08:18.0328445Z ╰──── 2026-10-24T23:08:18.0328830Z  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-24T23:08:18.0329178Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:18.0329181Z 2026-10-24T23:08:18.0329467Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:08:18.0329628Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:68:5] 2026-10-24T23:08:18.0329768Z 66 │ const { id: attachmentId, fileUri } = attachment; 2026-10-24T23:08:18.0329859Z 67 │ useEffect(() => { 2026-10-24T23:08:18.0329959Z ·  ────┬──── 2026-10-24T23:08:18.0330113Z · ╰── This is the containing effect 2026-10-24T23:08:18.0330206Z 68 │ setUri(null); 2026-10-24T23:08:18.0330307Z ·  ───┬── 2026-10-24T23:08:18.0330506Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:08:18.0330622Z 69 │ setError(null); 2026-10-24T23:08:18.0330700Z ╰──── 2026-10-24T23:08:18.0331314Z  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-24T23:08:18.0331644Z  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-24T23:08:18.0331663Z 2026-10-24T23:08:18.0331874Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:08:18.0332072Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:91:7] 2026-10-24T23:08:18.0332155Z 90 │ }; 2026-10-24T23:08:18.0332275Z 91 │ }, [attachmentId, fileUri]); 2026-10-24T23:08:18.0332402Z ·  ──────┬───── ───┬─── 2026-10-24T23:08:18.0332605Z · │ ╰── Unnecessary dependency `fileUri` 2026-10-24T23:08:18.0332779Z · ╰── Unnecessary dependency `attachmentId` 2026-10-24T23:08:18.0332944Z 92 │ const mimeType = videoMimeType(attachment) ?? attachment.mimeType; 2026-10-24T23:08:18.0333014Z ╰──── 2026-10-24T23:08:18.0333334Z  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-24T23:08:18.0333665Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:18.0333667Z 2026-10-24T23:08:18.0333901Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T23:08:18.0334082Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:213:34] 2026-10-24T23:08:18.0334160Z 212 │ useEffect(() => { 2026-10-24T23:08:18.0334326Z 213 │ if (!isFocused && hasSource) props.onRequestClose(); 2026-10-24T23:08:18.0334455Z ·  ──┬── 2026-10-24T23:08:18.0334631Z · ╰── Missing dependency `props` 2026-10-24T23:08:18.0334807Z 214 │ }, [isFocused, hasSource, props.onRequestClose]); 2026-10-24T23:08:18.0334981Z ·  ──────────┬───────── 2026-10-24T23:08:18.0335231Z · ╰── Overly precise dependency `props.onRequestClose`, use `props` instead 2026-10-24T23:08:18.0335324Z 215 │ const { source } = props; 2026-10-24T23:08:18.0335400Z ╰──── 2026-10-24T23:08:18.0335848Z  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-24T23:08:18.0336179Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:18.0336182Z 2026-10-24T23:08:18.0336670Z ⚠ 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-24T23:08:18.0336835Z ╭─[apps/server/src/project/ProjectService.test.ts:94:3] 2026-10-24T23:08:18.0336909Z 93 │ ) { 2026-10-24T23:08:18.0337140Z 94 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T23:08:18.0337337Z 95 │ │ const project = Option.getOrThrow(yield* service.getById(projectId)); 2026-10-24T23:08:18.0337477Z 96 │ │ if (predicate(project)) return project; 2026-10-24T23:08:18.0337648Z 97 │ │ yield* Effect.yieldNow; 2026-10-24T23:08:18.0337789Z 98 │ ╰─▶ } 2026-10-24T23:08:18.0337967Z 99 │ return yield* Effect.die(`Project ${projectId} was not enriched in time.`); 2026-10-24T23:08:18.0338048Z ╰──── 2026-10-24T23:08:18.0338050Z 2026-10-24T23:08:18.0338277Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:08:18.0338425Z ╭─[apps/mobile/src/components/ComposerEditor.tsx:82:6] 2026-10-24T23:08:18.0338507Z 81 │ }, 2026-10-24T23:08:18.0338600Z 82 │ [draftKey], 2026-10-24T23:08:18.0338696Z ·  ────┬─── 2026-10-24T23:08:18.0338850Z · ╰── Unnecessary dependency `draftKey` 2026-10-24T23:08:18.0338947Z 83 │ ); 2026-10-24T23:08:18.0339025Z ╰──── 2026-10-24T23:08:18.0339345Z  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-24T23:08:18.0339654Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:18.0339685Z 2026-10-24T23:08:18.0340156Z ⚠ 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-24T23:08:18.0340337Z ╭─[apps/server/src/project/ProjectEnrichmentService.test.ts:28:3] 2026-10-24T23:08:18.0340420Z 27 │ ) { 2026-10-24T23:08:18.0340638Z 28 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T23:08:18.0340888Z 29 │ │ const available = yield* service.peek(workspaceRoot); 2026-10-24T23:08:18.0341077Z 30 │ │ if (predicate(available)) return available; 2026-10-24T23:08:18.0341202Z 31 │ │ yield* Effect.yieldNow; 2026-10-24T23:08:18.0341357Z 32 │ ╰─▶ } 2026-10-24T23:08:18.0341537Z 33 │ return yield* Effect.die(`Project metadata for ${workspaceRoot} was not resolved in time.`); 2026-10-24T23:08:18.0341636Z ╰──── 2026-10-24T23:08:18.0341639Z 2026-10-24T23:08:18.0341918Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:08:18.0342155Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:79:5] 2026-10-24T23:08:18.0342230Z 76 │ 2026-10-24T23:08:18.0342323Z 77 │ useEffect(() => { 2026-10-24T23:08:18.0342433Z ·  ────┬──── 2026-10-24T23:08:18.0342592Z · ╰── This is the containing effect 2026-10-24T23:08:18.0342745Z 78 │ const { host, code } = parsePairingUrl(connectionPairingUrl); 2026-10-24T23:08:18.0342817Z 79 │ setHostInput(host); 2026-10-24T23:08:18.0342934Z ·  ──────┬───── 2026-10-24T23:08:18.0343128Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:08:18.0343222Z 80 │ setCodeInput(code); 2026-10-24T23:08:18.0343318Z ╰──── 2026-10-24T23:08:18.0343934Z  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-24T23:08:18.0344284Z  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-24T23:08:18.0344287Z 2026-10-24T23:08:18.0344567Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:08:18.0344762Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:89:5] 2026-10-24T23:08:18.0344819Z 82 │ 2026-10-24T23:08:18.0344927Z 83 │ useEffect(() => { 2026-10-24T23:08:18.0345028Z ·  ────┬──── 2026-10-24T23:08:18.0345182Z · ╰── This is the containing effect 2026-10-24T23:08:18.0345283Z 84 │ if (routePairingUrl.length === 0) { 2026-10-24T23:08:18.0345376Z 85 │ return; 2026-10-24T23:08:18.0345473Z 86 │ } 2026-10-24T23:08:18.0345552Z 87 │ 2026-10-24T23:08:18.0345678Z 88 │ const { host, code } = parsePairingUrl(routePairingUrl); 2026-10-24T23:08:18.0345766Z 89 │ setHostInput(host); 2026-10-24T23:08:18.0345886Z ·  ──────┬───── 2026-10-24T23:08:18.0346076Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:08:18.0346153Z 90 │ setCodeInput(code); 2026-10-24T23:08:18.0346259Z ╰──── 2026-10-24T23:08:18.0346924Z  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-24T23:08:18.0347339Z  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-24T23:08:18.0347378Z 2026-10-24T23:08:18.0347655Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:08:18.0347832Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:95:7] 2026-10-24T23:08:18.0347909Z 92 │ 2026-10-24T23:08:18.0348017Z 93 │ useEffect(() => { 2026-10-24T23:08:18.0348113Z ·  ────┬──── 2026-10-24T23:08:18.0348250Z · ╰── This is the containing effect 2026-10-24T23:08:18.0348364Z 94 │ if (pairingConnectionError) { 2026-10-24T23:08:18.0348467Z 95 │ setIsSubmitting(false); 2026-10-24T23:08:18.0348587Z ·  ───────┬─────── 2026-10-24T23:08:18.0348769Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:08:18.0348856Z 96 │ } 2026-10-24T23:08:18.0348928Z ╰──── 2026-10-24T23:08:18.0349549Z  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-24T23:08:18.0349927Z  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-24T23:08:18.0349929Z 2026-10-24T23:08:18.0350194Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:08:18.0350384Z ╭─[apps/mobile/src/features/terminal/terminalLaunchContext.ts:117:5] 2026-10-24T23:08:18.0350582Z 112 │ const [entry, setEntry] = useState(() => ({ key: input.targetKey, location: candidate })); 2026-10-24T23:08:18.0350684Z 113 │ useEffect(() => { 2026-10-24T23:08:18.0350768Z ·  ────┬──── 2026-10-24T23:08:18.0350929Z · ╰── This is the containing effect 2026-10-24T23:08:18.0351112Z 114 │ if (entry.key === input.targetKey && (entry.location !== null || candidate === null)) { 2026-10-24T23:08:18.0351219Z 115 │ return; 2026-10-24T23:08:18.0351287Z 116 │ } 2026-10-24T23:08:18.0351437Z 117 │ setEntry({ key: input.targetKey, location: candidate }); 2026-10-24T23:08:18.0351603Z ·  ────┬─── 2026-10-24T23:08:18.0351831Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:08:18.0352022Z 118 │ }, [candidate, entry.key, entry.location, input.targetKey]); 2026-10-24T23:08:18.0352087Z ╰──── 2026-10-24T23:08:18.0352701Z  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-24T23:08:18.0353033Z  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-24T23:08:18.0353035Z 2026-10-24T23:08:18.0353286Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T23:08:18.0353450Z ╭─[apps/web/src/components/CustomSnoozeDialog.tsx:140:58] 2026-10-24T23:08:18.0353593Z 139 │ {...(weekStartsOn === undefined ? {} : { weekStartsOn })} 2026-10-24T23:08:18.0353764Z 140 │ disabled={{ before: new Date(new Date().setHours(0, 0, 0, 0)) }} 2026-10-24T23:08:18.0353914Z ·  ─────┬──── 2026-10-24T23:08:18.0354118Z · ╰── Cannot call impure function 2026-10-24T23:08:18.0354227Z 141 │ onSelect={(selected) => { 2026-10-24T23:08:18.0354306Z ╰──── 2026-10-24T23:08:18.0354604Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T23:08:18.0354947Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T23:08:18.0354950Z 2026-10-24T23:08:18.0355139Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T23:08:18.0355268Z ╭─[apps/web/src/components/Sidebar.tsx:1136:11] 2026-10-24T23:08:18.0355399Z 1135 │ foldSearchQuery(threadSearchQuery), 2026-10-24T23:08:18.0355501Z 1136 │ Date.now(), 2026-10-24T23:08:18.0355622Z ·  ─────┬──── 2026-10-24T23:08:18.0355766Z · ╰── Cannot call impure function 2026-10-24T23:08:18.0355937Z 1137 │ // A list filter, as on mobile: a pick would move rows unexplained. 2026-10-24T23:08:18.0356017Z ╰──── 2026-10-24T23:08:18.0356368Z  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-24T23:08:18.0356667Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T23:08:18.0356686Z 2026-10-24T23:08:18.0356949Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:08:18.0357146Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:643:5] 2026-10-24T23:08:18.0358819Z 638 │ 2026-10-24T23:08:18.0358895Z 639 │ useEffect(() => { 2026-10-24T23:08:18.0358968Z ·  ────┬──── 2026-10-24T23:08:18.0359170Z · ╰── This is the containing effect 2026-10-24T23:08:18.0359313Z 640 │ if (pendingLaunchEntry.key === launchTargetKey) { 2026-10-24T23:08:18.0359375Z 641 │ return; 2026-10-24T23:08:18.0359429Z 642 │ } 2026-10-24T23:08:18.0359502Z 643 │ setPendingLaunchEntry({ 2026-10-24T23:08:18.0359587Z ·  ──────────┬────────── 2026-10-24T23:08:18.0359756Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:08:18.0359826Z 644 │ key: launchTargetKey, 2026-10-24T23:08:18.0359875Z ╰──── 2026-10-24T23:08:18.0360465Z  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-24T23:08:18.0360786Z  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-24T23:08:18.0360789Z 2026-10-24T23:08:18.0361039Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:08:18.0361204Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:653:5] 2026-10-24T23:08:18.0361256Z 648 │ 2026-10-24T23:08:18.0361318Z 649 │ useEffect(() => { 2026-10-24T23:08:18.0361390Z ·  ────┬──── 2026-10-24T23:08:18.0361518Z · ╰── This is the containing effect 2026-10-24T23:08:18.0361634Z 650 │ if (initialAttachGridEntry.key === launchTargetKey) { 2026-10-24T23:08:18.0361697Z 651 │ return; 2026-10-24T23:08:18.0361750Z 652 │ } 2026-10-24T23:08:18.0361828Z 653 │ setInitialAttachGridEntry({ 2026-10-24T23:08:18.0361919Z ·  ────────────┬──────────── 2026-10-24T23:08:18.0362131Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:08:18.0362203Z 654 │ key: launchTargetKey, 2026-10-24T23:08:18.0362252Z ╰──── 2026-10-24T23:08:18.0362835Z  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-24T23:08:18.0363151Z  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-24T23:08:18.0363156Z 2026-10-24T23:08:18.0363413Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:08:18.0363576Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:746:7] 2026-10-24T23:08:18.0363628Z 743 │ 2026-10-24T23:08:18.0363690Z 744 │ useEffect(() => { 2026-10-24T23:08:18.0363759Z ·  ────┬──── 2026-10-24T23:08:18.0363885Z · ╰── This is the containing effect 2026-10-24T23:08:18.0363986Z 745 │ if (!routeEnvironmentId || !routeThreadId) { 2026-10-24T23:08:18.0364051Z 746 │ setLastGridSize({ 2026-10-24T23:08:18.0364183Z ·  ───────┬─────── 2026-10-24T23:08:18.0364377Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:08:18.0364458Z 747 │ cols: DEFAULT_TERMINAL_COLS, 2026-10-24T23:08:18.0364507Z ╰──── 2026-10-24T23:08:18.0365086Z  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-24T23:08:18.0365396Z  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-24T23:08:18.0365398Z 2026-10-24T23:08:18.0365598Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:08:18.0365766Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:538:24] 2026-10-24T23:08:18.0365821Z 537 │ }); 2026-10-24T23:08:18.0365943Z 538 │ }, [terminal.buffer, terminal.buffer.length, terminalKey]); 2026-10-24T23:08:18.0366050Z ·  ───────────┬────────── 2026-10-24T23:08:18.0366287Z · ╰── Overly precise dependency `terminal.buffer.length`, use `terminal.buffer` instead 2026-10-24T23:08:18.0366446Z 539 │ const cwd = terminal.summary?.cwd ?? selectedThreadProject?.workspaceRoot ?? null; 2026-10-24T23:08:18.0366496Z ╰──── 2026-10-24T23:08:18.0366783Z  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-24T23:08:18.0367090Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:18.0367096Z 2026-10-24T23:08:18.0367288Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:08:18.0367450Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:709:7] 2026-10-24T23:08:18.0367545Z 708 │ sentInitialInputKeyRef.current = null; 2026-10-24T23:08:18.0367610Z 709 │ }, [terminalKey]); 2026-10-24T23:08:18.0367686Z ·  ─────┬───── 2026-10-24T23:08:18.0367824Z · ╰── Unnecessary dependency `terminalKey` 2026-10-24T23:08:18.0367876Z 710 │ 2026-10-24T23:08:18.0367926Z ╰──── 2026-10-24T23:08:18.0368216Z  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-24T23:08:18.0368520Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:18.0368523Z 2026-10-24T23:08:18.0368718Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:08:18.0368880Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:800:52] 2026-10-24T23:08:18.0368935Z 799 │ }; 2026-10-24T23:08:18.0369111Z 800 │ }, [canOperateTerminal, isRunning, pasteSession, terminal.lifecycleVersion, terminalKey]); 2026-10-24T23:08:18.0369330Z ·  ────────────┬──────────── ─────┬───── 2026-10-24T23:08:18.0369581Z · │ ╰── Unnecessary dependency `terminalKey` 2026-10-24T23:08:18.0369783Z · ╰── Unnecessary dependency `terminal.lifecycleVersion` 2026-10-24T23:08:18.0369835Z 801 │ 2026-10-24T23:08:18.0369885Z ╰──── 2026-10-24T23:08:18.0370165Z  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-24T23:08:18.0370467Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:18.0370469Z 2026-10-24T23:08:18.0370614Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:08:18.0370779Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:793:24] 2026-10-24T23:08:18.0370830Z 792 │ } 2026-10-24T23:08:18.0370936Z 793 │ const pasteSession = pasteSessionRef.current; 2026-10-24T23:08:18.0371045Z ·  ───────────┬─────────── 2026-10-24T23:08:18.0371204Z · ╰── Cannot access ref value during render 2026-10-24T23:08:18.0371253Z 794 │ 2026-10-24T23:08:18.0371302Z ╰──── 2026-10-24T23:08:18.0371758Z  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-24T23:08:18.0372056Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:08:18.0372061Z 2026-10-24T23:08:18.0372239Z ⚠ react(immutability): This value cannot be modified 2026-10-24T23:08:18.0372392Z ╭─[apps/mobile/src/features/connection/ConnectionStatusDot.tsx:58:7] 2026-10-24T23:08:18.0372489Z 53 │ function usePulseAnimation(pulse: boolean) { 2026-10-24T23:08:18.0372579Z 54 │ const pulseProgress = useSharedValue(0); 2026-10-24T23:08:18.0372665Z ·  ──────┬────── 2026-10-24T23:08:18.0372802Z · ╰── `pulseProgress` originates here 2026-10-24T23:08:18.0372852Z 55 │ 2026-10-24T23:08:18.0372917Z 56 │ useEffect(() => { 2026-10-24T23:08:18.0372986Z 57 │ if (pulse) { 2026-10-24T23:08:18.0373074Z 58 │ pulseProgress.value = withRepeat( 2026-10-24T23:08:18.0373151Z ·  ──────┬────── 2026-10-24T23:08:18.0373288Z · ╰── `pulseProgress` cannot be modified 2026-10-24T23:08:18.0373354Z 59 │ withTiming(1, { 2026-10-24T23:08:18.0373404Z ╰──── 2026-10-24T23:08:18.0373663Z  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-24T23:08:18.0373960Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:08:18.0373963Z 2026-10-24T23:08:18.0374266Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:08:18.0374446Z ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:40:5] 2026-10-24T23:08:18.0374556Z 37 │ const [initialized, setInitialized] = useState(false); 2026-10-24T23:08:18.0374624Z 38 │ useLayoutEffect(() => { 2026-10-24T23:08:18.0374701Z ·  ───────┬─────── 2026-10-24T23:08:18.0374829Z · ╰── This is the containing effect 2026-10-24T23:08:18.0374888Z 39 │ reset(); 2026-10-24T23:08:18.0374955Z 40 │ setInitialized(true); 2026-10-24T23:08:18.0375030Z ·  ───────┬────── 2026-10-24T23:08:18.0375191Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:08:18.0375252Z 41 │ }, [reset]); 2026-10-24T23:08:18.0375301Z ╰──── 2026-10-24T23:08:18.0375890Z  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-24T23:08:18.0376200Z  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-24T23:08:18.0376203Z 2026-10-24T23:08:18.0376452Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:08:18.0376605Z ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:93:5] 2026-10-24T23:08:18.0376657Z 88 │ 2026-10-24T23:08:18.0376718Z 89 │ useEffect(() => { 2026-10-24T23:08:18.0376789Z ·  ────┬──── 2026-10-24T23:08:18.0376916Z · ╰── This is the containing effect 2026-10-24T23:08:18.0377073Z 90 │ if (!needsPreparation || !initialProjectRef.branch || waitingForProject) return; 2026-10-24T23:08:18.0377174Z 91 │ const branchName = initialProjectRef.branch; 2026-10-24T23:08:18.0377239Z 92 │ let active = true; 2026-10-24T23:08:18.0377332Z 93 │ setPendingCheckouts((count) => count + 1); 2026-10-24T23:08:18.0377415Z ·  ─────────┬───────── 2026-10-24T23:08:18.0377580Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:08:18.0377731Z 94 │ // Serialize replacements: ignoring a stale result cannot undo its Git mutation. 2026-10-24T23:08:18.0377781Z ╰──── 2026-10-24T23:08:18.0378412Z  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-24T23:08:18.0378749Z  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-24T23:08:18.0378751Z 2026-10-24T23:08:18.0378936Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T23:08:18.0379088Z ╭─[apps/mobile/src/features/terminal/TerminalContextSheet.tsx:72:15] 2026-10-24T23:08:18.0379151Z 71 │ props.onEnd(y, success)); 2026-10-24T23:08:18.0380162Z 602 │ const gesture = Gesture.Pan() 2026-10-24T23:08:18.0380246Z ·  ─┬─ 2026-10-24T23:08:18.0380380Z · ╰── `Pan` may be a component 2026-10-24T23:08:18.0380460Z 603 │ .enabled(!props.disabled) 2026-10-24T23:08:18.0380512Z ╰──── 2026-10-24T23:08:18.0380782Z  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-24T23:08:18.0381214Z  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-24T23:08:18.0381216Z 2026-10-24T23:08:18.0381466Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:08:18.0381620Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5] 2026-10-24T23:08:18.0381681Z 259 │ .join("|"); 2026-10-24T23:08:18.0381747Z 260 │ useEffect(() => { 2026-10-24T23:08:18.0381820Z ·  ────┬──── 2026-10-24T23:08:18.0381945Z · ╰── This is the containing effect 2026-10-24T23:08:18.0382015Z 261 │ stop(); 2026-10-24T23:08:18.0382110Z ·  ──┬─ 2026-10-24T23:08:18.0382272Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:08:18.0382336Z 262 │ }, [orderVersion]); 2026-10-24T23:08:18.0382386Z ╰──── 2026-10-24T23:08:18.0382961Z  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-24T23:08:18.0383326Z  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-24T23:08:18.0383354Z 2026-10-24T23:08:18.0383564Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T23:08:18.0383718Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5] 2026-10-24T23:08:18.0383780Z 260 │ useEffect(() => { 2026-10-24T23:08:18.0383838Z 261 │ stop(); 2026-10-24T23:08:18.0383904Z ·  ──┬─ 2026-10-24T23:08:18.0384026Z · ╰── Missing dependency `stop` 2026-10-24T23:08:18.0384090Z 262 │ }, [orderVersion]); 2026-10-24T23:08:18.0384165Z ·  ──────┬───── 2026-10-24T23:08:18.0384314Z · ╰── Unnecessary dependency `orderVersion` 2026-10-24T23:08:18.0384376Z 263 │ useEffect( 2026-10-24T23:08:18.0384425Z ╰──── 2026-10-24T23:08:18.0384831Z  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-24T23:08:18.0385134Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:18.0385136Z 2026-10-24T23:08:18.0385276Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:08:18.0385428Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:96:9] 2026-10-24T23:08:18.0385503Z 95 │ const latest = useRef(props); 2026-10-24T23:08:18.0385572Z 96 │ latest.current = props; 2026-10-24T23:08:18.0385679Z ·  ───┬──────┬─── 2026-10-24T23:08:18.0385850Z · │ ╰── Cannot update ref value during render 2026-10-24T23:08:18.0385962Z · ╰── This value is a ref 2026-10-24T23:08:18.0386029Z 97 │ const gesture = useMemo( 2026-10-24T23:08:18.0386078Z ╰──── 2026-10-24T23:08:18.0386606Z  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-24T23:08:18.0386896Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:08:18.0386901Z 2026-10-24T23:08:18.0387039Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:08:18.0387193Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:104:18] 2026-10-24T23:08:18.0387258Z 103 │ .runOnJS(true) 2026-10-24T23:08:18.0387355Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T23:08:18.0387468Z ·  ───────────────┬────────────── 2026-10-24T23:08:18.0387661Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T23:08:18.0387791Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T23:08:18.0387841Z ╰──── 2026-10-24T23:08:18.0388359Z  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-24T23:08:18.0388678Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:08:18.0388681Z 2026-10-24T23:08:18.0388819Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:08:18.0388974Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:105:19] 2026-10-24T23:08:18.0389071Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T23:08:18.0389199Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T23:08:18.0389335Z ·  ──────────────────────────┬───────────────────────── 2026-10-24T23:08:18.0389542Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T23:08:18.0389666Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T23:08:18.0389717Z ╰──── 2026-10-24T23:08:18.0390165Z  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-24T23:08:18.0390447Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:08:18.0390449Z 2026-10-24T23:08:18.0390587Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:08:18.0390744Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:106:16] 2026-10-24T23:08:18.0390871Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T23:08:18.0390990Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T23:08:18.0391124Z ·  ──────────────────────────┬───────────────────────── 2026-10-24T23:08:18.0391323Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T23:08:18.0391444Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T23:08:18.0391493Z ╰──── 2026-10-24T23:08:18.0391947Z  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-24T23:08:18.0392257Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:08:18.0392259Z 2026-10-24T23:08:18.0392396Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:08:18.0392548Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:107:21] 2026-10-24T23:08:18.0392667Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T23:08:18.0392786Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T23:08:18.0392920Z ·  ───────────────────────┬────────────────────── 2026-10-24T23:08:18.0393174Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T23:08:18.0393268Z 108 │ [props.disabled], 2026-10-24T23:08:18.0393317Z ╰──── 2026-10-24T23:08:18.0393764Z  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-24T23:08:18.0394044Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:08:18.0394046Z 2026-10-24T23:08:18.0394184Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:08:18.0394335Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:249:9] 2026-10-24T23:08:18.0394450Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-24T23:08:18.0394555Z 249 │ latest.current = { rows, planners, moveThread }; 2026-10-24T23:08:18.0394657Z ·  ───┬──────┬─── 2026-10-24T23:08:18.0394829Z · │ ╰── Cannot update ref value during render 2026-10-24T23:08:18.0394941Z · ╰── This value is a ref 2026-10-24T23:08:18.0394992Z 250 │ 2026-10-24T23:08:18.0395041Z ╰──── 2026-10-24T23:08:18.0395491Z  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-24T23:08:18.0395777Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:08:18.0395782Z 2026-10-24T23:08:18.0395921Z ⚠ react(refs): Cannot access refs during render 2026-10-24T23:08:18.0396074Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:247:22] 2026-10-24T23:08:18.0396191Z 246 │ const [preview, setPreview] = useState(null); 2026-10-24T23:08:18.0396302Z 247 │ const translateY = useRef(new Animated.Value(0)).current; 2026-10-24T23:08:18.0396423Z ·  ──────────────────┬────────────────── 2026-10-24T23:08:18.0396585Z · ╰── Cannot access ref value during render 2026-10-24T23:08:18.0396693Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-24T23:08:18.0396746Z ╰──── 2026-10-24T23:08:18.0397197Z  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-24T23:08:18.0397478Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T23:08:18.0397481Z 2026-10-24T23:08:18.0397644Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T23:08:18.0397797Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:324:16] 2026-10-24T23:08:18.0397860Z 323 │ update(0); 2026-10-24T23:08:18.0397939Z 324 │ let last = performance.now(); 2026-10-24T23:08:18.0398078Z ·  ────────┬──────── 2026-10-24T23:08:18.0398242Z · ╰── Cannot call impure function 2026-10-24T23:08:18.0398307Z 325 │ const tick = () => { 2026-10-24T23:08:18.0398356Z ╰──── 2026-10-24T23:08:18.0398646Z  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-24T23:08:18.0398933Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T23:08:18.0398935Z 2026-10-24T23:08:18.0399117Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T23:08:18.0399272Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:99:15] 2026-10-24T23:08:18.0399334Z  98 │ () => 2026-10-24T23:08:18.0399400Z  99 │ Gesture.Pan() 2026-10-24T23:08:18.0399472Z ·  ─┬─ 2026-10-24T23:08:18.0399599Z · ╰── `Pan` may be a component 2026-10-24T23:08:18.0399676Z 100 │ .enabled(!props.disabled) 2026-10-24T23:08:18.0399725Z ╰──── 2026-10-24T23:08:18.0399990Z  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-24T23:08:18.0400421Z  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-24T23:08:18.0400424Z 2026-10-24T23:08:18.0400609Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T23:08:18.0400770Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:108:5] 2026-10-24T23:08:18.0400836Z 103 │ .runOnJS(true) 2026-10-24T23:08:18.0400932Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T23:08:18.0401016Z ·  ───┬── 2026-10-24T23:08:18.0401435Z · ╰── 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-24T23:08:18.0401563Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T23:08:18.0401682Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T23:08:18.0401849Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T23:08:18.0401945Z 108 │ [props.disabled], 2026-10-24T23:08:18.0402034Z ·  ────────┬─────── 2026-10-24T23:08:18.0402238Z · ╰── This dependency list is missing values used by the callback 2026-10-24T23:08:18.0402293Z 109 │ ); 2026-10-24T23:08:18.0402342Z ╰──── 2026-10-24T23:08:18.0402541Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T23:08:18.0402843Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:18.0402847Z 2026-10-24T23:08:18.0403008Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T23:08:18.0403167Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:698:76] 2026-10-24T23:08:18.0403345Z 697 │ const [snoozeGateClock, setSnoozeGateClock] = useState(() => ({ thread, now: Date.now() })); 2026-10-24T23:08:18.0403509Z 698 │ if (snoozeGateClock.thread !== thread) setSnoozeGateClock({ thread, now: Date.now() }); 2026-10-24T23:08:18.0403639Z ·  ─────┬──── 2026-10-24T23:08:18.0403816Z · ╰── Cannot call impure function 2026-10-24T23:08:18.0403948Z 699 │ const snoozeGateNow = new Date(snoozeGateClock.now).toISOString(); 2026-10-24T23:08:18.0404000Z ╰──── 2026-10-24T23:08:18.0404280Z  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-24T23:08:18.0404570Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T23:08:18.0404572Z 2026-10-24T23:08:18.0404736Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T23:08:18.0404892Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:719:71] 2026-10-24T23:08:18.0404970Z 718 │ const snoozePresets = useMemo( 2026-10-24T23:08:18.0405144Z 719 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-24T23:08:18.0405272Z ·  ─────┬──── 2026-10-24T23:08:18.0405452Z · ╰── Cannot call impure function 2026-10-24T23:08:18.0405570Z 720 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-24T23:08:18.0405618Z ╰──── 2026-10-24T23:08:18.0405887Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T23:08:18.0406173Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T23:08:18.0406175Z 2026-10-24T23:08:18.0406351Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T23:08:18.0406504Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:720:6] 2026-10-24T23:08:18.0406718Z 719 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-24T23:08:18.0406862Z 720 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-24T23:08:18.0406953Z ·  ────────────┬─────────── 2026-10-24T23:08:18.0407124Z · ╰── Unnecessary dependency `props.snoozePresetMinute` 2026-10-24T23:08:18.0407177Z 721 │ ); 2026-10-24T23:08:18.0407228Z ╰──── 2026-10-24T23:08:18.0407536Z  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-24T23:08:18.0407842Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:18.0407844Z 2026-10-24T23:08:18.0408024Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T23:08:18.0408177Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:766:7] 2026-10-24T23:08:18.0408245Z 765 │ thread.pinnedAt, 2026-10-24T23:08:18.0408307Z 766 │ variant, 2026-10-24T23:08:18.0408378Z ·  ───┬─── 2026-10-24T23:08:18.0408510Z · ╰── Unnecessary dependency `variant` 2026-10-24T23:08:18.0408565Z 767 │ ], 2026-10-24T23:08:18.0408615Z ╰──── 2026-10-24T23:08:18.0408916Z  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-24T23:08:18.0409224Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:18.0409230Z 2026-10-24T23:08:18.0409419Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T23:08:18.0409574Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:1216:21] 2026-10-24T23:08:18.0409701Z 1215 │ {providerDrivers.slice(0, -1).map((driver, index) => ( 2026-10-24T23:08:18.0409831Z 1216 │ 2026-10-24T23:08:18.0409944Z ·  ────────────────────────── 2026-10-24T23:08:18.0410052Z 1217 │ 2026-10-24T23:08:18.0410104Z ╰──── 2026-10-24T23:08:18.0410247Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T23:08:18.0410249Z 2026-10-24T23:08:18.0410509Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:08:18.0410669Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:279:5] 2026-10-24T23:08:18.0410788Z 277 │ const [snoozeWakeTick, bumpSnoozeWakeTick] = useState(0); 2026-10-24T23:08:18.0410853Z 278 │ useEffect(() => { 2026-10-24T23:08:18.0410925Z ·  ────┬──── 2026-10-24T23:08:18.0411053Z · ╰── This is the containing effect 2026-10-24T23:08:18.0411139Z 279 │ setNow(new Date().toISOString()); 2026-10-24T23:08:18.0411207Z ·  ───┬── 2026-10-24T23:08:18.0411367Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:08:18.0411549Z 280 │ const id = setInterval(() => setNow(new Date().toISOString()), 60_000); 2026-10-24T23:08:18.0411627Z ╰──── 2026-10-24T23:08:18.0412237Z  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-24T23:08:18.0412551Z  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-24T23:08:18.0412554Z 2026-10-24T23:08:18.0412782Z ⚠ eslint(no-unused-vars): Type 'EnvironmentThreadSearchMatch' is imported but never used. 2026-10-24T23:08:18.0412940Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:13:8] 2026-10-24T23:08:18.0413012Z 12 │ threadSearchMatchKey, 2026-10-24T23:08:18.0413098Z 13 │ type EnvironmentThreadSearchMatch, 2026-10-24T23:08:18.0413201Z ·  ──────────────┬───────────── 2026-10-24T23:08:18.0413373Z · ╰── 'EnvironmentThreadSearchMatch' is imported here 2026-10-24T23:08:18.0413482Z 14 │ } from "@t3tools/client-runtime/state/thread-search"; 2026-10-24T23:08:18.0413530Z ╰──── 2026-10-24T23:08:18.0413627Z  help: Consider removing this import. 2026-10-24T23:08:18.0413630Z 2026-10-24T23:08:18.0413824Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:08:18.0413984Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:359:25] 2026-10-24T23:08:18.0414120Z 358 │ // range) the boundary string is identical and the chain would die. 2026-10-24T23:08:18.0414211Z 359 │ }, [nextSnoozeWakeAt, snoozeWakeTick]); 2026-10-24T23:08:18.0414310Z ·  ───────┬────── 2026-10-24T23:08:18.0414470Z · ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T23:08:18.0414583Z 360 │ const listItems = ((): readonly SidebarListItem[] => { 2026-10-24T23:08:18.0414632Z ╰──── 2026-10-24T23:08:18.0414917Z  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-24T23:08:18.0415219Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:18.0415221Z 2026-10-24T23:08:18.0415390Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T23:08:18.0415551Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:350:53] 2026-10-24T23:08:18.0415637Z 349 │ if (Number.isNaN(wakeAtMs)) return; 2026-10-24T23:08:18.0415790Z 350 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647); 2026-10-24T23:08:18.0415907Z ·  ─────┬──── 2026-10-24T23:08:18.0416069Z · ╰── Cannot call impure function 2026-10-24T23:08:18.0416145Z 351 │ const id = setTimeout(() => { 2026-10-24T23:08:18.0416196Z ╰──── 2026-10-24T23:08:18.0416473Z  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-24T23:08:18.0416841Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T23:08:18.0416872Z 2026-10-24T23:08:18.0417121Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:08:18.0417280Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:217:7] 2026-10-24T23:08:18.0417333Z 213 │ }; 2026-10-24T23:08:18.0417401Z 214 │ useEffect(() => { 2026-10-24T23:08:18.0417470Z ·  ────┬──── 2026-10-24T23:08:18.0417598Z · ╰── This is the containing effect 2026-10-24T23:08:18.0417767Z 215 │ const inserted = ownerKey ? readComposerDraftSelection(ownerKey, draftMessage) : null; 2026-10-24T23:08:18.0417837Z 216 │ if (inserted) { 2026-10-24T23:08:18.0417913Z 217 │ setSelection((current) => 2026-10-24T23:08:18.0417991Z ·  ──────┬───── 2026-10-24T23:08:18.0418156Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:08:18.0418325Z 218 │ current.start === inserted.start && current.end === inserted.end ? current : inserted, 2026-10-24T23:08:18.0418373Z ╰──── 2026-10-24T23:08:18.0418955Z  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-24T23:08:18.0419269Z  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-24T23:08:18.0419274Z 2026-10-24T23:08:18.0419526Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:08:18.0419686Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:298:7] 2026-10-24T23:08:18.0419760Z 286 │ }, [hasWorkspaceSnapshot]); 2026-10-24T23:08:18.0419826Z 287 │ useEffect(() => { 2026-10-24T23:08:18.0419896Z ·  ────┬──── 2026-10-24T23:08:18.0420022Z · ╰── This is the containing effect 2026-10-24T23:08:18.0420165Z 288 │ if (!environmentId || !projectCwd || !selectedProviderInstanceId) return; 2026-10-24T23:08:18.0420311Z 289 │ const key = `${environmentId}:${selectedProviderInstanceId}:${projectCwd}`; 2026-10-24T23:08:18.0420385Z 290 │ const now = Date.now(); 2026-10-24T23:08:18.0420500Z 291 │ const lastRequest = workspaceRefreshKeyRef.current; 2026-10-24T23:08:18.0420556Z 292 │ if ( 2026-10-24T23:08:18.0420633Z 293 │ lastRequest?.key === key && 2026-10-24T23:08:18.0420771Z 294 │ now - lastRequest.requestedAt < PROVIDER_WORKSPACE_SNAPSHOT_TTL_MS 2026-10-24T23:08:18.0420825Z 295 │ ) 2026-10-24T23:08:18.0420884Z 296 │ return; 2026-10-24T23:08:18.0421057Z 297 │ if (hasCurrentProviderWorkspaceSnapshot(selectedProviderStatus, projectCwd, now)) { 2026-10-24T23:08:18.0421141Z 298 │ setWorkspaceRefreshRetry(null); 2026-10-24T23:08:18.0421234Z ·  ────────────┬─────────── 2026-10-24T23:08:18.0421407Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:08:18.0421467Z 299 │ return; 2026-10-24T23:08:18.0421566Z ╰──── 2026-10-24T23:08:18.0422207Z  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-24T23:08:18.0422520Z  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-24T23:08:18.0422522Z 2026-10-24T23:08:18.0422717Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:08:18.0422879Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:328:5] 2026-10-24T23:08:18.0422934Z 327 │ }, [ 2026-10-24T23:08:18.0423002Z 328 │ draftMessage, 2026-10-24T23:08:18.0423083Z ·  ──────┬───── 2026-10-24T23:08:18.0423226Z · ╰── Unnecessary dependency `draftMessage` 2026-10-24T23:08:18.0423291Z 329 │ environmentId, 2026-10-24T23:08:18.0423343Z ╰──── 2026-10-24T23:08:18.0423626Z  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-24T23:08:18.0423930Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:18.0423932Z 2026-10-24T23:08:18.0424183Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:08:18.0424334Z ╭─[apps/mobile/src/features/threads/use-worktree-setup.ts:30:40] 2026-10-24T23:08:18.0424493Z 28 │ const snapshot = resolveWorktreeSetupSnapshot(input.threadId, query.data, live); 2026-10-24T23:08:18.0424554Z 29 │ useEffect(() => { 2026-10-24T23:08:18.0424624Z ·  ────┬──── 2026-10-24T23:08:18.0424749Z · ╰── This is the containing effect 2026-10-24T23:08:18.0424871Z 30 │ if (snapshot && snapshot !== live) setHeld({ key, snapshot }); 2026-10-24T23:08:18.0424971Z ·  ───┬─── 2026-10-24T23:08:18.0425156Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:08:18.0425227Z 31 │ }, [key, live, snapshot]); 2026-10-24T23:08:18.0425277Z ╰──── 2026-10-24T23:08:18.0425911Z  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-24T23:08:18.0426257Z  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-24T23:08:18.0426259Z 2026-10-24T23:08:18.0426419Z ⚠ eslint(no-empty-pattern): Empty array binding pattern 2026-10-24T23:08:18.0426630Z ╭─[apps/server/src/pullRequest/PullRequestService.test.ts:1437:12] 2026-10-24T23:08:18.0426684Z 1436 │ 2026-10-24T23:08:18.0426747Z 1437 │ for (const [] of [ 2026-10-24T23:08:18.0426821Z ·  ── 2026-10-24T23:08:18.0426896Z 1438 │ ["github", "github.com"], 2026-10-24T23:08:18.0426946Z ╰──── 2026-10-24T23:08:18.0427218Z  help: Passing non-iterable values (null, undefined, numbers, booleans, etc.) will result in a runtime error because these values are not iterable. 2026-10-24T23:08:18.0427220Z 2026-10-24T23:08:18.0427373Z ⚠ react(immutability): This value cannot be modified 2026-10-24T23:08:18.0427523Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:94:5] 2026-10-24T23:08:18.0427575Z 83 │ 2026-10-24T23:08:18.0427666Z 84 │ const cardCoverage = props.cardCoverage; 2026-10-24T23:08:18.0427744Z ·  ──────┬───── 2026-10-24T23:08:18.0427875Z · ╰── `cardCoverage` originates here 2026-10-24T23:08:18.0427959Z 85 │ const barHeightRef = useRef(0); 2026-10-24T23:08:18.0428037Z 86 │ const cardHeightRef = useRef(0); 2026-10-24T23:08:18.0428121Z 87 │ const cardHeight = useSharedValue(0); 2026-10-24T23:08:18.0428212Z 88 │ const notifyCoverage = useCallback(() => { 2026-10-24T23:08:18.0428277Z 89 │ if (!cardCoverage) { 2026-10-24T23:08:18.0428337Z 90 │ return; 2026-10-24T23:08:18.0428391Z 91 │ } 2026-10-24T23:08:18.0428552Z 92 │ // The card resizes with the keyboard every frame, so easing each sample would leave the 2026-10-24T23:08:18.0428651Z 93 │ // feed inset and floating controls trailing it. 2026-10-24T23:08:18.0428807Z 94 │ cardCoverage.value = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T23:08:18.0428880Z ·  ──────┬───── 2026-10-24T23:08:18.0429015Z · ╰── `cardCoverage` cannot be modified 2026-10-24T23:08:18.0429084Z 95 │ }, [cardCoverage]); 2026-10-24T23:08:18.0429138Z ╰──── 2026-10-24T23:08:18.0429428Z  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-24T23:08:18.0429728Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:08:18.0429731Z 2026-10-24T23:08:18.0429882Z ⚠ react(immutability): This value cannot be modified 2026-10-24T23:08:18.0430032Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:106:7] 2026-10-24T23:08:18.0430114Z  86 │ const cardHeightRef = useRef(0); 2026-10-24T23:08:18.0430199Z  87 │ const cardHeight = useSharedValue(0); 2026-10-24T23:08:18.0430342Z ·  ─────┬──── 2026-10-24T23:08:18.0430505Z · ╰── `cardHeight` originates here 2026-10-24T23:08:18.0430597Z  88 │ const notifyCoverage = useCallback(() => { 2026-10-24T23:08:18.0430664Z  89 │ if (!cardCoverage) { 2026-10-24T23:08:18.0430725Z  90 │ return; 2026-10-24T23:08:18.0430777Z  91 │ } 2026-10-24T23:08:18.0430937Z  92 │ // The card resizes with the keyboard every frame, so easing each sample would leave the 2026-10-24T23:08:18.0431035Z  93 │ // feed inset and floating controls trailing it. 2026-10-24T23:08:18.0431189Z  94 │ cardCoverage.value = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T23:08:18.0431253Z  95 │ }, [cardCoverage]); 2026-10-24T23:08:18.0431336Z  96 │ const handleBarLayout = useCallback( 2026-10-24T23:08:18.0431416Z  97 │ (event: LayoutChangeEvent) => { 2026-10-24T23:08:18.0431542Z  98 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T23:08:18.0431608Z  99 │ notifyCoverage(); 2026-10-24T23:08:18.0431662Z 100 │ }, 2026-10-24T23:08:18.0431726Z 101 │ [notifyCoverage], 2026-10-24T23:08:18.0431777Z 102 │ ); 2026-10-24T23:08:18.0431861Z 103 │ const handleCardLayout = useCallback( 2026-10-24T23:08:18.0431941Z 104 │ (event: LayoutChangeEvent) => { 2026-10-24T23:08:18.0432098Z 105 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T23:08:18.0432209Z 106 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-24T23:08:18.0432285Z ·  ─────┬──── 2026-10-24T23:08:18.0432420Z · ╰── `cardHeight` cannot be modified 2026-10-24T23:08:18.0432484Z 107 │ notifyCoverage(); 2026-10-24T23:08:18.0432534Z ╰──── 2026-10-24T23:08:18.0432801Z  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-24T23:08:18.0433103Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:08:18.0433105Z 2026-10-24T23:08:18.0433303Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T23:08:18.0433453Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:94:5] 2026-10-24T23:08:18.0433535Z 87 │ const cardHeight = useSharedValue(0); 2026-10-24T23:08:18.0433626Z 88 │ const notifyCoverage = useCallback(() => { 2026-10-24T23:08:18.0433726Z ·  ───┬─── 2026-10-24T23:08:18.0433961Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-24T23:08:18.0434028Z 89 │ if (!cardCoverage) { 2026-10-24T23:08:18.0434086Z 90 │ return; 2026-10-24T23:08:18.0434138Z 91 │ } 2026-10-24T23:08:18.0434299Z 92 │ // The card resizes with the keyboard every frame, so easing each sample would leave the 2026-10-24T23:08:18.0434397Z 93 │ // feed inset and floating controls trailing it. 2026-10-24T23:08:18.0434552Z 94 │ cardCoverage.value = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T23:08:18.0434626Z ·  ──────┬───── 2026-10-24T23:08:18.0434755Z · ╰── This modifies `cardCoverage` 2026-10-24T23:08:18.0434819Z 95 │ }, [cardCoverage]); 2026-10-24T23:08:18.0434870Z ╰──── 2026-10-24T23:08:18.0435247Z  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-24T23:08:18.0435572Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:08:18.0435574Z 2026-10-24T23:08:18.0435768Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T23:08:18.0435917Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:94:5] 2026-10-24T23:08:18.0436017Z 93 │ // feed inset and floating controls trailing it. 2026-10-24T23:08:18.0436170Z 94 │ cardCoverage.value = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T23:08:18.0436244Z ·  ──────┬───── 2026-10-24T23:08:18.0436373Z · ╰── This modifies `cardCoverage` 2026-10-24T23:08:18.0436440Z 95 │ }, [cardCoverage]); 2026-10-24T23:08:18.0436523Z 96 │ const handleBarLayout = useCallback( 2026-10-24T23:08:18.0436602Z 97 │ (event: LayoutChangeEvent) => { 2026-10-24T23:08:18.0436702Z ·  ───────────────┬─────────────── 2026-10-24T23:08:18.0436918Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-24T23:08:18.0437042Z 98 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T23:08:18.0437093Z ╰──── 2026-10-24T23:08:18.0437423Z  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-24T23:08:18.0437725Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:08:18.0437730Z 2026-10-24T23:08:18.0437924Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T23:08:18.0438076Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:106:7] 2026-10-24T23:08:18.0438161Z 103 │ const handleCardLayout = useCallback( 2026-10-24T23:08:18.0438242Z 104 │ (event: LayoutChangeEvent) => { 2026-10-24T23:08:18.0438346Z ·  ───────────────┬─────────────── 2026-10-24T23:08:18.0438558Z · ╰── This function may (indirectly) reassign or modify `cardHeight` after render 2026-10-24T23:08:18.0438681Z 105 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T23:08:18.0438797Z 106 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-24T23:08:18.0438875Z ·  ─────┬──── 2026-10-24T23:08:18.0439000Z · ╰── This modifies `cardHeight` 2026-10-24T23:08:18.0439065Z 107 │ notifyCoverage(); 2026-10-24T23:08:18.0439116Z ╰──── 2026-10-24T23:08:18.0439440Z  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-24T23:08:18.0439736Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:08:18.0439739Z 2026-10-24T23:08:18.0439921Z ⚠ react(static-components): Cannot create components during render 2026-10-24T23:08:18.0440123Z ╭─[apps/mobile/src/features/terminal/NativeTerminalSurface.tsx:234:10] 2026-10-24T23:08:18.0440234Z 196 │ const { onInput, onResize } = props; 2026-10-24T23:08:18.0440380Z 197 │ const NativeTerminalSurfaceView = resolveNativeTerminalSurfaceView(); 2026-10-24T23:08:18.0440507Z ·  ────────────────┬─────────────── 2026-10-24T23:08:18.0440686Z · ╰── The component is created during render here 2026-10-24T23:08:18.0440812Z 198 │ const hasNativeSurface = Boolean(NativeTerminalSurfaceView); 2026-10-24T23:08:18.0440863Z 199 │ 2026-10-24T23:08:18.0440929Z 200 │ useEffect(() => { 2026-10-24T23:08:18.0441014Z 201 │ terminalDebugLog("native:surface", { 2026-10-24T23:08:18.0441099Z 202 │ terminalKey: props.terminalKey, 2026-10-24T23:08:18.0441180Z 203 │ native: hasNativeSurface, 2026-10-24T23:08:18.0441316Z 204 │ hardwareKeyRevision: getNativeTerminalHardwareKeyRevision(), 2026-10-24T23:08:18.0441396Z 205 │ bufferLen: props.buffer.length, 2026-10-24T23:08:18.0441473Z 206 │ isRunning: props.isRunning, 2026-10-24T23:08:18.0441528Z 207 │ }); 2026-10-24T23:08:18.0441683Z 208 │ }, [hasNativeSurface, props.buffer.length, props.isRunning, props.terminalKey]); 2026-10-24T23:08:18.0441769Z 209 │ const handleNativeInput = useCallback( 2026-10-24T23:08:18.0441883Z 210 │ (event: NativeSyntheticEvent) => { 2026-10-24T23:08:18.0441991Z 211 │ if (!props.isRunning || props.readOnly) { 2026-10-24T23:08:18.0442051Z 212 │ return; 2026-10-24T23:08:18.0442133Z 213 │ } 2026-10-24T23:08:18.0442222Z 214 │ terminalDebugLog("native:onInput", { 2026-10-24T23:08:18.0442377Z 215 │ codes: Array.from(event.nativeEvent.data, (char) => char.codePointAt(0)), 2026-10-24T23:08:18.0442437Z 216 │ }); 2026-10-24T23:08:18.0442520Z 217 │ onInput(event.nativeEvent.data); 2026-10-24T23:08:18.0442575Z 218 │ }, 2026-10-24T23:08:18.0442673Z 219 │ [onInput, props.isRunning, props.readOnly], 2026-10-24T23:08:18.0442727Z 220 │ ); 2026-10-24T23:08:18.0442813Z 221 │ const handleNativeResize = useCallback( 2026-10-24T23:08:18.0442925Z 222 │ (event: NativeSyntheticEvent) => { 2026-10-24T23:08:18.0442987Z 223 │ onResize({ 2026-10-24T23:08:18.0443068Z 224 │ cols: event.nativeEvent.cols, 2026-10-24T23:08:18.0443149Z 225 │ rows: event.nativeEvent.rows, 2026-10-24T23:08:18.0443205Z 226 │ }); 2026-10-24T23:08:18.0443258Z 227 │ }, 2026-10-24T23:08:18.0443319Z 228 │ [onResize], 2026-10-24T23:08:18.0443380Z 229 │ ); 2026-10-24T23:08:18.0443434Z 230 │ 2026-10-24T23:08:18.0443516Z 231 │ if (NativeTerminalSurfaceView) { 2026-10-24T23:08:18.0443573Z 232 │ return ( 2026-10-24T23:08:18.0443650Z 233 │ 2026-10-24T23:08:18.0443731Z 234 │ { 2026-10-24T23:08:18.0445373Z ·  ────┬──── 2026-10-24T23:08:18.0445501Z · ╰── This is the containing effect 2026-10-24T23:08:18.0445585Z 570 │ setKeyboardStateSuspect(false); 2026-10-24T23:08:18.0445672Z ·  ───────────┬─────────── 2026-10-24T23:08:18.0445845Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:08:18.0445948Z 571 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-24T23:08:18.0446000Z ╰──── 2026-10-24T23:08:18.0446590Z  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-24T23:08:18.0446903Z  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-24T23:08:18.0446905Z 2026-10-24T23:08:18.0447157Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:08:18.0447309Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:966:7] 2026-10-24T23:08:18.0447465Z 963 │ const [lastKnownKeyboardHeight, setLastKnownKeyboardHeight] = useState(0); 2026-10-24T23:08:18.0447529Z 964 │ useEffect(() => { 2026-10-24T23:08:18.0447598Z ·  ────┬──── 2026-10-24T23:08:18.0447723Z · ╰── This is the containing effect 2026-10-24T23:08:18.0447880Z 965 │ if (liveKeyboardHeight > 0 && liveKeyboardHeight !== lastKnownKeyboardHeight) { 2026-10-24T23:08:18.0447991Z 966 │ setLastKnownKeyboardHeight(liveKeyboardHeight); 2026-10-24T23:08:18.0448086Z ·  ─────────────┬──────────── 2026-10-24T23:08:18.0448257Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:08:18.0448312Z 967 │ } 2026-10-24T23:08:18.0448409Z ╰──── 2026-10-24T23:08:18.0449018Z  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-24T23:08:18.0449330Z  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-24T23:08:18.0449333Z 2026-10-24T23:08:18.0449584Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:08:18.0449735Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1222:5] 2026-10-24T23:08:18.0449788Z 1220 │ 2026-10-24T23:08:18.0449856Z 1221 │ useEffect(() => { 2026-10-24T23:08:18.0449932Z ·  ────┬──── 2026-10-24T23:08:18.0450061Z · ╰── This is the containing effect 2026-10-24T23:08:18.0450137Z 1222 │ setAnchorMessageId(null); 2026-10-24T23:08:18.0450220Z ·  ─────────┬──────── 2026-10-24T23:08:18.0450388Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:08:18.0450468Z 1223 │ setSubmittedMessageId(null); 2026-10-24T23:08:18.0450519Z ╰──── 2026-10-24T23:08:18.0451108Z  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-24T23:08:18.0451422Z  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-24T23:08:18.0451425Z 2026-10-24T23:08:18.0451621Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:08:18.0451769Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:571:7] 2026-10-24T23:08:18.0451850Z 570 │ setKeyboardStateSuspect(false); 2026-10-24T23:08:18.0451948Z 571 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-24T23:08:18.0452122Z ·  ────────┬──────── ─────────┬──────── 2026-10-24T23:08:18.0452334Z · │ ╰── Unnecessary dependency `liveKeyboardHeight` 2026-10-24T23:08:18.0452492Z · ╰── Unnecessary dependency `isKeyboardVisible` 2026-10-24T23:08:18.0452616Z 572 │ const handleOwnedInputFocusChange = (focused: boolean) => { 2026-10-24T23:08:18.0452667Z ╰──── 2026-10-24T23:08:18.0452954Z  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-24T23:08:18.0453258Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:18.0453260Z 2026-10-24T23:08:18.0453454Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:08:18.0453651Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1170:7] 2026-10-24T23:08:18.0453764Z 1169 │ userInputInsetProgress.set(1); 2026-10-24T23:08:18.0453924Z 1170 │ }, [activeUserInputRequestId, userInputCardProgress, userInputInsetProgress]); 2026-10-24T23:08:18.0454018Z ·  ────────────┬─────────── 2026-10-24T23:08:18.0454193Z · ╰── Unnecessary dependency `activeUserInputRequestId` 2026-10-24T23:08:18.0454300Z 1171 │ const showContent = props.showContent ?? true; 2026-10-24T23:08:18.0454352Z ╰──── 2026-10-24T23:08:18.0454634Z  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-24T23:08:18.0454946Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:18.0454951Z 2026-10-24T23:08:18.0455145Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:08:18.0455296Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1228:15] 2026-10-24T23:08:18.0455364Z 1227 │ freeze.set(false); 2026-10-24T23:08:18.0455442Z 1228 │ }, [freeze, selectedThreadKey]); 2026-10-24T23:08:18.0455535Z ·  ────────┬──────── 2026-10-24T23:08:18.0455695Z · ╰── Unnecessary dependency `selectedThreadKey` 2026-10-24T23:08:18.0455749Z 1229 │ 2026-10-24T23:08:18.0455798Z ╰──── 2026-10-24T23:08:18.0456081Z  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-24T23:08:18.0456389Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:18.0456394Z 2026-10-24T23:08:18.0456549Z ⚠ react(immutability): This value cannot be modified 2026-10-24T23:08:18.0456698Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1058:5] 2026-10-24T23:08:18.0456807Z 1053 │ const composerPopoverHeight = useSharedValue(0); 2026-10-24T23:08:18.0456914Z 1054 │ const floatingControlCoverage = useSharedValue( 2026-10-24T23:08:18.0457009Z ·  ───────────┬─────────── 2026-10-24T23:08:18.0457167Z · ╰── `floatingControlCoverage` originates here 2026-10-24T23:08:18.0457292Z 1055 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-24T23:08:18.0457353Z 1056 │ ); 2026-10-24T23:08:18.0457421Z 1057 │ useEffect(() => { 2026-10-24T23:08:18.0457525Z 1058 │ floatingControlCoverage.value = withTiming( 2026-10-24T23:08:18.0457613Z ·  ───────────┬─────────── 2026-10-24T23:08:18.0457773Z · ╰── `floatingControlCoverage` cannot be modified 2026-10-24T23:08:18.0457898Z 1059 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-24T23:08:18.0457949Z ╰──── 2026-10-24T23:08:18.0458207Z  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-24T23:08:18.0458504Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:08:18.0458555Z 2026-10-24T23:08:18.0458736Z ⚠ react(immutability): This value cannot be modified 2026-10-24T23:08:18.0458885Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1076:7] 2026-10-24T23:08:18.0459066Z 1066 │ const userInputCoverageApplies = Platform.OS === "ios" && activeUserInputRequestId !== null; 2026-10-24T23:08:18.0459191Z 1067 │ const combinedContentInsetEndAdjustment = useSharedValue( 2026-10-24T23:08:18.0459301Z ·  ────────────────┬──────────────── 2026-10-24T23:08:18.0459485Z · ╰── `combinedContentInsetEndAdjustment` originates here 2026-10-24T23:08:18.0459611Z 1068 │ Math.max(0, estimatedOverlayHeight - nativeInsetOvercount), 2026-10-24T23:08:18.0459667Z 1069 │ ); 2026-10-24T23:08:18.0459737Z 1070 │ useAnimatedReaction( 2026-10-24T23:08:18.0459802Z 1071 │ () => 2026-10-24T23:08:18.0459897Z 1072 │ contentInsetEndAdjustment.value + 2026-10-24T23:08:18.0459985Z 1073 │ floatingControlCoverage.value + 2026-10-24T23:08:18.0460179Z 1074 │ (userInputCoverageApplies ? userInputInsetProgress.value * userInputCardCoverage.value : 0), 2026-10-24T23:08:18.0460244Z 1075 │ (value) => { 2026-10-24T23:08:18.0460355Z 1076 │ combinedContentInsetEndAdjustment.value = value; 2026-10-24T23:08:18.0460463Z ·  ────────────────┬──────────────── 2026-10-24T23:08:18.0460648Z · ╰── `combinedContentInsetEndAdjustment` cannot be modified 2026-10-24T23:08:18.0460704Z 1077 │ }, 2026-10-24T23:08:18.0460754Z ╰──── 2026-10-24T23:08:18.0461017Z  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-24T23:08:18.0461317Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:08:18.0461320Z 2026-10-24T23:08:18.0461556Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T23:08:18.0461709Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:290:50] 2026-10-24T23:08:18.0461767Z 289 │ return ( 2026-10-24T23:08:18.0461900Z 290 │ 2026-10-24T23:08:18.0462049Z ·  ───────────── 2026-10-24T23:08:18.0462118Z 291 │ {props.children} 2026-10-24T23:08:18.0462168Z ╰──── 2026-10-24T23:08:18.0462394Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T23:08:18.0462536Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T23:08:18.0462538Z 2026-10-24T23:08:18.0462769Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T23:08:18.0462918Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:654:44] 2026-10-24T23:08:18.0462977Z 653 │ return ( 2026-10-24T23:08:18.0463096Z 654 │ 2026-10-24T23:08:18.0463208Z ·  ───────────── 2026-10-24T23:08:18.0463272Z 655 │ {props.children} 2026-10-24T23:08:18.0463324Z ╰──── 2026-10-24T23:08:18.0463590Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T23:08:18.0463753Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T23:08:18.0463756Z 2026-10-24T23:08:18.0463987Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T23:08:18.0464141Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:1462:55] 2026-10-24T23:08:18.0464202Z 1461 │ return ( 2026-10-24T23:08:18.0464362Z 1462 │ 2026-10-24T23:08:18.0464490Z ·  ──────────────────── 2026-10-24T23:08:18.0464585Z 1463 │ { 2026-10-24T23:08:18.0467684Z ·  ────┬──── 2026-10-24T23:08:18.0467811Z · ╰── This is the containing effect 2026-10-24T23:08:18.0467899Z 357 │ if (!isReturningToProjectPicker) { 2026-10-24T23:08:18.0467958Z 358 │ return; 2026-10-24T23:08:18.0468012Z 359 │ } 2026-10-24T23:08:18.0468108Z 360 │ if (requestedInitialProjectAvailable) { 2026-10-24T23:08:18.0468200Z 361 │ setIsReturningToProjectPicker(false); 2026-10-24T23:08:18.0468363Z ·  ──────────────┬────────────── 2026-10-24T23:08:18.0468574Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:08:18.0468633Z 362 │ return; 2026-10-24T23:08:18.0468684Z ╰──── 2026-10-24T23:08:18.0469264Z  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-24T23:08:18.0469577Z  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-24T23:08:18.0469580Z 2026-10-24T23:08:18.0469835Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:08:18.0469985Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:504:9] 2026-10-24T23:08:18.0470038Z 447 │ 2026-10-24T23:08:18.0470101Z 448 │ useEffect(() => { 2026-10-24T23:08:18.0470171Z ·  ────┬──── 2026-10-24T23:08:18.0470296Z · ╰── This is the containing effect 2026-10-24T23:08:18.0470398Z 449 │ if (props.pendingTaskId || props.draftId) { 2026-10-24T23:08:18.0470454Z 450 │ return; 2026-10-24T23:08:18.0470508Z 451 │ } 2026-10-24T23:08:18.0470649Z 452 │ if (lastInitialProjectRefRef.current !== props.initialProjectRef) { 2026-10-24T23:08:18.0470779Z 453 │ lastInitialProjectRefRef.current = props.initialProjectRef; 2026-10-24T23:08:18.0470884Z 454 │ appliedInitialProjectKeyRef.current = null; 2026-10-24T23:08:18.0470943Z 455 │ } 2026-10-24T23:08:18.0471084Z 456 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-24T23:08:18.0471211Z 457 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-24T23:08:18.0471313Z 458 │ if (initialEnvironmentId && initialProjectId) { 2026-10-24T23:08:18.0471384Z 459 │ const directProject = 2026-10-24T23:08:18.0471450Z 460 │ projects.find( 2026-10-24T23:08:18.0471514Z 461 │ (project) => 2026-10-24T23:08:18.0471688Z 462 │ project.environmentId === initialEnvironmentId && project.id === initialProjectId, 2026-10-24T23:08:18.0471750Z 463 │ ) ?? null; 2026-10-24T23:08:18.0471801Z 464 │ 2026-10-24T23:08:18.0471868Z 465 │ if (directProject) { 2026-10-24T23:08:18.0472033Z 466 │ // Apply the route's project once. Re-applying on every change would 2026-10-24T23:08:18.0472220Z 467 │ // instantly revert environment/project switches made in the picker. 2026-10-24T23:08:18.0472406Z 468 │ const directProjectKey = `${directProject.environmentId}:${directProject.id}`; 2026-10-24T23:08:18.0472538Z 469 │ if (appliedInitialProjectKeyRef.current === directProjectKey) { 2026-10-24T23:08:18.0472604Z 470 │ return; 2026-10-24T23:08:18.0472662Z 471 │ } 2026-10-24T23:08:18.0472759Z 472 │ if (props.initialProjectRef?.branch) { 2026-10-24T23:08:18.0472818Z 473 │ if ( 2026-10-24T23:08:18.0472961Z 474 │ selectedProject?.environmentId !== directProject.environmentId || 2026-10-24T23:08:18.0473058Z 475 │ selectedProject.id !== directProject.id 2026-10-24T23:08:18.0473117Z 476 │ ) { 2026-10-24T23:08:18.0473199Z 477 │ setProject(directProject); 2026-10-24T23:08:18.0473268Z 478 │ return; 2026-10-24T23:08:18.0473330Z 479 │ } 2026-10-24T23:08:18.0473411Z 480 │ if (!flow.draftKey) return; 2026-10-24T23:08:18.0473548Z 481 │ // The route completes checkout before mounting this composer. Local 2026-10-24T23:08:18.0473690Z 482 │ // mode reuses an existing worktree; worktree mode would create another. 2026-10-24T23:08:18.0473797Z 483 │ updateComposerDraftSettings(flow.draftKey, { 2026-10-24T23:08:18.0473874Z 484 │ workspaceSelection: { 2026-10-24T23:08:18.0473941Z 485 │ mode: "local", 2026-10-24T23:08:18.0474046Z 486 │ branch: props.initialProjectRef.branch, 2026-10-24T23:08:18.0474179Z 487 │ worktreePath: props.initialProjectRef.worktreePath ?? null, 2026-10-24T23:08:18.0474260Z 488 │ startFromOrigin: false, 2026-10-24T23:08:18.0474317Z 489 │ }, 2026-10-24T23:08:18.0474381Z 490 │ }); 2026-10-24T23:08:18.0474439Z 491 │ } 2026-10-24T23:08:18.0474563Z 492 │ appliedInitialProjectKeyRef.current = directProjectKey; 2026-10-24T23:08:18.0474619Z 493 │ if ( 2026-10-24T23:08:18.0474759Z 494 │ selectedProject?.environmentId === directProject.environmentId && 2026-10-24T23:08:18.0474855Z 495 │ selectedProject.id === directProject.id 2026-10-24T23:08:18.0474911Z 496 │ ) { 2026-10-24T23:08:18.0474974Z 497 │ return; 2026-10-24T23:08:18.0475030Z 498 │ } 2026-10-24T23:08:18.0475109Z 499 │ setProject(directProject); 2026-10-24T23:08:18.0475167Z 500 │ return; 2026-10-24T23:08:18.0475221Z 501 │ } 2026-10-24T23:08:18.0475272Z 502 │ 2026-10-24T23:08:18.0475349Z 503 │ if (projects.length > 0) { 2026-10-24T23:08:18.0475449Z 504 │ setIsReturningToProjectPicker(true); 2026-10-24T23:08:18.0475558Z ·  ──────────────┬────────────── 2026-10-24T23:08:18.0475734Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:08:18.0475791Z 505 │ } 2026-10-24T23:08:18.0475840Z ╰──── 2026-10-24T23:08:18.0476423Z  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-24T23:08:18.0476738Z  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-24T23:08:18.0476740Z 2026-10-24T23:08:18.0477038Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:08:18.0477219Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:604:5] 2026-10-24T23:08:18.0477269Z 545 │ 2026-10-24T23:08:18.0477333Z 546 │ useEffect(() => { 2026-10-24T23:08:18.0477404Z ·  ────┬──── 2026-10-24T23:08:18.0477528Z · ╰── This is the containing effect 2026-10-24T23:08:18.0477620Z 547 │ const shareId = props.incomingShareId; 2026-10-24T23:08:18.0477701Z 548 │ const draftKey = flow.draftKey; 2026-10-24T23:08:18.0477801Z 549 │ const destinationProject = selectedProject; 2026-10-24T23:08:18.0477938Z 550 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-24T23:08:18.0478066Z 551 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-24T23:08:18.0478156Z 552 │ const selectedProjectMatchesRoute = 2026-10-24T23:08:18.0478232Z 553 │ !initialEnvironmentId || 2026-10-24T23:08:18.0478300Z 554 │ !initialProjectId || 2026-10-24T23:08:18.0478426Z 555 │ (destinationProject?.environmentId === initialEnvironmentId && 2026-10-24T23:08:18.0478530Z 556 │ destinationProject.id === initialProjectId); 2026-10-24T23:08:18.0478587Z 557 │ if ( 2026-10-24T23:08:18.0478650Z 558 │ !shareId || 2026-10-24T23:08:18.0478710Z 559 │ !draftKey || 2026-10-24T23:08:18.0478780Z 560 │ !destinationProject || 2026-10-24T23:08:18.0478865Z 561 │ !selectedProjectMatchesRoute || 2026-10-24T23:08:18.0478952Z 562 │ cancelledIncomingShareId === shareId 2026-10-24T23:08:18.0479006Z 563 │ ) { 2026-10-24T23:08:18.0479069Z 564 │ return; 2026-10-24T23:08:18.0479127Z 565 │ } 2026-10-24T23:08:18.0479218Z 566 │ const importKey = `${shareId}:${draftKey}`; 2026-10-24T23:08:18.0479274Z 567 │ if ( 2026-10-24T23:08:18.0479384Z 568 │ startedShareImportKeyRef.current === importKey || 2026-10-24T23:08:18.0479493Z 569 │ cancellingShareImportKeyRef.current === importKey 2026-10-24T23:08:18.0479545Z 570 │ ) { 2026-10-24T23:08:18.0479604Z 571 │ return; 2026-10-24T23:08:18.0479656Z 572 │ } 2026-10-24T23:08:18.0479710Z 573 │ 2026-10-24T23:08:18.0479776Z 574 │ if (!incomingShare) { 2026-10-24T23:08:18.0479967Z 575 │ if (isIncomingShareUnavailable && alertedUnavailableIncomingShareIdRef.current !== shareId) { 2026-10-24T23:08:18.0480094Z 576 │ alertedUnavailableIncomingShareIdRef.current = shareId; 2026-10-24T23:08:18.0480160Z 577 │ Dialog.alert( 2026-10-24T23:08:18.0480247Z 578 │ "Shared content unavailable", 2026-10-24T23:08:18.0480419Z 579 │ "The shared content is no longer in the inbox. You can continue editing this task draft.", 2026-10-24T23:08:18.0480477Z 580 │ ); 2026-10-24T23:08:18.0480530Z 581 │ } 2026-10-24T23:08:18.0480586Z 582 │ return; 2026-10-24T23:08:18.0480639Z 583 │ } 2026-10-24T23:08:18.0480690Z 584 │ 2026-10-24T23:08:18.0480744Z 585 │ if ( 2026-10-24T23:08:18.0480903Z 586 │ incomingShare.attachments.some((attachment) => attachment.type === "file") && 2026-10-24T23:08:18.0481001Z 587 │ selectedEnvironmentServerConfig === null 2026-10-24T23:08:18.0481055Z 588 │ ) { 2026-10-24T23:08:18.0481110Z 589 │ return; 2026-10-24T23:08:18.0481165Z 590 │ } 2026-10-24T23:08:18.0481216Z 591 │ 2026-10-24T23:08:18.0481406Z 592 │ if (alertedUnavailableIncomingShareIdRef.current === shareId) { 2026-10-24T23:08:18.0481550Z 593 │ alertedUnavailableIncomingShareIdRef.current = null; 2026-10-24T23:08:18.0481603Z 594 │ } 2026-10-24T23:08:18.0481708Z 595 │ startedShareImportKeyRef.current = importKey; 2026-10-24T23:08:18.0481777Z 596 │ const draftBackup = 2026-10-24T23:08:18.0481961Z 597 │ shareImportDraftBackupRef.current.get(importKey) ?? getComposerDraftSnapshot(draftKey); 2026-10-24T23:08:18.0482148Z 598 │ shareImportDraftBackupRef.current.set(importKey, draftBackup); 2026-10-24T23:08:18.0482236Z 599 │ const importToken = Symbol(importKey); 2026-10-24T23:08:18.0482313Z 600 │ let didReserveShare = false; 2026-10-24T23:08:18.0482519Z 601 │ let didConsumeShare = false; 2026-10-24T23:08:18.0482598Z 602 │ let needsDraftRestore = false; 2026-10-24T23:08:18.0482706Z 603 │ activeShareImportTokenRef.current = importToken; 2026-10-24T23:08:18.0482792Z 604 │ setImportingShareKey(importKey); 2026-10-24T23:08:18.0482878Z ·  ──────────┬───────── 2026-10-24T23:08:18.0483048Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:08:18.0483113Z 605 │ void (async () => { 2026-10-24T23:08:18.0483164Z ╰──── 2026-10-24T23:08:18.0483743Z  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-24T23:08:18.0484056Z  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-24T23:08:18.0484062Z 2026-10-24T23:08:18.0484259Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:08:18.0484408Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:524:5] 2026-10-24T23:08:18.0484482Z 523 │ props.initialProjectRef, 2026-10-24T23:08:18.0484552Z 524 │ props.incomingShareId, 2026-10-24T23:08:18.0484638Z ·  ──────────┬────────── 2026-10-24T23:08:18.0484801Z · ╰── Unnecessary dependency `props.incomingShareId` 2026-10-24T23:08:18.0484870Z 525 │ props.pendingTaskId, 2026-10-24T23:08:18.0484919Z ╰──── 2026-10-24T23:08:18.0485203Z  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-24T23:08:18.0485514Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:18.0485519Z 2026-10-24T23:08:18.0485726Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T23:08:18.0485872Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:543:5] 2026-10-24T23:08:18.0485984Z 542 │ loadedBranchesProjectKeyRef.current = projectKey; 2026-10-24T23:08:18.0486051Z 543 │ flow.loadBranches(); 2026-10-24T23:08:18.0486118Z ·  ──┬─ 2026-10-24T23:08:18.0486238Z · ╰── Missing dependency `flow` 2026-10-24T23:08:18.0486329Z 544 │ }, [flow.loadBranches, selectedProject]); 2026-10-24T23:08:18.0486413Z ·  ────────┬──────── 2026-10-24T23:08:18.0486657Z · ╰── Overly precise dependency `flow.loadBranches`, use `flow` instead 2026-10-24T23:08:18.0486794Z 545 │ 2026-10-24T23:08:18.0486844Z ╰──── 2026-10-24T23:08:18.0487251Z  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-24T23:08:18.0487554Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:18.0487556Z 2026-10-24T23:08:18.0487751Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:08:18.0487899Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:766:5] 2026-10-24T23:08:18.0487965Z 765 │ flow.draftKey, 2026-10-24T23:08:18.0488042Z 766 │ hasImportedIncomingShare, 2026-10-24T23:08:18.0488132Z ·  ────────────┬─────────── 2026-10-24T23:08:18.0488300Z · ╰── Unnecessary dependency `hasImportedIncomingShare` 2026-10-24T23:08:18.0488364Z 767 │ incomingShare, 2026-10-24T23:08:18.0488443Z 768 │ isIncomingShareInboxLoading, 2026-10-24T23:08:18.0488535Z ·  ─────────────┬───────────── 2026-10-24T23:08:18.0488709Z · ╰── Unnecessary dependency `isIncomingShareInboxLoading` 2026-10-24T23:08:18.0488789Z 769 │ isIncomingShareUnavailable, 2026-10-24T23:08:18.0488860Z 770 │ props.incomingShareId, 2026-10-24T23:08:18.0488951Z 771 │ props.initialProjectRef?.environmentId, 2026-10-24T23:08:18.0489042Z 772 │ props.initialProjectRef?.projectId, 2026-10-24T23:08:18.0489117Z 773 │ releaseShareReservation, 2026-10-24T23:08:18.0489180Z 774 │ reserveShare, 2026-10-24T23:08:18.0489264Z 775 │ selectedEnvironmentServerConfig, 2026-10-24T23:08:18.0489328Z 776 │ selectedProject, 2026-10-24T23:08:18.0489396Z 777 │ shareImportAttempt, 2026-10-24T23:08:18.0489480Z ·  ─────────┬──────── 2026-10-24T23:08:18.0489639Z · ╰── Unnecessary dependency `shareImportAttempt` 2026-10-24T23:08:18.0489692Z 778 │ ]); 2026-10-24T23:08:18.0489742Z ╰──── 2026-10-24T23:08:18.0490025Z  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-24T23:08:18.0490334Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:18.0490339Z 2026-10-24T23:08:18.0490490Z ⚠ react(immutability): This value cannot be modified 2026-10-24T23:08:18.0490653Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:111:5] 2026-10-24T23:08:18.0490706Z 107 │ ); 2026-10-24T23:08:18.0490854Z 108 │ const separationProgress = useSharedValue(props.showScrollToEnd ? 1 : 0); 2026-10-24T23:08:18.0490938Z ·  ─────────┬──────── 2026-10-24T23:08:18.0491085Z · ╰── `separationProgress` originates here 2026-10-24T23:08:18.0491135Z 109 │ 2026-10-24T23:08:18.0491199Z 110 │ useEffect(() => { 2026-10-24T23:08:18.0491418Z 111 │ separationProgress.value = withTiming(props.showScrollToEnd ? 1 : 0, CONTROL_TIMING); 2026-10-24T23:08:18.0491526Z ·  ─────────┬──────── 2026-10-24T23:08:18.0491674Z · ╰── `separationProgress` cannot be modified 2026-10-24T23:08:18.0491780Z 112 │ }, [props.showScrollToEnd, separationProgress]); 2026-10-24T23:08:18.0491828Z ╰──── 2026-10-24T23:08:18.0492115Z  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-24T23:08:18.0492411Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:08:18.0492414Z 2026-10-24T23:08:18.0492567Z ⚠ react(immutability): This value cannot be modified 2026-10-24T23:08:18.0492730Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5] 2026-10-24T23:08:18.0492842Z 128 │ // and repeatedly retargets the animation as it grows. 2026-10-24T23:08:18.0492955Z 129 │ const capsuleWidth = useSharedValue(null); 2026-10-24T23:08:18.0493034Z ·  ──────┬───── 2026-10-24T23:08:18.0493167Z · ╰── `capsuleWidth` originates here 2026-10-24T23:08:18.0493274Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T23:08:18.0493388Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T23:08:18.0493490Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T23:08:18.0493583Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T23:08:18.0493641Z 134 │ return; 2026-10-24T23:08:18.0493694Z 135 │ } 2026-10-24T23:08:18.0493802Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T23:08:18.0493889Z 137 │ measuredWidthRef.current = width; 2026-10-24T23:08:18.0494026Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T23:08:18.0494100Z ·  ──────┬───── 2026-10-24T23:08:18.0494240Z · ╰── `capsuleWidth` cannot be modified 2026-10-24T23:08:18.0494296Z 139 │ }; 2026-10-24T23:08:18.0494346Z ╰──── 2026-10-24T23:08:18.0494603Z  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-24T23:08:18.0494899Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:08:18.0494901Z 2026-10-24T23:08:18.0495098Z ⚠ react(immutability): This value cannot be modified 2026-10-24T23:08:18.0495288Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7] 2026-10-24T23:08:18.0495394Z 128 │ // and repeatedly retargets the animation as it grows. 2026-10-24T23:08:18.0495506Z 129 │ const capsuleWidth = useSharedValue(null); 2026-10-24T23:08:18.0495584Z ·  ──────┬───── 2026-10-24T23:08:18.0495714Z · ╰── `capsuleWidth` originates here 2026-10-24T23:08:18.0495822Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T23:08:18.0495934Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T23:08:18.0496036Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T23:08:18.0496132Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T23:08:18.0496193Z 134 │ return; 2026-10-24T23:08:18.0496245Z 135 │ } 2026-10-24T23:08:18.0496347Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T23:08:18.0496429Z 137 │ measuredWidthRef.current = width; 2026-10-24T23:08:18.0496566Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T23:08:18.0496620Z 139 │ }; 2026-10-24T23:08:18.0496707Z 140 │ const hasStatus = props.status !== null; 2026-10-24T23:08:18.0496834Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-24T23:08:18.0496898Z 142 │ useEffect(() => { 2026-10-24T23:08:18.0496963Z 143 │ if (!hasStatus) { 2026-10-24T23:08:18.0497047Z 144 │ measuredWidthRef.current = null; 2026-10-24T23:08:18.0497121Z 145 │ capsuleWidth.value = null; 2026-10-24T23:08:18.0497201Z ·  ──────┬───── 2026-10-24T23:08:18.0497339Z · ╰── `capsuleWidth` cannot be modified 2026-10-24T23:08:18.0497392Z 146 │ } 2026-10-24T23:08:18.0497440Z ╰──── 2026-10-24T23:08:18.0497696Z  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-24T23:08:18.0497992Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:08:18.0497994Z 2026-10-24T23:08:18.0498191Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T23:08:18.0498346Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7] 2026-10-24T23:08:18.0498481Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-24T23:08:18.0498546Z 142 │ useEffect(() => { 2026-10-24T23:08:18.0498622Z ·  ───┬─── 2026-10-24T23:08:18.0498832Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-24T23:08:18.0498897Z 143 │ if (!hasStatus) { 2026-10-24T23:08:18.0498983Z 144 │ measuredWidthRef.current = null; 2026-10-24T23:08:18.0499059Z 145 │ capsuleWidth.value = null; 2026-10-24T23:08:18.0499132Z ·  ──────┬───── 2026-10-24T23:08:18.0499263Z · ╰── This modifies `capsuleWidth` 2026-10-24T23:08:18.0499317Z 146 │ } 2026-10-24T23:08:18.0499368Z ╰──── 2026-10-24T23:08:18.0499746Z  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-24T23:08:18.0500072Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:08:18.0500074Z 2026-10-24T23:08:18.0500268Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T23:08:18.0500423Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5] 2026-10-24T23:08:18.0500532Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T23:08:18.0500643Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T23:08:18.0500763Z ·  ───────────────┬─────────────── 2026-10-24T23:08:18.0501000Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-24T23:08:18.0501104Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T23:08:18.0501198Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T23:08:18.0501257Z 134 │ return; 2026-10-24T23:08:18.0501311Z 135 │ } 2026-10-24T23:08:18.0501414Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T23:08:18.0501496Z 137 │ measuredWidthRef.current = width; 2026-10-24T23:08:18.0501634Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T23:08:18.0501709Z ·  ──────┬───── 2026-10-24T23:08:18.0501838Z · ╰── This modifies `capsuleWidth` 2026-10-24T23:08:18.0501889Z 139 │ }; 2026-10-24T23:08:18.0501940Z ╰──── 2026-10-24T23:08:18.0502300Z  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-24T23:08:18.0502599Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:08:18.0502602Z 2026-10-24T23:08:18.0502853Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:08:18.0503000Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:57:5] 2026-10-24T23:08:18.0503051Z 55 │ 2026-10-24T23:08:18.0503115Z 56 │ useEffect(() => { 2026-10-24T23:08:18.0503182Z ·  ────┬──── 2026-10-24T23:08:18.0503314Z · ╰── This is the containing effect 2026-10-24T23:08:18.0503384Z 57 │ setDecodedSize(null); 2026-10-24T23:08:18.0503460Z ·  ───────┬────── 2026-10-24T23:08:18.0503621Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:08:18.0503690Z 58 │ }, [props.sourceKey]); 2026-10-24T23:08:18.0503741Z ╰──── 2026-10-24T23:08:18.0504323Z  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-24T23:08:18.0504680Z  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-24T23:08:18.0504710Z 2026-10-24T23:08:18.0504958Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:08:18.0505106Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:61:5] 2026-10-24T23:08:18.0505157Z 59 │ 2026-10-24T23:08:18.0505221Z 60 │ useEffect(() => { 2026-10-24T23:08:18.0505287Z ·  ────┬──── 2026-10-24T23:08:18.0505411Z · ╰── This is the containing effect 2026-10-24T23:08:18.0505478Z 61 │ setFailedUri(null); 2026-10-24T23:08:18.0505552Z ·  ──────┬───── 2026-10-24T23:08:18.0505711Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:08:18.0505775Z 62 │ }, [props.uri]); 2026-10-24T23:08:18.0505831Z ╰──── 2026-10-24T23:08:18.0506412Z  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-24T23:08:18.0506786Z  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-24T23:08:18.0506789Z 2026-10-24T23:08:18.0506996Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-24T23:08:18.0507150Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:7:10] 2026-10-24T23:08:18.0507276Z 6 │ import { parse, SvgAst, type JsxAST } from "react-native-svg"; 2026-10-24T23:08:18.0507453Z 7 │ import { ActivityIndicator, Pressable, StyleSheet, View, type ViewStyle } from "react-native"; 2026-10-24T23:08:18.0507539Z ·  ────────┬──────── 2026-10-24T23:08:18.0507685Z · ╰── 'ActivityIndicator' is imported here 2026-10-24T23:08:18.0507738Z 8 │ 2026-10-24T23:08:18.0507790Z ╰──── 2026-10-24T23:08:18.0507888Z  help: Consider removing this import. 2026-10-24T23:08:18.0507890Z 2026-10-24T23:08:18.0508085Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:08:18.0508230Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:58:7] 2026-10-24T23:08:18.0508296Z 57 │ setDecodedSize(null); 2026-10-24T23:08:18.0508361Z 58 │ }, [props.sourceKey]); 2026-10-24T23:08:18.0508446Z ·  ───────┬─────── 2026-10-24T23:08:18.0508598Z · ╰── Unnecessary dependency `props.sourceKey` 2026-10-24T23:08:18.0508648Z 59 │ 2026-10-24T23:08:18.0508695Z ╰──── 2026-10-24T23:08:18.0508980Z  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-24T23:08:18.0509283Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:18.0509286Z 2026-10-24T23:08:18.0509479Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:08:18.0509625Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:62:7] 2026-10-24T23:08:18.0509750Z 61 │ setFailedUri(null); 2026-10-24T23:08:18.0509849Z 62 │ }, [props.uri]); 2026-10-24T23:08:18.0509921Z ·  ────┬──── 2026-10-24T23:08:18.0510057Z · ╰── Unnecessary dependency `props.uri` 2026-10-24T23:08:18.0510106Z 63 │ 2026-10-24T23:08:18.0510155Z ╰──── 2026-10-24T23:08:18.0510438Z  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-24T23:08:18.0510738Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:18.0510741Z 2026-10-24T23:08:18.0511017Z ⚠ eslint(no-unused-vars): Variable 'layerUnavailable' is declared but never used. Unused variables should start with a '_'. 2026-10-24T23:08:18.0511162Z ╭─[apps/server/src/orchestration-v2/Orchestrator.ts:12395:7] 2026-10-24T23:08:18.0511216Z 12394 │ 2026-10-24T23:08:18.0511355Z 12395 │ const layerUnavailable: Layer.Layer = Layer.succeed( 2026-10-24T23:08:18.0511437Z ·  ────────┬─────── 2026-10-24T23:08:18.0511581Z · ╰── 'layerUnavailable' is declared here 2026-10-24T23:08:18.0511647Z 12396 │ OrchestratorV2, 2026-10-24T23:08:18.0511714Z ╰──── 2026-10-24T23:08:18.0511818Z  help: Consider removing this declaration. 2026-10-24T23:08:18.0511822Z 2026-10-24T23:08:18.0512097Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:08:18.0512258Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:444:5] 2026-10-24T23:08:18.0512322Z 434 │ : null; 2026-10-24T23:08:18.0512384Z 435 │ useEffect(() => { 2026-10-24T23:08:18.0512452Z ·  ────┬──── 2026-10-24T23:08:18.0512576Z · ╰── This is the containing effect 2026-10-24T23:08:18.0512634Z 436 │ if ( 2026-10-24T23:08:18.0512707Z 437 │ props.active === false || 2026-10-24T23:08:18.0512781Z 438 │ activeDraftKey !== null || 2026-10-24T23:08:18.0512863Z 439 │ editingPendingTask !== null || 2026-10-24T23:08:18.0512936Z 440 │ selectedProject === null 2026-10-24T23:08:18.0512988Z 441 │ ) { 2026-10-24T23:08:18.0513047Z 442 │ return; 2026-10-24T23:08:18.0513100Z 443 │ } 2026-10-24T23:08:18.0513166Z 444 │ setActiveDraftKey( 2026-10-24T23:08:18.0513250Z ·  ────────┬──────── 2026-10-24T23:08:18.0513421Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:08:18.0513490Z 445 │ createNewTaskDraft({ 2026-10-24T23:08:18.0513541Z ╰──── 2026-10-24T23:08:18.0514119Z  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-24T23:08:18.0514432Z  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-24T23:08:18.0514434Z 2026-10-24T23:08:18.0514728Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T23:08:18.0514920Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:1244:36] 2026-10-24T23:08:18.0515025Z 1243 │ 2026-10-24T23:08:18.0515213Z 1244 │ {props.children} 2026-10-24T23:08:18.0515323Z ·  ───────────── 2026-10-24T23:08:18.0515395Z 1245 │ 2026-10-24T23:08:18.0515447Z ╰──── 2026-10-24T23:08:18.0515663Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T23:08:18.0515797Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T23:08:18.0515800Z 2026-10-24T23:08:18.0516054Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:08:18.0516203Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:406:5] 2026-10-24T23:08:18.0516255Z 404 │ 2026-10-24T23:08:18.0516317Z 405 │ useEffect(() => { 2026-10-24T23:08:18.0516386Z ·  ────┬──── 2026-10-24T23:08:18.0516511Z · ╰── This is the containing effect 2026-10-24T23:08:18.0516598Z 406 │ setInspectorSelection((current) => { 2026-10-24T23:08:18.0516682Z ·  ──────────┬────────── 2026-10-24T23:08:18.0516851Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:08:18.0516951Z 407 │ if (props.renderInspector === undefined) { 2026-10-24T23:08:18.0517006Z ╰──── 2026-10-24T23:08:18.0517590Z  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-24T23:08:18.0517902Z  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-24T23:08:18.0517904Z 2026-10-24T23:08:18.0518113Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T23:08:18.0518260Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:534:24] 2026-10-24T23:08:18.0518460Z 533 │ const inspectorHeaderInset = Platform.OS === "ios" ? 0 : safeAreaInsets.top; 2026-10-24T23:08:18.0518658Z 534 │ ╭─▶ const GitInspector = () => ( 2026-10-24T23:08:18.0518755Z 535 │ │ 2026-10-24T23:08:18.0520640Z 540 │ ╰─▶ ); 2026-10-24T23:08:18.0520725Z 541 │ const FilesInspector = () => 2026-10-24T23:08:18.0520775Z ╰──── 2026-10-24T23:08:18.0520997Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-24T23:08:18.0521004Z 2026-10-24T23:08:18.0521208Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T23:08:18.0521357Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:541:26] 2026-10-24T23:08:18.0521411Z 540 │ ); 2026-10-24T23:08:18.0521572Z 541 │ ╭─▶ const FilesInspector = () => 2026-10-24T23:08:18.0521719Z 542 │ │ selectedThread !== null && selectedThreadCwd !== null ? ( 2026-10-24T23:08:18.0521825Z 543 │ │ 2026-10-24T23:08:18.0522810Z 551 │ ╰─▶ ) : null; 2026-10-24T23:08:18.0522958Z 552 │ const RouteInspector = () => props.renderInspector?.(inspectorHeaderInset); 2026-10-24T23:08:18.0523008Z ╰──── 2026-10-24T23:08:18.0523224Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-24T23:08:18.0523229Z 2026-10-24T23:08:18.0523434Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T23:08:18.0523573Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:773:7] 2026-10-24T23:08:18.0523671Z 772 │ if (settingsSheetPresentation.isActive) { 2026-10-24T23:08:18.0523796Z 773 │ settingsRoutePresentation.present(settingsRouteSession); 2026-10-24T23:08:18.0523890Z ·  ────────────┬──────────── 2026-10-24T23:08:18.0524055Z · ╰── Missing dependency `settingsRoutePresentation` 2026-10-24T23:08:18.0524108Z 774 │ } 2026-10-24T23:08:18.0524304Z 775 │ }, [settingsRoutePresentation.present, settingsRouteSession, settingsSheetPresentation.isActive]); 2026-10-24T23:08:18.0524476Z ·  ────────────────┬──────────────── 2026-10-24T23:08:18.0524784Z · ╰── Overly precise dependency `settingsRoutePresentation.present`, use `settingsRoutePresentation` instead 2026-10-24T23:08:18.0524834Z 776 │ 2026-10-24T23:08:18.0524883Z ╰──── 2026-10-24T23:08:18.0525292Z  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-24T23:08:18.0525595Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:18.0525597Z 2026-10-24T23:08:18.0525749Z ⚠ react(immutability): This value cannot be modified 2026-10-24T23:08:18.0525891Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:391:5] 2026-10-24T23:08:18.0526049Z 387 │ typeof props.style.borderRadius === "number" ? props.style.borderRadius : 0; 2026-10-24T23:08:18.0526180Z 388 │ const animatedBorderRadius = useSharedValue(targetBorderRadius); 2026-10-24T23:08:18.0526269Z ·  ──────────┬───────── 2026-10-24T23:08:18.0526417Z · ╰── `animatedBorderRadius` originates here 2026-10-24T23:08:18.0526570Z 389 │ const shouldAnimate = props.animateLayout !== false && Platform.OS !== "android"; 2026-10-24T23:08:18.0526637Z 390 │ useLayoutEffect(() => { 2026-10-24T23:08:18.0526736Z 391 │ animatedBorderRadius.value = shouldAnimate 2026-10-24T23:08:18.0526819Z ·  ──────────┬───────── 2026-10-24T23:08:18.0526977Z · ╰── `animatedBorderRadius` cannot be modified 2026-10-24T23:08:18.0527066Z 392 │ ? withTiming(targetBorderRadius, { 2026-10-24T23:08:18.0527116Z ╰──── 2026-10-24T23:08:18.0527373Z  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-24T23:08:18.0527670Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:08:18.0527673Z 2026-10-24T23:08:18.0527823Z ⚠ react(immutability): This value cannot be modified 2026-10-24T23:08:18.0527965Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:174:5] 2026-10-24T23:08:18.0528103Z 170 │ const expandedAngle = props.collapsedDirection === "right" ? 90 : 180; 2026-10-24T23:08:18.0528240Z 171 │ const rotation = useSharedValue(props.expanded ? expandedAngle : 0); 2026-10-24T23:08:18.0528316Z ·  ────┬─── 2026-10-24T23:08:18.0528441Z · ╰── `rotation` originates here 2026-10-24T23:08:18.0528491Z 172 │ 2026-10-24T23:08:18.0528559Z 173 │ useLayoutEffect(() => { 2026-10-24T23:08:18.0528690Z 174 │ rotation.value = withTiming(props.expanded ? expandedAngle : 0, { 2026-10-24T23:08:18.0528759Z ·  ────┬─── 2026-10-24T23:08:18.0528885Z · ╰── `rotation` cannot be modified 2026-10-24T23:08:18.0528982Z 175 │ duration: THREAD_DISCLOSURE_TRANSITION_MS, 2026-10-24T23:08:18.0529033Z ╰──── 2026-10-24T23:08:18.0529288Z  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-24T23:08:18.0529632Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T23:08:18.0529671Z 2026-10-24T23:08:18.0529859Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T23:08:18.0530005Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:1246:23] 2026-10-24T23:08:18.0530071Z 1245 │ { 2026-10-24T23:08:18.0532233Z ·  ────┬──── 2026-10-24T23:08:18.0532359Z · ╰── This is the containing effect 2026-10-24T23:08:18.0532430Z 2195 │ setExpandedVideo(null); 2026-10-24T23:08:18.0532508Z ·  ────────┬─────── 2026-10-24T23:08:18.0532673Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:08:18.0532744Z 2196 │ setExpandedFile(null); 2026-10-24T23:08:18.0532793Z ╰──── 2026-10-24T23:08:18.0533379Z  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-24T23:08:18.0533694Z  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-24T23:08:18.0533697Z 2026-10-24T23:08:18.0533944Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:08:18.0534074Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2700:9] 2026-10-24T23:08:18.0534208Z 2691 │ const stopFollowingEnd = useEffectEvent(() => setEndFollow(false)); 2026-10-24T23:08:18.0534376Z 2692 │ useEffect(() => { 2026-10-24T23:08:18.0534474Z ·  ────┬──── 2026-10-24T23:08:18.0534598Z · ╰── This is the containing effect 2026-10-24T23:08:18.0534723Z 2693 │ if (!jumpToMessageId || loadedListKey !== listMountKey) return; 2026-10-24T23:08:18.0534814Z 2694 │ const index = presentedFeed.findIndex( 2026-10-24T23:08:18.0534943Z 2695 │ (entry) => entry.type === "message" && entry.id === jumpToMessageId, 2026-10-24T23:08:18.0535002Z 2696 │ ); 2026-10-24T23:08:18.0535070Z 2697 │ if (index === -1) { 2026-10-24T23:08:18.0535195Z 2698 │ const runId = messageFoldRunId(props.feed, jumpToMessageId); 2026-10-24T23:08:18.0535296Z 2699 │ if (runId && !expandedTurnIds.has(runId)) { 2026-10-24T23:08:18.0535387Z 2700 │ setInteractionState((current) => ({ 2026-10-24T23:08:18.0535479Z ·  ─────────┬───────── 2026-10-24T23:08:18.0535653Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:08:18.0535717Z 2701 │ ...current, 2026-10-24T23:08:18.0535767Z ╰──── 2026-10-24T23:08:18.0536347Z  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-24T23:08:18.0536660Z  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-24T23:08:18.0536662Z 2026-10-24T23:08:18.0536886Z ⚠ eslint(no-unused-vars): Identifier 'isMarkdownFileLinkLabel' is imported but never used. 2026-10-24T23:08:18.0537017Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:70:10] 2026-10-24T23:08:18.0537150Z 69 │ import { resolveAssetUrl } from "@t3tools/client-runtime/state/assets"; 2026-10-24T23:08:18.0537286Z 70 │ import { isMarkdownFileLinkLabel } from "@t3tools/shared/markdownLinks"; 2026-10-24T23:08:18.0537377Z ·  ───────────┬─────────── 2026-10-24T23:08:18.0537535Z · ╰── 'isMarkdownFileLinkLabel' is imported here 2026-10-24T23:08:18.0537687Z 71 │ import { formatAttachmentSize } from "@t3tools/client-runtime/state/attachments"; 2026-10-24T23:08:18.0537736Z ╰──── 2026-10-24T23:08:18.0537830Z  help: Consider removing this import. 2026-10-24T23:08:18.0537833Z 2026-10-24T23:08:18.0538037Z ⚠ eslint(no-unused-vars): Identifier 'createContext' is imported but never used. 2026-10-24T23:08:18.0538166Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:96:3] 2026-10-24T23:08:18.0538222Z 95 │ import { 2026-10-24T23:08:18.0538285Z 96 │ createContext, 2026-10-24T23:08:18.0538358Z ·  ──────┬────── 2026-10-24T23:08:18.0538490Z · ╰── 'createContext' is imported here 2026-10-24T23:08:18.0538544Z 97 │ memo, 2026-10-24T23:08:18.0538592Z ╰──── 2026-10-24T23:08:18.0538686Z  help: Consider removing this import. 2026-10-24T23:08:18.0538689Z 2026-10-24T23:08:18.0538896Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-24T23:08:18.0539026Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:112:3] 2026-10-24T23:08:18.0539131Z 111 │ import { 2026-10-24T23:08:18.0539225Z 112 │ ActivityIndicator, 2026-10-24T23:08:18.0539303Z ·  ────────┬──────── 2026-10-24T23:08:18.0539442Z · ╰── 'ActivityIndicator' is imported here 2026-10-24T23:08:18.0539497Z 113 │ Image, 2026-10-24T23:08:18.0539546Z ╰──── 2026-10-24T23:08:18.0539638Z  help: Consider removing this import. 2026-10-24T23:08:18.0539641Z 2026-10-24T23:08:18.0539835Z ⚠ eslint(no-unused-vars): Identifier 'ScrollView' is imported but never used. 2026-10-24T23:08:18.0539962Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:119:3] 2026-10-24T23:08:18.0540021Z 118 │ Pressable, 2026-10-24T23:08:18.0540082Z 119 │ ScrollView, 2026-10-24T23:08:18.0540152Z ·  ─────┬──── 2026-10-24T23:08:18.0540283Z · ╰── 'ScrollView' is imported here 2026-10-24T23:08:18.0540345Z 120 │ StyleSheet, 2026-10-24T23:08:18.0540394Z ╰──── 2026-10-24T23:08:18.0540486Z  help: Consider removing this import. 2026-10-24T23:08:18.0540488Z 2026-10-24T23:08:18.0540679Z ⚠ eslint(no-unused-vars): Identifier 'NativeText' is imported but never used. 2026-10-24T23:08:18.0540809Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:121:11] 2026-10-24T23:08:18.0540867Z 120 │ StyleSheet, 2026-10-24T23:08:18.0540932Z 121 │ Text as NativeText, 2026-10-24T23:08:18.0541009Z ·  ─────┬──── 2026-10-24T23:08:18.0541141Z · ╰── 'NativeText' is imported here 2026-10-24T23:08:18.0541206Z 122 │ type ColorValue, 2026-10-24T23:08:18.0541255Z ╰──── 2026-10-24T23:08:18.0541352Z  help: Consider removing this import. 2026-10-24T23:08:18.0541357Z 2026-10-24T23:08:18.0541563Z ⚠ eslint(no-unused-vars): Identifier 'tryOpenExternalUrl' is imported but never used. 2026-10-24T23:08:18.0541692Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:144:10] 2026-10-24T23:08:18.0541825Z 143 │ import { copyTextWithHaptic } from "../../lib/copyTextWithHaptic"; 2026-10-24T23:08:18.0541949Z 144 │ import { tryOpenExternalUrl } from "../../lib/openExternalUrl"; 2026-10-24T23:08:18.0542058Z ·  ─────────┬──────── 2026-10-24T23:08:18.0542206Z · ╰── 'tryOpenExternalUrl' is imported here 2026-10-24T23:08:18.0542350Z 145 │ import { downloadAndShareAttachment } from "../../lib/attachmentDownload"; 2026-10-24T23:08:18.0542400Z ╰──── 2026-10-24T23:08:18.0542541Z  help: Consider removing this import. 2026-10-24T23:08:18.0542573Z 2026-10-24T23:08:18.0542782Z ⚠ eslint(no-unused-vars): Identifier 'faviconUrlForOrigin' is imported but never used. 2026-10-24T23:08:18.0542910Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:147:10] 2026-10-24T23:08:18.0543040Z 146 │ import { hasWideMarkdownBlock } from "../../lib/wideMarkdownBlocks"; 2026-10-24T23:08:18.0543161Z 147 │ import { faviconUrlForOrigin } from "@t3tools/shared/favicon"; 2026-10-24T23:08:18.0543248Z ·  ─────────┬───────── 2026-10-24T23:08:18.0543396Z · ╰── 'faviconUrlForOrigin' is imported here 2026-10-24T23:08:18.0543454Z 148 │ import { 2026-10-24T23:08:18.0543502Z ╰──── 2026-10-24T23:08:18.0543594Z  help: Consider removing this import. 2026-10-24T23:08:18.0543602Z 2026-10-24T23:08:18.0543810Z ⚠ eslint(no-unused-vars): Identifier 'MediaVideoPlayer' is imported but never used. 2026-10-24T23:08:18.0543939Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:161:10] 2026-10-24T23:08:18.0544082Z 160 │ import { VideoAttachmentTile } from "../../components/VideoAttachmentTile"; 2026-10-24T23:08:18.0544213Z 161 │ import { MediaVideoPlayer } from "../../components/MediaVideoPlayer"; 2026-10-24T23:08:18.0544298Z ·  ────────┬─────── 2026-10-24T23:08:18.0544441Z · ╰── 'MediaVideoPlayer' is imported here 2026-10-24T23:08:18.0544577Z 162 │ import { resolveMarkdownMediaPreview } from "../../lib/markdownMedia"; 2026-10-24T23:08:18.0544627Z ╰──── 2026-10-24T23:08:18.0544720Z  help: Consider removing this import. 2026-10-24T23:08:18.0544722Z 2026-10-24T23:08:18.0544941Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoPreviewUri' is imported but never used. 2026-10-24T23:08:18.0545071Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:165:3] 2026-10-24T23:08:18.0545150Z 164 │ attachmentVideoPreviewSource, 2026-10-24T23:08:18.0545219Z 165 │ mediaVideoPreviewUri, 2026-10-24T23:08:18.0545301Z ·  ──────────┬───────── 2026-10-24T23:08:18.0545446Z · ╰── 'mediaVideoPreviewUri' is imported here 2026-10-24T23:08:18.0545516Z 166 │ mediaVideoThumbnailKey, 2026-10-24T23:08:18.0545565Z ╰──── 2026-10-24T23:08:18.0545657Z  help: Consider removing this import. 2026-10-24T23:08:18.0545660Z 2026-10-24T23:08:18.0545880Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoThumbnailKey' is imported but never used. 2026-10-24T23:08:18.0546008Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:166:3] 2026-10-24T23:08:18.0546076Z 165 │ mediaVideoPreviewUri, 2026-10-24T23:08:18.0546145Z 166 │ mediaVideoThumbnailKey, 2026-10-24T23:08:18.0546230Z ·  ───────────┬────────── 2026-10-24T23:08:18.0546380Z · ╰── 'mediaVideoThumbnailKey' is imported here 2026-10-24T23:08:18.0546469Z 167 │ type MediaVideoPreviewSource, 2026-10-24T23:08:18.0546518Z ╰──── 2026-10-24T23:08:18.0546665Z  help: Consider removing this import. 2026-10-24T23:08:18.0546669Z 2026-10-24T23:08:18.0546873Z ⚠ eslint(no-unused-vars): Type 'MediaVideoPreviewSource' is imported but never used. 2026-10-24T23:08:18.0547001Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:167:8] 2026-10-24T23:08:18.0547134Z 166 │ mediaVideoThumbnailKey, 2026-10-24T23:08:18.0547255Z 167 │ type MediaVideoPreviewSource, 2026-10-24T23:08:18.0547345Z ·  ───────────┬─────────── 2026-10-24T23:08:18.0547503Z · ╰── 'MediaVideoPreviewSource' is imported here 2026-10-24T23:08:18.0547588Z 168 │ } from "../../lib/videoPreviewSource"; 2026-10-24T23:08:18.0547637Z ╰──── 2026-10-24T23:08:18.0547728Z  help: Consider removing this import. 2026-10-24T23:08:18.0547731Z 2026-10-24T23:08:18.0547921Z ⚠ eslint(no-unused-vars): Type 'ReviewDiffTheme' is imported but never used. 2026-10-24T23:08:18.0548049Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:175:15] 2026-10-24T23:08:18.0548220Z 174 │ import { parseReviewCommentMessageSegments } from "../review/reviewCommentSelection"; 2026-10-24T23:08:18.0548361Z 175 │ import type { ReviewDiffTheme } from "../review/shikiReviewHighlighter"; 2026-10-24T23:08:18.0548451Z ·  ───────┬─────── 2026-10-24T23:08:18.0548595Z · ╰── 'ReviewDiffTheme' is imported here 2026-10-24T23:08:18.0548652Z 176 │ import { 2026-10-24T23:08:18.0548701Z ╰──── 2026-10-24T23:08:18.0548793Z  help: Consider removing this import. 2026-10-24T23:08:18.0548795Z 2026-10-24T23:08:18.0549016Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownFontSizes' is imported but never used. 2026-10-24T23:08:18.0549144Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:190:3] 2026-10-24T23:08:18.0549200Z 189 │ import { 2026-10-24T23:08:18.0549273Z 190 │ resolveMarkdownFontSizes, 2026-10-24T23:08:18.0549365Z ·  ────────────┬─────────── 2026-10-24T23:08:18.0549522Z · ╰── 'resolveMarkdownFontSizes' is imported here 2026-10-24T23:08:18.0549606Z 191 │ resolveNativeMarkdownTypography, 2026-10-24T23:08:18.0549656Z ╰──── 2026-10-24T23:08:18.0549748Z  help: Consider removing this import. 2026-10-24T23:08:18.0549750Z 2026-10-24T23:08:18.0550002Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownInlineCodePresentation' is imported but never used. 2026-10-24T23:08:18.0550128Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:197:3] 2026-10-24T23:08:18.0550204Z 196 │ normalizeNativeMarkdownUrl, 2026-10-24T23:08:18.0550297Z 197 │ resolveMarkdownInlineCodePresentation, 2026-10-24T23:08:18.0550404Z ·  ──────────────────┬────────────────── 2026-10-24T23:08:18.0550599Z · ╰── 'resolveMarkdownInlineCodePresentation' is imported here 2026-10-24T23:08:18.0550686Z 198 │ resolveMarkdownLinkPresentation, 2026-10-24T23:08:18.0550735Z ╰──── 2026-10-24T23:08:18.0550827Z  help: Consider removing this import. 2026-10-24T23:08:18.0550829Z 2026-10-24T23:08:18.0551049Z ⚠ eslint(no-unused-vars): Identifier 'useMarkdownCodeHighlight' is imported but never used. 2026-10-24T23:08:18.0551178Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:242:10] 2026-10-24T23:08:18.0551279Z 241 │ import { ThreadMcpApp } from "./McpAppWebView"; 2026-10-24T23:08:18.0551420Z 242 │ import { useMarkdownCodeHighlight } from "./markdownCodeHighlightState"; 2026-10-24T23:08:18.0551516Z ·  ────────────┬─────────── 2026-10-24T23:08:18.0551728Z · ╰── 'useMarkdownCodeHighlight' is imported here 2026-10-24T23:08:18.0551814Z 243 │ import { 2026-10-24T23:08:18.0551863Z ╰──── 2026-10-24T23:08:18.0551954Z  help: Consider removing this import. 2026-10-24T23:08:18.0551956Z 2026-10-24T23:08:18.0552187Z ⚠ eslint(no-unused-vars): Identifier 'useAssetUrlState' is imported but never used. 2026-10-24T23:08:18.0552313Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:246:3] 2026-10-24T23:08:18.0552375Z 245 │ useAssetUrl, 2026-10-24T23:08:18.0552441Z 246 │ useAssetUrlState, 2026-10-24T23:08:18.0552517Z ·  ────────┬─────── 2026-10-24T23:08:18.0552657Z · ╰── 'useAssetUrlState' is imported here 2026-10-24T23:08:18.0552725Z 247 │ useRefreshAssetUrl, 2026-10-24T23:08:18.0552774Z ╰──── 2026-10-24T23:08:18.0552870Z  help: Consider removing this import. 2026-10-24T23:08:18.0552875Z 2026-10-24T23:08:18.0553070Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:08:18.0553202Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2197:7] 2026-10-24T23:08:18.0553274Z 2196 │ setExpandedFile(null); 2026-10-24T23:08:18.0553426Z 2197 │ }, [props.environmentId, props.threadId, props.contentPresentation.kind]); 2026-10-24T23:08:18.0553641Z ·  ─────────┬───────── ───────┬────── ───────────────┬────────────── 2026-10-24T23:08:18.0553926Z · │ │ ╰── Unnecessary dependency `props.contentPresentation.kind` 2026-10-24T23:08:18.0554127Z · │ ╰── Unnecessary dependency `props.threadId` 2026-10-24T23:08:18.0554288Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-24T23:08:18.0554426Z 2198 │ const horizontalPadding = props.layoutVariant === "split" ? 20 : 16; 2026-10-24T23:08:18.0554476Z ╰──── 2026-10-24T23:08:18.0554769Z  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-24T23:08:18.0555078Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:18.0555081Z 2026-10-24T23:08:18.0555321Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:08:18.0555480Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2669:7] 2026-10-24T23:08:18.0555575Z 2668 │ reportHeaderMaterialVisibility(false); 2026-10-24T23:08:18.0555688Z 2669 │ }, [feedThreadKey, reportHeaderMaterialVisibility]); 2026-10-24T23:08:18.0555770Z ·  ──────┬────── 2026-10-24T23:08:18.0555916Z · ╰── Unnecessary dependency `feedThreadKey` 2026-10-24T23:08:18.0555970Z 2670 │ 2026-10-24T23:08:18.0556019Z ╰──── 2026-10-24T23:08:18.0556302Z  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-24T23:08:18.0556613Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:18.0556618Z 2026-10-24T23:08:18.0556813Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:08:18.0556943Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2685:7] 2026-10-24T23:08:18.0556997Z 2684 │ } 2026-10-24T23:08:18.0557124Z 2685 │ }, [listMountKey, props.contentInsetEndAdjustment, listRef]); 2026-10-24T23:08:18.0557201Z ·  ──────┬───── 2026-10-24T23:08:18.0557344Z · ╰── Unnecessary dependency `listMountKey` 2026-10-24T23:08:18.0557485Z 2686 │ // Opening at a message: its run unfolds, the list stops following the end 2026-10-24T23:08:18.0557534Z ╰──── 2026-10-24T23:08:18.0557823Z  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-24T23:08:18.0558130Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:18.0558132Z 2026-10-24T23:08:18.0558326Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:08:18.0558455Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2881:7] 2026-10-24T23:08:18.0558510Z 2880 │ } 2026-10-24T23:08:18.0558689Z 2881 │ }, [expandedTurnIds, expandedWorkGroups, expandedWorkRows, settleDisclosureAfterLayout]); 2026-10-24T23:08:18.0558880Z ·  ───────┬─────── ─────────┬──────── ────────┬─────── 2026-10-24T23:08:18.0559129Z · │ │ ╰── Unnecessary dependency `expandedWorkRows` 2026-10-24T23:08:18.0559330Z · │ ╰── Unnecessary dependency `expandedWorkGroups` 2026-10-24T23:08:18.0559482Z · ╰── Unnecessary dependency `expandedTurnIds` 2026-10-24T23:08:18.0559535Z 2882 │ 2026-10-24T23:08:18.0559586Z ╰──── 2026-10-24T23:08:18.0559870Z  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-24T23:08:18.0560179Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:18.0560181Z 2026-10-24T23:08:18.0560454Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T23:08:18.0560616Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:627:9] 2026-10-24T23:08:18.0560674Z 626 │ }; 2026-10-24T23:08:18.0560787Z 627 │ }, [props.environmentId, attachment.id, httpBaseUrl]), 2026-10-24T23:08:18.0560970Z ·  ─────────┬───────── ──────┬────── ─────┬───── 2026-10-24T23:08:18.0561204Z · │ │ ╰── Unnecessary dependency `httpBaseUrl` 2026-10-24T23:08:18.0561394Z · │ ╰── Unnecessary dependency `attachment.id` 2026-10-24T23:08:18.0561560Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-24T23:08:18.0561617Z 628 │ ); 2026-10-24T23:08:18.0561669Z ╰──── 2026-10-24T23:08:18.0561985Z  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-24T23:08:18.0562312Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:18.0562317Z 2026-10-24T23:08:18.0562569Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:08:18.0562743Z ╭─[apps/mobile/src/features/threads/thread-inspector-content-stack.tsx:60:5] 2026-10-24T23:08:18.0562795Z 58 │ 2026-10-24T23:08:18.0562864Z 59 │ useEffect(() => { 2026-10-24T23:08:18.0562935Z ·  ────┬──── 2026-10-24T23:08:18.0563061Z · ╰── This is the containing effect 2026-10-24T23:08:18.0563141Z 60 │ setMountedModes((current) => { 2026-10-24T23:08:18.0563219Z ·  ───────┬─────── 2026-10-24T23:08:18.0563381Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:08:18.0563462Z 61 │ if (current.has(props.mode)) { 2026-10-24T23:08:18.0563513Z ╰──── 2026-10-24T23:08:18.0564104Z  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-24T23:08:18.0564420Z  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-24T23:08:18.0564424Z 2026-10-24T23:08:18.0564675Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T23:08:18.0564834Z ╭─[apps/server/src/orchestration-v2/ThreadPullRequestService.ts:410:7] 2026-10-24T23:08:18.0564887Z 409 │ 2026-10-24T23:08:18.0565013Z 410 │ const layer = Layer.effect(ThreadPullRequestServiceV2, make); 2026-10-24T23:08:18.0565081Z ·  ──┬── 2026-10-24T23:08:18.0565203Z · ╰── 'layer' is declared here 2026-10-24T23:08:18.0565254Z ╰──── 2026-10-24T23:08:18.0565408Z  help: Consider removing this declaration. 2026-10-24T23:08:18.0565450Z 2026-10-24T23:08:18.0565642Z ⚠ eslint(no-unsafe-optional-chaining): Unsafe usage of optional chaining 2026-10-24T23:08:18.0565806Z ╭─[apps/server/src/orchestration-v2/ThreadLaunchService.test.ts:1783:8] 2026-10-24T23:08:18.0565871Z 1782 │ assert.equal( 2026-10-24T23:08:18.0566013Z 1783 │ (stored.context?.records[0] as { attachmentId: string }).attachmentId, 2026-10-24T23:08:18.0566111Z ·  ────────────────────────── 2026-10-24T23:08:18.0566190Z 1784 │ stored.attachments[0]?.id, 2026-10-24T23:08:18.0566241Z ╰──── 2026-10-24T23:08:18.0566408Z  help: If this short-circuits with 'undefined' the evaluation will throw TypeError 2026-10-24T23:08:18.0566410Z 2026-10-24T23:08:18.0566772Z ⚠ 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-24T23:08:18.0566899Z ╭─[apps/server/src/auth/RpcAuthorization.ts:237:17] 2026-10-24T23:08:18.0567032Z 236 │ const requiredScopesForSettingsUpdate = (payload: unknown) => { 2026-10-24T23:08:18.0567163Z 237 │ const input = Schema.decodeUnknownSync(SettingsUpdate)(payload); 2026-10-24T23:08:18.0567267Z ·  ──────────────────────── 2026-10-24T23:08:18.0567403Z 238 │ const scopes = requiredScopesForServerSettingsPatch(input.patch); 2026-10-24T23:08:18.0567453Z ╰──── 2026-10-24T23:08:18.0567456Z 2026-10-24T23:08:18.0567811Z ⚠ 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-24T23:08:18.0567936Z ╭─[apps/server/src/auth/RpcAuthorization.ts:256:26] 2026-10-24T23:08:18.0568037Z 255 │ if (method === WS_METHODS.assetsCreateUrl) { 2026-10-24T23:08:18.0568191Z 256 │ const { resource } = Schema.decodeUnknownSync(AssetCreateUrlInput)(payload); 2026-10-24T23:08:18.0568300Z ·  ──────────────────────── 2026-10-24T23:08:18.0568360Z 257 │ return [ 2026-10-24T23:08:18.0568409Z ╰──── 2026-10-24T23:08:18.0568411Z 2026-10-24T23:08:18.0568606Z ⚠ eslint(no-unused-vars): Identifier 'identity' is imported but never used. 2026-10-24T23:08:18.0568708Z ╭─[apps/server/src/auth/http.ts:28:10] 2026-10-24T23:08:18.0568796Z 27 │ import * as Schema from "effect/Schema"; 2026-10-24T23:08:18.0568885Z 28 │ import { identity } from "effect/Function"; 2026-10-24T23:08:18.0568967Z ·  ────┬─── 2026-10-24T23:08:18.0569099Z · ╰── 'identity' is imported here 2026-10-24T23:08:18.0569183Z 29 │ import * as Layer from "effect/Layer"; 2026-10-24T23:08:18.0569231Z ╰──── 2026-10-24T23:08:18.0569327Z  help: Consider removing this import. 2026-10-24T23:08:18.0569329Z 2026-10-24T23:08:18.0569527Z ⚠ eslint(no-unused-vars): Identifier 'HostProcess' is imported but never used. 2026-10-24T23:08:18.0569686Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:25:13] 2026-10-24T23:08:18.0569769Z 24 │ import * as Schema from "effect/Schema"; 2026-10-24T23:08:18.0569883Z 25 │ import * as HostProcess from "@t3tools/shared/HostProcess"; 2026-10-24T23:08:18.0569963Z ·  ─────┬───── 2026-10-24T23:08:18.0570148Z · ╰── 'HostProcess' is imported here 2026-10-24T23:08:18.0570228Z 26 │ 2026-10-24T23:08:18.0570280Z ╰──── 2026-10-24T23:08:18.0570372Z  help: Consider removing this import. 2026-10-24T23:08:18.0570375Z 2026-10-24T23:08:18.0570639Z ⚠ eslint(no-unused-vars): Variable 'serverConfig' is declared but never used. Unused variables should start with a '_'. 2026-10-24T23:08:18.0570799Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:124:11] 2026-10-24T23:08:18.0570879Z 123 │ const path = yield* Path.Path; 2026-10-24T23:08:18.0570994Z 124 │ const serverConfig = yield* ServerConfig.ServerConfig; 2026-10-24T23:08:18.0571075Z ·  ──────┬───── 2026-10-24T23:08:18.0571210Z · ╰── 'serverConfig' is declared here 2026-10-24T23:08:18.0571353Z 125 │ const serverSettings = yield* ServerSettings.ServerSettingsService; 2026-10-24T23:08:18.0571407Z ╰──── 2026-10-24T23:08:18.0571509Z  help: Consider removing this declaration. 2026-10-24T23:08:18.0571511Z 2026-10-24T23:08:18.0571777Z ⚠ eslint(no-unused-vars): Variable 'serverSettings' is declared but never used. Unused variables should start with a '_'. 2026-10-24T23:08:18.0571936Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:125:11] 2026-10-24T23:08:18.0572075Z 124 │ const serverConfig = yield* ServerConfig.ServerConfig; 2026-10-24T23:08:18.0572212Z 125 │ const serverSettings = yield* ServerSettings.ServerSettingsService; 2026-10-24T23:08:18.0572297Z ·  ───────┬────── 2026-10-24T23:08:18.0572437Z · ╰── 'serverSettings' is declared here 2026-10-24T23:08:18.0572577Z 126 │ const gitWorkflow = yield* GitWorkflowService.GitWorkflowService; 2026-10-24T23:08:18.0572631Z ╰──── 2026-10-24T23:08:18.0572731Z  help: Consider removing this declaration. 2026-10-24T23:08:18.0572734Z 2026-10-24T23:08:18.0572961Z ⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence. 2026-10-24T23:08:18.0573092Z ╭─[apps/web/src/components/chat/useComposerSend.ts:985:13] 2026-10-24T23:08:18.0573212Z 984 │ const changedBeforeDecline = draftChangedSinceSend(); 2026-10-24T23:08:18.0573450Z 985 │ ╭─▶ const pendingIdsBeforeDecline = pendingApprovalsRef.current.map( 2026-10-24T23:08:18.0573566Z 986 │ │ (approval) => approval.requestId, 2026-10-24T23:08:18.0573744Z 987 │ ╰─▶ ); 2026-10-24T23:08:18.0573919Z 988 │ const approvalResponding = approvalsToDecline.some((approval) => 2026-10-24T23:08:18.0573968Z ╰──── 2026-10-24T23:08:18.0574043Z  help: Switch to `Set` 2026-10-24T23:08:18.0574045Z 2026-10-24T23:08:18.0574299Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:08:18.0574461Z ╭─[apps/mobile/src/features/review/ReviewCommentComposerSheet.tsx:103:7] 2026-10-24T23:08:18.0574513Z 100 │ 2026-10-24T23:08:18.0574577Z 101 │ useEffect(() => { 2026-10-24T23:08:18.0574648Z ·  ────┬──── 2026-10-24T23:08:18.0574774Z · ╰── This is the containing effect 2026-10-24T23:08:18.0574873Z 102 │ if (!target || selectedLines.length === 0) { 2026-10-24T23:08:18.0574958Z 103 │ setHighlightedLinesById({}); 2026-10-24T23:08:18.0575050Z ·  ───────────┬─────────── 2026-10-24T23:08:18.0575219Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:08:18.0575280Z 104 │ return; 2026-10-24T23:08:18.0575329Z ╰──── 2026-10-24T23:08:18.0575913Z  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-24T23:08:18.0576229Z  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-24T23:08:18.0576236Z 2026-10-24T23:08:18.0576487Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T23:08:18.0576659Z ╭─[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:60:5] 2026-10-24T23:08:18.0576710Z 55 │ 2026-10-24T23:08:18.0576776Z 56 │ useEffect(() => { 2026-10-24T23:08:18.0576845Z ·  ────┬──── 2026-10-24T23:08:18.0576971Z · ╰── This is the containing effect 2026-10-24T23:08:18.0577036Z 57 │ scheduler.reset(); 2026-10-24T23:08:18.0577133Z 58 │ highlightedRowIdsRef.current = new Set(); 2026-10-24T23:08:18.0577217Z 59 │ visibleChunkIndexRef.current = 0; 2026-10-24T23:08:18.0577334Z 60 │ setVisibleRange({ firstRowIndex: 0, lastRowIndex: 80 }); 2026-10-24T23:08:18.0577418Z ·  ───────┬─────── 2026-10-24T23:08:18.0577584Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T23:08:18.0577698Z 61 │ setTokensPatchJson(createEmptyTokenPatch(resetKey)); 2026-10-24T23:08:18.0577748Z ╰──── 2026-10-24T23:08:18.0578330Z  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-24T23:08:18.0578645Z  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-24T23:08:18.0578647Z 2026-10-24T23:08:18.0578893Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:08:18.0579090Z ╭─[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:63:7] 2026-10-24T23:08:18.0579169Z 62 │ return () => scheduler.cancel(); 2026-10-24T23:08:18.0579266Z 63 │ }, [enabled, resetKey, rows.length, scheduler]); 2026-10-24T23:08:18.0579389Z ·  ───┬─── ─────┬───── 2026-10-24T23:08:18.0579575Z · │ ╰── Unnecessary dependency `rows.length` 2026-10-24T23:08:18.0579707Z · ╰── Unnecessary dependency `enabled` 2026-10-24T23:08:18.0579757Z 64 │ 2026-10-24T23:08:18.0579808Z ╰──── 2026-10-24T23:08:18.0580102Z  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-24T23:08:18.0580412Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:18.0580415Z 2026-10-24T23:08:18.0580598Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T23:08:18.0580765Z ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:555:70] 2026-10-24T23:08:18.0580845Z 554 │ assert.deepStrictEqual( 2026-10-24T23:08:18.0581008Z 555 │ (yield* Ref.get(fixture.syncCommands)).map(({ commandId: _, ...rest }) => rest), 2026-10-24T23:08:18.0581127Z ·  ┬ 2026-10-24T23:08:18.0581288Z · ╰── '_' is declared here 2026-10-24T23:08:18.0581350Z 556 │ [ 2026-10-24T23:08:18.0581400Z ╰──── 2026-10-24T23:08:18.0581500Z  help: Consider removing this parameter. 2026-10-24T23:08:18.0581503Z 2026-10-24T23:08:18.0581681Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T23:08:18.0581851Z ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:1155:70] 2026-10-24T23:08:18.0581933Z 1154 │ assert.deepStrictEqual( 2026-10-24T23:08:18.0582121Z 1155 │ (yield* Ref.get(fixture.linkCommands)).map(({ commandId: _, ...rest }) => rest), 2026-10-24T23:08:18.0582237Z ·  ┬ 2026-10-24T23:08:18.0582402Z · ╰── '_' is declared here 2026-10-24T23:08:18.0582465Z 1156 │ [ 2026-10-24T23:08:18.0582519Z ╰──── 2026-10-24T23:08:18.0582617Z  help: Consider removing this parameter. 2026-10-24T23:08:18.0582621Z 2026-10-24T23:08:18.0582780Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T23:08:18.0582925Z ╭─[apps/server/src/provider/Drivers/CodexDriver.test.ts:466:14] 2026-10-24T23:08:18.0582977Z 465 │ 2026-10-24T23:08:18.0583081Z 466 │ for (const {} of ["direct", "wrapper"] as const) { 2026-10-24T23:08:18.0583150Z ·  ── 2026-10-24T23:08:18.0583203Z 467 │ } 2026-10-24T23:08:18.0583252Z ╰──── 2026-10-24T23:08:18.0583528Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T23:08:18.0583558Z 2026-10-24T23:08:18.0583753Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T23:08:18.0583913Z ╭─[apps/web/src/components/settings/ProviderSettingsPanel.logic.ts:4:8] 2026-10-24T23:08:18.0583987Z 3 │ AuthProvidersManageScope, 2026-10-24T23:08:18.0584054Z 4 │ type AuthSessionState, 2026-10-24T23:08:18.0584134Z ·  ────────┬─────── 2026-10-24T23:08:18.0584275Z · ╰── 'AuthSessionState' is imported here 2026-10-24T23:08:18.0584341Z 5 │ type EnvironmentId, 2026-10-24T23:08:18.0584391Z ╰──── 2026-10-24T23:08:18.0584486Z  help: Consider removing this import. 2026-10-24T23:08:18.0584489Z 2026-10-24T23:08:18.0584688Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:08:18.0584820Z ╭─[apps/mobile/src/features/review/ReviewSheet.tsx:454:7] 2026-10-24T23:08:18.0584902Z 453 │ showAuxiliaryPane("inspector"); 2026-10-24T23:08:18.0585005Z 454 │ }, [environmentId, showAuxiliaryPane, threadId]); 2026-10-24T23:08:18.0585142Z ·  ──────┬────── ────┬─── 2026-10-24T23:08:18.0585333Z · │ ╰── Unnecessary dependency `threadId` 2026-10-24T23:08:18.0585476Z · ╰── Unnecessary dependency `environmentId` 2026-10-24T23:08:18.0585534Z 455 │ const { 2026-10-24T23:08:18.0585584Z ╰──── 2026-10-24T23:08:18.0585880Z  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-24T23:08:18.0586188Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:18.0586191Z 2026-10-24T23:08:18.0586370Z ⚠ react(static-components): Cannot create components during render 2026-10-24T23:08:18.0586550Z ╭─[apps/mobile/src/features/review/ReviewSheet.tsx:725:20] 2026-10-24T23:08:18.0586613Z 492 │ // same check. 2026-10-24T23:08:18.0586738Z 493 │ const NativeReviewDiffView = resolveNativeReviewDiffView(); 2026-10-24T23:08:18.0586854Z ·  ─────────────┬───────────── 2026-10-24T23:08:18.0587035Z · ╰── The component is created during render here 2026-10-24T23:08:18.0587187Z 494 │ const nativeReviewDiffViewRef = useRef(null); 2026-10-24T23:08:18.0587305Z 495 │ const showcasedReviewDrawRef = useRef(null); 2026-10-24T23:08:18.0587432Z 496 │ const [isPullRefreshing, setIsPullRefreshing] = useState(false); 2026-10-24T23:08:18.0587523Z 497 │ const handlePullToRefresh = async () => { 2026-10-24T23:08:18.0587598Z 498 │ setIsPullRefreshing(true); 2026-10-24T23:08:18.0587678Z 499 │ await refreshSelectedSection(); 2026-10-24T23:08:18.0587754Z 500 │ setIsPullRefreshing(false); 2026-10-24T23:08:18.0587806Z 501 │ }; 2026-10-24T23:08:18.0587946Z 502 │ const reviewFileNavigatorRef = useRef(null); 2026-10-24T23:08:18.0588084Z 503 │ const reviewFiles = parsedDiff.kind === "files" ? parsedDiff.files : []; 2026-10-24T23:08:18.0588249Z 504 │ const fileVisibility = useReviewFileVisibility({ 2026-10-24T23:08:18.0588368Z 505 │ threadKey: reviewCache.threadKey, 2026-10-24T23:08:18.0588457Z 506 │ sectionId: selectedSection?.id ?? null, 2026-10-24T23:08:18.0588524Z 507 │ files: reviewFiles, 2026-10-24T23:08:18.0588621Z 508 │ cachedExpandedFileIds: selectedSection?.id 2026-10-24T23:08:18.0588749Z 509 │ ? reviewCache.expandedFileIdsBySection[selectedSection.id] 2026-10-24T23:08:18.0588812Z 510 │ : undefined, 2026-10-24T23:08:18.0588906Z 511 │ cachedViewedFileIds: selectedSection?.id 2026-10-24T23:08:18.0589028Z 512 │ ? reviewCache.viewedFileIdsBySection[selectedSection.id] 2026-10-24T23:08:18.0589089Z 513 │ : undefined, 2026-10-24T23:08:18.0589143Z 514 │ }); 2026-10-24T23:08:18.0589331Z 515 │ const { collapsedFileIds, toggleExpandedFile, toggleViewedFile, viewedFileIds } = fileVisibility; 2026-10-24T23:08:18.0589464Z 516 │ const commentSelection = useReviewCommentSelectionController({ 2026-10-24T23:08:18.0589528Z 517 │ environmentId, 2026-10-24T23:08:18.0589587Z 518 │ threadId, 2026-10-24T23:08:18.0589652Z 519 │ selectedSection, 2026-10-24T23:08:18.0589719Z 520 │ nativeReviewDiffData, 2026-10-24T23:08:18.0589773Z 521 │ }); 2026-10-24T23:08:18.0589876Z 522 │ const nativeBridge = useNativeReviewDiffBridge({ 2026-10-24T23:08:18.0589960Z 523 │ threadKey: reviewCache.threadKey, 2026-10-24T23:08:18.0590046Z 524 │ sectionId: selectedSection?.id ?? null, 2026-10-24T23:08:18.0590122Z 525 │ diff: selectedSection?.diff, 2026-10-24T23:08:18.0590197Z 526 │ data: nativeReviewDiffData, 2026-10-24T23:08:18.0590263Z 527 │ collapsedFileIds, 2026-10-24T23:08:18.0590323Z 528 │ viewedFileIds, 2026-10-24T23:08:18.0590437Z 529 │ selectedRowIds: commentSelection.selectedRowIds, 2026-10-24T23:08:18.0590533Z 530 │ canHighlight: parsedDiff.kind === "files", 2026-10-24T23:08:18.0590589Z 531 │ }); 2026-10-24T23:08:18.0590658Z 532 │ const showcaseReviewKey = 2026-10-24T23:08:18.0590789Z 533 │ SHOWCASE_ENABLED && parsedDiff.kind === "files" && selectedSection 2026-10-24T23:08:18.0590991Z 534 │ ? `${reviewCache.threadKey}:${selectedSection.id}:${nativeBridge.tokensResetKey}:${nativeBridge.themeId}` 2026-10-24T23:08:18.0591050Z 535 │ : null; 2026-10-24T23:08:18.0591212Z 536 │ const handleNativeDebug = (event: NativeSyntheticEvent>) => { 2026-10-24T23:08:18.0591289Z 537 │ nativeBridge.onDebug(event); 2026-10-24T23:08:18.0591344Z 538 │ if ( 2026-10-24T23:08:18.0591422Z 539 │ showcaseReviewKey === null || 2026-10-24T23:08:18.0591540Z 540 │ showcasedReviewDrawRef.current === showcaseReviewKey || 2026-10-24T23:08:18.0591651Z 541 │ !isNativeReviewDiffDrawEvent(event.nativeEvent) 2026-10-24T23:08:18.0591709Z 542 │ ) { 2026-10-24T23:08:18.0591767Z 543 │ return; 2026-10-24T23:08:18.0591818Z 544 │ } 2026-10-24T23:08:18.0591928Z 545 │ showcasedReviewDrawRef.current = showcaseReviewKey; 2026-10-24T23:08:18.0592126Z 546 │ reportShowcaseSceneRendered({ scene: "review", themeId: nativeBridge.themeId }); 2026-10-24T23:08:18.0592177Z 547 │ }; 2026-10-24T23:08:18.0592228Z 548 │ 2026-10-24T23:08:18.0592343Z 549 │ const handleSelectFile = async (fileId: string | null) => { 2026-10-24T23:08:18.0592422Z 550 │ loadVisibleFile(fileId, true); 2026-10-24T23:08:18.0592507Z 551 │ commentSelection.clearSelection(); 2026-10-24T23:08:18.0592625Z 552 │ if (fileId !== null && collapsedFileIds.includes(fileId)) { 2026-10-24T23:08:18.0592702Z 553 │ toggleExpandedFile(fileId); 2026-10-24T23:08:18.0592805Z 554 │ } 2026-10-24T23:08:18.0592940Z 555 │ const nativeView = nativeReviewDiffViewRef.current; 2026-10-24T23:08:18.0593016Z 556 │ if (!nativeView) return; 2026-10-24T23:08:18.0593106Z 557 │ const result = await settlePromise(() => 2026-10-24T23:08:18.0593275Z 558 │ fileId === null ? nativeView.scrollToTop(true) : nativeView.scrollToFile(fileId, true), 2026-10-24T23:08:18.0593327Z 559 │ ); 2026-10-24T23:08:18.0593413Z 560 │ if (AsyncResult.isFailure(result)) { 2026-10-24T23:08:18.0593591Z 561 │ console.error("[review] Failed to navigate to diff file", squashAtomCommandFailure(result)); 2026-10-24T23:08:18.0593644Z 562 │ } 2026-10-24T23:08:18.0593695Z 563 │ }; 2026-10-24T23:08:18.0593776Z 564 │ const handleVisibleFileChange = ( 2026-10-24T23:08:18.0593904Z 565 │ event: NativeSyntheticEvent<{ readonly fileId?: string | null }>, 2026-10-24T23:08:18.0593964Z 566 │ ) => { 2026-10-24T23:08:18.0594072Z 567 │ loadVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-24T23:08:18.0594237Z 568 │ reviewFileNavigatorRef.current?.setVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-24T23:08:18.0594288Z 569 │ }; 2026-10-24T23:08:18.0594365Z 570 │ const renderInspector = () => ( 2026-10-24T23:08:18.0594431Z 571 │ void handleSelectFile(fileId)} 2026-10-24T23:08:18.0594930Z 577 │ /> 2026-10-24T23:08:18.0594981Z 578 │ ); 2026-10-24T23:08:18.0595038Z 579 │ 2026-10-24T23:08:18.0595222Z 580 │ const handleNativeToggleFile = (event: NativeSyntheticEvent<{ readonly fileId?: string }>) => { 2026-10-24T23:08:18.0595307Z 581 │ const { fileId } = event.nativeEvent; 2026-10-24T23:08:18.0595369Z 582 │ if (fileId) { 2026-10-24T23:08:18.0595451Z 583 │ loadVisibleFile(fileId, true); 2026-10-24T23:08:18.0595528Z 584 │ toggleExpandedFile(fileId); 2026-10-24T23:08:18.0595580Z 585 │ } 2026-10-24T23:08:18.0595630Z 586 │ }; 2026-10-24T23:08:18.0595680Z 587 │ 2026-10-24T23:08:18.0595769Z 588 │ const handleNativeToggleViewedFile = ( 2026-10-24T23:08:18.0595886Z 589 │ event: NativeSyntheticEvent<{ readonly fileId?: string }>, 2026-10-24T23:08:18.0595940Z 590 │ ) => { 2026-10-24T23:08:18.0596024Z 591 │ const { fileId } = event.nativeEvent; 2026-10-24T23:08:18.0596086Z 592 │ if (fileId) { 2026-10-24T23:08:18.0596166Z 593 │ toggleViewedFile(fileId); 2026-10-24T23:08:18.0596219Z 594 │ } 2026-10-24T23:08:18.0596271Z 595 │ }; 2026-10-24T23:08:18.0596322Z 596 │ 2026-10-24T23:08:18.0596391Z 597 │ const parsedDiffNotice = 2026-10-24T23:08:18.0596549Z 598 │ parsedDiff.kind === "files" || parsedDiff.kind === "raw" ? parsedDiff.notice : null; 2026-10-24T23:08:18.0596667Z 599 │ const hasCachedSelectedDiff = selectedSection?.diff != null; 2026-10-24T23:08:18.0596822Z 600 │ const hasAnyCachedDiff = reviewSections.some((section) => section.diff != null); 2026-10-24T23:08:18.0596939Z 601 │ const sectionMenu = buildReviewSectionMenu(reviewSections); 2026-10-24T23:08:18.0597096Z 602 │ const { showConnectionNotice, showSectionToolbar } = resolveReviewAvailability({ 2026-10-24T23:08:18.0597203Z 603 │ hasEnvironmentPresentation: environment.isReady, 2026-10-24T23:08:18.0597353Z 604 │ isEnvironmentConnected: isEnvironmentReady, 2026-10-24T23:08:18.0597455Z 605 │ hasCachedSelectedDiff, 2026-10-24T23:08:18.0597520Z 606 │ hasAnyCachedDiff, 2026-10-24T23:08:18.0597573Z 607 │ }); 2026-10-24T23:08:18.0597658Z 608 │ const handleRetryEnvironment = () => { 2026-10-24T23:08:18.0597741Z 609 │ void retryEnvironment(environmentId); 2026-10-24T23:08:18.0597793Z 610 │ }; 2026-10-24T23:08:18.0597878Z 611 │ const handleReturnToThread = () => { 2026-10-24T23:08:18.0597955Z 612 │ if (navigation.canGoBack()) { 2026-10-24T23:08:18.0598022Z 613 │ navigation.goBack(); 2026-10-24T23:08:18.0598081Z 614 │ return; 2026-10-24T23:08:18.0598134Z 615 │ } 2026-10-24T23:08:18.0598214Z 616 │ navigation.navigate("Thread", { 2026-10-24T23:08:18.0598301Z 617 │ environmentId: String(environmentId), 2026-10-24T23:08:18.0598381Z 618 │ threadId: String(threadId), 2026-10-24T23:08:18.0598438Z 619 │ }); 2026-10-24T23:08:18.0598490Z 620 │ }; 2026-10-24T23:08:18.0598565Z 621 │ const androidHeaderSubtitle = [ 2026-10-24T23:08:18.0598636Z 622 │ selectedSection?.title, 2026-10-24T23:08:18.0598714Z 623 │ headerDiffSummary.additions, 2026-10-24T23:08:18.0598790Z 624 │ headerDiffSummary.deletions, 2026-10-24T23:08:18.0598843Z 625 │ ] 2026-10-24T23:08:18.0598948Z 626 │ .filter((part): part is string => Boolean(part)) 2026-10-24T23:08:18.0599010Z 627 │ .join(" · "); 2026-10-24T23:08:18.0599060Z 628 │ 2026-10-24T23:08:18.0599136Z 629 │ const showChangedFilesPane = 2026-10-24T23:08:18.0599208Z 630 │ !showConnectionNotice && 2026-10-24T23:08:18.0599282Z 631 │ selectedSection !== null && 2026-10-24T23:08:18.0599358Z 632 │ parsedDiff.kind === "files" && 2026-10-24T23:08:18.0599444Z 633 │ NativeReviewDiffView !== null; 2026-10-24T23:08:18.0599616Z 634 │ useRegisterWorkspaceInspector(showChangedFilesPane ? renderInspector : undefined); 2026-10-24T23:08:18.0599783Z 635 │ const showChangedFilesToggle = panes.supportsAuxiliaryPane && showChangedFilesPane; 2026-10-24T23:08:18.0599832Z 636 │ 2026-10-24T23:08:18.0599903Z 637 │ const listHeader = (() => { 2026-10-24T23:08:18.0599987Z 638 │ const children: ReactElement[] = []; 2026-10-24T23:08:18.0600038Z 639 │ 2026-10-24T23:08:18.0600098Z 640 │ if (error) { 2026-10-24T23:08:18.0600164Z 641 │ children.push( 2026-10-24T23:08:18.0600223Z 642 │ 2026-10-24T23:08:18.0600865Z 649 │ Review unavailable 2026-10-24T23:08:18.0601019Z 650 │ {error} 2026-10-24T23:08:18.0601078Z 651 │ , 2026-10-24T23:08:18.0601133Z 652 │ ); 2026-10-24T23:08:18.0601185Z 653 │ } 2026-10-24T23:08:18.0601236Z 654 │ 2026-10-24T23:08:18.0601305Z 655 │ if (parsedDiffNotice) { 2026-10-24T23:08:18.0601464Z 656 │ children.push(); 2026-10-24T23:08:18.0601518Z 657 │ } 2026-10-24T23:08:18.0601568Z 658 │ 2026-10-24T23:08:18.0601642Z 659 │ if (children.length === 0) { 2026-10-24T23:08:18.0601760Z 660 │ return null; 2026-10-24T23:08:18.0601842Z 661 │ } 2026-10-24T23:08:18.0601891Z 662 │ 2026-10-24T23:08:18.0601957Z 663 │ return <>{children}; 2026-10-24T23:08:18.0602023Z 664 │ })(); 2026-10-24T23:08:18.0602117Z 665 │ const headerSubtitle = [ 2026-10-24T23:08:18.0602193Z 666 │ headerDiffSummary.additions, 2026-10-24T23:08:18.0602271Z 667 │ headerDiffSummary.deletions, 2026-10-24T23:08:18.0602349Z 668 │ pendingReviewCommentCount > 0 2026-10-24T23:08:18.0602518Z 669 │ ? `${pendingReviewCommentCount} comment${pendingReviewCommentCount === 1 ? "" : "s"}` 2026-10-24T23:08:18.0602576Z 670 │ : null, 2026-10-24T23:08:18.0602629Z 671 │ ] 2026-10-24T23:08:18.0602692Z 672 │ .filter(Boolean) 2026-10-24T23:08:18.0602753Z 673 │ .join(" · "); 2026-10-24T23:08:18.0602891Z 674 │ const headerTitleText = selectedSection?.title ?? "Review changes"; 2026-10-24T23:08:18.0602944Z 675 │ 2026-10-24T23:08:18.0603003Z 676 │ return ( 2026-10-24T23:08:18.0603056Z 677 │ <> 2026-10-24T23:08:18.0603116Z 678 │ 2026-10-24T23:08:18.0604406Z 694 │ 2026-10-24T23:08:18.0604471Z 695 │ 2026-10-24T23:08:18.0604590Z 696 │ 2026-10-24T23:08:18.0604667Z 697 │ {showConnectionNotice ? ( 2026-10-24T23:08:18.0604803Z 698 │ 2026-10-24T23:08:18.0604891Z 699 │ 2026-10-24T23:08:18.0605958Z 711 │ 2026-10-24T23:08:18.0606117Z 712 │ ) : selectedSection && parsedDiff.kind === "files" && NativeReviewDiffView ? ( 2026-10-24T23:08:18.0606179Z 713 │ 2026-10-24T23:08:18.0606603Z 719 │ 2026-10-24T23:08:18.0606950Z 723 │ {listHeader} 2026-10-24T23:08:18.0607066Z 724 │ 2026-10-24T23:08:18.0607152Z 725 │ ( 2026-10-24T23:08:18.0608659Z 223 │ 2026-10-24T23:08:18.0608763Z ·  ─────────────── 2026-10-24T23:08:18.0608852Z 224 │ {lineIndex > 0 ? "\n" : ""} 2026-10-24T23:08:18.0608903Z ╰──── 2026-10-24T23:08:18.0609047Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T23:08:18.0609049Z 2026-10-24T23:08:18.0609240Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T23:08:18.0609386Z ╭─[apps/mobile/src/features/review/ReviewCommentCard.tsx:227:25] 2026-10-24T23:08:18.0609508Z 226 │ item.type === "assistant_message").at(-1)?.text, 2026-10-24T23:08:18.0610663Z ·  ────── 2026-10-24T23:08:18.0610738Z 1999 │ "authoritative answer", 2026-10-24T23:08:18.0610791Z ╰──── 2026-10-24T23:08:18.0610957Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T23:08:18.0610960Z 2026-10-24T23:08:18.0611423Z ⚠ 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-24T23:08:18.0611590Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:3951:7] 2026-10-24T23:08:18.0611765Z 3950 │ const closeFiber = yield* Scope.close(sessionScope, Exit.void).pipe(Effect.forkScoped); 2026-10-24T23:08:18.0611985Z 3951 │ ╭─▶ while (!responseLifecycle.includes("failed")) { 2026-10-24T23:08:18.0612116Z 3952 │ │ yield* Effect.yieldNow; 2026-10-24T23:08:18.0612248Z 3953 │ ╰─▶ } 2026-10-24T23:08:18.0612365Z 3954 │ const responseExit = yield* Fiber.join(responseFiber); 2026-10-24T23:08:18.0612416Z ╰──── 2026-10-24T23:08:18.0612418Z 2026-10-24T23:08:18.0612869Z ⚠ 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-24T23:08:18.0613033Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6062:9] 2026-10-24T23:08:18.0613119Z 6061 │ .pipe(Effect.forkScoped); 2026-10-24T23:08:18.0613305Z 6062 │ ╭─▶ while (promptGates.length < 1) { 2026-10-24T23:08:18.0613418Z 6063 │ │ yield* Effect.yieldNow; 2026-10-24T23:08:18.0613549Z 6064 │ ╰─▶ } 2026-10-24T23:08:18.0613716Z 6065 │ assert.isDefined(sessionUpdateHandler, "session update handler must be wired"); 2026-10-24T23:08:18.0613766Z ╰──── 2026-10-24T23:08:18.0613769Z 2026-10-24T23:08:18.0614215Z ⚠ 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-24T23:08:18.0614378Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6197:9] 2026-10-24T23:08:18.0614515Z 6196 │ .pipe(Effect.forkScoped); 2026-10-24T23:08:18.0614727Z 6197 │ ╭─▶ while (promptGates.length < 2) { 2026-10-24T23:08:18.0614833Z 6198 │ │ yield* Effect.yieldNow; 2026-10-24T23:08:18.0614964Z 6199 │ ╰─▶ } 2026-10-24T23:08:18.0615127Z 6200 │ if (sessionUpdateHandler === undefined || capturedMutation.current === null) { 2026-10-24T23:08:18.0615179Z ╰──── 2026-10-24T23:08:18.0615182Z 2026-10-24T23:08:18.0615435Z ⚠ unicorn(prefer-add-event-listener): Prefer `addEventListener()` over their `on`-function counterparts. 2026-10-24T23:08:18.0615578Z ╭─[apps/web/src/components/device/deviceHubApi.test.ts:12:14] 2026-10-24T23:08:18.0615733Z 11 │ addEventListener(_type: string, listener: (event: { data: string }) => void) { 2026-10-24T23:08:18.0615812Z 12 │ this.onmessage = listener; 2026-10-24T23:08:18.0615889Z ·  ───────── 2026-10-24T23:08:18.0615944Z 13 │ } 2026-10-24T23:08:18.0615994Z ╰──── 2026-10-24T23:08:18.0616308Z  help: `addEventListener()` can register multiple handlers and accepts options such as `{ once: true }`; assigning to `on` replaces any previously registered handler. 2026-10-24T23:08:18.0616310Z 2026-10-24T23:08:18.0616510Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable. 2026-10-24T23:08:18.0616651Z ╭─[apps/web/src/components/device/deviceHubApi.test.ts:16:9] 2026-10-24T23:08:18.0616715Z 15 │ constructor() { 2026-10-24T23:08:18.0616780Z 16 │ source = this; 2026-10-24T23:08:18.0616855Z ·  ────── 2026-10-24T23:08:18.0616912Z 17 │ } 2026-10-24T23:08:18.0616962Z ╰──── 2026-10-24T23:08:18.0617232Z  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-24T23:08:18.0617234Z 2026-10-24T23:08:18.0617487Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T23:08:18.0617651Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts:10602:7] 2026-10-24T23:08:18.0617705Z 10601 │ 2026-10-24T23:08:18.0617777Z 10602 │ const layer: Layer.Layer< 2026-10-24T23:08:18.0617847Z ·  ──┬── 2026-10-24T23:08:18.0617971Z · ╰── 'layer' is declared here 2026-10-24T23:08:18.0618070Z 10603 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T23:08:18.0618123Z ╰──── 2026-10-24T23:08:18.0618225Z  help: Consider removing this declaration. 2026-10-24T23:08:18.0618229Z 2026-10-24T23:08:18.0618429Z ⚠ eslint(no-unused-vars): Identifier 'HookForwarder' is imported but never used. 2026-10-24T23:08:18.0618530Z ╭─[infra/relay/src/http/Api.ts:69:13] 2026-10-24T23:08:18.0618667Z 68 │ import * as EnvironmentLinks from "../environments/EnvironmentLinks.ts"; 2026-10-24T23:08:18.0618781Z 69 │ import * as HookForwarder from "../hooks/HookForwarder.ts"; 2026-10-24T23:08:18.0618863Z ·  ──────┬────── 2026-10-24T23:08:18.0619004Z · ╰── 'HookForwarder' is imported here 2026-10-24T23:08:18.0619105Z 70 │ import * as HeldHooks from "../hooks/HeldHooks.ts"; 2026-10-24T23:08:18.0619155Z ╰──── 2026-10-24T23:08:18.0619303Z  help: Consider removing this import. 2026-10-24T23:08:18.0619335Z 2026-10-24T23:08:18.0619548Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T23:08:18.0619675Z ╭─[scripts/lib/cli-external-packages.test.ts:114:11] 2026-10-24T23:08:18.0619745Z 113 │ const declared = { 2026-10-24T23:08:18.0619835Z 114 │ ...(manifest.dependencies ?? {}), 2026-10-24T23:08:18.0619944Z ·  ──────────────────────────────── 2026-10-24T23:08:18.0620046Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T23:08:18.0620096Z ╰──── 2026-10-24T23:08:18.0620357Z  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-24T23:08:18.0620359Z 2026-10-24T23:08:18.0620578Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T23:08:18.0620707Z ╭─[scripts/lib/cli-external-packages.test.ts:115:11] 2026-10-24T23:08:18.0620796Z 114 │ ...(manifest.dependencies ?? {}), 2026-10-24T23:08:18.0620893Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T23:08:18.0621011Z ·  ──────────────────────────────────────── 2026-10-24T23:08:18.0621106Z 116 │ ...(manifest.peerDependencies ?? {}), 2026-10-24T23:08:18.0621157Z ╰──── 2026-10-24T23:08:18.0621414Z  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-24T23:08:18.0621417Z 2026-10-24T23:08:18.0621630Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T23:08:18.0621756Z ╭─[scripts/lib/cli-external-packages.test.ts:116:11] 2026-10-24T23:08:18.0621855Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T23:08:18.0621948Z 116 │ ...(manifest.peerDependencies ?? {}), 2026-10-24T23:08:18.0622084Z ·  ──────────────────────────────────── 2026-10-24T23:08:18.0622143Z 117 │ }; 2026-10-24T23:08:18.0622193Z ╰──── 2026-10-24T23:08:18.0622449Z  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-24T23:08:18.0622451Z 2026-10-24T23:08:18.0622725Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T23:08:18.0622885Z ╭─[apps/web/src/components/settings/SettingInheritance.tsx:163:24] 2026-10-24T23:08:18.0622946Z 162 │ keys, 2026-10-24T23:08:18.0623017Z 163 │ overridingProjects = [], 2026-10-24T23:08:18.0623097Z ·  ── 2026-10-24T23:08:18.0623163Z 164 │ onClearOverrides, 2026-10-24T23:08:18.0623213Z ╰──── 2026-10-24T23:08:18.0623525Z  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-24T23:08:18.0623527Z 2026-10-24T23:08:18.0623725Z ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed 2026-10-24T23:08:18.0623826Z ╭─[packages/contracts/src/rpc.ts:297:8] 2026-10-24T23:08:18.0623891Z 296 │ } from "./device.ts"; 2026-10-24T23:08:18.0624027Z 297 │ import {} from "./previewAutomation.ts"; 2026-10-24T23:08:18.0624120Z ·  ── 2026-10-24T23:08:18.0624178Z 298 │ import { 2026-10-24T23:08:18.0624227Z ╰──── 2026-10-24T23:08:18.0624307Z  help: Remove empty braces 2026-10-24T23:08:18.0624309Z 2026-10-24T23:08:18.0624666Z ⚠ 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-24T23:08:18.0624781Z ╭─[packages/contracts/src/auth.test.ts:17:12] 2026-10-24T23:08:18.0624939Z 16 │ it("decodes legacy review credentials without offering them in new grants", () => { 2026-10-24T23:08:18.0625104Z 17 │ expect(Schema.decodeUnknownSync(AuthEnvironmentScopes)(["review:write"])).toEqual([ 2026-10-24T23:08:18.0625202Z ·  ──────────────────────── 2026-10-24T23:08:18.0625272Z 18 │ "review:write", 2026-10-24T23:08:18.0625326Z ╰──── 2026-10-24T23:08:18.0625329Z 2026-10-24T23:08:18.0625680Z ⚠ 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-24T23:08:18.0625788Z ╭─[packages/contracts/src/auth.test.ts:20:18] 2026-10-24T23:08:18.0625841Z 19 │ ]); 2026-10-24T23:08:18.0625999Z 20 │ expect(() => Schema.decodeUnknownSync(AuthGrantScopes)(["review:write"])).toThrow(); 2026-10-24T23:08:18.0626101Z ·  ──────────────────────── 2026-10-24T23:08:18.0626228Z 21 │ expect(AuthStandardClientScopes).not.toContain("review:write"); 2026-10-24T23:08:18.0626278Z ╰──── 2026-10-24T23:08:18.0626280Z 2026-10-24T23:08:18.0626840Z ⚠ 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-24T23:08:18.0626953Z ╭─[packages/contracts/src/auth.test.ts:58:21] 2026-10-24T23:08:18.0627119Z 57 │ it("ignores unknown response permissions without falling back to broader scopes", () => { 2026-10-24T23:08:18.0627239Z 58 │ const session = Schema.decodeUnknownSync(AuthSessionState)({ 2026-10-24T23:08:18.0627344Z ·  ──────────────────────── 2026-10-24T23:08:18.0627411Z 59 │ authenticated: true, 2026-10-24T23:08:18.0627461Z ╰──── 2026-10-24T23:08:18.0627463Z 2026-10-24T23:08:18.0627694Z ⚠ unicorn(prefer-string-starts-ends-with): Prefer String#startsWith over a regex with a caret. 2026-10-24T23:08:18.0627874Z ╭─[apps/server/src/vcs/GitVcsDriverCore.ts:517:11] 2026-10-24T23:08:18.0628011Z 516 │ GIT_DIAGNOSTIC_LINE_PATTERN.test(line) || 2026-10-24T23:08:18.0628147Z 517 │ (!/^remote:/.test(line) && SSH_TRANSPORT_REFUSAL_PATTERN.test(line)), 2026-10-24T23:08:18.0628231Z ·  ─────────────── 2026-10-24T23:08:18.0628283Z 518 │ ) 2026-10-24T23:08:18.0628334Z ╰──── 2026-10-24T23:08:18.0628484Z  help: Replace `/^remote:/.test(line)` with `line.startsWith('remote:')`. 2026-10-24T23:08:18.0628486Z 2026-10-24T23:08:18.0628932Z ⚠ 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-24T23:08:18.0629053Z ╭─[packages/contracts/src/baseSchemas.test.ts:39:9] 2026-10-24T23:08:18.0629124Z 38 │ JSON.stringify( 2026-10-24T23:08:18.0629241Z 39 │ Schema.encodeUnknownSync(Schema.toCodecJson(Named))([ 2026-10-24T23:08:18.0629335Z ·  ──────────────────────── 2026-10-24T23:08:18.0629401Z 40 │ { name: "a" }, 2026-10-24T23:08:18.0629451Z ╰──── 2026-10-24T23:08:18.0629454Z 2026-10-24T23:08:18.0629657Z ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed 2026-10-24T23:08:18.0629822Z ╭─[apps/server/src/sourceControl/SourceControlProviderRegistry.ts:15:13] 2026-10-24T23:08:18.0629892Z 14 │ } from "@t3tools/contracts"; 2026-10-24T23:08:18.0629984Z 15 │ import type {} from "@t3tools/contracts"; 2026-10-24T23:08:18.0630053Z ·  ── 2026-10-24T23:08:18.0630106Z 16 │ 2026-10-24T23:08:18.0630153Z ╰──── 2026-10-24T23:08:18.0630240Z  help: Remove empty braces 2026-10-24T23:08:18.0630245Z 2026-10-24T23:08:18.0630436Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T23:08:18.0630579Z ╭─[apps/mobile/modules/t3-source-text/src/SourceText.tsx:36:9] 2026-10-24T23:08:18.0630664Z 35 │ 2026-10-24T23:08:18.0631723Z ·  ┬ 2026-10-24T23:08:18.0631851Z · ╰── '_' is declared here 2026-10-24T23:08:18.0631949Z 122 │ (options.dispatchGate ?? Effect.void).pipe( 2026-10-24T23:08:18.0632013Z ╰──── 2026-10-24T23:08:18.0632138Z  help: Consider removing this parameter. 2026-10-24T23:08:18.0632141Z 2026-10-24T23:08:18.0632321Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T23:08:18.0632453Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:134:39] 2026-10-24T23:08:18.0632605Z 133 │ ); 2026-10-24T23:08:18.0632737Z 134 │ const listLocalBranchNames = vi.fn((_: string) => 2026-10-24T23:08:18.0632832Z ·  ┬ 2026-10-24T23:08:18.0632967Z · ╰── '_' is declared here 2026-10-24T23:08:18.0633033Z 135 │ Effect.succeed( 2026-10-24T23:08:18.0633083Z ╰──── 2026-10-24T23:08:18.0633181Z  help: Consider removing this parameter. 2026-10-24T23:08:18.0633183Z 2026-10-24T23:08:18.0633359Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T23:08:18.0633490Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:178:31] 2026-10-24T23:08:18.0633544Z 177 │ }); 2026-10-24T23:08:18.0633639Z 178 │ const sendToThread = vi.fn((_: unknown) => { 2026-10-24T23:08:18.0633730Z ·  ┬ 2026-10-24T23:08:18.0633863Z · ╰── '_' is declared here 2026-10-24T23:08:18.0633960Z 179 │ switch (options.continuation ?? "queued") { 2026-10-24T23:08:18.0634010Z ╰──── 2026-10-24T23:08:18.0634108Z  help: Consider removing this parameter. 2026-10-24T23:08:18.0634111Z 2026-10-24T23:08:18.0634289Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T23:08:18.0634419Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:203:33] 2026-10-24T23:08:18.0634472Z 202 │ ); 2026-10-24T23:08:18.0634566Z 203 │ const removeWorktree = vi.fn((_: unknown) => 2026-10-24T23:08:18.0634653Z ·  ┬ 2026-10-24T23:08:18.0634792Z · ╰── '_' is declared here 2026-10-24T23:08:18.0634874Z 204 │ options.removeWorktreeFails 2026-10-24T23:08:18.0634922Z ╰──── 2026-10-24T23:08:18.0635019Z  help: Consider removing this parameter. 2026-10-24T23:08:18.0635022Z 2026-10-24T23:08:18.0635200Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T23:08:18.0635332Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:208:36] 2026-10-24T23:08:18.0635385Z 207 │ ); 2026-10-24T23:08:18.0635484Z 208 │ const deleteLocalBranch = vi.fn((_: unknown) => 2026-10-24T23:08:18.0635576Z ·  ┬ 2026-10-24T23:08:18.0635710Z · ╰── '_' is declared here 2026-10-24T23:08:18.0635794Z 209 │ options.deleteLocalBranchFails 2026-10-24T23:08:18.0635847Z ╰──── 2026-10-24T23:08:18.0635946Z  help: Consider removing this parameter. 2026-10-24T23:08:18.0635948Z 2026-10-24T23:08:18.0636122Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T23:08:18.0636252Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:213:42] 2026-10-24T23:08:18.0636303Z 212 │ ); 2026-10-24T23:08:18.0636415Z 213 │ const fetchWorktreeBaseCommit = vi.fn((_: unknown) => 2026-10-24T23:08:18.0636511Z ·  ┬ 2026-10-24T23:08:18.0636649Z · ╰── '_' is declared here 2026-10-24T23:08:18.0636730Z 214 │ options.fetchWorktreeBaseFails 2026-10-24T23:08:18.0636784Z ╰──── 2026-10-24T23:08:18.0636931Z  help: Consider removing this parameter. 2026-10-24T23:08:18.0636962Z 2026-10-24T23:08:18.0637138Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T23:08:18.0637266Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:254:30] 2026-10-24T23:08:18.0637321Z 253 │ ); 2026-10-24T23:08:18.0637410Z 254 │ const localStatus = vi.fn((_: unknown) => 2026-10-24T23:08:18.0637495Z ·  ┬ 2026-10-24T23:08:18.0637624Z · ╰── '_' is declared here 2026-10-24T23:08:18.0637690Z 255 │ Effect.succeed({ 2026-10-24T23:08:18.0637738Z ╰──── 2026-10-24T23:08:18.0637836Z  help: Consider removing this parameter. 2026-10-24T23:08:18.0637838Z 2026-10-24T23:08:18.0638020Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T23:08:18.0638153Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:264:32] 2026-10-24T23:08:18.0638206Z 263 │ ); 2026-10-24T23:08:18.0638354Z 264 │ const refreshStatus = vi.fn((_: string) => Effect.die("refreshStatus stub")); 2026-10-24T23:08:18.0638440Z ·  ┬ 2026-10-24T23:08:18.0638571Z · ╰── '_' is declared here 2026-10-24T23:08:18.0638716Z 265 │ const runForThread = vi.fn((input: { readonly worktreePath: string }) => { 2026-10-24T23:08:18.0638766Z ╰──── 2026-10-24T23:08:18.0638861Z  help: Consider removing this parameter. 2026-10-24T23:08:18.0638864Z 2026-10-24T23:08:18.0639060Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T23:08:18.0639178Z ╭─[apps/mobile/src/state/thread-order.ts:29:7] 2026-10-24T23:08:18.0639252Z 28 │ getPendingThreadOrder(); 2026-10-24T23:08:18.0639329Z 29 │ }, [nowMinute, snoozeWakeTick]); 2026-10-24T23:08:18.0639449Z ·  ────┬──── ───────┬────── 2026-10-24T23:08:18.0639642Z · │ ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T23:08:18.0639778Z · ╰── Unnecessary dependency `nowMinute` 2026-10-24T23:08:18.0639840Z 30 │ return pending; 2026-10-24T23:08:18.0639890Z ╰──── 2026-10-24T23:08:18.0640180Z  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-24T23:08:18.0640497Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T23:08:18.0640502Z 2026-10-24T23:08:18.0640710Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T23:08:18.0640813Z ╭─[apps/mobile/src/Stack.tsx:1079:21] 2026-10-24T23:08:18.0640875Z 1078 │ } 2026-10-24T23:08:18.0641139Z ·  ───────────────────────────────────────────── 2026-10-24T23:08:18.0641219Z 1080 │ screenOptions={({ route }) => 2026-10-24T23:08:18.0641271Z ╰──── 2026-10-24T23:08:18.0641675Z  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-24T23:08:18.0641705Z 2026-10-24T23:08:18.0641908Z ⚠ eslint(no-unused-vars): Function 'describeSchedule' is declared but never used. 2026-10-24T23:08:18.0642040Z ╭─[apps/server/src/scheduledTasks/Schedule.ts:79:10] 2026-10-24T23:08:18.0642122Z 78 │ 2026-10-24T23:08:18.0642256Z 79 │ function describeSchedule(schedule: ScheduledTaskSchedule): string { 2026-10-24T23:08:18.0642341Z ·  ────────┬─────── 2026-10-24T23:08:18.0642488Z · ╰── 'describeSchedule' is declared here 2026-10-24T23:08:18.0642597Z 80 │ if (schedule.type === "webhook") return "On webhook"; 2026-10-24T23:08:18.0642646Z ╰──── 2026-10-24T23:08:18.0642749Z  help: Consider removing this declaration. 2026-10-24T23:08:18.0642751Z 2026-10-24T23:08:18.0643218Z ⚠ 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-24T23:08:18.0643440Z ╭─[apps/server/src/scheduledTasks/ScheduledTaskService.webhook.test.ts:521:13] 2026-10-24T23:08:18.0643548Z 520 │ })).delivery; 2026-10-24T23:08:18.0643744Z 521 │ ╭─▶ while (delivery.outcome === "accepted") { 2026-10-24T23:08:18.0643857Z 522 │ │ yield* Effect.yieldNow; 2026-10-24T23:08:18.0643997Z 523 │ │ delivery = (yield* service.getWebhookDelivery({ 2026-10-24T23:08:18.0644096Z 524 │ │ id: task.id, 2026-10-24T23:08:18.0644213Z 525 │ │ deliveryId: deliveryId!, 2026-10-24T23:08:18.0644310Z 526 │ │ })).delivery; 2026-10-24T23:08:18.0644444Z 527 │ ╰─▶ } 2026-10-24T23:08:18.0644557Z 528 │ assert.equal(delivery.outcome, "dispatch_failed"); 2026-10-24T23:08:18.0644607Z ╰──── 2026-10-24T23:08:18.0644610Z 2026-10-24T23:08:18.0644859Z ⚠ eslint(no-unused-vars): Function 'layerClaudeAgentSdkReplayQueryRunner' is declared but never used. 2026-10-24T23:08:18.0645034Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.testkit.ts:960:10] 2026-10-24T23:08:18.0645088Z 959 │ 2026-10-24T23:08:18.0645196Z 960 │ function layerClaudeAgentSdkReplayQueryRunner( 2026-10-24T23:08:18.0645312Z ·  ──────────────────┬───────────────── 2026-10-24T23:08:18.0645506Z · ╰── 'layerClaudeAgentSdkReplayQueryRunner' is declared here 2026-10-24T23:08:18.0645609Z 961 │ transcript: ClaudeAgentSdkReplayTranscript, 2026-10-24T23:08:18.0645658Z ╰──── 2026-10-24T23:08:18.0645759Z  help: Consider removing this declaration. 2026-10-24T23:08:18.0645761Z 2026-10-24T23:08:18.0646037Z ⚠ eslint(no-unused-vars): Variable 'legacyCredentials' is declared but never used. Unused variables should start with a '_'. 2026-10-24T23:08:18.0646189Z ╭─[packages/provider-cursor/src/server/credentialStore.test.ts:15:7] 2026-10-24T23:08:18.0646243Z 14 │ 2026-10-24T23:08:18.0646313Z 15 │ const legacyCredentials = { 2026-10-24T23:08:18.0646395Z ·  ────────┬──────── 2026-10-24T23:08:18.0646591Z · ╰── 'legacyCredentials' is declared here 2026-10-24T23:08:18.0646689Z 16 │ version: 1 as const, 2026-10-24T23:08:18.0646739Z ╰──── 2026-10-24T23:08:18.0646838Z  help: Consider removing this declaration. 2026-10-24T23:08:18.0646841Z 2026-10-24T23:08:18.0647294Z ⚠ 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-24T23:08:18.0647441Z ╭─[apps/server/src/background/HostPowerMonitor.test.ts:133:11] 2026-10-24T23:08:18.0647571Z 132 │ const monitor = yield* HostPowerMonitor.HostPowerMonitor; 2026-10-24T23:08:18.0647710Z 133 │ ╭─▶ for ( 2026-10-24T23:08:18.0647813Z 134 │ │ let attempt = 0; 2026-10-24T23:08:18.0647980Z 135 │ │ attempt < 100 && (yield* monitor.snapshot).onBattery !== "true"; 2026-10-24T23:08:18.0648077Z 136 │ │ attempt += 1 2026-10-24T23:08:18.0648158Z 137 │ │ ) { 2026-10-24T23:08:18.0648265Z 138 │ │ yield* Effect.yieldNow; 2026-10-24T23:08:18.0648399Z 139 │ ╰─▶ } 2026-10-24T23:08:18.0648521Z 140 │ expect((yield* monitor.snapshot).onBattery).toBe("true"); 2026-10-24T23:08:18.0648571Z ╰──── 2026-10-24T23:08:18.0648573Z 2026-10-24T23:08:18.0648786Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T23:08:18.0648924Z ╭─[apps/mobile/src/state/use-model-option-memory.ts:21:7] 2026-10-24T23:08:18.0648994Z 20 │ [instanceId]: { 2026-10-24T23:08:18.0649071Z 21 │ ...(state[instanceId] ?? {}), 2026-10-24T23:08:18.0649170Z ·  ──────────────────────────── 2026-10-24T23:08:18.0649236Z 22 │ [model]: options, 2026-10-24T23:08:18.0649285Z ╰──── 2026-10-24T23:08:18.0649549Z  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-24T23:08:18.0649552Z 2026-10-24T23:08:18.0649872Z ⚠ eslint(no-unused-vars): Variable 'layerCodexAppServerClientFactoryCommand' is declared but never used. Unused variables should start with a '_'. 2026-10-24T23:08:18.0650028Z ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1444:7] 2026-10-24T23:08:18.0650132Z 1443 │ 2026-10-24T23:08:18.0650271Z 1444 │ const layerCodexAppServerClientFactoryCommand = ( 2026-10-24T23:08:18.0650385Z ·  ───────────────────┬─────────────────── 2026-10-24T23:08:18.0650584Z · ╰── 'layerCodexAppServerClientFactoryCommand' is declared here 2026-10-24T23:08:18.0650700Z 1445 │ options: CodexClient.CodexAppServerClientOptions & { 2026-10-24T23:08:18.0650750Z ╰──── 2026-10-24T23:08:18.0650849Z  help: Consider removing this declaration. 2026-10-24T23:08:18.0650851Z 2026-10-24T23:08:18.0651098Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T23:08:18.0651253Z ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1680:7] 2026-10-24T23:08:18.0651305Z 1679 │ 2026-10-24T23:08:18.0651381Z 1680 │ const layer: Layer.Layer< 2026-10-24T23:08:18.0651451Z ·  ──┬── 2026-10-24T23:08:18.0651572Z · ╰── 'layer' is declared here 2026-10-24T23:08:18.0651669Z 1681 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T23:08:18.0651720Z ╰──── 2026-10-24T23:08:18.0651817Z  help: Consider removing this declaration. 2026-10-24T23:08:18.0651820Z 2026-10-24T23:08:18.0652045Z ⚠ eslint(no-unused-vars): Type 'Scope' is imported but never used. 2026-10-24T23:08:18.0652178Z ╭─[apps/server/src/provider/ProviderAuthService.ts:15:18] 2026-10-24T23:08:18.0652262Z 14 │ import * as Layer from "effect/Layer"; 2026-10-24T23:08:18.0652353Z 15 │ import type * as Scope from "effect/Scope"; 2026-10-24T23:08:18.0652429Z ·  ──┬── 2026-10-24T23:08:18.0652561Z · ╰── 'Scope' is imported here 2026-10-24T23:08:18.0652647Z 16 │ import * as Stream from "effect/Stream"; 2026-10-24T23:08:18.0652696Z ╰──── 2026-10-24T23:08:18.0652791Z  help: Consider removing this import. 2026-10-24T23:08:18.0652794Z 2026-10-24T23:08:18.0653242Z ⚠ 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-24T23:08:18.0653373Z ╭─[packages/contracts/src/composerContext.test.ts:181:18] 2026-10-24T23:08:18.0653506Z 180 │ it("sends a message without the records the wire cannot carry", () => { 2026-10-24T23:08:18.0653685Z 181 │ const wire = Schema.encodeUnknownSync(Schema.toCodecJson(OrchestrationMessageContext))({ 2026-10-24T23:08:18.0653790Z ·  ──────────────────────── 2026-10-24T23:08:18.0653854Z 182 │ version: 1, 2026-10-24T23:08:18.0653904Z ╰──── 2026-10-24T23:08:18.0653906Z 2026-10-24T23:08:18.0654175Z ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'. 2026-10-24T23:08:18.0654302Z ╭─[packages/provider-cursor/src/server/auth.ts:249:20] 2026-10-24T23:08:18.0654358Z 248 │ }, 2026-10-24T23:08:18.0654438Z 249 │ (effect, flow, stopSessions) => 2026-10-24T23:08:18.0654529Z ·  ──────┬───── 2026-10-24T23:08:18.0654675Z · ╰── 'stopSessions' is declared here 2026-10-24T23:08:18.0654739Z 250 │ effect.pipe( 2026-10-24T23:08:18.0654842Z ╰──── 2026-10-24T23:08:18.0654970Z  help: Consider removing this parameter. 2026-10-24T23:08:18.0654973Z 2026-10-24T23:08:18.0655242Z ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'. 2026-10-24T23:08:18.0655369Z ╭─[apps/server/src/provider/AntigravityAuth.ts:285:20] 2026-10-24T23:08:18.0655424Z 284 │ }, 2026-10-24T23:08:18.0655502Z 285 │ (effect, flow, stopSessions) => 2026-10-24T23:08:18.0655591Z ·  ──────┬───── 2026-10-24T23:08:18.0655733Z · ╰── 'stopSessions' is declared here 2026-10-24T23:08:18.0655796Z 286 │ effect.pipe( 2026-10-24T23:08:18.0655845Z ╰──── 2026-10-24T23:08:18.0655942Z  help: Consider removing this parameter. 2026-10-24T23:08:18.0655948Z 2026-10-24T23:08:18.0656112Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T23:08:18.0656256Z ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:372:47] 2026-10-24T23:08:18.0656383Z 371 │ const { open, onOpenChange, onSnooze, timestampFormat } = props; 2026-10-24T23:08:18.0656535Z 372 │ const presets = open ? resolveSnoozePresets(new Date(), timestampFormat) : []; 2026-10-24T23:08:18.0656647Z ·  ─────┬──── 2026-10-24T23:08:18.0656803Z · ╰── Cannot call impure function 2026-10-24T23:08:18.0656861Z 373 │ return ( 2026-10-24T23:08:18.0656913Z ╰──── 2026-10-24T23:08:18.0657192Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T23:08:18.0657483Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T23:08:18.0657486Z 2026-10-24T23:08:18.0657648Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T23:08:18.0657788Z ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:853:39] 2026-10-24T23:08:18.0657877Z 852 │ if (snoozeGateClock.thread !== thread) { 2026-10-24T23:08:18.0658003Z 853 │ setSnoozeGateClock({ thread, now: new Date().toISOString() }); 2026-10-24T23:08:18.0658109Z ·  ─────┬──── 2026-10-24T23:08:18.0658259Z · ╰── Cannot call impure function 2026-10-24T23:08:18.0658318Z 854 │ } 2026-10-24T23:08:18.0658372Z ╰──── 2026-10-24T23:08:18.0658638Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T23:08:18.0658924Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T23:08:18.0658928Z 2026-10-24T23:08:18.0659087Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T23:08:18.0659228Z ╭─[apps/web/src/components/chat/useThreadLifecycle.tsx:178:58] 2026-10-24T23:08:18.0659337Z 177 │ if (snoozeClockState.shell !== activeThreadShell) { 2026-10-24T23:08:18.0659493Z 178 │ setSnoozeClockState({ shell: activeThreadShell, now: new Date().toISOString() }); 2026-10-24T23:08:18.0659653Z ·  ─────┬──── 2026-10-24T23:08:18.0659846Z · ╰── Cannot call impure function 2026-10-24T23:08:18.0659900Z 179 │ } 2026-10-24T23:08:18.0659950Z ╰──── 2026-10-24T23:08:18.0660214Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T23:08:18.0660499Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T23:08:18.0660501Z 2026-10-24T23:08:18.0660666Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T23:08:18.0660797Z ╭─[apps/web/src/components/CommandPalette.tsx:2037:20] 2026-10-24T23:08:18.0660914Z 2036 │ title: inferProjectTitleFromPath(destinationPath), 2026-10-24T23:08:18.0661006Z 2037 │ createdAt: new Date().toISOString(), 2026-10-24T23:08:18.0661095Z ·  ─────┬──── 2026-10-24T23:08:18.0661232Z · ╰── Cannot call impure function 2026-10-24T23:08:18.0661333Z 2038 │ remoteUrl: addProjectCloneFlow.remoteUrl, 2026-10-24T23:08:18.0661387Z ╰──── 2026-10-24T23:08:18.0661654Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T23:08:18.0661940Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T23:08:18.0661947Z 2026-10-24T23:08:18.0662042Z Found 0 errors and 367 warnings in 5479 files (5.0s, 8 threads) 2026-10-24T23:08:18.1080032Z Post job cleanup. 2026-10-24T23:08:18.1652748Z Cache hit occurred on the primary key electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309, not saving cache. 2026-10-24T23:08:18.1717504Z Post job cleanup. 2026-10-24T23:08:18.1731715Z ##[start-action display=Cache full pnpm store;id=__341d07d1-0ce2-4078-a9dd-0402d78f6546.__actions_cache] 2026-10-24T23:08:18.2070892Z Post job cleanup. 2026-10-24T23:08:18.2667307Z Cache hit occurred on the primary key pnpm-full-v1-Linux-X64-bab31c3827e90e1352d302da4c761fd1b91963ae565f5f0ea70972d0942af1f6, not saving cache. 2026-10-24T23:08:18.2695375Z ##[end-action id=__341d07d1-0ce2-4078-a9dd-0402d78f6546.__actions_cache;outcome=success;conclusion=success;duration_ms=96] 2026-10-24T23:08:18.2697520Z ##[start-action display=Cache Vite+;id=__341d07d1-0ce2-4078-a9dd-0402d78f6546.vp_cache] 2026-10-24T23:08:18.2718191Z Post job cleanup. 2026-10-24T23:08:18.3312439Z 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-24T23:08:18.3340846Z ##[end-action id=__341d07d1-0ce2-4078-a9dd-0402d78f6546.vp_cache;outcome=success;conclusion=success;duration_ms=64] 2026-10-24T23:08:18.3374623Z Post job cleanup. 2026-10-24T23:08:18.3768537Z [command]/usr/local/bin/git version 2026-10-24T23:08:18.3797198Z git version 2.55.0 2026-10-24T23:08:18.3816322Z Temporarily overriding HOME='/home/runner/_work/_temp/4799beee-84fa-4cb2-879c-0671bff87b93' before making global git config changes 2026-10-24T23:08:18.3819493Z Adding repository directory to the temporary git global config as a safe directory 2026-10-24T23:08:18.3819795Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code 2026-10-24T23:08:18.3847784Z Removing SSH command configuration 2026-10-24T23:08:18.3848008Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand 2026-10-24T23:08:18.3867265Z [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-24T23:08:18.3979940Z fatal: No url found for submodule path '.repos/alchemy-effect/submodules/distilled' in .gitmodules 2026-10-24T23:08:18.4001438Z ##[warning]The process '/usr/local/bin/git' failed with exit code 128 2026-10-24T23:08:18.4037797Z A job completed hook has been configured by the self-hosted runner administrator 2026-10-24T23:08:18.4056050Z ##[group]Run '/job_completed.sh' 2026-10-24T23:08:18.4063672Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T23:08:18.4063839Z env: 2026-10-24T23:08:18.4063953Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 141 2026-10-24T23:08:18.4064098Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 406 2026-10-24T23:08:18.4064241Z BLACKSMITH_CHECK_RUN_ID: 121013818614 2026-10-24T23:08:18.4064445Z BLACKSMITH_JOB_DISPLAY_NAME: Lint 2026-10-24T23:08:18.4064601Z GITHUB_ACTIONS_CACHE_MODE: write 2026-10-24T23:08:18.4064730Z ##[endgroup] 2026-10-24T23:08:18.4136705Z Docker container cache not activated, skipping hash computation. 2026-10-24T23:08:18.4381588Z No active SSH sessions detected. Proceeding with shutdown immediately. 2026-10-24T23:08:18.4417752Z Cleaning up orphan processes