2026-10-24T06:22:57.2028000Z Current runner version: '2.338.1' 2026-10-24T06:22:57.2030806Z Runner name: 'blacksmith-8vcpu-ubuntu-2404-bxbkd7kbjrhzsj6t' 2026-10-24T06:22:57.2031340Z Runner group name: 'blacksmith scale sets - blacksmith-8vcpu-ubuntu-2404' 2026-10-24T06:22:57.2031926Z Machine name: 'ip-172-31-73-130' 2026-10-24T06:22:57.2033061Z ##[group]GITHUB_TOKEN Permissions 2026-10-24T06:22:57.2034373Z Contents: read 2026-10-24T06:22:57.2034760Z Metadata: read 2026-10-24T06:22:57.2035155Z ##[endgroup] 2026-10-24T06:22:57.2036423Z Secret source: Actions 2026-10-24T06:22:57.2037043Z Cache mode: write 2026-10-24T06:22:57.2037745Z Prepare workflow directory 2026-10-24T06:22:57.2208539Z Prepare all required actions 2026-10-24T06:22:57.2233203Z Getting action download info 2026-10-24T06:22:57.3249705Z Download action repository 'actions/checkout@v6' (SHA:d23441a48e516b6c34aea4fa41551a30e30af803) 2026-10-24T06:22:57.3581356Z Download action repository 'actions/cache@v6' (SHA:55cc8345863c7cc4c66a329aec7e433d2d1c52a9) 2026-10-24T06:22:57.4674808Z Setting BLACKSMITH_ACTIONS_RESULTS_URL to https://results-receiver.actions.githubusercontent.com/ 2026-10-24T06:22:57.4711320Z Complete job name: Lint 2026-10-24T06:22:57.5058004Z A job started hook has been configured by the self-hosted runner administrator 2026-10-24T06:22:57.5122150Z ##[group]Run '/setup.sh' 2026-10-24T06:22:57.5135892Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T06:22:57.5136292Z env: 2026-10-24T06:22:57.5136509Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-24T06:22:57.5136791Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 406 2026-10-24T06:22:57.5137063Z BLACKSMITH_CHECK_RUN_ID: 120801109398 2026-10-24T06:22:57.5137336Z BLACKSMITH_JOB_DISPLAY_NAME: Lint 2026-10-24T06:22:57.5137596Z GITHUB_ACTIONS_CACHE_MODE: write 2026-10-24T06:22:57.5137848Z ##[endgroup] 2026-10-24T06:22:57.5349031Z Logging daemon started (blacksmithd for logs) 2026-10-24T06:22:57.5431816Z Results daemon started (blacksmithd for results) 2026-10-24T06:22:57.5576765Z Background adoption and SSH setup started (PID: 3162) 2026-10-24T06:22:57.5577145Z 2026-10-24T06:22:57.5577260Z ---------------------------------------- 2026-10-24T06:22:57.5577765Z View this job: https://app.blacksmith.sh/pingdotgg/runs/40069975781/jobs/120801109398 2026-10-24T06:22:57.5578185Z SSH Access (using your GitHub SSH key): 2026-10-24T06:22:57.5578643Z ssh -p 64000 runner@blacksmith-8vcpu-ubuntu-2404-bxbkd7kbjrhzsj6t.vm.blacksmith.sh 2026-10-24T06:22:57.5578966Z 2026-10-24T06:22:57.5579074Z No GitHub SSH key? Add one at: 2026-10-24T06:22:57.5579575Z https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account 2026-10-24T06:22:57.5580038Z 2026-10-24T06:22:57.5580148Z ---------------------------------------- 2026-10-24T06:22:57.5580329Z 2026-10-24T06:22:57.5580474Z VM ID: blacksmith-8vcpu-ubuntu-2404-bxbkd7kbjrhzsj6t 2026-10-24T06:22:57.5580799Z Host: production-152.236.39.54-x8664 2026-10-24T06:22:57.5581074Z Host Agent PID: 13533 2026-10-24T06:22:57.5581316Z Host Agent Git SHA: 1637818df 2026-10-24T06:22:57.5581588Z Host CPU Manufacturer: AuthenticAMD 2026-10-24T06:22:57.5581870Z Blacksmith Host Generation: gen 2 2026-10-24T06:22:57.5582157Z Petname: production-smooth-jay-35432f36 2026-10-24T06:22:57.5582440Z Region: us-east 2026-10-24T06:22:57.5582676Z Rootfs Version: ubuntu24-full-x64-081926 2026-10-24T06:22:57.5587824Z OS Version: Ubuntu 24.04.4 LTS 2026-10-24T06:22:57.5588247Z 2026-10-24T06:22:57.5588374Z Enabling Blacksmith transparent cache 2026-10-24T06:22:57.5793264Z ##[group]Run actions/checkout@v6 2026-10-24T06:22:57.5793558Z with: 2026-10-24T06:22:57.5793882Z sparse-checkout: /* !/.repos/ !/apps/mobile/modules/t3-terminal/Vendor/**/*.a 2026-10-24T06:22:57.5794269Z sparse-checkout-cone-mode: false 2026-10-24T06:22:57.5794540Z repository: pingdotgg/t3code 2026-10-24T06:22:57.5796376Z token: *** 2026-10-24T06:22:57.5796582Z ssh-strict: true 2026-10-24T06:22:57.5796797Z ssh-user: git 2026-10-24T06:22:57.5797016Z persist-credentials: true 2026-10-24T06:22:57.5798037Z clean: true 2026-10-24T06:22:57.5798248Z fetch-depth: 1 2026-10-24T06:22:57.5798454Z fetch-tags: false 2026-10-24T06:22:57.5798673Z show-progress: true 2026-10-24T06:22:57.5798893Z lfs: false 2026-10-24T06:22:57.5799096Z submodules: false 2026-10-24T06:22:57.5799314Z set-safe-directory: true 2026-10-24T06:22:57.5799563Z allow-unsafe-pr-checkout: false 2026-10-24T06:22:57.5799818Z env: 2026-10-24T06:22:57.5800105Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-24T06:22:57.5800384Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 406 2026-10-24T06:22:57.5800658Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T06:22:57.5800911Z ##[endgroup] 2026-10-24T06:22:57.6743480Z Syncing repository: pingdotgg/t3code 2026-10-24T06:22:57.6744508Z ##[group]Getting Git version info 2026-10-24T06:22:57.6744846Z Working directory is '/home/runner/_work/t3code/t3code' 2026-10-24T06:22:57.6745420Z [command]/usr/local/bin/git version 2026-10-24T06:22:57.6752987Z git version 2.55.0 2026-10-24T06:22:57.6765436Z ##[endgroup] 2026-10-24T06:22:57.6772868Z Temporarily overriding HOME='/home/runner/_work/_temp/528a4577-573d-4803-958f-2e07880ef466' before making global git config changes 2026-10-24T06:22:57.6773509Z Adding repository directory to the temporary git global config as a safe directory 2026-10-24T06:22:57.6776386Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code 2026-10-24T06:22:57.6812342Z Deleting the contents of '/home/runner/_work/t3code/t3code' 2026-10-24T06:22:57.6813905Z ##[group]Determining repository object format 2026-10-24T06:22:57.6815054Z ##[endgroup] 2026-10-24T06:22:57.6815413Z ##[group]Initializing the repository 2026-10-24T06:22:57.6817316Z [command]/usr/local/bin/git init /home/runner/_work/t3code/t3code 2026-10-24T06:22:57.6850545Z hint: Using 'master' as the name for the initial branch. This default branch name 2026-10-24T06:22:57.6851050Z hint: will change to "main" in Git 3.0. To configure the initial branch name 2026-10-24T06:22:57.6851517Z hint: to use in all of your new repositories, which will suppress this warning, 2026-10-24T06:22:57.6851874Z hint: call: 2026-10-24T06:22:57.6852078Z hint: 2026-10-24T06:22:57.6852344Z hint: git config --global init.defaultBranch 2026-10-24T06:22:57.6852646Z hint: 2026-10-24T06:22:57.6852931Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and 2026-10-24T06:22:57.6853375Z hint: 'development'. The just-created branch can be renamed via this command: 2026-10-24T06:22:57.6853733Z hint: 2026-10-24T06:22:57.6853941Z hint: git branch -m 2026-10-24T06:22:57.6854171Z hint: 2026-10-24T06:22:57.6854480Z hint: Disable this message with "git config set advice.defaultBranchName false" 2026-10-24T06:22:57.6854946Z Initialized empty Git repository in /home/runner/_work/t3code/t3code/.git/ 2026-10-24T06:22:57.6856634Z [command]/usr/local/bin/git remote add origin https://github.com/pingdotgg/t3code 2026-10-24T06:22:57.6883548Z ##[endgroup] 2026-10-24T06:22:57.6883931Z ##[group]Disabling automatic garbage collection 2026-10-24T06:22:57.6885579Z [command]/usr/local/bin/git config --local gc.auto 0 2026-10-24T06:22:57.6904852Z ##[endgroup] 2026-10-24T06:22:57.6905199Z ##[group]Setting up auth 2026-10-24T06:22:57.6905461Z Removing SSH command configuration 2026-10-24T06:22:57.6908958Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand 2026-10-24T06:22:57.6930851Z [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-24T06:22:57.7054809Z Removing HTTP extra header 2026-10-24T06:22:57.7057687Z [command]/usr/local/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader 2026-10-24T06:22:57.7080705Z [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-24T06:22:57.7178890Z Removing includeIf entries pointing to credentials config files 2026-10-24T06:22:57.7182322Z [command]/usr/local/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir: 2026-10-24T06:22:57.7203293Z [command]/usr/local/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url 2026-10-24T06:22:57.7298392Z [command]/usr/local/bin/git config --file /home/runner/_work/_temp/git-credentials-13f8b576-2736-4ee2-8e53-6c33b23fb46b.config http.https://github.com/.extraheader AUTHORIZATION: basic *** 2026-10-24T06:22:57.7320124Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git.path /home/runner/_work/_temp/git-credentials-13f8b576-2736-4ee2-8e53-6c33b23fb46b.config 2026-10-24T06:22:57.7337945Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git/worktrees/*.path /home/runner/_work/_temp/git-credentials-13f8b576-2736-4ee2-8e53-6c33b23fb46b.config 2026-10-24T06:22:57.7355542Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git.path /github/runner_temp/git-credentials-13f8b576-2736-4ee2-8e53-6c33b23fb46b.config 2026-10-24T06:22:57.7373277Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git/worktrees/*.path /github/runner_temp/git-credentials-13f8b576-2736-4ee2-8e53-6c33b23fb46b.config 2026-10-24T06:22:57.7390178Z ##[endgroup] 2026-10-24T06:22:57.7390532Z ##[group]Fetching the repository 2026-10-24T06:22:57.7394415Z [command]/usr/local/bin/git -c protocol.version=2 fetch --no-tags --prune --no-recurse-submodules --filter=blob:none --depth=1 origin +2c592a1086ff593293358529a1975dde308edeaf:refs/remotes/origin/main 2026-10-24T06:22:58.0107051Z From https://github.com/pingdotgg/t3code 2026-10-24T06:22:58.0107902Z * [new ref] 2c592a1086ff593293358529a1975dde308edeaf -> origin/main 2026-10-24T06:22:58.0132122Z [command]/usr/local/bin/git branch --list --remote origin/main 2026-10-24T06:22:58.0152327Z origin/main 2026-10-24T06:22:58.0156607Z [command]/usr/local/bin/git rev-parse refs/remotes/origin/main 2026-10-24T06:22:58.0173596Z 2c592a1086ff593293358529a1975dde308edeaf 2026-10-24T06:22:58.0175692Z ##[endgroup] 2026-10-24T06:22:58.0176393Z ##[group]Determining the checkout info 2026-10-24T06:22:58.0177215Z ##[endgroup] 2026-10-24T06:22:58.0177944Z ##[group]Setting up sparse checkout 2026-10-24T06:22:58.0178649Z [command]/usr/local/bin/git config core.sparseCheckout true 2026-10-24T06:22:58.0198368Z [command]/usr/local/bin/git rev-parse --git-path info/sparse-checkout 2026-10-24T06:22:58.0213198Z .git/info/sparse-checkout 2026-10-24T06:22:58.0216250Z ##[endgroup] 2026-10-24T06:22:58.0217166Z ##[group]Checking out the ref 2026-10-24T06:22:58.0218556Z [command]/usr/local/bin/git checkout --progress --force -B main refs/remotes/origin/main 2026-10-24T06:23:04.6053041Z Updating files: 0% (1/6336) 2026-10-24T06:23:04.6080410Z Updating files: 1% (64/6336) 2026-10-24T06:23:04.6097221Z Updating files: 2% (127/6336) 2026-10-24T06:23:04.6118518Z Updating files: 3% (191/6336) 2026-10-24T06:23:04.6137702Z Updating files: 4% (254/6336) 2026-10-24T06:23:04.6168260Z Updating files: 5% (317/6336) 2026-10-24T06:23:04.6188898Z Updating files: 6% (381/6336) 2026-10-24T06:23:04.6243384Z Updating files: 7% (444/6336) 2026-10-24T06:23:04.6271245Z Updating files: 8% (507/6336) 2026-10-24T06:23:04.6292810Z Updating files: 9% (571/6336) 2026-10-24T06:23:04.6567582Z Updating files: 10% (634/6336) 2026-10-24T06:23:04.6582717Z Updating files: 11% (697/6336) 2026-10-24T06:23:04.6593123Z Updating files: 12% (761/6336) 2026-10-24T06:23:04.6607019Z Updating files: 13% (824/6336) 2026-10-24T06:23:04.6622224Z Updating files: 14% (888/6336) 2026-10-24T06:23:04.6639255Z Updating files: 15% (951/6336) 2026-10-24T06:23:04.6657367Z Updating files: 16% (1014/6336) 2026-10-24T06:23:04.6671322Z Updating files: 17% (1078/6336) 2026-10-24T06:23:04.6689240Z Updating files: 18% (1141/6336) 2026-10-24T06:23:04.6703665Z Updating files: 19% (1204/6336) 2026-10-24T06:23:04.6725660Z Updating files: 20% (1268/6336) 2026-10-24T06:23:04.6742896Z Updating files: 21% (1331/6336) 2026-10-24T06:23:04.6762128Z Updating files: 22% (1394/6336) 2026-10-24T06:23:04.6775491Z Updating files: 23% (1458/6336) 2026-10-24T06:23:04.6788381Z Updating files: 24% (1521/6336) 2026-10-24T06:23:04.6803587Z Updating files: 25% (1584/6336) 2026-10-24T06:23:04.6817092Z Updating files: 26% (1648/6336) 2026-10-24T06:23:04.6829686Z Updating files: 27% (1711/6336) 2026-10-24T06:23:04.6849438Z Updating files: 28% (1775/6336) 2026-10-24T06:23:04.6880435Z Updating files: 29% (1838/6336) 2026-10-24T06:23:04.6900736Z Updating files: 30% (1901/6336) 2026-10-24T06:23:04.6923984Z Updating files: 31% (1965/6336) 2026-10-24T06:23:04.6952621Z Updating files: 32% (2028/6336) 2026-10-24T06:23:04.6982852Z Updating files: 33% (2091/6336) 2026-10-24T06:23:04.7048522Z Updating files: 34% (2155/6336) 2026-10-24T06:23:04.7106591Z Updating files: 35% (2218/6336) 2026-10-24T06:23:04.7145695Z Updating files: 36% (2281/6336) 2026-10-24T06:23:04.7179236Z Updating files: 37% (2345/6336) 2026-10-24T06:23:04.7225413Z Updating files: 38% (2408/6336) 2026-10-24T06:23:04.7251064Z Updating files: 39% (2472/6336) 2026-10-24T06:23:04.7281832Z Updating files: 40% (2535/6336) 2026-10-24T06:23:04.7309617Z Updating files: 41% (2598/6336) 2026-10-24T06:23:04.7328438Z Updating files: 42% (2662/6336) 2026-10-24T06:23:04.7338590Z Updating files: 43% (2725/6336) 2026-10-24T06:23:04.7359994Z Updating files: 44% (2788/6336) 2026-10-24T06:23:04.7392334Z Updating files: 45% (2852/6336) 2026-10-24T06:23:04.7415090Z Updating files: 46% (2915/6336) 2026-10-24T06:23:04.7442987Z Updating files: 47% (2978/6336) 2026-10-24T06:23:04.7469947Z Updating files: 48% (3042/6336) 2026-10-24T06:23:04.7499954Z Updating files: 49% (3105/6336) 2026-10-24T06:23:04.7536379Z Updating files: 50% (3168/6336) 2026-10-24T06:23:04.7551570Z Updating files: 51% (3232/6336) 2026-10-24T06:23:04.7583591Z Updating files: 52% (3295/6336) 2026-10-24T06:23:04.7609252Z Updating files: 53% (3359/6336) 2026-10-24T06:23:04.7628892Z Updating files: 54% (3422/6336) 2026-10-24T06:23:04.7652571Z Updating files: 55% (3485/6336) 2026-10-24T06:23:04.7669675Z Updating files: 56% (3549/6336) 2026-10-24T06:23:04.7687140Z Updating files: 57% (3612/6336) 2026-10-24T06:23:04.7704799Z Updating files: 58% (3675/6336) 2026-10-24T06:23:04.8060371Z Updating files: 59% (3739/6336) 2026-10-24T06:23:04.8074257Z Updating files: 60% (3802/6336) 2026-10-24T06:23:04.8090290Z Updating files: 61% (3865/6336) 2026-10-24T06:23:04.8107479Z Updating files: 62% (3929/6336) 2026-10-24T06:23:04.8128424Z Updating files: 63% (3992/6336) 2026-10-24T06:23:04.8154501Z Updating files: 64% (4056/6336) 2026-10-24T06:23:04.8174863Z Updating files: 65% (4119/6336) 2026-10-24T06:23:04.8190391Z Updating files: 66% (4182/6336) 2026-10-24T06:23:04.8215453Z Updating files: 67% (4246/6336) 2026-10-24T06:23:04.8227674Z Updating files: 68% (4309/6336) 2026-10-24T06:23:04.8246505Z Updating files: 69% (4372/6336) 2026-10-24T06:23:04.8258184Z Updating files: 70% (4436/6336) 2026-10-24T06:23:04.8273820Z Updating files: 71% (4499/6336) 2026-10-24T06:23:04.8290261Z Updating files: 72% (4562/6336) 2026-10-24T06:23:04.8314797Z Updating files: 73% (4626/6336) 2026-10-24T06:23:04.8563310Z Updating files: 74% (4689/6336) 2026-10-24T06:23:04.8745165Z Updating files: 75% (4752/6336) 2026-10-24T06:23:04.8765703Z Updating files: 76% (4816/6336) 2026-10-24T06:23:04.8785640Z Updating files: 77% (4879/6336) 2026-10-24T06:23:04.8810850Z Updating files: 78% (4943/6336) 2026-10-24T06:23:04.8829019Z Updating files: 79% (5006/6336) 2026-10-24T06:23:04.8848473Z Updating files: 80% (5069/6336) 2026-10-24T06:23:04.8865330Z Updating files: 81% (5133/6336) 2026-10-24T06:23:04.8883947Z Updating files: 82% (5196/6336) 2026-10-24T06:23:04.8902419Z Updating files: 83% (5259/6336) 2026-10-24T06:23:04.8923463Z Updating files: 84% (5323/6336) 2026-10-24T06:23:04.8945299Z Updating files: 85% (5386/6336) 2026-10-24T06:23:04.8968827Z Updating files: 86% (5449/6336) 2026-10-24T06:23:04.9034664Z Updating files: 87% (5513/6336) 2026-10-24T06:23:04.9065492Z Updating files: 88% (5576/6336) 2026-10-24T06:23:04.9085646Z Updating files: 89% (5640/6336) 2026-10-24T06:23:04.9108080Z Updating files: 90% (5703/6336) 2026-10-24T06:23:04.9141383Z Updating files: 91% (5766/6336) 2026-10-24T06:23:04.9156434Z Updating files: 92% (5830/6336) 2026-10-24T06:23:04.9173284Z Updating files: 93% (5893/6336) 2026-10-24T06:23:04.9194046Z Updating files: 94% (5956/6336) 2026-10-24T06:23:04.9216390Z Updating files: 95% (6020/6336) 2026-10-24T06:23:04.9267635Z Updating files: 96% (6083/6336) 2026-10-24T06:23:04.9293812Z Updating files: 97% (6146/6336) 2026-10-24T06:23:04.9337506Z Updating files: 98% (6210/6336) 2026-10-24T06:23:04.9356565Z Updating files: 99% (6273/6336) 2026-10-24T06:23:04.9356842Z Updating files: 100% (6336/6336) 2026-10-24T06:23:04.9357042Z Updating files: 100% (6336/6336), done. 2026-10-24T06:23:04.9507072Z Switched to a new branch 'main' 2026-10-24T06:23:04.9507894Z branch 'main' set up to track 'origin/main'. 2026-10-24T06:23:04.9519667Z ##[endgroup] 2026-10-24T06:23:04.9552136Z [command]/usr/local/bin/git log -1 --format=%H 2026-10-24T06:23:04.9568913Z 2c592a1086ff593293358529a1975dde308edeaf 2026-10-24T06:23:04.9636677Z ##[group]Run files="$(git ls-files .github/pr-assets)" 2026-10-24T06:23:04.9636915Z files="$(git ls-files .github/pr-assets)" 2026-10-24T06:23:04.9637092Z if test -n "$files"; then 2026-10-24T06:23:04.9637310Z  printf 'PR evidence must be uploaded to GitHub, not committed:\n%s\n' "$files" >&2 2026-10-24T06:23:04.9637613Z  exit 1 2026-10-24T06:23:04.9637717Z fi 2026-10-24T06:23:04.9654853Z shell: /usr/bin/bash -e {0} 2026-10-24T06:23:04.9654978Z env: 2026-10-24T06:23:04.9655090Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-24T06:23:04.9655249Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 406 2026-10-24T06:23:04.9655386Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T06:23:04.9655515Z ##[endgroup] 2026-10-24T06:23:04.9795285Z Prepare all required actions 2026-10-24T06:23:04.9795579Z Getting action download info 2026-10-24T06:23:05.0889768Z Download action repository 'voidzero-dev/setup-vp@v1' (SHA:250f29ce396baf5e8f24498e17c0dfdebabc26eb) 2026-10-24T06:23:05.1989497Z ##[group]Run ./.github/actions/setup-ci-deps 2026-10-24T06:23:05.1989656Z env: 2026-10-24T06:23:05.1989769Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-24T06:23:05.1989918Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 406 2026-10-24T06:23:05.1990059Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T06:23:05.1990195Z ##[endgroup] 2026-10-24T06:23:05.2062452Z ##[start-action display=Resolve Vite+ version;id=__self.vp] 2026-10-24T06:23:05.2074467Z ##[group]Run echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-24T06:23:05.2074818Z echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-24T06:23:05.2075107Z echo "node=$(jq -r '.engines.node' package.json)" >> "$GITHUB_OUTPUT" 2026-10-24T06:23:05.2075340Z echo "pnpm=$(jq -r '.packageManager' package.json)" >> "$GITHUB_OUTPUT" 2026-10-24T06:23:05.2092948Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T06:23:05.2093106Z env: 2026-10-24T06:23:05.2093220Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-24T06:23:05.2093376Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 406 2026-10-24T06:23:05.2093549Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T06:23:05.2093677Z ##[endgroup] 2026-10-24T06:23:05.2161176Z ##[end-action id=__self.vp;outcome=success;conclusion=success;duration_ms=9] 2026-10-24T06:23:05.2162379Z ##[start-action display=Cache Vite+;id=__self.vp_cache] 2026-10-24T06:23:05.2200815Z ##[group]Run actions/cache@v6 2026-10-24T06:23:05.2200946Z with: 2026-10-24T06:23:05.2201202Z path: ~/.vite-plus 2026-10-24T06:23:05.2201364Z key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T06:23:05.2201558Z enableCrossOsArchive: false 2026-10-24T06:23:05.2201685Z fail-on-cache-miss: false 2026-10-24T06:23:05.2201809Z lookup-only: false 2026-10-24T06:23:05.2201914Z save-always: false 2026-10-24T06:23:05.2202022Z env: 2026-10-24T06:23:05.2202125Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-24T06:23:05.2202268Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 406 2026-10-24T06:23:05.2202405Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T06:23:05.2202533Z ##[endgroup] 2026-10-24T06:23:05.7287528Z Cache hit for: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T06:23:06.0911581Z Received 170349591 of 170349591 (100.0%), 476.4 MBs/sec 2026-10-24T06:23:06.0912779Z Cache Size: ~162 MB (170349591 B) 2026-10-24T06:23:06.0935152Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/c4f70340-80ad-4b13-b4b1-b25cdcf35b90/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T06:23:06.7148188Z Cache restored successfully 2026-10-24T06:23:06.7280889Z Cache restored from key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T06:23:06.7357068Z ##[end-action id=__self.vp_cache;outcome=success;conclusion=success;duration_ms=1519] 2026-10-24T06:23:06.7359296Z ##[start-action display=Use cached Vite+;id=__self.__run] 2026-10-24T06:23:06.7377404Z ##[group]Run echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-24T06:23:06.7377719Z echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-24T06:23:06.7377977Z "$HOME/.vite-plus/bin/vp" env use "26.12.1" 2026-10-24T06:23:06.7395903Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T06:23:06.7396094Z env: 2026-10-24T06:23:06.7396205Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-24T06:23:06.7396346Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 406 2026-10-24T06:23:06.7396487Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T06:23:06.7396617Z ##[endgroup] 2026-10-24T06:23:06.7437935Z Using Node.js v26.12.1 (resolved from 26.12.1) 2026-10-24T06:23:06.7445669Z ##[end-action id=__self.__run;outcome=success;conclusion=success;duration_ms=8] 2026-10-24T06:23:06.7446883Z ##[start-action display=Setup Vite+;id=__self.__voidzero-dev_setup-vp] 2026-10-24T06:23:06.7451163Z ##[end-action id=__self.__voidzero-dev_setup-vp;outcome=skipped;conclusion=skipped;duration_ms=0] 2026-10-24T06:23:06.7452752Z ##[start-action display=Resolve pnpm store path;id=__self.pnpm_store] 2026-10-24T06:23:06.7463612Z ##[group]Run store_path="$(vp pm cache dir)" 2026-10-24T06:23:06.7463868Z store_path="$(vp pm cache dir)" 2026-10-24T06:23:06.7464117Z echo "path=$store_path" >> "$GITHUB_OUTPUT" 2026-10-24T06:23:06.7479171Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T06:23:06.7479367Z env: 2026-10-24T06:23:06.7479473Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-24T06:23:06.7479617Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 406 2026-10-24T06:23:06.7479761Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T06:23:06.7479888Z ##[endgroup] 2026-10-24T06:23:06.7606931Z ##[end-action id=__self.pnpm_store;outcome=success;conclusion=success;duration_ms=15] 2026-10-24T06:23:06.7608579Z ##[start-action display=Cache full pnpm store;id=__self.__actions_cache] 2026-10-24T06:23:06.7934507Z ##[group]Run actions/cache@v6 2026-10-24T06:23:06.7934637Z with: 2026-10-24T06:23:06.7934757Z path: /home/runner/.local/share/pnpm/store/v11 2026-10-24T06:23:06.7935049Z key: pnpm-full-v1-Linux-X64-8600a8d4a7fcc9519d421cef0c77201c793c5d8afbbef2897636b5b9305a9b7d 2026-10-24T06:23:06.7935302Z restore-keys: pnpm-full-v1-Linux-X64- 2026-10-24T06:23:06.7935444Z enableCrossOsArchive: false 2026-10-24T06:23:06.7935575Z fail-on-cache-miss: false 2026-10-24T06:23:06.7935729Z lookup-only: false 2026-10-24T06:23:06.7935833Z save-always: false 2026-10-24T06:23:06.7935948Z env: 2026-10-24T06:23:06.7936072Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-24T06:23:06.7936423Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 406 2026-10-24T06:23:06.7936644Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T06:23:06.7936893Z ##[endgroup] 2026-10-24T06:23:06.9845770Z Cache hit for: pnpm-full-v1-Linux-X64-8600a8d4a7fcc9519d421cef0c77201c793c5d8afbbef2897636b5b9305a9b7d 2026-10-24T06:23:08.0139947Z Received 545259520 of 995169257 (54.8%), 515.9 MBs/sec 2026-10-24T06:23:08.6238647Z Received 995169257 of 995169257 (100.0%), 586.6 MBs/sec 2026-10-24T06:23:08.6240185Z Cache Size: ~949 MB (995169257 B) 2026-10-24T06:23:08.6262772Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/c65a003a-dcad-4ccf-9764-02fb903f1ede/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T06:23:13.6148899Z Cache restored successfully 2026-10-24T06:23:13.6590979Z Cache restored from key: pnpm-full-v1-Linux-X64-8600a8d4a7fcc9519d421cef0c77201c793c5d8afbbef2897636b5b9305a9b7d 2026-10-24T06:23:13.6669611Z ##[end-action id=__self.__actions_cache;outcome=success;conclusion=success;duration_ms=6906] 2026-10-24T06:23:13.6672405Z ##[start-action display=Install dependencies;id=__self.__run_2] 2026-10-24T06:23:13.6683552Z ##[group]Run vp install 2026-10-24T06:23:13.6683736Z vp install 2026-10-24T06:23:13.6700346Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T06:23:13.6700507Z env: 2026-10-24T06:23:13.6700619Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-24T06:23:13.6700765Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 406 2026-10-24T06:23:13.6700908Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T06:23:13.6701038Z ##[endgroup] 2026-10-24T06:23:13.7006189Z Scope: all 33 workspace projects 2026-10-24T06:23:13.8002849Z ? Verifying lockfile against supply-chain policies (2088 entries)... 2026-10-24T06:23:14.0294955Z Packages are hard linked from the content-addressable store to the virtual store. 2026-10-24T06:23:14.0295265Z Content-addressable store is at: /home/runner/.local/share/pnpm/store/v11 2026-10-24T06:23:14.0295481Z Virtual store is at: node_modules/.pnpm 2026-10-24T06:23:15.8536619Z ✓ Lockfile passes supply-chain policies (2088 entries in 2.1s) 2026-10-24T06:23:15.8536871Z Lockfile is up to date, resolution step is skipped 2026-10-24T06:23:15.8689748Z Packages: +1721 2026-10-24T06:23:15.8689940Z ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2026-10-24T06:23:15.8955288Z Progress: resolved 1721, reused 1718, downloaded 0, added 1721, done 2026-10-24T06:23:16.7516346Z . prepare$ vp config --no-agent 2026-10-24T06:23:16.8379534Z . prepare: Done 2026-10-24T06:23:16.8395533Z 2026-10-24T06:23:16.8396059Z devDependencies: 2026-10-24T06:23:16.8396309Z + @coderabbitai/config 1.1.0 2026-10-24T06:23:16.8396543Z + @shadcn/lint 0.1.5 2026-10-24T06:23:16.8396793Z + @types/node 24.12.4 2026-10-24T06:23:16.8397009Z + knip 6.34.0 2026-10-24T06:23:16.8397222Z + typescript <- @tsc-rs/typescript 0.8.0 2026-10-24T06:23:16.8397557Z + vite-plus 1.3.0 2026-10-24T06:23:16.8397665Z 2026-10-24T06:23:16.8431343Z Done in 3.2s using pnpm v12.14.0 2026-10-24T06:23:16.8589171Z ##[end-action id=__self.__run_2;outcome=success;conclusion=success;duration_ms=3191] 2026-10-24T06:23:16.9136081Z ##[group]Run actions/cache@v6 2026-10-24T06:23:16.9136540Z with: 2026-10-24T06:23:16.9136708Z path: ~/.cache/electron 2026-10-24T06:23:16.9137064Z key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T06:23:16.9137460Z enableCrossOsArchive: false 2026-10-24T06:23:16.9137671Z fail-on-cache-miss: false 2026-10-24T06:23:16.9137865Z lookup-only: false 2026-10-24T06:23:16.9138081Z save-always: false 2026-10-24T06:23:16.9138259Z env: 2026-10-24T06:23:16.9138452Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-24T06:23:16.9138697Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 406 2026-10-24T06:23:16.9138973Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T06:23:16.9139218Z ##[endgroup] 2026-10-24T06:23:17.1106646Z Cache hit for: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T06:23:17.2693011Z Received 122906203 of 122906203 (100.0%), 814.0 MBs/sec 2026-10-24T06:23:17.2694240Z Cache Size: ~117 MB (122906203 B) 2026-10-24T06:23:17.2711523Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/2ec005f9-1e17-4390-bf7d-d0a912db03be/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T06:23:17.3269973Z Cache restored successfully 2026-10-24T06:23:17.3385086Z Cache restored from key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T06:23:17.3467943Z ##[group]Run vp run --filter @t3tools/desktop ensure:electron 2026-10-24T06:23:17.3468206Z vp run --filter @t3tools/desktop ensure:electron 2026-10-24T06:23:17.3484983Z shell: /usr/bin/bash -e {0} 2026-10-24T06:23:17.3485122Z env: 2026-10-24T06:23:17.3485363Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-24T06:23:17.3485508Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 406 2026-10-24T06:23:17.3485643Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T06:23:17.3485772Z ##[endgroup] 2026-10-24T06:23:17.5083666Z ~/apps/desktop$ node scripts/ensure-electron-runtime.mjs ⊘ cache disabled 2026-10-24T06:23:18.0422089Z /home/runner/_work/t3code/t3code/node_modules/.pnpm/electron@44.9.3_supports-color@8.1.1/node_modules/electron/dist/electron 2026-10-24T06:23:18.0437166Z 2026-10-24T06:23:18.0509041Z ##[group]Run vp run knip:check 2026-10-24T06:23:18.0509222Z vp run knip:check 2026-10-24T06:23:18.0525913Z shell: /usr/bin/bash -e {0} 2026-10-24T06:23:18.0526037Z env: 2026-10-24T06:23:18.0526144Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-24T06:23:18.0526283Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 406 2026-10-24T06:23:18.0526421Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T06:23:18.0526546Z ##[endgroup] 2026-10-24T06:23:18.1955237Z $ knip --include files,dependencies --no-config-hints ⊘ cache disabled 2026-10-24T06:23:21.7306045Z 2026-10-24T06:23:21.7309155Z $ knip --workspace apps/server --workspace apps/desktop --workspace apps/web --workspace packages/client-runtime --workspace packages/contracts --workspace packages/effect-acp --workspace packages/effect-codex-app-server --workspace packages/shared --workspace packages/ssh --workspace packages/tailscale --workspace packages/provider-core --workspace packages/provider-acp --workspace packages/provider-acp-registry --workspace packages/provider-testing --workspace packages/provider-pi --workspace packages/provider-muse --workspace packages/provider-opencode --workspace packages/provider-cursor --workspace packages/provider-grok --workspace packages/source-control-core --workspace packages/source-control-azure-devops --workspace packages/source-control-bitbucket --workspace packages/source-control-forgejo --workspace packages/source-control-gitcafe --workspace packages/source-control-github --workspace packages/source-control-gitlab --workspace packages/source-control-testing --exports --preprocessor ./scripts/knip-schemas.ts --no-config-hints ⊘ cache disabled 2026-10-24T06:23:29.5491890Z 2026-10-24T06:23:29.5492928Z --- 2026-10-24T06:23:29.5493269Z vp run: 2/2 successful. (Run `vp run --last-details` for full details) 2026-10-24T06:23:29.5559630Z ##[group]Run vp run --filter @t3tools/source-control-github generate --check 2026-10-24T06:23:29.5559908Z vp run --filter @t3tools/source-control-github generate --check 2026-10-24T06:23:29.5576340Z shell: /usr/bin/bash -e {0} 2026-10-24T06:23:29.5576471Z env: 2026-10-24T06:23:29.5576577Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-24T06:23:29.5576721Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 406 2026-10-24T06:23:29.5576858Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T06:23:29.5576992Z ##[endgroup] 2026-10-24T06:23:29.6990060Z ~/packages/source-control-github$ graphqlgen --check ⊘ cache disabled 2026-10-24T06:23:29.8763188Z 2026-10-24T06:23:29.8826707Z ##[group]Run vp run --filter t3 generate --check 2026-10-24T06:23:29.8827193Z vp run --filter t3 generate --check 2026-10-24T06:23:29.8855411Z shell: /usr/bin/bash -e {0} 2026-10-24T06:23:29.8855555Z env: 2026-10-24T06:23:29.8855677Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-24T06:23:29.8855817Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 406 2026-10-24T06:23:29.8855951Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T06:23:29.8856079Z ##[endgroup] 2026-10-24T06:23:30.0238321Z ~/apps/server$ graphqlgen --check ⊘ cache disabled 2026-10-24T06:23:30.1686773Z 2026-10-24T06:23:30.1766809Z ##[group]Run vp check 2026-10-24T06:23:30.1766974Z vp check 2026-10-24T06:23:30.1783756Z shell: /usr/bin/bash -e {0} 2026-10-24T06:23:30.1783880Z env: 2026-10-24T06:23:30.1783988Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-24T06:23:30.1784132Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 406 2026-10-24T06:23:30.1784271Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T06:23:30.1784402Z ##[endgroup] 2026-10-24T06:23:30.7355138Z pass: All 5690 files are correctly formatted (413ms, 8 threads) 2026-10-24T06:23:36.7645263Z warn: Lint warnings found 2026-10-24T06:23:36.7646448Z ⚠ eslint(no-empty-pattern): Empty array binding pattern 2026-10-24T06:23:36.7646887Z ╭─[apps/server/src/pullRequest/PullRequestService.test.ts:1526:12] 2026-10-24T06:23:36.7647120Z 1525 │ 2026-10-24T06:23:36.7647257Z 1526 │ for (const [] of [ 2026-10-24T06:23:36.7647440Z ·  ── 2026-10-24T06:23:36.7647611Z 1527 │ ["github", "github.com"], 2026-10-24T06:23:36.7647771Z ╰──── 2026-10-24T06:23:36.7648191Z  help: Passing non-iterable values (null, undefined, numbers, booleans, etc.) will result in a runtime error because these values are not iterable. 2026-10-24T06:23:36.7648478Z 2026-10-24T06:23:36.7648640Z ⚠ react(refs): Cannot access refs during render 2026-10-24T06:23:36.7648984Z ╭─[apps/mobile/src/features/home/thread-swipe-actions.tsx:494:27] 2026-10-24T06:23:36.7649217Z 493 │ > 2026-10-24T06:23:36.7649378Z 494 │ {props.children(close)} 2026-10-24T06:23:36.7649579Z ·  ──┬── 2026-10-24T06:23:36.7649878Z · ╰── Cannot access ref value during render 2026-10-24T06:23:36.7650120Z 495 │ 2026-10-24T06:23:36.7650270Z ╰──── 2026-10-24T06:23:36.7650838Z  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-24T06:23:36.7651639Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T06:23:36.7651945Z 2026-10-24T06:23:36.7652160Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T06:23:36.7652509Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:533:25] 2026-10-24T06:23:36.7652809Z 532 │ // range) the boundary string is identical and the chain would die. 2026-10-24T06:23:36.7653057Z 533 │ }, [nextSnoozeWakeAt, snoozeWakeTick]); 2026-10-24T06:23:36.7653294Z ·  ───────┬────── 2026-10-24T06:23:36.7653579Z · ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T06:23:36.7653891Z 534 │ const v2SearchQuery = props.searchQuery.trim().toLocaleLowerCase(); 2026-10-24T06:23:36.7654101Z ╰──── 2026-10-24T06:23:36.7654477Z  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-24T06:23:36.7655096Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.7655403Z 2026-10-24T06:23:36.7655583Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T06:23:36.7655885Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:524:53] 2026-10-24T06:23:36.7656124Z 523 │ if (Number.isNaN(wakeAtMs)) return; 2026-10-24T06:23:36.7656396Z 524 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647); 2026-10-24T06:23:36.7656691Z ·  ─────┬──── 2026-10-24T06:23:36.7657149Z · ╰── Cannot call impure function 2026-10-24T06:23:36.7657449Z 525 │ const id = setTimeout(() => { 2026-10-24T06:23:36.7657604Z ╰──── 2026-10-24T06:23:36.7657975Z  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-24T06:23:36.7658553Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T06:23:36.7658855Z 2026-10-24T06:23:36.7659072Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable. 2026-10-24T06:23:36.7659410Z ╭─[apps/web/src/contextMenuFallback.test.ts:38:9] 2026-10-24T06:23:36.7659623Z 37 │ get isConnected() { 2026-10-24T06:23:36.7659813Z 38 │ let current: FakeElement | null = this; 2026-10-24T06:23:36.7660013Z ·  ─────── 2026-10-24T06:23:36.7660181Z 39 │ while (current?.parent) { 2026-10-24T06:23:36.7660332Z ╰──── 2026-10-24T06:23:36.7660689Z  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-24T06:23:36.7660958Z 2026-10-24T06:23:36.7661132Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T06:23:36.7661501Z ╭─[packages/provider-opencode/src/server/OpenCodeRuntime.environment.test.ts:53:14] 2026-10-24T06:23:36.7661818Z 52 │ 2026-10-24T06:23:36.7661958Z 53 │ for (const {} of [ 2026-10-24T06:23:36.7662127Z ·  ── 2026-10-24T06:23:36.7662296Z 54 │ { healthy: true }, 2026-10-24T06:23:36.7662442Z ╰──── 2026-10-24T06:23:36.7662760Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T06:23:36.7662996Z 2026-10-24T06:23:36.7663261Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T06:23:36.7663655Z ╭─[packages/provider-opencode/src/server/adapter.ts:3755:7] 2026-10-24T06:23:36.7663864Z 3754 │ 2026-10-24T06:23:36.7664147Z 3755 │ const layer: Layer.Layer = 2026-10-24T06:23:36.7664426Z ·  ──┬── 2026-10-24T06:23:36.7664660Z · ╰── 'layer' is declared here 2026-10-24T06:23:36.7664858Z 3756 │ Layer.effect( 2026-10-24T06:23:36.7664993Z ╰──── 2026-10-24T06:23:36.7665162Z  help: Consider removing this declaration. 2026-10-24T06:23:36.7665288Z 2026-10-24T06:23:36.7665552Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T06:23:36.7665947Z ╭─[apps/mobile/src/components/VideoPreviewModal.ios.tsx:63:55] 2026-10-24T06:23:36.7666161Z 61 │ }, []); 2026-10-24T06:23:36.7666295Z 62 │ useEffect(() => { 2026-10-24T06:23:36.7666448Z ·  ────┬──── 2026-10-24T06:23:36.7666666Z · ╰── This is the containing effect 2026-10-24T06:23:36.7666979Z 63 │ if (playbackUrl === null && resolvedUrl !== null) setPlaybackUrl(resolvedUrl); 2026-10-24T06:23:36.7668442Z ·  ───────┬────── 2026-10-24T06:23:36.7669096Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T06:23:36.7669464Z 64 │ }, [playbackUrl, resolvedUrl]); 2026-10-24T06:23:36.7669622Z ╰──── 2026-10-24T06:23:36.7670275Z  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-24T06:23:36.7671156Z  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-24T06:23:36.7671466Z 2026-10-24T06:23:36.7671685Z ⚠ eslint(no-unused-vars): Type 'ThreadRunSummary' is imported but never used. 2026-10-24T06:23:36.7671985Z ╭─[apps/web/src/types.ts:22:3] 2026-10-24T06:23:36.7672166Z 21 │ EnvironmentThreadShell, 2026-10-24T06:23:36.7672321Z 22 │ ThreadRunSummary, 2026-10-24T06:23:36.7672482Z ·  ────────┬─────── 2026-10-24T06:23:36.7672713Z · ╰── 'ThreadRunSummary' is imported here 2026-10-24T06:23:36.7672940Z 23 │ ThreadRuntimeSummary, 2026-10-24T06:23:36.7673080Z ╰──── 2026-10-24T06:23:36.7673228Z  help: Consider removing this import. 2026-10-24T06:23:36.7673341Z 2026-10-24T06:23:36.7673541Z ⚠ typescript(no-extraneous-class): Unexpected class with only a constructor. 2026-10-24T06:23:36.7673867Z ╭─[apps/desktop/src/preview/Manager.test.ts:158:18] 2026-10-24T06:23:36.7674099Z 157 │ BrowserWindow: browserWindowConstructor, 2026-10-24T06:23:36.7674379Z 158 │ ╭─▶ ClipboardItem: class { 2026-10-24T06:23:36.7674663Z 159 │ │ constructor(data: Record) { 2026-10-24T06:23:36.7674911Z 160 │ │ clipboardItemConstructor(data); 2026-10-24T06:23:36.7675108Z 161 │ │ } 2026-10-24T06:23:36.7675323Z 162 │ ╰─▶ }, 2026-10-24T06:23:36.7675512Z 163 │ clipboard: { 2026-10-24T06:23:36.7675644Z ╰──── 2026-10-24T06:23:36.7675862Z  help: Try replacing this class with a standalone function or deleting it entirely 2026-10-24T06:23:36.7676031Z 2026-10-24T06:23:36.7676173Z ⚠ react(refs): Cannot access refs during render 2026-10-24T06:23:36.7676443Z ╭─[apps/mobile/src/native/StackHeader.tsx:185:9] 2026-10-24T06:23:36.7676633Z 184 │ "options", 2026-10-24T06:23:36.7676849Z 185 │ latestOptionFunctionsRef.current, 2026-10-24T06:23:36.7677068Z ·  ────────────────┬─────────────── 2026-10-24T06:23:36.7677368Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T06:23:36.7678803Z 186 │ optionFunctionWrappersRef.current, 2026-10-24T06:23:36.7679057Z ╰──── 2026-10-24T06:23:36.7679869Z  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-24T06:23:36.7680816Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T06:23:36.7681343Z 2026-10-24T06:23:36.7681494Z ⚠ react(refs): Cannot access refs during render 2026-10-24T06:23:36.7681862Z ╭─[apps/mobile/src/native/StackHeader.tsx:186:9] 2026-10-24T06:23:36.7682205Z 185 │ latestOptionFunctionsRef.current, 2026-10-24T06:23:36.7682496Z 186 │ optionFunctionWrappersRef.current, 2026-10-24T06:23:36.7682720Z ·  ────────────────┬──────────────── 2026-10-24T06:23:36.7683014Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T06:23:36.7683285Z 187 │ ) as NativeStackNavigationOptions) 2026-10-24T06:23:36.7683443Z ╰──── 2026-10-24T06:23:36.7683949Z  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-24T06:23:36.7684643Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T06:23:36.7684914Z 2026-10-24T06:23:36.7685116Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T06:23:36.7685443Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:231:6] 2026-10-24T06:23:36.7685751Z 227 │ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents( 2026-10-24T06:23:36.7686009Z 228 │ nativeEventSnapshotsRef.current, 2026-10-24T06:23:36.7686206Z ·  ───────────┬─────────── 2026-10-24T06:23:36.7686804Z · ╰── 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-24T06:23:36.7687280Z 229 │ mostRecentEventCount, 2026-10-24T06:23:36.7687426Z 230 │ ); 2026-10-24T06:23:36.7687610Z 231 │ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]); 2026-10-24T06:23:36.7687875Z ·  ──────────────────────────┬────────────────────────── 2026-10-24T06:23:36.7688198Z · ╰── This dependency list is missing values used by the callback 2026-10-24T06:23:36.7688465Z 232 │ const assumedValue = props.value; 2026-10-24T06:23:36.7688614Z ╰──── 2026-10-24T06:23:36.7688843Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T06:23:36.7689319Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.7689610Z 2026-10-24T06:23:36.7689822Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T06:23:36.7690157Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:239:7] 2026-10-24T06:23:36.7690440Z 238 │ nativeEventSnapshotsRef.current = assumeComposerControlledState( 2026-10-24T06:23:36.7690680Z 239 │ nativeEventSnapshotsRef.current, 2026-10-24T06:23:36.7690940Z ·  ───────────┬─────────── 2026-10-24T06:23:36.7691607Z · ╰── 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-24T06:23:36.7692177Z 240 │ controlledEventCount, 2026-10-24T06:23:36.7692334Z 241 │ assumedValue, 2026-10-24T06:23:36.7692469Z 242 │ ); 2026-10-24T06:23:36.7692688Z 243 │ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]); 2026-10-24T06:23:36.7692980Z ·  ───────────┬────────── 2026-10-24T06:23:36.7693314Z · ╰── Unnecessary dependency `controlledDocumentJson` 2026-10-24T06:23:36.7693586Z 244 │ const acceptNativeEvent = useCallback( 2026-10-24T06:23:36.7693739Z ╰──── 2026-10-24T06:23:36.7694211Z  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-24T06:23:36.7694887Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.7695176Z 2026-10-24T06:23:36.7695318Z ⚠ react(refs): Cannot access refs during render 2026-10-24T06:23:36.7695598Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:29] 2026-10-24T06:23:36.7695861Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T06:23:36.7696105Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T06:23:36.7696342Z ·  ─────────────┬──────────── 2026-10-24T06:23:36.7696626Z · ╰── Cannot access ref value during render 2026-10-24T06:23:36.7696889Z 165 │ }); 2026-10-24T06:23:36.7697005Z ╰──── 2026-10-24T06:23:36.7697510Z  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-24T06:23:36.7698196Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T06:23:36.7698469Z 2026-10-24T06:23:36.7698610Z ⚠ react(refs): Cannot access refs during render 2026-10-24T06:23:36.7698889Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:29] 2026-10-24T06:23:36.7699208Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T06:23:36.7699520Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T06:23:36.7699760Z ·  ─────────────┬──────────── 2026-10-24T06:23:36.7700114Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T06:23:36.7700400Z 165 │ }); 2026-10-24T06:23:36.7700515Z ╰──── 2026-10-24T06:23:36.7701019Z  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-24T06:23:36.7701716Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T06:23:36.7701990Z 2026-10-24T06:23:36.7702130Z ⚠ react(refs): Cannot access refs during render 2026-10-24T06:23:36.7702407Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:166:23] 2026-10-24T06:23:36.7702605Z 165 │ }); 2026-10-24T06:23:36.7702757Z 166 │ confirmedTokensRef.current = tokens; 2026-10-24T06:23:36.7702984Z ·  ─────────┬────────────┬─── 2026-10-24T06:23:36.7703289Z · │ ╰── Cannot update ref value during render 2026-10-24T06:23:36.7703580Z · ╰── This value is a ref 2026-10-24T06:23:36.7703770Z 167 │ return JSON.stringify( 2026-10-24T06:23:36.7703916Z ╰──── 2026-10-24T06:23:36.7704429Z  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-24T06:23:36.7705128Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T06:23:36.7705402Z 2026-10-24T06:23:36.7705542Z ⚠ react(refs): Cannot access refs during render 2026-10-24T06:23:36.7705822Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:208:5] 2026-10-24T06:23:36.7706030Z 207 │ mostRecentEventCount, 2026-10-24T06:23:36.7706207Z 208 │ nativeEventSnapshotsRef.current, 2026-10-24T06:23:36.7706412Z ·  ───────────────┬─────────────── 2026-10-24T06:23:36.7706747Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T06:23:36.7706978Z 209 │ ); 2026-10-24T06:23:36.7707091Z ╰──── 2026-10-24T06:23:36.7707595Z  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-24T06:23:36.7708284Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T06:23:36.7708558Z 2026-10-24T06:23:36.7708695Z ⚠ react(refs): Cannot access refs during render 2026-10-24T06:23:36.7709044Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:214:5] 2026-10-24T06:23:36.7709325Z 213 │ mostRecentEventCount, 2026-10-24T06:23:36.7709502Z 214 │ nativeEventSnapshotsRef.current, 2026-10-24T06:23:36.7709704Z ·  ───────────────┬─────────────── 2026-10-24T06:23:36.7710075Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T06:23:36.7710304Z 215 │ ); 2026-10-24T06:23:36.7710413Z ╰──── 2026-10-24T06:23:36.7710923Z  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-24T06:23:36.7711622Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T06:23:36.7711895Z 2026-10-24T06:23:36.7712078Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T06:23:36.7712390Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:199:6] 2026-10-24T06:23:36.7712649Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T06:23:36.7712897Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T06:23:36.7713127Z ·  ─────────┬──────── 2026-10-24T06:23:36.7713695Z · ╰── 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-24T06:23:36.7714146Z 165 │ }); 2026-10-24T06:23:36.7714308Z 166 │ confirmedTokensRef.current = tokens; 2026-10-24T06:23:36.7714486Z 167 │ return JSON.stringify( 2026-10-24T06:23:36.7714734Z 168 │ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => { 2026-10-24T06:23:36.7714972Z 169 │ const record = 2026-10-24T06:23:36.7715134Z 170 │ token.type === "context" 2026-10-24T06:23:36.7715396Z 171 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-24T06:23:36.7715627Z 172 │ : undefined; 2026-10-24T06:23:36.7715821Z 173 │ const presentation = contextChipPresentation( 2026-10-24T06:23:36.7716049Z 174 │ token.type === "context" ? token.kind : token.type, 2026-10-24T06:23:36.7716240Z 175 │ record, 2026-10-24T06:23:36.7716374Z 176 │ ); 2026-10-24T06:23:36.7716531Z 177 │ const icon = contextChipIcon( 2026-10-24T06:23:36.7716741Z 178 │ presentation, 2026-10-24T06:23:36.7716976Z 179 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-24T06:23:36.7717182Z 180 │ ); 2026-10-24T06:23:36.7717309Z 181 │ return { 2026-10-24T06:23:36.7744937Z 182 │ type: token.type, 2026-10-24T06:23:36.7745130Z 183 │ source: token.source, 2026-10-24T06:23:36.7745314Z 184 │ start: token.start, 2026-10-24T06:23:36.7745472Z 185 │ end: token.end, 2026-10-24T06:23:36.7745713Z 186 │ accent: contextChipAccent(presentation.accent, theme, chipTextColor), 2026-10-24T06:23:36.7745942Z 187 │ label: 2026-10-24T06:23:36.7746098Z 188 │ token.type === "skill" 2026-10-24T06:23:36.7746311Z 189 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-24T06:23:36.7746703Z 190 │ : token.type === "context" 2026-10-24T06:23:36.7747141Z 191 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-24T06:23:36.7747444Z 192 │ : basename(token.value), 2026-10-24T06:23:36.7747689Z 193 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-24T06:23:36.7747930Z 194 │ iconUri: contextChipIconUri(icon), 2026-10-24T06:23:36.7748128Z 195 │ tintsIcon: icon.kind === "chip", 2026-10-24T06:23:36.7748289Z 196 │ }; 2026-10-24T06:23:36.7748409Z 197 │ }), 2026-10-24T06:23:36.7748534Z 198 │ ); 2026-10-24T06:23:36.7748726Z 199 │ }, [props.value, props.context, skillLabels, theme, chipTextColor]); 2026-10-24T06:23:36.7749027Z ·  ───────────────────────────────┬─────────────────────────────── 2026-10-24T06:23:36.7749388Z · ╰── This dependency list is missing values used by the callback 2026-10-24T06:23:36.7749726Z 200 │ // Every render resolves against the snapshot history, so a render whose 2026-10-24T06:23:36.7749926Z ╰──── 2026-10-24T06:23:36.7750281Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T06:23:36.7750794Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.7751089Z 2026-10-24T06:23:36.7751280Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T06:23:36.7751596Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:261:5] 2026-10-24T06:23:36.7751876Z 253 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-24T06:23:36.7752115Z 254 │ nativeEventSnapshotsRef.current.push({ 2026-10-24T06:23:36.7752324Z ·  ───────────┬─────────── 2026-10-24T06:23:36.7752880Z · ╰── 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-24T06:23:36.7753377Z 255 │ eventCount: acknowledgedEventCount, 2026-10-24T06:23:36.7753547Z 256 │ value, 2026-10-24T06:23:36.7753701Z 257 │ selection: nextSelection, 2026-10-24T06:23:36.7753855Z 258 │ }); 2026-10-24T06:23:36.7754112Z 259 │ return acknowledgedEventCount; 2026-10-24T06:23:36.7754285Z 260 │ }, 2026-10-24T06:23:36.7754401Z 261 │ [], 2026-10-24T06:23:36.7754537Z ·  ─┬ 2026-10-24T06:23:36.7754802Z · ╰── This dependency list is missing values used by the callback 2026-10-24T06:23:36.7755025Z 262 │ ); 2026-10-24T06:23:36.7755138Z ╰──── 2026-10-24T06:23:36.7755390Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T06:23:36.7755895Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.7756187Z 2026-10-24T06:23:36.7756377Z ⚠ eslint(no-unused-vars): Identifier 'Image' is imported but never used. 2026-10-24T06:23:36.7756726Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:17:10] 2026-10-24T06:23:36.7757071Z 16 │ import type { NativeSyntheticEvent, ViewProps } from "react-native"; 2026-10-24T06:23:36.7757359Z 17 │ import { Image, Platform, StyleSheet } from "react-native"; 2026-10-24T06:23:36.7757621Z ·  ──┬── 2026-10-24T06:23:36.7757836Z · ╰── 'Image' is imported here 2026-10-24T06:23:36.7758017Z 18 │ 2026-10-24T06:23:36.7758128Z ╰──── 2026-10-24T06:23:36.7758276Z  help: Consider removing this import. 2026-10-24T06:23:36.7758389Z 2026-10-24T06:23:36.7758586Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T06:23:36.7758915Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:229:6] 2026-10-24T06:23:36.7759216Z 225 │ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents( 2026-10-24T06:23:36.7759475Z 226 │ nativeEventSnapshotsRef.current, 2026-10-24T06:23:36.7759672Z ·  ───────────┬─────────── 2026-10-24T06:23:36.7760221Z · ╰── 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-24T06:23:36.7760691Z 227 │ mostRecentEventCount, 2026-10-24T06:23:36.7760831Z 228 │ ); 2026-10-24T06:23:36.7761010Z 229 │ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]); 2026-10-24T06:23:36.7761281Z ·  ──────────────────────────┬────────────────────────── 2026-10-24T06:23:36.7761616Z · ╰── This dependency list is missing values used by the callback 2026-10-24T06:23:36.7761888Z 230 │ const assumedValue = props.value; 2026-10-24T06:23:36.7762042Z ╰──── 2026-10-24T06:23:36.7762268Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T06:23:36.7762737Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.7763026Z 2026-10-24T06:23:36.7763239Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T06:23:36.7763576Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:237:7] 2026-10-24T06:23:36.7763864Z 236 │ nativeEventSnapshotsRef.current = assumeComposerControlledState( 2026-10-24T06:23:36.7764101Z 237 │ nativeEventSnapshotsRef.current, 2026-10-24T06:23:36.7764298Z ·  ───────────┬─────────── 2026-10-24T06:23:36.7764917Z · ╰── 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-24T06:23:36.7765426Z 238 │ controlledEventCount, 2026-10-24T06:23:36.7765578Z 239 │ assumedValue, 2026-10-24T06:23:36.7765723Z 240 │ ); 2026-10-24T06:23:36.7765939Z 241 │ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]); 2026-10-24T06:23:36.7766237Z ·  ───────────┬────────── 2026-10-24T06:23:36.7766571Z · ╰── Unnecessary dependency `controlledDocumentJson` 2026-10-24T06:23:36.7767002Z 242 │ const acceptNativeEvent = useCallback( 2026-10-24T06:23:36.7767295Z ╰──── 2026-10-24T06:23:36.7767792Z  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-24T06:23:36.7768489Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.7768783Z 2026-10-24T06:23:36.7768955Z ⚠ react(refs): Cannot access refs during render 2026-10-24T06:23:36.7769265Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29] 2026-10-24T06:23:36.7769555Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T06:23:36.7769806Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T06:23:36.7770074Z ·  ─────────────┬──────────── 2026-10-24T06:23:36.7770374Z · ╰── Cannot access ref value during render 2026-10-24T06:23:36.7770598Z 163 │ }); 2026-10-24T06:23:36.7770718Z ╰──── 2026-10-24T06:23:36.7771235Z  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-24T06:23:36.7771944Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T06:23:36.7772224Z 2026-10-24T06:23:36.7772377Z ⚠ react(refs): Cannot access refs during render 2026-10-24T06:23:36.7772674Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29] 2026-10-24T06:23:36.7772947Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T06:23:36.7773190Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T06:23:36.7773436Z ·  ─────────────┬──────────── 2026-10-24T06:23:36.7773766Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T06:23:36.7774015Z 163 │ }); 2026-10-24T06:23:36.7774132Z ╰──── 2026-10-24T06:23:36.7774745Z  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-24T06:23:36.7775500Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T06:23:36.7775779Z 2026-10-24T06:23:36.7775925Z ⚠ react(refs): Cannot access refs during render 2026-10-24T06:23:36.7776213Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:164:23] 2026-10-24T06:23:36.7776418Z 163 │ }); 2026-10-24T06:23:36.7776572Z 164 │ confirmedTokensRef.current = tokens; 2026-10-24T06:23:36.7776839Z ·  ─────────┬────────────┬─── 2026-10-24T06:23:36.7777159Z · │ ╰── Cannot update ref value during render 2026-10-24T06:23:36.7777457Z · ╰── This value is a ref 2026-10-24T06:23:36.7777666Z 165 │ return JSON.stringify( 2026-10-24T06:23:36.7777805Z ╰──── 2026-10-24T06:23:36.7778316Z  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-24T06:23:36.7779006Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T06:23:36.7779282Z 2026-10-24T06:23:36.7779426Z ⚠ react(refs): Cannot access refs during render 2026-10-24T06:23:36.7779714Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:206:5] 2026-10-24T06:23:36.7779934Z 205 │ mostRecentEventCount, 2026-10-24T06:23:36.7780113Z 206 │ nativeEventSnapshotsRef.current, 2026-10-24T06:23:36.7780329Z ·  ───────────────┬─────────────── 2026-10-24T06:23:36.7780627Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T06:23:36.7780865Z 207 │ ); 2026-10-24T06:23:36.7780977Z ╰──── 2026-10-24T06:23:36.7781483Z  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-24T06:23:36.7782174Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T06:23:36.7782446Z 2026-10-24T06:23:36.7782593Z ⚠ react(refs): Cannot access refs during render 2026-10-24T06:23:36.7782881Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:212:5] 2026-10-24T06:23:36.7783098Z 211 │ mostRecentEventCount, 2026-10-24T06:23:36.7783268Z 212 │ nativeEventSnapshotsRef.current, 2026-10-24T06:23:36.7783477Z ·  ───────────────┬─────────────── 2026-10-24T06:23:36.7783771Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T06:23:36.7784002Z 213 │ ); 2026-10-24T06:23:36.7784537Z ╰──── 2026-10-24T06:23:36.7785042Z  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-24T06:23:36.7785802Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T06:23:36.7786105Z 2026-10-24T06:23:36.7786291Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T06:23:36.7786608Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:197:6] 2026-10-24T06:23:36.7786918Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T06:23:36.7787163Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T06:23:36.7787401Z ·  ─────────┬──────── 2026-10-24T06:23:36.7787980Z · ╰── 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-24T06:23:36.7788442Z 163 │ }); 2026-10-24T06:23:36.7788593Z 164 │ confirmedTokensRef.current = tokens; 2026-10-24T06:23:36.7788784Z 165 │ return JSON.stringify( 2026-10-24T06:23:36.7789035Z 166 │ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => { 2026-10-24T06:23:36.7789272Z 167 │ const record = 2026-10-24T06:23:36.7789433Z 168 │ token.type === "context" 2026-10-24T06:23:36.7789694Z 169 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-24T06:23:36.7789928Z 170 │ : undefined; 2026-10-24T06:23:36.7790118Z 171 │ const presentation = contextChipPresentation( 2026-10-24T06:23:36.7790354Z 172 │ token.type === "context" ? token.kind : token.type, 2026-10-24T06:23:36.7790545Z 173 │ record, 2026-10-24T06:23:36.7790689Z 174 │ ); 2026-10-24T06:23:36.7790840Z 175 │ const icon = contextChipIcon( 2026-10-24T06:23:36.7791009Z 176 │ presentation, 2026-10-24T06:23:36.7791238Z 177 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-24T06:23:36.7791445Z 178 │ ); 2026-10-24T06:23:36.7791577Z 179 │ return { 2026-10-24T06:23:36.7791721Z 180 │ type: token.type, 2026-10-24T06:23:36.7791887Z 181 │ source: token.source, 2026-10-24T06:23:36.7792050Z 182 │ start: token.start, 2026-10-24T06:23:36.7792207Z 183 │ end: token.end, 2026-10-24T06:23:36.7792436Z 184 │ accent: contextChipAccent(presentation.accent, theme, chipTextColor), 2026-10-24T06:23:36.7792651Z 185 │ label: 2026-10-24T06:23:36.7808082Z 186 │ token.type === "skill" 2026-10-24T06:23:36.7808469Z 187 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-24T06:23:36.7808784Z 188 │ : token.type === "context" 2026-10-24T06:23:36.7809152Z 189 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-24T06:23:36.7809456Z 190 │ : basename(token.value), 2026-10-24T06:23:36.7809698Z 191 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-24T06:23:36.7809936Z 192 │ iconUri: contextChipIconUri(icon), 2026-10-24T06:23:36.7810131Z 193 │ tintsIcon: icon.kind === "chip", 2026-10-24T06:23:36.7810287Z 194 │ }; 2026-10-24T06:23:36.7810407Z 195 │ }), 2026-10-24T06:23:36.7810521Z 196 │ ); 2026-10-24T06:23:36.7810710Z 197 │ }, [props.value, props.context, skillLabels, theme, chipTextColor]); 2026-10-24T06:23:36.7811143Z ·  ───────────────────────────────┬─────────────────────────────── 2026-10-24T06:23:36.7811544Z · ╰── This dependency list is missing values used by the callback 2026-10-24T06:23:36.7811866Z 198 │ // Every render resolves against the snapshot history, so a render whose 2026-10-24T06:23:36.7812060Z ╰──── 2026-10-24T06:23:36.7812314Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T06:23:36.7812819Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.7813110Z 2026-10-24T06:23:36.7813299Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T06:23:36.7813631Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:259:5] 2026-10-24T06:23:36.7813909Z 251 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-24T06:23:36.7814151Z 252 │ nativeEventSnapshotsRef.current.push({ 2026-10-24T06:23:36.7814357Z ·  ───────────┬─────────── 2026-10-24T06:23:36.7814919Z · ╰── 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-24T06:23:36.7815421Z 253 │ eventCount: acknowledgedEventCount, 2026-10-24T06:23:36.7815591Z 254 │ value, 2026-10-24T06:23:36.7815743Z 255 │ selection: nextSelection, 2026-10-24T06:23:36.7815896Z 256 │ }); 2026-10-24T06:23:36.7816053Z 257 │ return acknowledgedEventCount; 2026-10-24T06:23:36.7816211Z 258 │ }, 2026-10-24T06:23:36.7816328Z 259 │ [], 2026-10-24T06:23:36.7816459Z ·  ─┬ 2026-10-24T06:23:36.7816767Z · ╰── This dependency list is missing values used by the callback 2026-10-24T06:23:36.7816995Z 260 │ ); 2026-10-24T06:23:36.7817106Z ╰──── 2026-10-24T06:23:36.7817366Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T06:23:36.7817871Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.7818159Z 2026-10-24T06:23:36.7818492Z ⚠ 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-24T06:23:36.7818941Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:50:18] 2026-10-24T06:23:36.7819254Z 49 │ for (const tool of ["sendMessage", "followupTask", "interruptAgent", "listAgents"]) { 2026-10-24T06:23:36.7819589Z 50 │ assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true); 2026-10-24T06:23:36.7819844Z ·  ───────── 2026-10-24T06:23:36.7820115Z 51 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true); 2026-10-24T06:23:36.7820350Z ╰──── 2026-10-24T06:23:36.7820407Z 2026-10-24T06:23:36.7820728Z ⚠ 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-24T06:23:36.7821223Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:51:18] 2026-10-24T06:23:36.7821563Z 50 │ assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true); 2026-10-24T06:23:36.7821904Z 51 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true); 2026-10-24T06:23:36.7822164Z ·  ───────── 2026-10-24T06:23:36.7822316Z 52 │ } 2026-10-24T06:23:36.7822426Z ╰──── 2026-10-24T06:23:36.7822482Z 2026-10-24T06:23:36.7822800Z ⚠ 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-24T06:23:36.7823228Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:55:5] 2026-10-24T06:23:36.7823439Z 54 │ assert.equal( 2026-10-24T06:23:36.7823689Z 55 │ Schema.is(CodexSchema.ServerNotification__CollabAgentToolCallStatus)("interrupted"), 2026-10-24T06:23:36.7823936Z ·  ───────── 2026-10-24T06:23:36.7824078Z 56 │ true, 2026-10-24T06:23:36.7824198Z ╰──── 2026-10-24T06:23:36.7824249Z 2026-10-24T06:23:36.7824571Z ⚠ 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-24T06:23:36.7825000Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:59:5] 2026-10-24T06:23:36.7825206Z 58 │ assert.equal( 2026-10-24T06:23:36.7825459Z 59 │ Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentToolCallStatus)("interrupted"), 2026-10-24T06:23:36.7825707Z ·  ───────── 2026-10-24T06:23:36.7825847Z 60 │ true, 2026-10-24T06:23:36.7825963Z ╰──── 2026-10-24T06:23:36.7826018Z 2026-10-24T06:23:36.7826340Z ⚠ 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-24T06:23:36.7826794Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:103:16] 2026-10-24T06:23:36.7827027Z 102 │ 2026-10-24T06:23:36.7827250Z 103 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse)(resumeResponse), true); 2026-10-24T06:23:36.7827502Z ·  ───────── 2026-10-24T06:23:36.7827656Z 104 │ }); 2026-10-24T06:23:36.7827763Z ╰──── 2026-10-24T06:23:36.7827820Z 2026-10-24T06:23:36.7828028Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T06:23:36.7828332Z ╭─[apps/mobile/src/Stack.tsx:1079:21] 2026-10-24T06:23:36.7828573Z 1078 │ } 2026-10-24T06:23:36.7829097Z ·  ───────────────────────────────────────────── 2026-10-24T06:23:36.7829315Z 1080 │ screenOptions={({ route }) => 2026-10-24T06:23:36.7829467Z ╰──── 2026-10-24T06:23:36.7829880Z  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-24T06:23:36.7830207Z 2026-10-24T06:23:36.7830656Z ⚠ 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-24T06:23:36.7831184Z ╭─[packages/contracts/src/baseSchemas.test.ts:39:9] 2026-10-24T06:23:36.7831391Z 38 │ JSON.stringify( 2026-10-24T06:23:36.7831595Z 39 │ Schema.encodeUnknownSync(Schema.toCodecJson(Named))([ 2026-10-24T06:23:36.7831823Z ·  ──────────────────────── 2026-10-24T06:23:36.7831994Z 40 │ { name: "a" }, 2026-10-24T06:23:36.7832126Z ╰──── 2026-10-24T06:23:36.7832183Z 2026-10-24T06:23:36.7832386Z ⚠ eslint(no-unused-vars): Identifier 'HostProcess' is imported but never used. 2026-10-24T06:23:36.7832745Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:25:13] 2026-10-24T06:23:36.7832996Z 24 │ import * as Schema from "effect/Schema"; 2026-10-24T06:23:36.7833212Z 25 │ import * as HostProcess from "@t3tools/shared/HostProcess"; 2026-10-24T06:23:36.7833427Z ·  ─────┬───── 2026-10-24T06:23:36.7833667Z · ╰── 'HostProcess' is imported here 2026-10-24T06:23:36.7833861Z 26 │ 2026-10-24T06:23:36.7833970Z ╰──── 2026-10-24T06:23:36.7834120Z  help: Consider removing this import. 2026-10-24T06:23:36.7834230Z 2026-10-24T06:23:36.7834501Z ⚠ eslint(no-unused-vars): Variable 'serverConfig' is declared but never used. Unused variables should start with a '_'. 2026-10-24T06:23:36.7834914Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:124:11] 2026-10-24T06:23:36.7835165Z 123 │ const path = yield* Path.Path; 2026-10-24T06:23:36.7835387Z 124 │ const serverConfig = yield* ServerConfig.ServerConfig; 2026-10-24T06:23:36.7835596Z ·  ──────┬───── 2026-10-24T06:23:36.7835827Z · ╰── 'serverConfig' is declared here 2026-10-24T06:23:36.7836117Z 125 │ const serverSettings = yield* ServerSettings.ServerSettingsService; 2026-10-24T06:23:36.7836325Z ╰──── 2026-10-24T06:23:36.7836488Z  help: Consider removing this declaration. 2026-10-24T06:23:36.7836607Z 2026-10-24T06:23:36.7836912Z ⚠ eslint(no-unused-vars): Variable 'serverSettings' is declared but never used. Unused variables should start with a '_'. 2026-10-24T06:23:36.7837335Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:125:11] 2026-10-24T06:23:36.7837734Z 124 │ const serverConfig = yield* ServerConfig.ServerConfig; 2026-10-24T06:23:36.7838006Z 125 │ const serverSettings = yield* ServerSettings.ServerSettingsService; 2026-10-24T06:23:36.7838237Z ·  ───────┬────── 2026-10-24T06:23:36.7838552Z · ╰── 'serverSettings' is declared here 2026-10-24T06:23:36.7838871Z 126 │ const gitWorkflow = yield* GitWorkflowService.GitWorkflowService; 2026-10-24T06:23:36.7839074Z ╰──── 2026-10-24T06:23:36.7839226Z  help: Consider removing this declaration. 2026-10-24T06:23:36.7839340Z 2026-10-24T06:23:36.7839511Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T06:23:36.7839816Z ╭─[apps/web/src/components/chat/useThreadLifecycle.tsx:178:58] 2026-10-24T06:23:36.7840077Z 177 │ if (snoozeClockState.shell !== activeThreadShell) { 2026-10-24T06:23:36.7840356Z 178 │ setSnoozeClockState({ shell: activeThreadShell, now: new Date().toISOString() }); 2026-10-24T06:23:36.7840646Z ·  ─────┬──── 2026-10-24T06:23:36.7840942Z · ╰── Cannot call impure function 2026-10-24T06:23:36.7841159Z 179 │ } 2026-10-24T06:23:36.7841270Z ╰──── 2026-10-24T06:23:36.7841600Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T06:23:36.7842154Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T06:23:36.7842431Z 2026-10-24T06:23:36.7842674Z ⚠ eslint(no-unused-vars): Function 'normalizeTerminalContextSelection' is declared but never used. 2026-10-24T06:23:36.7843015Z ╭─[apps/web/src/lib/terminalContext.ts:56:10] 2026-10-24T06:23:36.7843192Z 55 │ 2026-10-24T06:23:36.7843391Z 56 │ function normalizeTerminalContextSelection( 2026-10-24T06:23:36.7843620Z ·  ────────────────┬──────────────── 2026-10-24T06:23:36.7843926Z · ╰── 'normalizeTerminalContextSelection' is declared here 2026-10-24T06:23:36.7844193Z 57 │ selection: TerminalContextSelection, 2026-10-24T06:23:36.7844355Z ╰──── 2026-10-24T06:23:36.7844510Z  help: Consider removing this declaration. 2026-10-24T06:23:36.7844627Z 2026-10-24T06:23:36.7844820Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T06:23:36.7845148Z ╭─[apps/mobile/src/components/ComposerContextSheet.tsx:267:25] 2026-10-24T06:23:36.7845406Z 266 │ {record.elements?.map((element, index) => ( 2026-10-24T06:23:36.7845689Z 267 │ 2026-10-24T06:23:36.7846022Z ·  ─────────────────────────────────────────────────────── 2026-10-24T06:23:36.7846248Z 268 │ { 2026-10-24T06:23:36.7861287Z 181 │ const wire = Schema.encodeUnknownSync(Schema.toCodecJson(OrchestrationMessageContext))({ 2026-10-24T06:23:36.7861577Z ·  ──────────────────────── 2026-10-24T06:23:36.7861751Z 182 │ version: 1, 2026-10-24T06:23:36.7861882Z ╰──── 2026-10-24T06:23:36.7861934Z 2026-10-24T06:23:36.7862295Z ⚠ 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-24T06:23:36.7862730Z ╭─[packages/contracts/src/auth.test.ts:17:12] 2026-10-24T06:23:36.7863013Z 16 │ it("decodes legacy review credentials without offering them in new grants", () => { 2026-10-24T06:23:36.7863342Z 17 │ expect(Schema.decodeUnknownSync(AuthEnvironmentScopes)(["review:write"])).toEqual([ 2026-10-24T06:23:36.7863610Z ·  ──────────────────────── 2026-10-24T06:23:36.7863786Z 18 │ "review:write", 2026-10-24T06:23:36.7863919Z ╰──── 2026-10-24T06:23:36.7863973Z 2026-10-24T06:23:36.7864326Z ⚠ 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-24T06:23:36.7864757Z ╭─[packages/contracts/src/auth.test.ts:20:18] 2026-10-24T06:23:36.7864932Z 19 │ ]); 2026-10-24T06:23:36.7865155Z 20 │ expect(() => Schema.decodeUnknownSync(AuthGrantScopes)(["review:write"])).toThrow(); 2026-10-24T06:23:36.7865491Z ·  ──────────────────────── 2026-10-24T06:23:36.7865769Z 21 │ expect(AuthStandardClientScopes).not.toContain("review:write"); 2026-10-24T06:23:36.7865956Z ╰──── 2026-10-24T06:23:36.7866010Z 2026-10-24T06:23:36.7866363Z ⚠ 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-24T06:23:36.7866822Z ╭─[packages/contracts/src/auth.test.ts:58:21] 2026-10-24T06:23:36.7867107Z 57 │ it("ignores unknown response permissions without falling back to broader scopes", () => { 2026-10-24T06:23:36.7867399Z 58 │ const session = Schema.decodeUnknownSync(AuthSessionState)({ 2026-10-24T06:23:36.7867640Z ·  ──────────────────────── 2026-10-24T06:23:36.7867819Z 59 │ authenticated: true, 2026-10-24T06:23:36.7867954Z ╰──── 2026-10-24T06:23:36.7868010Z 2026-10-24T06:23:36.7868210Z ⚠ eslint(no-unused-vars): Identifier 'Duration' is imported but never used. 2026-10-24T06:23:36.7868534Z ╭─[packages/provider-pi/src/server/adapter.test.ts:24:13] 2026-10-24T06:23:36.7868768Z 23 │ import * as Deferred from "effect/Deferred"; 2026-10-24T06:23:36.7868966Z 24 │ import * as Duration from "effect/Duration"; 2026-10-24T06:23:36.7869148Z ·  ────┬─── 2026-10-24T06:23:36.7869377Z · ╰── 'Duration' is imported here 2026-10-24T06:23:36.7869595Z 25 │ import * as Effect from "effect/Effect"; 2026-10-24T06:23:36.7869745Z ╰──── 2026-10-24T06:23:36.7869891Z  help: Consider removing this import. 2026-10-24T06:23:36.7870002Z 2026-10-24T06:23:36.7870270Z ⚠ eslint(no-unused-vars): Variable 'layerDaemon' is declared but never used. Unused variables should start with a '_'. 2026-10-24T06:23:36.7870661Z ╭─[apps/server/src/orchestration-v2/EffectWorker.ts:914:7] 2026-10-24T06:23:36.7870856Z 913 │ 2026-10-24T06:23:36.7871109Z 914 │ const layerDaemon: Layer.Layer = Layer.effectDiscard( 2026-10-24T06:23:36.7871378Z ·  ─────┬───── 2026-10-24T06:23:36.7871607Z · ╰── 'layerDaemon' is declared here 2026-10-24T06:23:36.7871828Z 915 │ runDaemon.pipe(Effect.forkScoped), 2026-10-24T06:23:36.7871984Z ╰──── 2026-10-24T06:23:36.7872140Z  help: Consider removing this declaration. 2026-10-24T06:23:36.7872257Z 2026-10-24T06:23:36.7872510Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T06:23:36.7872880Z ╭─[packages/provider-pi/src/server/adapter.ts:3405:7] 2026-10-24T06:23:36.7873075Z 3404 │ 2026-10-24T06:23:36.7873319Z 3405 │ const layer: Layer.Layer = 2026-10-24T06:23:36.7873579Z ·  ──┬── 2026-10-24T06:23:36.7873788Z · ╰── 'layer' is declared here 2026-10-24T06:23:36.7873982Z 3406 │ Layer.effect( 2026-10-24T06:23:36.7874113Z ╰──── 2026-10-24T06:23:36.7874266Z  help: Consider removing this declaration. 2026-10-24T06:23:36.7874383Z 2026-10-24T06:23:36.7874633Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T06:23:36.7875094Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts:10578:7] 2026-10-24T06:23:36.7875358Z 10577 │ 2026-10-24T06:23:36.7875488Z 10578 │ const layer: Layer.Layer< 2026-10-24T06:23:36.7875651Z ·  ──┬── 2026-10-24T06:23:36.7875859Z · ╰── 'layer' is declared here 2026-10-24T06:23:36.7876083Z 10579 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T06:23:36.7876244Z ╰──── 2026-10-24T06:23:36.7876404Z  help: Consider removing this declaration. 2026-10-24T06:23:36.7876519Z 2026-10-24T06:23:36.7876885Z ⚠ eslint(no-unused-vars): Variable 'layerCodexAppServerClientFactoryCommand' is declared but never used. Unused variables should start with a '_'. 2026-10-24T06:23:36.7877346Z ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1444:7] 2026-10-24T06:23:36.7878277Z 1443 │ 2026-10-24T06:23:36.7878455Z 1444 │ const layerCodexAppServerClientFactoryCommand = ( 2026-10-24T06:23:36.7878705Z ·  ───────────────────┬─────────────────── 2026-10-24T06:23:36.7879027Z · ╰── 'layerCodexAppServerClientFactoryCommand' is declared here 2026-10-24T06:23:36.7879341Z 1445 │ options: CodexClient.CodexAppServerClientOptions & { 2026-10-24T06:23:36.7879524Z ╰──── 2026-10-24T06:23:36.7879679Z  help: Consider removing this declaration. 2026-10-24T06:23:36.7879795Z 2026-10-24T06:23:36.7880044Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T06:23:36.7880441Z ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1680:7] 2026-10-24T06:23:36.7880651Z 1679 │ 2026-10-24T06:23:36.7880788Z 1680 │ const layer: Layer.Layer< 2026-10-24T06:23:36.7880948Z ·  ──┬── 2026-10-24T06:23:36.7881157Z · ╰── 'layer' is declared here 2026-10-24T06:23:36.7881375Z 1681 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T06:23:36.7881534Z ╰──── 2026-10-24T06:23:36.7881688Z  help: Consider removing this declaration. 2026-10-24T06:23:36.7881802Z 2026-10-24T06:23:36.7882051Z ⚠ eslint(no-unused-vars): Function 'layerClaudeAgentSdkReplayQueryRunner' is declared but never used. 2026-10-24T06:23:36.7882462Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.testkit.ts:960:10] 2026-10-24T06:23:36.7882690Z 959 │ 2026-10-24T06:23:36.7882860Z 960 │ function layerClaudeAgentSdkReplayQueryRunner( 2026-10-24T06:23:36.7883094Z ·  ──────────────────┬───────────────── 2026-10-24T06:23:36.7883414Z · ╰── 'layerClaudeAgentSdkReplayQueryRunner' is declared here 2026-10-24T06:23:36.7883702Z 961 │ transcript: ClaudeAgentSdkReplayTranscript, 2026-10-24T06:23:36.7883871Z ╰──── 2026-10-24T06:23:36.7884023Z  help: Consider removing this declaration. 2026-10-24T06:23:36.7884138Z 2026-10-24T06:23:36.7884319Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T06:23:36.7884628Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:121:27] 2026-10-24T06:23:36.7884927Z 120 │ const scope = makeScope(options.capabilities ?? new Set(["preview", "worktree"])); 2026-10-24T06:23:36.7885178Z 121 │ const dispatch = vi.fn((_: unknown) => 2026-10-24T06:23:36.7885368Z ·  ┬ 2026-10-24T06:23:36.7885671Z · ╰── '_' is declared here 2026-10-24T06:23:36.7885947Z 122 │ (options.dispatchGate ?? Effect.void).pipe( 2026-10-24T06:23:36.7886112Z ╰──── 2026-10-24T06:23:36.7886266Z  help: Consider removing this parameter. 2026-10-24T06:23:36.7886388Z 2026-10-24T06:23:36.7886568Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T06:23:36.7886924Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:134:39] 2026-10-24T06:23:36.7887122Z 133 │ ); 2026-10-24T06:23:36.7887286Z 134 │ const listLocalBranchNames = vi.fn((_: string) => 2026-10-24T06:23:36.7887503Z ·  ┬ 2026-10-24T06:23:36.7887746Z · ╰── '_' is declared here 2026-10-24T06:23:36.7887960Z 135 │ Effect.succeed( 2026-10-24T06:23:36.7888093Z ╰──── 2026-10-24T06:23:36.7888249Z  help: Consider removing this parameter. 2026-10-24T06:23:36.7888361Z 2026-10-24T06:23:36.7888543Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T06:23:36.7888854Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:178:31] 2026-10-24T06:23:36.7889051Z 177 │ }); 2026-10-24T06:23:36.7889214Z 178 │ const sendToThread = vi.fn((_: unknown) => { 2026-10-24T06:23:36.7889413Z ·  ┬ 2026-10-24T06:23:36.7889646Z · ╰── '_' is declared here 2026-10-24T06:23:36.7889879Z 179 │ switch (options.continuation ?? "queued") { 2026-10-24T06:23:36.7890044Z ╰──── 2026-10-24T06:23:36.7890209Z  help: Consider removing this parameter. 2026-10-24T06:23:36.7890328Z 2026-10-24T06:23:36.7890508Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T06:23:36.7890821Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:203:33] 2026-10-24T06:23:36.7891013Z 202 │ ); 2026-10-24T06:23:36.7891173Z 203 │ const removeWorktree = vi.fn((_: unknown) => 2026-10-24T06:23:36.7891372Z ·  ┬ 2026-10-24T06:23:36.7891610Z · ╰── '_' is declared here 2026-10-24T06:23:36.7891822Z 204 │ options.removeWorktreeFails 2026-10-24T06:23:36.7891973Z ╰──── 2026-10-24T06:23:36.7892124Z  help: Consider removing this parameter. 2026-10-24T06:23:36.7892239Z 2026-10-24T06:23:36.7892424Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T06:23:36.7892736Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:208:36] 2026-10-24T06:23:36.7892927Z 207 │ ); 2026-10-24T06:23:36.7893089Z 208 │ const deleteLocalBranch = vi.fn((_: unknown) => 2026-10-24T06:23:36.7893298Z ·  ┬ 2026-10-24T06:23:36.7893540Z · ╰── '_' is declared here 2026-10-24T06:23:36.7893757Z 209 │ options.deleteLocalBranchFails 2026-10-24T06:23:36.7893912Z ╰──── 2026-10-24T06:23:36.7894063Z  help: Consider removing this parameter. 2026-10-24T06:23:36.7894176Z 2026-10-24T06:23:36.7894354Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T06:23:36.7894722Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:213:42] 2026-10-24T06:23:36.7894959Z 212 │ ); 2026-10-24T06:23:36.7895132Z 213 │ const fetchWorktreeBaseCommit = vi.fn((_: unknown) => 2026-10-24T06:23:36.7895356Z ·  ┬ 2026-10-24T06:23:36.7895603Z · ╰── '_' is declared here 2026-10-24T06:23:36.7895823Z 214 │ options.fetchWorktreeBaseFails 2026-10-24T06:23:36.7895975Z ╰──── 2026-10-24T06:23:36.7896129Z  help: Consider removing this parameter. 2026-10-24T06:23:36.7896243Z 2026-10-24T06:23:36.7896422Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T06:23:36.7896764Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:254:30] 2026-10-24T06:23:36.7896964Z 253 │ ); 2026-10-24T06:23:36.7897122Z 254 │ const localStatus = vi.fn((_: unknown) => 2026-10-24T06:23:36.7897321Z ·  ┬ 2026-10-24T06:23:36.7897551Z · ╰── '_' is declared here 2026-10-24T06:23:36.7897751Z 255 │ Effect.succeed({ 2026-10-24T06:23:36.7897886Z ╰──── 2026-10-24T06:23:36.7898042Z  help: Consider removing this parameter. 2026-10-24T06:23:36.7898155Z 2026-10-24T06:23:36.7898339Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T06:23:36.7898652Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:264:32] 2026-10-24T06:23:36.7898843Z 263 │ ); 2026-10-24T06:23:36.7899050Z 264 │ const refreshStatus = vi.fn((_: string) => Effect.die("refreshStatus stub")); 2026-10-24T06:23:36.7899297Z ·  ┬ 2026-10-24T06:23:36.7899534Z · ╰── '_' is declared here 2026-10-24T06:23:36.7899811Z 265 │ const runForThread = vi.fn((input: { readonly worktreePath: string }) => { 2026-10-24T06:23:36.7900016Z ╰──── 2026-10-24T06:23:36.7900171Z  help: Consider removing this parameter. 2026-10-24T06:23:36.7900285Z 2026-10-24T06:23:36.7900571Z ⚠ eslint(no-unused-vars): Variable 'revokeActiveMcpThread' is declared but never used. Unused variables should start with a '_'. 2026-10-24T06:23:36.7900970Z ╭─[apps/server/src/mcp/McpSessionRegistry.ts:218:7] 2026-10-24T06:23:36.7901153Z 217 │ 2026-10-24T06:23:36.7901363Z 218 │ const revokeActiveMcpThread = (threadId: ThreadId): Effect.Effect => 2026-10-24T06:23:36.7901610Z ·  ──────────┬────────── 2026-10-24T06:23:36.7901871Z · ╰── 'revokeActiveMcpThread' is declared here 2026-10-24T06:23:36.7902217Z 219 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeThread(threadId) : Effect.void; 2026-10-24T06:23:36.7902461Z ╰──── 2026-10-24T06:23:36.7902616Z  help: Consider removing this declaration. 2026-10-24T06:23:36.7902734Z 2026-10-24T06:23:36.7903040Z ⚠ eslint(no-unused-vars): Variable 'revokeAllActiveMcpCredentials' is declared but never used. Unused variables should start with a '_'. 2026-10-24T06:23:36.7903449Z ╭─[apps/server/src/mcp/McpSessionRegistry.ts:221:7] 2026-10-24T06:23:36.7903639Z 220 │ 2026-10-24T06:23:36.7903829Z 221 │ const revokeAllActiveMcpCredentials = (): Effect.Effect => 2026-10-24T06:23:36.7904072Z ·  ──────────────┬────────────── 2026-10-24T06:23:36.7904413Z · ╰── 'revokeAllActiveMcpCredentials' is declared here 2026-10-24T06:23:36.7904776Z 222 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeAll : Effect.void; 2026-10-24T06:23:36.7904998Z ╰──── 2026-10-24T06:23:36.7905153Z  help: Consider removing this declaration. 2026-10-24T06:23:36.7905270Z 2026-10-24T06:23:36.7905525Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T06:23:36.7905950Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:119:10] 2026-10-24T06:23:36.7906193Z 117 │ 2026-10-24T06:23:36.7906320Z 118 │ useEffect(() => { 2026-10-24T06:23:36.7906478Z ·  ────┬──── 2026-10-24T06:23:36.7906700Z · ╰── This is the containing effect 2026-10-24T06:23:36.7906956Z 119 │ void refreshNotifications(); 2026-10-24T06:23:36.7907148Z ·  ──────────┬───────── 2026-10-24T06:23:36.7907428Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T06:23:36.7907738Z 120 │ const subscription = AppState.addEventListener("change", (state) => { 2026-10-24T06:23:36.7907945Z ╰──── 2026-10-24T06:23:36.7908591Z  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-24T06:23:36.7909442Z  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-24T06:23:36.7909742Z 2026-10-24T06:23:36.7909997Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T06:23:36.7910425Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:128:7] 2026-10-24T06:23:36.7910661Z 125 │ 2026-10-24T06:23:36.7910794Z 126 │ useEffect(() => { 2026-10-24T06:23:36.7910947Z ·  ────┬──── 2026-10-24T06:23:36.7911163Z · ╰── This is the containing effect 2026-10-24T06:23:36.7911362Z 127 │ if (!isLoaded) { 2026-10-24T06:23:36.7911532Z 128 │ setLiveActivityStatus("checking"); 2026-10-24T06:23:36.7911730Z ·  ──────────┬────────── 2026-10-24T06:23:36.7912057Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T06:23:36.7912321Z 129 │ return; 2026-10-24T06:23:36.7912445Z ╰──── 2026-10-24T06:23:36.7913085Z  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-24T06:23:36.7913923Z  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-24T06:23:36.7914222Z 2026-10-24T06:23:36.7914389Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T06:23:36.7914706Z ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:372:47] 2026-10-24T06:23:36.7914995Z 371 │ const { open, onOpenChange, onSnooze, timestampFormat } = props; 2026-10-24T06:23:36.7915288Z 372 │ const presets = open ? resolveSnoozePresets(new Date(), timestampFormat) : []; 2026-10-24T06:23:36.7915568Z ·  ─────┬──── 2026-10-24T06:23:36.7915849Z · ╰── Cannot call impure function 2026-10-24T06:23:36.7916065Z 373 │ return ( 2026-10-24T06:23:36.7916184Z ╰──── 2026-10-24T06:23:36.7916515Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T06:23:36.7917100Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T06:23:36.7917447Z 2026-10-24T06:23:36.7917658Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T06:23:36.7917968Z ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:853:39] 2026-10-24T06:23:36.7918217Z 852 │ if (snoozeGateClock.thread !== thread) { 2026-10-24T06:23:36.7918456Z 853 │ setSnoozeGateClock({ thread, now: new Date().toISOString() }); 2026-10-24T06:23:36.7918705Z ·  ─────┬──── 2026-10-24T06:23:36.7918975Z · ╰── Cannot call impure function 2026-10-24T06:23:36.7919183Z 854 │ } 2026-10-24T06:23:36.7919295Z ╰──── 2026-10-24T06:23:36.7919634Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T06:23:36.7920187Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T06:23:36.7920464Z 2026-10-24T06:23:36.7920703Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T06:23:36.7921084Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:290:50] 2026-10-24T06:23:36.7921306Z 289 │ return ( 2026-10-24T06:23:36.7921508Z 290 │ 2026-10-24T06:23:36.7921775Z ·  ───────────── 2026-10-24T06:23:36.7921970Z 291 │ {props.children} 2026-10-24T06:23:36.7922111Z ╰──── 2026-10-24T06:23:36.7922467Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T06:23:36.7922862Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T06:23:36.7923039Z 2026-10-24T06:23:36.7923277Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T06:23:36.7923656Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:654:44] 2026-10-24T06:23:36.7923872Z 653 │ return ( 2026-10-24T06:23:36.7924057Z 654 │ 2026-10-24T06:23:36.7924306Z ·  ───────────── 2026-10-24T06:23:36.7924494Z 655 │ {props.children} 2026-10-24T06:23:36.7924634Z ╰──── 2026-10-24T06:23:36.7924908Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T06:23:36.7925264Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T06:23:36.7925441Z 2026-10-24T06:23:36.7925670Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T06:23:36.7926051Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:1462:55] 2026-10-24T06:23:36.7926270Z 1461 │ return ( 2026-10-24T06:23:36.7926502Z 1462 │ 2026-10-24T06:23:36.7926850Z ·  ──────────────────── 2026-10-24T06:23:36.7927077Z 1463 │ item.type === "assistant_message").at(-1)?.text, 2026-10-24T06:23:36.7929383Z ·  ────── 2026-10-24T06:23:36.7929557Z 1999 │ "authoritative answer", 2026-10-24T06:23:36.7929710Z ╰──── 2026-10-24T06:23:36.7929944Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T06:23:36.7930120Z 2026-10-24T06:23:36.7930586Z ⚠ 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-24T06:23:36.7931171Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:3951:7] 2026-10-24T06:23:36.7931525Z 3950 │ const closeFiber = yield* Scope.close(sessionScope, Exit.void).pipe(Effect.forkScoped); 2026-10-24T06:23:36.7931916Z 3951 │ ╭─▶ while (!responseLifecycle.includes("failed")) { 2026-10-24T06:23:36.7932278Z 3952 │ │ yield* Effect.yieldNow; 2026-10-24T06:23:36.7932567Z 3953 │ ╰─▶ } 2026-10-24T06:23:36.7932820Z 3954 │ const responseExit = yield* Fiber.join(responseFiber); 2026-10-24T06:23:36.7933008Z ╰──── 2026-10-24T06:23:36.7933066Z 2026-10-24T06:23:36.7933526Z ⚠ 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-24T06:23:36.7934106Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6062:9] 2026-10-24T06:23:36.7934359Z 6061 │ .pipe(Effect.forkScoped); 2026-10-24T06:23:36.7934654Z 6062 │ ╭─▶ while (promptGates.length < 1) { 2026-10-24T06:23:36.7934935Z 6063 │ │ yield* Effect.yieldNow; 2026-10-24T06:23:36.7935195Z 6064 │ ╰─▶ } 2026-10-24T06:23:36.7935503Z 6065 │ assert.isDefined(sessionUpdateHandler, "session update handler must be wired"); 2026-10-24T06:23:36.7935726Z ╰──── 2026-10-24T06:23:36.7935782Z 2026-10-24T06:23:36.7936231Z ⚠ 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-24T06:23:36.7936839Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6197:9] 2026-10-24T06:23:36.7937086Z 6196 │ .pipe(Effect.forkScoped); 2026-10-24T06:23:36.7937370Z 6197 │ ╭─▶ while (promptGates.length < 2) { 2026-10-24T06:23:36.7937653Z 6198 │ │ yield* Effect.yieldNow; 2026-10-24T06:23:36.7937909Z 6199 │ ╰─▶ } 2026-10-24T06:23:36.7938211Z 6200 │ if (sessionUpdateHandler === undefined || capturedMutation.current === null) { 2026-10-24T06:23:36.7938435Z ╰──── 2026-10-24T06:23:36.7938494Z 2026-10-24T06:23:36.7938637Z ⚠ react(refs): Cannot access refs during render 2026-10-24T06:23:36.7938937Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:152:27] 2026-10-24T06:23:36.7939279Z 151 │ 2026-10-24T06:23:36.7939535Z 152 │ {props.children(open)} 2026-10-24T06:23:36.7939729Z ·  ──┬─ 2026-10-24T06:23:36.7939990Z · ╰── Cannot access ref value during render 2026-10-24T06:23:36.7940202Z 153 │ 2026-10-24T06:23:36.7940327Z ╰──── 2026-10-24T06:23:36.7940845Z  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-24T06:23:36.7941555Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T06:23:36.7941829Z 2026-10-24T06:23:36.7942074Z ⚠ react(memo-dependencies): Found missing/extra memoization dependencies 2026-10-24T06:23:36.7942440Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:140:9] 2026-10-24T06:23:36.7942669Z 139 │ if (action.id !== undefined) { 2026-10-24T06:23:36.7942845Z 140 │ props.onPressAction?.({ 2026-10-24T06:23:36.7943015Z ·  ──┬── 2026-10-24T06:23:36.7943237Z · ╰── Missing dependency `props` 2026-10-24T06:23:36.7943464Z 141 │ nativeEvent: { event: action.id }, 2026-10-24T06:23:36.7943716Z 142 │ } as Parameters>[0]); 2026-10-24T06:23:36.7943922Z 143 │ } 2026-10-24T06:23:36.7944040Z 144 │ }, 2026-10-24T06:23:36.7944185Z 145 │ [close, props.onPressAction], 2026-10-24T06:23:36.7944378Z ·  ─────────┬───────── 2026-10-24T06:23:36.7944703Z · ╰── Overly precise dependency `props.onPressAction`, use `props` instead 2026-10-24T06:23:36.7944957Z 146 │ ); 2026-10-24T06:23:36.7945071Z ╰──── 2026-10-24T06:23:36.7945595Z  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-24T06:23:36.7946334Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.7946631Z 2026-10-24T06:23:36.7947116Z ⚠ 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-24T06:23:36.7947643Z ╭─[apps/server/src/assets/AssetAccess.test.ts:1043:32] 2026-10-24T06:23:36.7947919Z 1042 │ expect(error._tag).toBe("AssetGitHubMediaUrlValidationError"); 2026-10-24T06:23:36.7948254Z 1043 │ const encoded = yield* Schema.encodeEffect(Schema.fromJsonString(AssetAccessError))(error); 2026-10-24T06:23:36.7948555Z ·  ─────────────────── 2026-10-24T06:23:36.7948766Z 1044 │ expect(encoded).not.toContain(url); 2026-10-24T06:23:36.7948923Z ╰──── 2026-10-24T06:23:36.7948981Z 2026-10-24T06:23:36.7949169Z ⚠ eslint(require-yield): This generator function does not have `yield` 2026-10-24T06:23:36.7949497Z ╭─[packages/provider-acp/src/server/mcpOverAcpBridge.ts:81:78] 2026-10-24T06:23:36.7949709Z  80 │ 2026-10-24T06:23:36.7950046Z  81 │ ╭─▶ export const makeAcpMcpOverAcpBridge = Effect.fn("AcpMcpOverAcpBridge.make")(function* ( 2026-10-24T06:23:36.7950419Z  82 │ │ options: AcpMcpOverAcpBridgeOptions, 2026-10-24T06:23:36.7950671Z  83 │ │ ): Effect.fn.Return { 2026-10-24T06:23:36.7950970Z  84 │ │ const fetchImplementation = options.fetchImplementation ?? fetch; 2026-10-24T06:23:36.7951270Z  85 │ │ const connections = new Map(); 2026-10-24T06:23:36.7951482Z  86 │ │ 2026-10-24T06:23:36.7951778Z  87 │ │ const connectionFor = (connectionId: string): Effect.Effect => 2026-10-24T06:23:36.7952084Z  88 │ │ Effect.suspend(() => { 2026-10-24T06:23:36.7952388Z  89 │ │ const connection = connections.get(connectionId); 2026-10-24T06:23:36.7952676Z  90 │ │ return connection === undefined 2026-10-24T06:23:36.7953005Z  91 │ │ ? Effect.fail(new AcpMcpOverAcpError(`Unknown MCP-over-ACP connection "${connectionId}".`)) 2026-10-24T06:23:36.7953317Z  92 │ │ : Effect.succeed(connection); 2026-10-24T06:23:36.7953509Z  93 │ │ }); 2026-10-24T06:23:36.7953667Z  94 │ │ 2026-10-24T06:23:36.7953838Z  95 │ │ const send = ( 2026-10-24T06:23:36.7954040Z  96 │ │ connection: Connection, 2026-10-24T06:23:36.7954244Z  97 │ │ message: unknown, 2026-10-24T06:23:36.7954510Z  98 │ │ ): Effect.Effect, AcpMcpOverAcpError> => 2026-10-24T06:23:36.7954790Z  99 │ │ connection.mutex.withPermits(1)( 2026-10-24T06:23:36.7955018Z 100 │ │ Effect.gen(function* () { 2026-10-24T06:23:36.7955261Z 101 │ │ const body = JSON.stringify(message); 2026-10-24T06:23:36.7955534Z 102 │ │ if (Buffer.byteLength(body) > MAX_MESSAGE_BYTES) { 2026-10-24T06:23:36.7955893Z 103 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("MCP-over-ACP message exceeds 8 MiB.")); 2026-10-24T06:23:36.7956176Z 104 │ │ } 2026-10-24T06:23:36.7956407Z 105 │ │ const response = yield* Effect.tryPromise({ 2026-10-24T06:23:36.7956645Z 106 │ │ try: (signal) => 2026-10-24T06:23:36.7956929Z 107 │ │ fetchImplementation(options.endpoint, { 2026-10-24T06:23:36.7957167Z 108 │ │ method: "POST", 2026-10-24T06:23:36.7957370Z 109 │ │ signal, 2026-10-24T06:23:36.7957725Z 110 │ │ headers: { 2026-10-24T06:23:36.7957958Z 111 │ │ "content-type": "application/json", 2026-10-24T06:23:36.7958236Z 112 │ │ accept: "application/json, text/event-stream", 2026-10-24T06:23:36.7958510Z 113 │ │ authorization: options.authorization, 2026-10-24T06:23:36.7958773Z 114 │ │ ...(connection.sessionId === null 2026-10-24T06:23:36.7958998Z 115 │ │ ? {} 2026-10-24T06:23:36.7959334Z 116 │ │ : { "mcp-session-id": connection.sessionId }), 2026-10-24T06:23:36.7959650Z 117 │ │ ...(connection.protocolVersion === null 2026-10-24T06:23:36.7959881Z 118 │ │ ? {} 2026-10-24T06:23:36.7960152Z 119 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-24T06:23:36.7960402Z 120 │ │ }, 2026-10-24T06:23:36.7960592Z 121 │ │ body, 2026-10-24T06:23:36.7960780Z 122 │ │ }), 2026-10-24T06:23:36.7960981Z 123 │ │ catch: bridgeError, 2026-10-24T06:23:36.7961177Z 124 │ │ }); 2026-10-24T06:23:36.7961489Z 125 │ │ connection.sessionId = response.headers.get("mcp-session-id") ?? connection.sessionId; 2026-10-24T06:23:36.7961796Z 126 │ │ if (!response.ok) { 2026-10-24T06:23:36.7962013Z 127 │ │ yield* Effect.promise( 2026-10-24T06:23:36.7962313Z 128 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-24T06:23:36.7962577Z 129 │ │ ); 2026-10-24T06:23:36.7962788Z 130 │ │ return yield* Effect.fail( 2026-10-24T06:23:36.7963126Z 131 │ │ new AcpMcpOverAcpError(`T3 Code MCP endpoint responded with HTTP ${response.status}.`), 2026-10-24T06:23:36.7963406Z 132 │ │ ); 2026-10-24T06:23:36.7963584Z 133 │ │ } 2026-10-24T06:23:36.7963893Z 134 │ │ const payloads = [...(yield* Stream.runCollect(responsePayloads(response, bridgeError)))]; 2026-10-24T06:23:36.7964223Z 135 │ │ for (const payload of payloads) { 2026-10-24T06:23:36.7964567Z 136 │ │ connection.protocolVersion = protocolVersionOf(payload) ?? connection.protocolVersion; 2026-10-24T06:23:36.7964858Z 137 │ │ } 2026-10-24T06:23:36.7965056Z 138 │ │ return payloads; 2026-10-24T06:23:36.7965293Z 139 │ │ }).pipe(Effect.mapError(bridgeError)), 2026-10-24T06:23:36.7965502Z 140 │ │ ); 2026-10-24T06:23:36.7965669Z 141 │ │ 2026-10-24T06:23:36.7965931Z 142 │ │ const disconnect = Effect.fn("mcpOverAcpBridge.disconnect")(function* ( 2026-10-24T06:23:36.7966236Z 143 │ │ request: AcpSchema.DisconnectMcpRequest, 2026-10-24T06:23:36.7966561Z 144 │ │ ): Effect.fn.Return { 2026-10-24T06:23:36.7966962Z 145 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T06:23:36.7967250Z 146 │ │ connections.delete(request.connectionId); 2026-10-24T06:23:36.7967507Z 147 │ │ const sessionId = connection.sessionId; 2026-10-24T06:23:36.7967744Z 148 │ │ if (sessionId !== null) { 2026-10-24T06:23:36.7967988Z 149 │ │ const response = yield* Effect.tryPromise({ 2026-10-24T06:23:36.7968226Z 150 │ │ try: (signal) => 2026-10-24T06:23:36.7968462Z 151 │ │ fetchImplementation(options.endpoint, { 2026-10-24T06:23:36.7968763Z 152 │ │ method: "DELETE", 2026-10-24T06:23:36.7968998Z 153 │ │ signal, 2026-10-24T06:23:36.7969203Z 154 │ │ headers: { 2026-10-24T06:23:36.7969441Z 155 │ │ authorization: options.authorization, 2026-10-24T06:23:36.7974732Z 156 │ │ "mcp-session-id": sessionId, 2026-10-24T06:23:36.7975021Z 157 │ │ ...(connection.protocolVersion === null 2026-10-24T06:23:36.7975253Z 158 │ │ ? {} 2026-10-24T06:23:36.7975516Z 159 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-24T06:23:36.7975759Z 160 │ │ }, 2026-10-24T06:23:36.7975934Z 161 │ │ }), 2026-10-24T06:23:36.7976135Z 162 │ │ catch: bridgeError, 2026-10-24T06:23:36.7976326Z 163 │ │ }); 2026-10-24T06:23:36.7976550Z 164 │ │ if (!response.ok && response.status !== 404) { 2026-10-24T06:23:36.7976842Z 165 │ │ return yield* Effect.fail( 2026-10-24T06:23:36.7977067Z 166 │ │ new AcpMcpOverAcpError( 2026-10-24T06:23:36.7977370Z 167 │ │ `T3 Code MCP endpoint rejected disconnect with HTTP ${response.status}.`, 2026-10-24T06:23:36.7977625Z 168 │ │ ), 2026-10-24T06:23:36.7977796Z 169 │ │ ); 2026-10-24T06:23:36.7977962Z 170 │ │ } 2026-10-24T06:23:36.7978154Z 171 │ │ yield* Effect.promise( 2026-10-24T06:23:36.7978450Z 172 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-24T06:23:36.7978703Z 173 │ │ ); 2026-10-24T06:23:36.7978869Z 174 │ │ } 2026-10-24T06:23:36.7979046Z 175 │ │ return {}; 2026-10-24T06:23:36.7979215Z 176 │ │ }); 2026-10-24T06:23:36.7979371Z 177 │ │ 2026-10-24T06:23:36.7979535Z 178 │ │ return { 2026-10-24T06:23:36.7979799Z 179 │ │ connect: Effect.fn("mcpOverAcpBridge.connect")(function* (request) { 2026-10-24T06:23:36.7980092Z 180 │ │ if (request.serverId !== "t3-code") { 2026-10-24T06:23:36.7980329Z 181 │ │ return yield* Effect.fail( 2026-10-24T06:23:36.7980643Z 182 │ │ new AcpMcpOverAcpError(`Unknown ACP MCP server "${request.serverId}".`), 2026-10-24T06:23:36.7980908Z 183 │ │ ); 2026-10-24T06:23:36.7981076Z 184 │ │ } 2026-10-24T06:23:36.7981299Z 185 │ │ if (connections.size >= MAX_CONNECTIONS) { 2026-10-24T06:23:36.7981646Z 186 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("Too many MCP-over-ACP connections.")); 2026-10-24T06:23:36.7981923Z 187 │ │ } 2026-10-24T06:23:36.7982171Z 188 │ │ const connectionId = yield* options.allocateConnectionId; 2026-10-24T06:23:36.7982441Z 189 │ │ connections.set(connectionId, { 2026-10-24T06:23:36.7982685Z 190 │ │ mutex: yield* Semaphore.make(1), 2026-10-24T06:23:36.7982910Z 191 │ │ sessionId: null, 2026-10-24T06:23:36.7983207Z 192 │ │ protocolVersion: null, 2026-10-24T06:23:36.7983463Z 193 │ │ nextRequestId: 0, 2026-10-24T06:23:36.7983651Z 194 │ │ }); 2026-10-24T06:23:36.7983850Z 195 │ │ return { connectionId }; 2026-10-24T06:23:36.7984040Z 196 │ │ }), 2026-10-24T06:23:36.7984300Z 197 │ │ message: Effect.fn("mcpOverAcpBridge.message")(function* (request) { 2026-10-24T06:23:36.7984633Z 198 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T06:23:36.7984921Z 199 │ │ const id = ++connection.nextRequestId; 2026-10-24T06:23:36.7985179Z 200 │ │ const payloads = yield* send(connection, { 2026-10-24T06:23:36.7985421Z 201 │ │ jsonrpc: "2.0", 2026-10-24T06:23:36.7985615Z 202 │ │ id, 2026-10-24T06:23:36.7985816Z 203 │ │ method: request.method, 2026-10-24T06:23:36.7986093Z 204 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-24T06:23:36.7986333Z 205 │ │ }); 2026-10-24T06:23:36.7986611Z 206 │ │ const response = payloads.find((payload) => asEnvelope(payload)?.id === id); 2026-10-24T06:23:36.7986944Z 207 │ │ const envelope = asEnvelope(response); 2026-10-24T06:23:36.7987177Z 208 │ │ if (envelope === null) { 2026-10-24T06:23:36.7987469Z 209 │ │ return yield* Effect.fail( 2026-10-24T06:23:36.7987782Z 210 │ │ new AcpMcpOverAcpError("MCP server did not return a matching response."), 2026-10-24T06:23:36.7988044Z 211 │ │ ); 2026-10-24T06:23:36.7988212Z 212 │ │ } 2026-10-24T06:23:36.7988419Z 213 │ │ if (envelope.error !== undefined) { 2026-10-24T06:23:36.7988743Z 214 │ │ return yield* Effect.fail(new AcpMcpOverAcpError(errorMessage(envelope.error))); 2026-10-24T06:23:36.7989008Z 215 │ │ } 2026-10-24T06:23:36.7989268Z 216 │ │ return (envelope.result ?? null) as AcpSchema.MessageMcpResponse; 2026-10-24T06:23:36.7989510Z 217 │ │ }), 2026-10-24T06:23:36.7989793Z 218 │ │ notification: Effect.fn("mcpOverAcpBridge.notification")(function* (request) { 2026-10-24T06:23:36.7990144Z 219 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T06:23:36.7990417Z 220 │ │ yield* send(connection, { 2026-10-24T06:23:36.7990628Z 221 │ │ jsonrpc: "2.0", 2026-10-24T06:23:36.7990842Z 222 │ │ method: request.method, 2026-10-24T06:23:36.7991114Z 223 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-24T06:23:36.7991355Z 224 │ │ }); 2026-10-24T06:23:36.7991522Z 225 │ │ }), 2026-10-24T06:23:36.7991697Z 226 │ │ disconnect, 2026-10-24T06:23:36.7991907Z 227 │ │ dispose: Effect.suspend(() => 2026-10-24T06:23:36.7992125Z 228 │ │ Effect.forEach( 2026-10-24T06:23:36.7992342Z 229 │ │ [...connections.keys()], 2026-10-24T06:23:36.7992680Z 230 │ │ (connectionId) => disconnect({ connectionId }).pipe(Effect.ignore), 2026-10-24T06:23:36.7992984Z 231 │ │ { discard: true }, 2026-10-24T06:23:36.7993169Z 232 │ │ ), 2026-10-24T06:23:36.7993340Z 233 │ │ ), 2026-10-24T06:23:36.7993506Z 234 │ │ }; 2026-10-24T06:23:36.7993724Z 235 │ ╰─▶ }); 2026-10-24T06:23:36.7993910Z ╰──── 2026-10-24T06:23:36.7994219Z  help: Add a `yield` expression inside the generator body, or convert it to a regular function if iteration behavior is not needed. 2026-10-24T06:23:36.7994457Z 2026-10-24T06:23:36.7994676Z ⚠ eslint(no-unused-vars): Function 'summarizePayload' is declared but never used. 2026-10-24T06:23:36.7995024Z ╭─[packages/provider-acp/src/server/nativeLogging.ts:22:10] 2026-10-24T06:23:36.7995227Z 21 │ 2026-10-24T06:23:36.7995447Z 22 │ function summarizePayload(payload: unknown): Readonly> { 2026-10-24T06:23:36.7995702Z ·  ────────┬─────── 2026-10-24T06:23:36.7995949Z · ╰── 'summarizePayload' is declared here 2026-10-24T06:23:36.7996200Z 23 │ if (payload === null) return { valueType: "null" }; 2026-10-24T06:23:36.7996367Z ╰──── 2026-10-24T06:23:36.7996527Z  help: Consider removing this declaration. 2026-10-24T06:23:36.7996645Z 2026-10-24T06:23:36.7996930Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T06:23:36.7997359Z ╭─[apps/mobile/src/features/threads/thread-inspector-content-stack.tsx:60:5] 2026-10-24T06:23:36.7997733Z 58 │ 2026-10-24T06:23:36.7997857Z 59 │ useEffect(() => { 2026-10-24T06:23:36.7998009Z ·  ────┬──── 2026-10-24T06:23:36.7998221Z · ╰── This is the containing effect 2026-10-24T06:23:36.7998432Z 60 │ setMountedModes((current) => { 2026-10-24T06:23:36.7998610Z ·  ───────┬─────── 2026-10-24T06:23:36.7998870Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T06:23:36.7999116Z 61 │ if (current.has(props.mode)) { 2026-10-24T06:23:36.7999264Z ╰──── 2026-10-24T06:23:36.7999922Z  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-24T06:23:36.8000778Z  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-24T06:23:36.8001081Z 2026-10-24T06:23:36.8001337Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T06:23:36.8001743Z ╭─[apps/server/src/orchestration-v2/ThreadPullRequestService.ts:413:7] 2026-10-24T06:23:36.8001967Z 412 │ 2026-10-24T06:23:36.8002153Z 413 │ const layer = Layer.effect(ThreadPullRequestServiceV2, make); 2026-10-24T06:23:36.8002365Z ·  ──┬── 2026-10-24T06:23:36.8002570Z · ╰── 'layer' is declared here 2026-10-24T06:23:36.8002829Z ╰──── 2026-10-24T06:23:36.8003109Z  help: Consider removing this declaration. 2026-10-24T06:23:36.8003225Z 2026-10-24T06:23:36.8003390Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T06:23:36.8003693Z ╭─[apps/web/src/components/CustomSnoozeDialog.tsx:140:58] 2026-10-24T06:23:36.8003963Z 139 │ {...(weekStartsOn === undefined ? {} : { weekStartsOn })} 2026-10-24T06:23:36.8004245Z 140 │ disabled={{ before: new Date(new Date().setHours(0, 0, 0, 0)) }} 2026-10-24T06:23:36.8004516Z ·  ─────┬──── 2026-10-24T06:23:36.8004811Z · ╰── Cannot call impure function 2026-10-24T06:23:36.8005071Z 141 │ onSelect={(selected) => { 2026-10-24T06:23:36.8005238Z ╰──── 2026-10-24T06:23:36.8005568Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T06:23:36.8006126Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T06:23:36.8006405Z 2026-10-24T06:23:36.8006605Z ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed 2026-10-24T06:23:36.8006959Z ╭─[packages/contracts/src/rpc.ts:297:8] 2026-10-24T06:23:36.8007140Z 296 │ } from "./device.ts"; 2026-10-24T06:23:36.8007319Z 297 │ import {} from "./previewAutomation.ts"; 2026-10-24T06:23:36.8007495Z ·  ── 2026-10-24T06:23:36.8007643Z 298 │ import { 2026-10-24T06:23:36.8007763Z ╰──── 2026-10-24T06:23:36.8007898Z  help: Remove empty braces 2026-10-24T06:23:36.8007998Z 2026-10-24T06:23:36.8008274Z ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'. 2026-10-24T06:23:36.8008663Z ╭─[packages/provider-cursor/src/server/auth.ts:249:20] 2026-10-24T06:23:36.8008857Z 248 │ }, 2026-10-24T06:23:36.8009000Z 249 │ (effect, flow, stopSessions) => 2026-10-24T06:23:36.8009188Z ·  ──────┬───── 2026-10-24T06:23:36.8009432Z · ╰── 'stopSessions' is declared here 2026-10-24T06:23:36.8009645Z 250 │ effect.pipe( 2026-10-24T06:23:36.8009778Z ╰──── 2026-10-24T06:23:36.8009941Z  help: Consider removing this parameter. 2026-10-24T06:23:36.8010058Z 2026-10-24T06:23:36.8010315Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T06:23:36.8010727Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:79:5] 2026-10-24T06:23:36.8010951Z 76 │ 2026-10-24T06:23:36.8011075Z 77 │ useEffect(() => { 2026-10-24T06:23:36.8011226Z ·  ────┬──── 2026-10-24T06:23:36.8011442Z · ╰── This is the containing effect 2026-10-24T06:23:36.8011705Z 78 │ const { host, code } = parsePairingUrl(connectionPairingUrl); 2026-10-24T06:23:36.8011909Z 79 │ setHostInput(host); 2026-10-24T06:23:36.8012069Z ·  ──────┬───── 2026-10-24T06:23:36.8012392Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T06:23:36.8012652Z 80 │ setCodeInput(code); 2026-10-24T06:23:36.8012787Z ╰──── 2026-10-24T06:23:36.8013432Z  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-24T06:23:36.8014277Z  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-24T06:23:36.8014576Z 2026-10-24T06:23:36.8014830Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T06:23:36.8015243Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:89:5] 2026-10-24T06:23:36.8015469Z 82 │ 2026-10-24T06:23:36.8015588Z 83 │ useEffect(() => { 2026-10-24T06:23:36.8015735Z ·  ────┬──── 2026-10-24T06:23:36.8015944Z · ╰── This is the containing effect 2026-10-24T06:23:36.8016164Z 84 │ if (routePairingUrl.length === 0) { 2026-10-24T06:23:36.8016323Z 85 │ return; 2026-10-24T06:23:36.8016447Z 86 │ } 2026-10-24T06:23:36.8016557Z 87 │ 2026-10-24T06:23:36.8016741Z 88 │ const { host, code } = parsePairingUrl(routePairingUrl); 2026-10-24T06:23:36.8016964Z 89 │ setHostInput(host); 2026-10-24T06:23:36.8017122Z ·  ──────┬───── 2026-10-24T06:23:36.8017374Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T06:23:36.8017606Z 90 │ setCodeInput(code); 2026-10-24T06:23:36.8017744Z ╰──── 2026-10-24T06:23:36.8018382Z  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-24T06:23:36.8019226Z  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-24T06:23:36.8019528Z 2026-10-24T06:23:36.8019780Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T06:23:36.8020235Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:95:7] 2026-10-24T06:23:36.8020484Z 92 │ 2026-10-24T06:23:36.8020600Z 93 │ useEffect(() => { 2026-10-24T06:23:36.8020744Z ·  ────┬──── 2026-10-24T06:23:36.8020956Z · ╰── This is the containing effect 2026-10-24T06:23:36.8021168Z 94 │ if (pairingConnectionError) { 2026-10-24T06:23:36.8021343Z 95 │ setIsSubmitting(false); 2026-10-24T06:23:36.8021513Z ·  ───────┬─────── 2026-10-24T06:23:36.8021773Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T06:23:36.8021827Z 96 │ } 2026-10-24T06:23:36.8021877Z ╰──── 2026-10-24T06:23:36.8022463Z  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-24T06:23:36.8022780Z  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-24T06:23:36.8022783Z 2026-10-24T06:23:36.8022938Z ⚠ react(immutability): This value cannot be modified 2026-10-24T06:23:36.8023092Z ╭─[apps/mobile/src/features/connection/ConnectionStatusDot.tsx:58:7] 2026-10-24T06:23:36.8023189Z 53 │ function usePulseAnimation(pulse: boolean) { 2026-10-24T06:23:36.8023279Z 54 │ const pulseProgress = useSharedValue(0); 2026-10-24T06:23:36.8023358Z ·  ──────┬────── 2026-10-24T06:23:36.8023498Z · ╰── `pulseProgress` originates here 2026-10-24T06:23:36.8023552Z 55 │ 2026-10-24T06:23:36.8023614Z 56 │ useEffect(() => { 2026-10-24T06:23:36.8023677Z 57 │ if (pulse) { 2026-10-24T06:23:36.8023760Z 58 │ pulseProgress.value = withRepeat( 2026-10-24T06:23:36.8023837Z ·  ──────┬────── 2026-10-24T06:23:36.8023976Z · ╰── `pulseProgress` cannot be modified 2026-10-24T06:23:36.8024041Z 59 │ withTiming(1, { 2026-10-24T06:23:36.8024089Z ╰──── 2026-10-24T06:23:36.8024351Z  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-24T06:23:36.8024653Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T06:23:36.8024655Z 2026-10-24T06:23:36.8024801Z ⚠ react(refs): Cannot access refs during render 2026-10-24T06:23:36.8024958Z ╭─[apps/mobile/src/features/diffs/nativeReviewDiffSurface.ts:277:39] 2026-10-24T06:23:36.8025009Z 276 │ 2026-10-24T06:23:36.8025190Z 277 │ ╭─▶ return createElement(RawNativeView, { 2026-10-24T06:23:36.8025281Z 278 │ │ ...nativeProps, 2026-10-24T06:23:36.8025426Z 279 │ │ refreshEnabled: props.onPullToRefresh !== undefined, 2026-10-24T06:23:36.8025514Z 280 │ │ ref: nativeRef, 2026-10-24T06:23:36.8025643Z 281 │ ├─▶ }); 2026-10-24T06:23:36.8025928Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T06:23:36.8026019Z 282 │ } 2026-10-24T06:23:36.8026067Z ╰──── 2026-10-24T06:23:36.8026534Z  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-24T06:23:36.8026856Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T06:23:36.8026858Z 2026-10-24T06:23:36.8027137Z ⚠ eslint(no-unused-vars): Variable 'legacyCredentials' is declared but never used. Unused variables should start with a '_'. 2026-10-24T06:23:36.8027292Z ╭─[packages/provider-cursor/src/server/credentialStore.test.ts:15:7] 2026-10-24T06:23:36.8027346Z 14 │ 2026-10-24T06:23:36.8027421Z 15 │ const legacyCredentials = { 2026-10-24T06:23:36.8027503Z ·  ────────┬──────── 2026-10-24T06:23:36.8027646Z · ╰── 'legacyCredentials' is declared here 2026-10-24T06:23:36.8027711Z 16 │ version: 1 as const, 2026-10-24T06:23:36.8027762Z ╰──── 2026-10-24T06:23:36.8027865Z  help: Consider removing this declaration. 2026-10-24T06:23:36.8027867Z 2026-10-24T06:23:36.8028119Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T06:23:36.8028265Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:57:5] 2026-10-24T06:23:36.8028318Z 55 │ 2026-10-24T06:23:36.8028382Z 56 │ useEffect(() => { 2026-10-24T06:23:36.8028455Z ·  ────┬──── 2026-10-24T06:23:36.8028583Z · ╰── This is the containing effect 2026-10-24T06:23:36.8028651Z 57 │ setDecodedSize(null); 2026-10-24T06:23:36.8028728Z ·  ───────┬────── 2026-10-24T06:23:36.8028893Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T06:23:36.8028959Z 58 │ }, [props.sourceKey]); 2026-10-24T06:23:36.8029009Z ╰──── 2026-10-24T06:23:36.8029590Z  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-24T06:23:36.8029910Z  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-24T06:23:36.8029915Z 2026-10-24T06:23:36.8030166Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T06:23:36.8030312Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:61:5] 2026-10-24T06:23:36.8030363Z 59 │ 2026-10-24T06:23:36.8030425Z 60 │ useEffect(() => { 2026-10-24T06:23:36.8030493Z ·  ────┬──── 2026-10-24T06:23:36.8030615Z · ╰── This is the containing effect 2026-10-24T06:23:36.8030679Z 61 │ setFailedUri(null); 2026-10-24T06:23:36.8030753Z ·  ──────┬───── 2026-10-24T06:23:36.8030960Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T06:23:36.8031055Z 62 │ }, [props.uri]); 2026-10-24T06:23:36.8031105Z ╰──── 2026-10-24T06:23:36.8031689Z  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-24T06:23:36.8032003Z  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-24T06:23:36.8032006Z 2026-10-24T06:23:36.8032215Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-24T06:23:36.8032367Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:7:10] 2026-10-24T06:23:36.8032493Z 6 │ import { parse, SvgAst, type JsxAST } from "react-native-svg"; 2026-10-24T06:23:36.8032667Z 7 │ import { ActivityIndicator, Pressable, StyleSheet, View, type ViewStyle } from "react-native"; 2026-10-24T06:23:36.8032754Z ·  ────────┬──────── 2026-10-24T06:23:36.8032899Z · ╰── 'ActivityIndicator' is imported here 2026-10-24T06:23:36.8032952Z 8 │ 2026-10-24T06:23:36.8033003Z ╰──── 2026-10-24T06:23:36.8033099Z  help: Consider removing this import. 2026-10-24T06:23:36.8033103Z 2026-10-24T06:23:36.8033299Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T06:23:36.8033447Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:58:7] 2026-10-24T06:23:36.8033520Z 57 │ setDecodedSize(null); 2026-10-24T06:23:36.8033592Z 58 │ }, [props.sourceKey]); 2026-10-24T06:23:36.8033673Z ·  ───────┬─────── 2026-10-24T06:23:36.8033823Z · ╰── Unnecessary dependency `props.sourceKey` 2026-10-24T06:23:36.8033872Z 59 │ 2026-10-24T06:23:36.8033923Z ╰──── 2026-10-24T06:23:36.8034208Z  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-24T06:23:36.8034514Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.8034517Z 2026-10-24T06:23:36.8034713Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T06:23:36.8034865Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:62:7] 2026-10-24T06:23:36.8034932Z 61 │ setFailedUri(null); 2026-10-24T06:23:36.8034996Z 62 │ }, [props.uri]); 2026-10-24T06:23:36.8035068Z ·  ────┬──── 2026-10-24T06:23:36.8035206Z · ╰── Unnecessary dependency `props.uri` 2026-10-24T06:23:36.8035254Z 63 │ 2026-10-24T06:23:36.8035304Z ╰──── 2026-10-24T06:23:36.8035589Z  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-24T06:23:36.8035893Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.8035895Z 2026-10-24T06:23:36.8036162Z ⚠ eslint(no-unused-vars): Function 'assertUserMessagesExclude' is declared but never used. 2026-10-24T06:23:36.8036353Z ╭─[apps/server/src/orchestration-v2/testkit/fixtures/shared.ts:1398:10] 2026-10-24T06:23:36.8036406Z 1397 │ 2026-10-24T06:23:36.8036492Z 1398 │ function assertUserMessagesExclude( 2026-10-24T06:23:36.8036595Z ·  ────────────┬──────────── 2026-10-24T06:23:36.8036788Z · ╰── 'assertUserMessagesExclude' is declared here 2026-10-24T06:23:36.8036895Z 1399 │ projection: OrchestrationV2ThreadProjection, 2026-10-24T06:23:36.8036949Z ╰──── 2026-10-24T06:23:36.8037050Z  help: Consider removing this declaration. 2026-10-24T06:23:36.8037053Z 2026-10-24T06:23:36.8037611Z ⚠ 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-24T06:23:36.8037740Z ╭─[packages/effect-acp/src/errors.test.ts:129:28] 2026-10-24T06:23:36.8037833Z 128 │ const secret = "acp-summary-secret"; 2026-10-24T06:23:36.8037942Z 129 │ const cause = yield* Schema.decodeUnknownEffect( 2026-10-24T06:23:36.8038059Z ·  ────────────────────────── 2026-10-24T06:23:36.8038127Z 130 │ Schema.Struct({ 2026-10-24T06:23:36.8038181Z ╰──── 2026-10-24T06:23:36.8038184Z 2026-10-24T06:23:36.8038379Z ⚠ eslint(no-unsafe-optional-chaining): Unsafe usage of optional chaining 2026-10-24T06:23:36.8038540Z ╭─[apps/server/src/orchestration-v2/ThreadLaunchService.test.ts:1783:8] 2026-10-24T06:23:36.8038611Z 1782 │ assert.equal( 2026-10-24T06:23:36.8038759Z 1783 │ (stored.context?.records[0] as { attachmentId: string }).attachmentId, 2026-10-24T06:23:36.8038861Z ·  ────────────────────────── 2026-10-24T06:23:36.8038939Z 1784 │ stored.attachments[0]?.id, 2026-10-24T06:23:36.8038990Z ╰──── 2026-10-24T06:23:36.8039161Z  help: If this short-circuits with 'undefined' the evaluation will throw TypeError 2026-10-24T06:23:36.8039163Z 2026-10-24T06:23:36.8039611Z ⚠ 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-24T06:23:36.8039736Z ╭─[packages/effect-acp/src/protocol.test.ts:500:31] 2026-10-24T06:23:36.8039786Z 499 │ 2026-10-24T06:23:36.8039903Z 500 │ const response = yield* Schema.decodeUnknownEffect( 2026-10-24T06:23:36.8040019Z ·  ────────────────────────── 2026-10-24T06:23:36.8040125Z 501 │ Schema.fromJsonString(JsonRpcErrorResponse), 2026-10-24T06:23:36.8040173Z ╰──── 2026-10-24T06:23:36.8040176Z 2026-10-24T06:23:36.8040357Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T06:23:36.8040515Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:100:85] 2026-10-24T06:23:36.8040614Z  99 │ const startEditor = startScheduledTaskEditor; 2026-10-24T06:23:36.8040796Z 100 │ const resetEditor = useCallback(() => startEditor(defaultEditor), [defaultEditor, startEditor]); 2026-10-24T06:23:36.8040939Z ·  ─────┬───── 2026-10-24T06:23:36.8041209Z · ╰── Unnecessary dependency `startEditor` 2026-10-24T06:23:36.8041328Z 101 │ const readEditor = useCallback( 2026-10-24T06:23:36.8041376Z ╰──── 2026-10-24T06:23:36.8041688Z  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-24T06:23:36.8041995Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.8041998Z 2026-10-24T06:23:36.8042175Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T06:23:36.8042335Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:121:7] 2026-10-24T06:23:36.8042398Z 120 │ setEditor, 2026-10-24T06:23:36.8042462Z 121 │ startEditor, 2026-10-24T06:23:36.8042537Z ·  ─────┬───── 2026-10-24T06:23:36.8042678Z · ╰── Unnecessary dependency `startEditor` 2026-10-24T06:23:36.8042740Z 122 │ hasChanges, 2026-10-24T06:23:36.8042792Z ╰──── 2026-10-24T06:23:36.8043097Z  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-24T06:23:36.8043404Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.8043406Z 2026-10-24T06:23:36.8043668Z ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'. 2026-10-24T06:23:36.8043801Z ╭─[apps/server/src/telemetry/AnalyticsService.ts:340:7] 2026-10-24T06:23:36.8043856Z 339 │ 2026-10-24T06:23:36.8043957Z 340 │ const layerTest = AnalyticsService.layerTest; 2026-10-24T06:23:36.8044028Z ·  ────┬──── 2026-10-24T06:23:36.8044157Z · ╰── 'layerTest' is declared here 2026-10-24T06:23:36.8044208Z ╰──── 2026-10-24T06:23:36.8044311Z  help: Consider removing this declaration. 2026-10-24T06:23:36.8044313Z 2026-10-24T06:23:36.8044679Z ⚠ 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-24T06:23:36.8044840Z ╭─[packages/effect-acp/src/client.ts:1269:11] 2026-10-24T06:23:36.8045016Z 1268 │ extNotificationHandlers.set(CLIENT_METHODS.mcp_message, (params) => 2026-10-24T06:23:36.8045186Z 1269 │ Schema.decodeUnknownEffect(AcpSchemaV2.MessageMcpNotification)(params).pipe( 2026-10-24T06:23:36.8045289Z ·  ────────────────────────── 2026-10-24T06:23:36.8045429Z 1270 │ Effect.mapError(() => AcpError.AcpRequestError.invalidParams()), 2026-10-24T06:23:36.8045484Z ╰──── 2026-10-24T06:23:36.8045487Z 2026-10-24T06:23:36.8045811Z ⚠ 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-24T06:23:36.8045928Z ╭─[packages/effect-acp/src/schema.test.ts:18:12] 2026-10-24T06:23:36.8046090Z 17 │ const command = { name: "plan", description: "Make a plan", input: { hint: "Task" } }; 2026-10-24T06:23:36.8046214Z 18 │ expect(Schema.is(V1.AvailableCommand)(command)).toBe(true); 2026-10-24T06:23:36.8046292Z ·  ───────── 2026-10-24T06:23:36.8046353Z 19 │ expect( 2026-10-24T06:23:36.8046402Z ╰──── 2026-10-24T06:23:36.8046404Z 2026-10-24T06:23:36.8046773Z ⚠ 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-24T06:23:36.8046889Z ╭─[packages/effect-acp/src/schema.test.ts:20:7] 2026-10-24T06:23:36.8046949Z 19 │ expect( 2026-10-24T06:23:36.8047112Z 20 │ Schema.is(V2.AvailableCommand)({ ...command, input: { type: "text", hint: "Task" } }), 2026-10-24T06:23:36.8047183Z ·  ───────── 2026-10-24T06:23:36.8047246Z 21 │ ).toBe(true); 2026-10-24T06:23:36.8047303Z ╰──── 2026-10-24T06:23:36.8047308Z 2026-10-24T06:23:36.8047492Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T06:23:36.8047658Z ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:555:70] 2026-10-24T06:23:36.8047739Z 554 │ assert.deepStrictEqual( 2026-10-24T06:23:36.8047900Z 555 │ (yield* Ref.get(fixture.syncCommands)).map(({ commandId: _, ...rest }) => rest), 2026-10-24T06:23:36.8048020Z ·  ┬ 2026-10-24T06:23:36.8048181Z · ╰── '_' is declared here 2026-10-24T06:23:36.8048242Z 556 │ [ 2026-10-24T06:23:36.8048293Z ╰──── 2026-10-24T06:23:36.8048402Z  help: Consider removing this parameter. 2026-10-24T06:23:36.8048407Z 2026-10-24T06:23:36.8048585Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T06:23:36.8048756Z ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:1155:70] 2026-10-24T06:23:36.8048839Z 1154 │ assert.deepStrictEqual( 2026-10-24T06:23:36.8048999Z 1155 │ (yield* Ref.get(fixture.linkCommands)).map(({ commandId: _, ...rest }) => rest), 2026-10-24T06:23:36.8049116Z ·  ┬ 2026-10-24T06:23:36.8049279Z · ╰── '_' is declared here 2026-10-24T06:23:36.8049339Z 1156 │ [ 2026-10-24T06:23:36.8049391Z ╰──── 2026-10-24T06:23:36.8049536Z  help: Consider removing this parameter. 2026-10-24T06:23:36.8049573Z 2026-10-24T06:23:36.8049829Z ⚠ unicorn(prefer-add-event-listener): Prefer `addEventListener()` over their `on`-function counterparts. 2026-10-24T06:23:36.8049969Z ╭─[apps/web/src/components/device/deviceHubApi.test.ts:12:14] 2026-10-24T06:23:36.8050121Z 11 │ addEventListener(_type: string, listener: (event: { data: string }) => void) { 2026-10-24T06:23:36.8050199Z 12 │ this.onmessage = listener; 2026-10-24T06:23:36.8050276Z ·  ───────── 2026-10-24T06:23:36.8050333Z 13 │ } 2026-10-24T06:23:36.8050384Z ╰──── 2026-10-24T06:23:36.8050692Z  help: `addEventListener()` can register multiple handlers and accepts options such as `{ once: true }`; assigning to `on` replaces any previously registered handler. 2026-10-24T06:23:36.8050696Z 2026-10-24T06:23:36.8050901Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable. 2026-10-24T06:23:36.8051041Z ╭─[apps/web/src/components/device/deviceHubApi.test.ts:16:9] 2026-10-24T06:23:36.8051107Z 15 │ constructor() { 2026-10-24T06:23:36.8051174Z 16 │ source = this; 2026-10-24T06:23:36.8051244Z ·  ────── 2026-10-24T06:23:36.8051298Z 17 │ } 2026-10-24T06:23:36.8051350Z ╰──── 2026-10-24T06:23:36.8051619Z  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-24T06:23:36.8051622Z 2026-10-24T06:23:36.8052084Z ⚠ 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-24T06:23:36.8052239Z ╭─[apps/server/src/project/ProjectEnrichmentService.test.ts:28:3] 2026-10-24T06:23:36.8052293Z 27 │ ) { 2026-10-24T06:23:36.8052494Z 28 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T06:23:36.8052633Z 29 │ │ const available = yield* service.peek(workspaceRoot); 2026-10-24T06:23:36.8052760Z 30 │ │ if (predicate(available)) return available; 2026-10-24T06:23:36.8052861Z 31 │ │ yield* Effect.yieldNow; 2026-10-24T06:23:36.8052982Z 32 │ ╰─▶ } 2026-10-24T06:23:36.8053159Z 33 │ return yield* Effect.die(`Project metadata for ${workspaceRoot} was not resolved in time.`); 2026-10-24T06:23:36.8053215Z ╰──── 2026-10-24T06:23:36.8053220Z 2026-10-24T06:23:36.8053386Z ⚠ eslint(no-control-regex): Unexpected control character 2026-10-24T06:23:36.8053574Z ╭─[apps/mobile/src/features/settings/SettingsProviderAccountsRouteScreen.tsx:220:46] 2026-10-24T06:23:36.8053711Z 219 │ 2026-10-24T06:23:36.8053847Z 220 │ {interaction.output.replace(/\x1b\[[0-?]*[ -/]*[@-~]/g, "")} 2026-10-24T06:23:36.8053957Z ·  ──┬─ 2026-10-24T06:23:36.8054121Z · ╰── 'U+001B' is a control character. 2026-10-24T06:23:36.8054185Z 221 │ 2026-10-24T06:23:36.8054235Z ╰──── 2026-10-24T06:23:36.8054513Z  help: Avoid matching control characters in regular expressions. If intentional, disable this rule for the expression. 2026-10-24T06:23:36.8054548Z 2026-10-24T06:23:36.8055003Z ⚠ 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-24T06:23:36.8055136Z ╭─[apps/server/src/project/ProjectService.test.ts:94:3] 2026-10-24T06:23:36.8055192Z 93 │ ) { 2026-10-24T06:23:36.8055384Z 94 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T06:23:36.8055555Z 95 │ │ const project = Option.getOrThrow(yield* service.getById(projectId)); 2026-10-24T06:23:36.8055681Z 96 │ │ if (predicate(project)) return project; 2026-10-24T06:23:36.8055783Z 97 │ │ yield* Effect.yieldNow; 2026-10-24T06:23:36.8055904Z 98 │ ╰─▶ } 2026-10-24T06:23:36.8056055Z 99 │ return yield* Effect.die(`Project ${projectId} was not enriched in time.`); 2026-10-24T06:23:36.8056105Z ╰──── 2026-10-24T06:23:36.8056108Z 2026-10-24T06:23:36.8056263Z ⚠ react(immutability): This value cannot be modified 2026-10-24T06:23:36.8056415Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-24T06:23:36.8056469Z  86 │ 2026-10-24T06:23:36.8056562Z  87 │ const cardCoverage = props.cardCoverage; 2026-10-24T06:23:36.8056643Z ·  ──────┬───── 2026-10-24T06:23:36.8056789Z · ╰── `cardCoverage` originates here 2026-10-24T06:23:36.8056904Z  88 │ const barHeightRef = useRef(0); 2026-10-24T06:23:36.8056986Z  89 │ const cardHeightRef = useRef(0); 2026-10-24T06:23:36.8057071Z  90 │ const cardHeight = useSharedValue(0); 2026-10-24T06:23:36.8057159Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-24T06:23:36.8057226Z  92 │ if (!cardCoverage) { 2026-10-24T06:23:36.8057286Z  93 │ return; 2026-10-24T06:23:36.8057341Z  94 │ } 2026-10-24T06:23:36.8057489Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T06:23:36.8057576Z  96 │ if (coverage === cardCoverage.value) { 2026-10-24T06:23:36.8057636Z  97 │ return; 2026-10-24T06:23:36.8057690Z  98 │ } 2026-10-24T06:23:36.8057769Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T06:23:36.8057849Z 100 │ cardCoverage.value = coverage; 2026-10-24T06:23:36.8057933Z ·  ──────┬───── 2026-10-24T06:23:36.8058074Z · ╰── `cardCoverage` cannot be modified 2026-10-24T06:23:36.8058134Z 101 │ return; 2026-10-24T06:23:36.8058186Z ╰──── 2026-10-24T06:23:36.8058478Z  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-24T06:23:36.8058781Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T06:23:36.8058783Z 2026-10-24T06:23:36.8058936Z ⚠ react(immutability): This value cannot be modified 2026-10-24T06:23:36.8059088Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7] 2026-10-24T06:23:36.8059214Z  89 │ const cardHeightRef = useRef(0); 2026-10-24T06:23:36.8059331Z  90 │ const cardHeight = useSharedValue(0); 2026-10-24T06:23:36.8059405Z ·  ─────┬──── 2026-10-24T06:23:36.8059539Z · ╰── `cardHeight` originates here 2026-10-24T06:23:36.8059631Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-24T06:23:36.8059697Z  92 │ if (!cardCoverage) { 2026-10-24T06:23:36.8059752Z  93 │ return; 2026-10-24T06:23:36.8059807Z  94 │ } 2026-10-24T06:23:36.8059953Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T06:23:36.8060038Z  96 │ if (coverage === cardCoverage.value) { 2026-10-24T06:23:36.8060094Z  97 │ return; 2026-10-24T06:23:36.8060146Z  98 │ } 2026-10-24T06:23:36.8060227Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T06:23:36.8060314Z 100 │ cardCoverage.value = coverage; 2026-10-24T06:23:36.8060373Z 101 │ return; 2026-10-24T06:23:36.8060425Z 102 │ } 2026-10-24T06:23:36.8060524Z 103 │ cardCoverage.value = withTiming(coverage, { 2026-10-24T06:23:36.8060616Z 104 │ duration: USER_INPUT_TOGGLE_DURATION_MS, 2026-10-24T06:23:36.8060700Z 105 │ easing: Easing.out(Easing.cubic), 2026-10-24T06:23:36.8060756Z 106 │ }); 2026-10-24T06:23:36.8060821Z 107 │ }, [cardCoverage]); 2026-10-24T06:23:36.8060902Z 108 │ const handleBarLayout = useCallback( 2026-10-24T06:23:36.8060982Z 109 │ (event: LayoutChangeEvent) => { 2026-10-24T06:23:36.8061106Z 110 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T06:23:36.8061173Z 111 │ notifyCoverage(); 2026-10-24T06:23:36.8061226Z 112 │ }, 2026-10-24T06:23:36.8061294Z 113 │ [notifyCoverage], 2026-10-24T06:23:36.8061354Z 114 │ ); 2026-10-24T06:23:36.8061442Z 115 │ const handleCardLayout = useCallback( 2026-10-24T06:23:36.8061519Z 116 │ (event: LayoutChangeEvent) => { 2026-10-24T06:23:36.8061644Z 117 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T06:23:36.8061755Z 118 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-24T06:23:36.8061831Z ·  ─────┬──── 2026-10-24T06:23:36.8061966Z · ╰── `cardHeight` cannot be modified 2026-10-24T06:23:36.8062034Z 119 │ notifyCoverage(); 2026-10-24T06:23:36.8062087Z ╰──── 2026-10-24T06:23:36.8062350Z  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-24T06:23:36.8062655Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T06:23:36.8062660Z 2026-10-24T06:23:36.8062860Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T06:23:36.8063013Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-24T06:23:36.8063096Z  90 │ const cardHeight = useSharedValue(0); 2026-10-24T06:23:36.8063186Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-24T06:23:36.8063292Z ·  ───┬─── 2026-10-24T06:23:36.8063528Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-24T06:23:36.8063595Z  92 │ if (!cardCoverage) { 2026-10-24T06:23:36.8063651Z  93 │ return; 2026-10-24T06:23:36.8063755Z  94 │ } 2026-10-24T06:23:36.8063934Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T06:23:36.8064019Z  96 │ if (coverage === cardCoverage.value) { 2026-10-24T06:23:36.8064075Z  97 │ return; 2026-10-24T06:23:36.8064129Z  98 │ } 2026-10-24T06:23:36.8064208Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T06:23:36.8064289Z 100 │ cardCoverage.value = coverage; 2026-10-24T06:23:36.8064364Z ·  ──────┬───── 2026-10-24T06:23:36.8064496Z · ╰── This modifies `cardCoverage` 2026-10-24T06:23:36.8064554Z 101 │ return; 2026-10-24T06:23:36.8064604Z ╰──── 2026-10-24T06:23:36.8064940Z  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-24T06:23:36.8065246Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T06:23:36.8065249Z 2026-10-24T06:23:36.8065445Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T06:23:36.8065596Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-24T06:23:36.8065675Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T06:23:36.8065754Z 100 │ cardCoverage.value = coverage; 2026-10-24T06:23:36.8065829Z ·  ──────┬───── 2026-10-24T06:23:36.8065960Z · ╰── This modifies `cardCoverage` 2026-10-24T06:23:36.8066018Z 101 │ return; 2026-10-24T06:23:36.8066070Z 102 │ } 2026-10-24T06:23:36.8066172Z 103 │ cardCoverage.value = withTiming(coverage, { 2026-10-24T06:23:36.8066270Z 104 │ duration: USER_INPUT_TOGGLE_DURATION_MS, 2026-10-24T06:23:36.8066351Z 105 │ easing: Easing.out(Easing.cubic), 2026-10-24T06:23:36.8066412Z 106 │ }); 2026-10-24T06:23:36.8066477Z 107 │ }, [cardCoverage]); 2026-10-24T06:23:36.8066559Z 108 │ const handleBarLayout = useCallback( 2026-10-24T06:23:36.8066635Z 109 │ (event: LayoutChangeEvent) => { 2026-10-24T06:23:36.8066774Z ·  ───────────────┬─────────────── 2026-10-24T06:23:36.8066997Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-24T06:23:36.8067121Z 110 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T06:23:36.8067171Z ╰──── 2026-10-24T06:23:36.8067507Z  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-24T06:23:36.8067813Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T06:23:36.8067815Z 2026-10-24T06:23:36.8068010Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T06:23:36.8068162Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7] 2026-10-24T06:23:36.8068244Z 115 │ const handleCardLayout = useCallback( 2026-10-24T06:23:36.8068324Z 116 │ (event: LayoutChangeEvent) => { 2026-10-24T06:23:36.8068428Z ·  ───────────────┬─────────────── 2026-10-24T06:23:36.8068697Z · ╰── This function may (indirectly) reassign or modify `cardHeight` after render 2026-10-24T06:23:36.8068851Z 117 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T06:23:36.8068963Z 118 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-24T06:23:36.8069038Z ·  ─────┬──── 2026-10-24T06:23:36.8069166Z · ╰── This modifies `cardHeight` 2026-10-24T06:23:36.8069230Z 119 │ notifyCoverage(); 2026-10-24T06:23:36.8069284Z ╰──── 2026-10-24T06:23:36.8069613Z  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-24T06:23:36.8069915Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T06:23:36.8069921Z 2026-10-24T06:23:36.8070176Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T06:23:36.8070333Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:285:5] 2026-10-24T06:23:36.8070452Z 283 │ const [snoozeWakeTick, bumpSnoozeWakeTick] = useState(0); 2026-10-24T06:23:36.8070519Z 284 │ useEffect(() => { 2026-10-24T06:23:36.8070590Z ·  ────┬──── 2026-10-24T06:23:36.8070718Z · ╰── This is the containing effect 2026-10-24T06:23:36.8070803Z 285 │ setNow(new Date().toISOString()); 2026-10-24T06:23:36.8070874Z ·  ───┬── 2026-10-24T06:23:36.8071045Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T06:23:36.8071183Z 286 │ const id = setInterval(() => setNow(new Date().toISOString()), 60_000); 2026-10-24T06:23:36.8071236Z ╰──── 2026-10-24T06:23:36.8071827Z  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-24T06:23:36.8072146Z  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-24T06:23:36.8072148Z 2026-10-24T06:23:36.8072347Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T06:23:36.8072553Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:365:25] 2026-10-24T06:23:36.8072715Z 364 │ // range) the boundary string is identical and the chain would die. 2026-10-24T06:23:36.8072806Z 365 │ }, [nextSnoozeWakeAt, snoozeWakeTick]); 2026-10-24T06:23:36.8072908Z ·  ───────┬────── 2026-10-24T06:23:36.8073069Z · ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T06:23:36.8073182Z 366 │ const listItems = ((): readonly SidebarListItem[] => { 2026-10-24T06:23:36.8073234Z ╰──── 2026-10-24T06:23:36.8073522Z  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-24T06:23:36.8073830Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.8073838Z 2026-10-24T06:23:36.8074001Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T06:23:36.8074160Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:356:53] 2026-10-24T06:23:36.8074245Z 355 │ if (Number.isNaN(wakeAtMs)) return; 2026-10-24T06:23:36.8074398Z 356 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647); 2026-10-24T06:23:36.8074514Z ·  ─────┬──── 2026-10-24T06:23:36.8074678Z · ╰── Cannot call impure function 2026-10-24T06:23:36.8074756Z 357 │ const id = setTimeout(() => { 2026-10-24T06:23:36.8074809Z ╰──── 2026-10-24T06:23:36.8075093Z  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-24T06:23:36.8075385Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T06:23:36.8075388Z 2026-10-24T06:23:36.8075640Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T06:23:36.8075771Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:60:5] 2026-10-24T06:23:36.8075824Z 57 │ 2026-10-24T06:23:36.8075886Z 58 │ useEffect(() => { 2026-10-24T06:23:36.8075958Z ·  ────┬──── 2026-10-24T06:23:36.8076087Z · ╰── This is the containing effect 2026-10-24T06:23:36.8076182Z 59 │ const controller = new AbortController(); 2026-10-24T06:23:36.8076259Z 60 │ setLoadState("pending"); 2026-10-24T06:23:36.8076334Z ·  ──────┬───── 2026-10-24T06:23:36.8076500Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T06:23:36.8076655Z 61 │ // A renewed signature is used on Retry, not as a reason to reset the native player. 2026-10-24T06:23:36.8076717Z ╰──── 2026-10-24T06:23:36.8077330Z  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-24T06:23:36.8077744Z  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-24T06:23:36.8077783Z 2026-10-24T06:23:36.8077980Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T06:23:36.8078110Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:71:7] 2026-10-24T06:23:36.8078192Z 70 │ return () => controller.abort(); 2026-10-24T06:23:36.8078288Z 71 │ }, [player, props.playRequested, attempt]); 2026-10-24T06:23:36.8078459Z ·  ───┬── ─────────┬───────── ───┬─── 2026-10-24T06:23:36.8078684Z · │ │ ╰── Unnecessary dependency `attempt` 2026-10-24T06:23:36.8078888Z · │ ╰── Unnecessary dependency `props.playRequested` 2026-10-24T06:23:36.8079026Z · ╰── Unnecessary dependency `player_0` 2026-10-24T06:23:36.8079078Z 72 │ 2026-10-24T06:23:36.8079129Z ╰──── 2026-10-24T06:23:36.8079414Z  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-24T06:23:36.8079719Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.8079722Z 2026-10-24T06:23:36.8079974Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T06:23:36.8080112Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:68:5] 2026-10-24T06:23:36.8080216Z 66 │ const { id: attachmentId, fileUri } = attachment; 2026-10-24T06:23:36.8080282Z 67 │ useEffect(() => { 2026-10-24T06:23:36.8080351Z ·  ────┬──── 2026-10-24T06:23:36.8080477Z · ╰── This is the containing effect 2026-10-24T06:23:36.8080538Z 68 │ setUri(null); 2026-10-24T06:23:36.8080607Z ·  ───┬── 2026-10-24T06:23:36.8080771Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T06:23:36.8080834Z 69 │ setError(null); 2026-10-24T06:23:36.8080882Z ╰──── 2026-10-24T06:23:36.8081473Z  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-24T06:23:36.8081792Z  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-24T06:23:36.8081795Z 2026-10-24T06:23:36.8081989Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T06:23:36.8082120Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:91:7] 2026-10-24T06:23:36.8082174Z 90 │ }; 2026-10-24T06:23:36.8082247Z 91 │ }, [attachmentId, fileUri]); 2026-10-24T06:23:36.8082364Z ·  ──────┬───── ───┬─── 2026-10-24T06:23:36.8082543Z · │ ╰── Unnecessary dependency `fileUri` 2026-10-24T06:23:36.8082732Z · ╰── Unnecessary dependency `attachmentId` 2026-10-24T06:23:36.8082901Z 92 │ const mimeType = videoMimeType(attachment) ?? attachment.mimeType; 2026-10-24T06:23:36.8082955Z ╰──── 2026-10-24T06:23:36.8083242Z  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-24T06:23:36.8083547Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.8083549Z 2026-10-24T06:23:36.8083756Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T06:23:36.8083895Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:213:34] 2026-10-24T06:23:36.8083965Z 212 │ useEffect(() => { 2026-10-24T06:23:36.8084079Z 213 │ if (!isFocused && hasSource) props.onRequestClose(); 2026-10-24T06:23:36.8084174Z ·  ──┬── 2026-10-24T06:23:36.8084324Z · ╰── Missing dependency `props` 2026-10-24T06:23:36.8084430Z 214 │ }, [isFocused, hasSource, props.onRequestClose]); 2026-10-24T06:23:36.8084541Z ·  ──────────┬───────── 2026-10-24T06:23:36.8084763Z · ╰── Overly precise dependency `props.onRequestClose`, use `props` instead 2026-10-24T06:23:36.8084834Z 215 │ const { source } = props; 2026-10-24T06:23:36.8084887Z ╰──── 2026-10-24T06:23:36.8085311Z  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-24T06:23:36.8085619Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.8085622Z 2026-10-24T06:23:36.8085872Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T06:23:36.8086004Z ╭─[apps/mobile/src/components/ProjectFavicon.tsx:172:5] 2026-10-24T06:23:36.8086192Z 167 │ const [activeFaviconRequest, setActiveFaviconRequest] = useState(null); 2026-10-24T06:23:36.8086261Z 168 │ useLayoutEffect(() => { 2026-10-24T06:23:36.8086336Z ·  ───────┬─────── 2026-10-24T06:23:36.8086472Z · ╰── This is the containing effect 2026-10-24T06:23:36.8086560Z 169 │ if (faviconRequest === null) return; 2026-10-24T06:23:36.8086613Z 170 │ 2026-10-24T06:23:36.8086768Z 171 │ const endRequest = beginProjectFaviconRequest(faviconRequest); 2026-10-24T06:23:36.8086864Z 172 │ setActiveFaviconRequest(faviconRequest); 2026-10-24T06:23:36.8086955Z ·  ───────────┬─────────── 2026-10-24T06:23:36.8087124Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T06:23:36.8087190Z 173 │ return endRequest; 2026-10-24T06:23:36.8087241Z ╰──── 2026-10-24T06:23:36.8087873Z  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-24T06:23:36.8088216Z  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-24T06:23:36.8088218Z 2026-10-24T06:23:36.8088362Z ⚠ react(refs): Cannot access refs during render 2026-10-24T06:23:36.8088477Z ╭─[apps/mobile/src/components/ui/Menu.tsx:54:36] 2026-10-24T06:23:36.8088651Z 53 │ const child = children as ReactElement>; 2026-10-24T06:23:36.8088823Z 54 │ ╭─▶ children = cloneElement(child, { 2026-10-24T06:23:36.8088929Z 55 │ │ onTouchStart: (event) => { 2026-10-24T06:23:36.8089088Z 56 │ │ // Reset for a new touch, not onPressIn, which also fires when a 2026-10-24T06:23:36.8089246Z 57 │ │ // finger moves out of the row and back during the same gesture. 2026-10-24T06:23:36.8089369Z 58 │ │ menuPress.current.isPreparing = false; 2026-10-24T06:23:36.8089535Z 59 │ │ menuPress.current.suppressPress = menuPress.current.isOpen; 2026-10-24T06:23:36.8089642Z 60 │ │ pendingPress.current = null; 2026-10-24T06:23:36.8089762Z 61 │ │ child.props.onTouchStart?.(event); 2026-10-24T06:23:36.8089837Z 62 │ │ }, 2026-10-24T06:23:36.8089935Z 63 │ │ onPress: (event) => { 2026-10-24T06:23:36.8090106Z 64 │ │ // Accessibility clicks have no touch identifier and must not inherit 2026-10-24T06:23:36.8090244Z 65 │ │ // cancellation from a previous physical gesture. 2026-10-24T06:23:36.8090408Z 66 │ │ const isTouch = typeof event.nativeEvent.identifier === "number"; 2026-10-24T06:23:36.8090594Z 67 │ │ if (isTouch ? menuPress.current.suppressPress : menuPress.current.isOpen) { 2026-10-24T06:23:36.8090678Z 68 │ │ return; 2026-10-24T06:23:36.8090755Z 69 │ │ } 2026-10-24T06:23:36.8090893Z 70 │ │ if (isTouch && menuPress.current.isPreparing) { 2026-10-24T06:23:36.8091059Z 71 │ │ // A release can arrive between native menu preparation and display. 2026-10-24T06:23:36.8091227Z 72 │ │ // Let UIKit's display/cancel callback decide this press's outcome. 2026-10-24T06:23:36.8091326Z 73 │ │ event.persist(); 2026-10-24T06:23:36.8091483Z 74 │ │ pendingPress.current = () => child.props.onPress?.(event); 2026-10-24T06:23:36.8091567Z 75 │ │ return; 2026-10-24T06:23:36.8091643Z 76 │ │ } 2026-10-24T06:23:36.8091752Z 77 │ │ child.props.onPress?.(event); 2026-10-24T06:23:36.8091828Z 78 │ │ }, 2026-10-24T06:23:36.8091959Z 79 │ ├─▶ }); 2026-10-24T06:23:36.8092190Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T06:23:36.8092290Z 80 │ menuProps.onMenuInteractionStart = () => { 2026-10-24T06:23:36.8092393Z ╰──── 2026-10-24T06:23:36.8092886Z  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-24T06:23:36.8093172Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T06:23:36.8093175Z 2026-10-24T06:23:36.8093427Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T06:23:36.8093576Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:523:5] 2026-10-24T06:23:36.8093638Z 521 │ }, []); 2026-10-24T06:23:36.8093704Z 522 │ useEffect(() => { 2026-10-24T06:23:36.8093780Z ·  ────┬──── 2026-10-24T06:23:36.8093908Z · ╰── This is the containing effect 2026-10-24T06:23:36.8093992Z 523 │ setKeyboardStateSuspect(false); 2026-10-24T06:23:36.8094082Z ·  ───────────┬─────────── 2026-10-24T06:23:36.8094251Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T06:23:36.8094347Z 524 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-24T06:23:36.8094399Z ╰──── 2026-10-24T06:23:36.8094983Z  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-24T06:23:36.8095305Z  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-24T06:23:36.8095310Z 2026-10-24T06:23:36.8095561Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T06:23:36.8095707Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:888:7] 2026-10-24T06:23:36.8095860Z 885 │ const [lastKnownKeyboardHeight, setLastKnownKeyboardHeight] = useState(0); 2026-10-24T06:23:36.8095925Z 886 │ useEffect(() => { 2026-10-24T06:23:36.8095997Z ·  ────┬──── 2026-10-24T06:23:36.8096122Z · ╰── This is the containing effect 2026-10-24T06:23:36.8096323Z 887 │ if (liveKeyboardHeight > 0 && liveKeyboardHeight !== lastKnownKeyboardHeight) { 2026-10-24T06:23:36.8096462Z 888 │ setLastKnownKeyboardHeight(liveKeyboardHeight); 2026-10-24T06:23:36.8096558Z ·  ─────────────┬──────────── 2026-10-24T06:23:36.8096758Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T06:23:36.8096813Z 889 │ } 2026-10-24T06:23:36.8096865Z ╰──── 2026-10-24T06:23:36.8097447Z  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-24T06:23:36.8097764Z  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-24T06:23:36.8097770Z 2026-10-24T06:23:36.8098022Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T06:23:36.8098175Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1135:5] 2026-10-24T06:23:36.8098229Z 1133 │ 2026-10-24T06:23:36.8098295Z 1134 │ useEffect(() => { 2026-10-24T06:23:36.8098365Z ·  ────┬──── 2026-10-24T06:23:36.8098496Z · ╰── This is the containing effect 2026-10-24T06:23:36.8098572Z 1135 │ setAnchorMessageId(null); 2026-10-24T06:23:36.8098656Z ·  ─────────┬──────── 2026-10-24T06:23:36.8098822Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T06:23:36.8098908Z 1136 │ setSubmittedMessageId(null); 2026-10-24T06:23:36.8098964Z ╰──── 2026-10-24T06:23:36.8099546Z  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-24T06:23:36.8099861Z  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-24T06:23:36.8099863Z 2026-10-24T06:23:36.8100057Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T06:23:36.8100204Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:524:7] 2026-10-24T06:23:36.8100291Z 523 │ setKeyboardStateSuspect(false); 2026-10-24T06:23:36.8100390Z 524 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-24T06:23:36.8100527Z ·  ────────┬──────── ─────────┬──────── 2026-10-24T06:23:36.8100733Z · │ ╰── Unnecessary dependency `liveKeyboardHeight` 2026-10-24T06:23:36.8100887Z · ╰── Unnecessary dependency `isKeyboardVisible` 2026-10-24T06:23:36.8101012Z 525 │ const handleOwnedInputFocusChange = (focused: boolean) => { 2026-10-24T06:23:36.8101061Z ╰──── 2026-10-24T06:23:36.8101351Z  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-24T06:23:36.8101707Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.8101743Z 2026-10-24T06:23:36.8101939Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T06:23:36.8102090Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1083:7] 2026-10-24T06:23:36.8102174Z 1082 │ userInputInsetProgress.set(1); 2026-10-24T06:23:36.8102334Z 1083 │ }, [activeUserInputRequestId, userInputCardProgress, userInputInsetProgress]); 2026-10-24T06:23:36.8102428Z ·  ────────────┬─────────── 2026-10-24T06:23:36.8102603Z · ╰── Unnecessary dependency `activeUserInputRequestId` 2026-10-24T06:23:36.8102707Z 1084 │ const showContent = props.showContent ?? true; 2026-10-24T06:23:36.8102765Z ╰──── 2026-10-24T06:23:36.8103054Z  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-24T06:23:36.8103359Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.8103362Z 2026-10-24T06:23:36.8103556Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T06:23:36.8103707Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1141:15] 2026-10-24T06:23:36.8103775Z 1140 │ freeze.set(false); 2026-10-24T06:23:36.8103856Z 1141 │ }, [freeze, selectedThreadKey]); 2026-10-24T06:23:36.8103948Z ·  ────────┬──────── 2026-10-24T06:23:36.8104112Z · ╰── Unnecessary dependency `selectedThreadKey` 2026-10-24T06:23:36.8104167Z 1142 │ 2026-10-24T06:23:36.8104219Z ╰──── 2026-10-24T06:23:36.8104503Z  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-24T06:23:36.8104806Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.8104808Z 2026-10-24T06:23:36.8104962Z ⚠ react(immutability): This value cannot be modified 2026-10-24T06:23:36.8105110Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:971:5] 2026-10-24T06:23:36.8105218Z 966 │ const composerPopoverHeight = useSharedValue(0); 2026-10-24T06:23:36.8105323Z 967 │ const floatingControlCoverage = useSharedValue( 2026-10-24T06:23:36.8105419Z ·  ───────────┬─────────── 2026-10-24T06:23:36.8105580Z · ╰── `floatingControlCoverage` originates here 2026-10-24T06:23:36.8105705Z 968 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-24T06:23:36.8105758Z 969 │ ); 2026-10-24T06:23:36.8105826Z 970 │ useEffect(() => { 2026-10-24T06:23:36.8105928Z 971 │ floatingControlCoverage.value = withTiming( 2026-10-24T06:23:36.8106017Z ·  ───────────┬─────────── 2026-10-24T06:23:36.8106175Z · ╰── `floatingControlCoverage` cannot be modified 2026-10-24T06:23:36.8106301Z 972 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-24T06:23:36.8106353Z ╰──── 2026-10-24T06:23:36.8106664Z  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-24T06:23:36.8107032Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T06:23:36.8107036Z 2026-10-24T06:23:36.8107187Z ⚠ react(immutability): This value cannot be modified 2026-10-24T06:23:36.8107336Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:989:7] 2026-10-24T06:23:36.8107519Z 979 │ const userInputCoverageApplies = Platform.OS === "ios" && activeUserInputRequestId !== null; 2026-10-24T06:23:36.8107639Z 980 │ const combinedContentInsetEndAdjustment = useSharedValue( 2026-10-24T06:23:36.8107752Z ·  ────────────────┬──────────────── 2026-10-24T06:23:36.8107938Z · ╰── `combinedContentInsetEndAdjustment` originates here 2026-10-24T06:23:36.8108064Z 981 │ Math.max(0, estimatedOverlayHeight - nativeInsetOvercount), 2026-10-24T06:23:36.8108118Z 982 │ ); 2026-10-24T06:23:36.8108187Z 983 │ useAnimatedReaction( 2026-10-24T06:23:36.8108245Z 984 │ () => 2026-10-24T06:23:36.8108335Z 985 │ contentInsetEndAdjustment.value + 2026-10-24T06:23:36.8108421Z 986 │ floatingControlCoverage.value + 2026-10-24T06:23:36.8108611Z 987 │ (userInputCoverageApplies ? userInputInsetProgress.value * userInputCardCoverage.value : 0), 2026-10-24T06:23:36.8108674Z 988 │ (value) => { 2026-10-24T06:23:36.8108786Z 989 │ combinedContentInsetEndAdjustment.value = value; 2026-10-24T06:23:36.8108892Z ·  ────────────────┬──────────────── 2026-10-24T06:23:36.8109085Z · ╰── `combinedContentInsetEndAdjustment` cannot be modified 2026-10-24T06:23:36.8109144Z 990 │ }, 2026-10-24T06:23:36.8109194Z ╰──── 2026-10-24T06:23:36.8109452Z  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-24T06:23:36.8109748Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T06:23:36.8109751Z 2026-10-24T06:23:36.8110005Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T06:23:36.8110153Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:361:7] 2026-10-24T06:23:36.8110293Z 355 │ }, [cancelledIncomingShareId, navigation, props.incomingShareId]); 2026-10-24T06:23:36.8110358Z 356 │ useEffect(() => { 2026-10-24T06:23:36.8110429Z ·  ────┬──── 2026-10-24T06:23:36.8110557Z · ╰── This is the containing effect 2026-10-24T06:23:36.8110645Z 357 │ if (!isReturningToProjectPicker) { 2026-10-24T06:23:36.8110703Z 358 │ return; 2026-10-24T06:23:36.8110758Z 359 │ } 2026-10-24T06:23:36.8110854Z 360 │ if (requestedInitialProjectAvailable) { 2026-10-24T06:23:36.8110945Z 361 │ setIsReturningToProjectPicker(false); 2026-10-24T06:23:36.8111046Z ·  ──────────────┬────────────── 2026-10-24T06:23:36.8111220Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T06:23:36.8111281Z 362 │ return; 2026-10-24T06:23:36.8111379Z ╰──── 2026-10-24T06:23:36.8111993Z  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-24T06:23:36.8112308Z  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-24T06:23:36.8112311Z 2026-10-24T06:23:36.8112564Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T06:23:36.8112710Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:504:9] 2026-10-24T06:23:36.8112761Z 447 │ 2026-10-24T06:23:36.8112827Z 448 │ useEffect(() => { 2026-10-24T06:23:36.8112899Z ·  ────┬──── 2026-10-24T06:23:36.8113025Z · ╰── This is the containing effect 2026-10-24T06:23:36.8113125Z 449 │ if (props.pendingTaskId || props.draftId) { 2026-10-24T06:23:36.8113181Z 450 │ return; 2026-10-24T06:23:36.8113235Z 451 │ } 2026-10-24T06:23:36.8113374Z 452 │ if (lastInitialProjectRefRef.current !== props.initialProjectRef) { 2026-10-24T06:23:36.8113504Z 453 │ lastInitialProjectRefRef.current = props.initialProjectRef; 2026-10-24T06:23:36.8113605Z 454 │ appliedInitialProjectKeyRef.current = null; 2026-10-24T06:23:36.8113658Z 455 │ } 2026-10-24T06:23:36.8113798Z 456 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-24T06:23:36.8113930Z 457 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-24T06:23:36.8114033Z 458 │ if (initialEnvironmentId && initialProjectId) { 2026-10-24T06:23:36.8114104Z 459 │ const directProject = 2026-10-24T06:23:36.8114171Z 460 │ projects.find( 2026-10-24T06:23:36.8114235Z 461 │ (project) => 2026-10-24T06:23:36.8114404Z 462 │ project.environmentId === initialEnvironmentId && project.id === initialProjectId, 2026-10-24T06:23:36.8114465Z 463 │ ) ?? null; 2026-10-24T06:23:36.8114516Z 464 │ 2026-10-24T06:23:36.8114584Z 465 │ if (directProject) { 2026-10-24T06:23:36.8114720Z 466 │ // Apply the route's project once. Re-applying on every change would 2026-10-24T06:23:36.8114856Z 467 │ // instantly revert environment/project switches made in the picker. 2026-10-24T06:23:36.8115015Z 468 │ const directProjectKey = `${directProject.environmentId}:${directProject.id}`; 2026-10-24T06:23:36.8115194Z 469 │ if (appliedInitialProjectKeyRef.current === directProjectKey) { 2026-10-24T06:23:36.8115280Z 470 │ return; 2026-10-24T06:23:36.8115336Z 471 │ } 2026-10-24T06:23:36.8115431Z 472 │ if (props.initialProjectRef?.branch) { 2026-10-24T06:23:36.8115491Z 473 │ if ( 2026-10-24T06:23:36.8115632Z 474 │ selectedProject?.environmentId !== directProject.environmentId || 2026-10-24T06:23:36.8115730Z 475 │ selectedProject.id !== directProject.id 2026-10-24T06:23:36.8115789Z 476 │ ) { 2026-10-24T06:23:36.8115870Z 477 │ setProject(directProject); 2026-10-24T06:23:36.8115933Z 478 │ return; 2026-10-24T06:23:36.8115994Z 479 │ } 2026-10-24T06:23:36.8116074Z 480 │ if (!flow.draftKey) return; 2026-10-24T06:23:36.8116217Z 481 │ // The route completes checkout before mounting this composer. Local 2026-10-24T06:23:36.8116363Z 482 │ // mode reuses an existing worktree; worktree mode would create another. 2026-10-24T06:23:36.8116472Z 483 │ updateComposerDraftSettings(flow.draftKey, { 2026-10-24T06:23:36.8116549Z 484 │ workspaceSelection: { 2026-10-24T06:23:36.8116615Z 485 │ mode: "local", 2026-10-24T06:23:36.8116753Z 486 │ branch: props.initialProjectRef.branch, 2026-10-24T06:23:36.8116888Z 487 │ worktreePath: props.initialProjectRef.worktreePath ?? null, 2026-10-24T06:23:36.8116969Z 488 │ startFromOrigin: false, 2026-10-24T06:23:36.8117027Z 489 │ }, 2026-10-24T06:23:36.8117087Z 490 │ }); 2026-10-24T06:23:36.8117143Z 491 │ } 2026-10-24T06:23:36.8117267Z 492 │ appliedInitialProjectKeyRef.current = directProjectKey; 2026-10-24T06:23:36.8117329Z 493 │ if ( 2026-10-24T06:23:36.8117524Z 494 │ selectedProject?.environmentId === directProject.environmentId && 2026-10-24T06:23:36.8117620Z 495 │ selectedProject.id === directProject.id 2026-10-24T06:23:36.8117677Z 496 │ ) { 2026-10-24T06:23:36.8117737Z 497 │ return; 2026-10-24T06:23:36.8117792Z 498 │ } 2026-10-24T06:23:36.8117870Z 499 │ setProject(directProject); 2026-10-24T06:23:36.8117931Z 500 │ return; 2026-10-24T06:23:36.8117984Z 501 │ } 2026-10-24T06:23:36.8118039Z 502 │ 2026-10-24T06:23:36.8118115Z 503 │ if (projects.length > 0) { 2026-10-24T06:23:36.8118209Z 504 │ setIsReturningToProjectPicker(true); 2026-10-24T06:23:36.8118316Z ·  ──────────────┬────────────── 2026-10-24T06:23:36.8118500Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T06:23:36.8118557Z 505 │ } 2026-10-24T06:23:36.8118606Z ╰──── 2026-10-24T06:23:36.8119193Z  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-24T06:23:36.8119511Z  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-24T06:23:36.8119514Z 2026-10-24T06:23:36.8119768Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T06:23:36.8119979Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:604:5] 2026-10-24T06:23:36.8120078Z 545 │ 2026-10-24T06:23:36.8120141Z 546 │ useEffect(() => { 2026-10-24T06:23:36.8120212Z ·  ────┬──── 2026-10-24T06:23:36.8120339Z · ╰── This is the containing effect 2026-10-24T06:23:36.8120430Z 547 │ const shareId = props.incomingShareId; 2026-10-24T06:23:36.8120511Z 548 │ const draftKey = flow.draftKey; 2026-10-24T06:23:36.8120609Z 549 │ const destinationProject = selectedProject; 2026-10-24T06:23:36.8120748Z 550 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-24T06:23:36.8120872Z 551 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-24T06:23:36.8120961Z 552 │ const selectedProjectMatchesRoute = 2026-10-24T06:23:36.8121035Z 553 │ !initialEnvironmentId || 2026-10-24T06:23:36.8121110Z 554 │ !initialProjectId || 2026-10-24T06:23:36.8121242Z 555 │ (destinationProject?.environmentId === initialEnvironmentId && 2026-10-24T06:23:36.8121345Z 556 │ destinationProject.id === initialProjectId); 2026-10-24T06:23:36.8121403Z 557 │ if ( 2026-10-24T06:23:36.8121466Z 558 │ !shareId || 2026-10-24T06:23:36.8121525Z 559 │ !draftKey || 2026-10-24T06:23:36.8121599Z 560 │ !destinationProject || 2026-10-24T06:23:36.8121684Z 561 │ !selectedProjectMatchesRoute || 2026-10-24T06:23:36.8121773Z 562 │ cancelledIncomingShareId === shareId 2026-10-24T06:23:36.8121825Z 563 │ ) { 2026-10-24T06:23:36.8121885Z 564 │ return; 2026-10-24T06:23:36.8121939Z 565 │ } 2026-10-24T06:23:36.8122032Z 566 │ const importKey = `${shareId}:${draftKey}`; 2026-10-24T06:23:36.8122086Z 567 │ if ( 2026-10-24T06:23:36.8122204Z 568 │ startedShareImportKeyRef.current === importKey || 2026-10-24T06:23:36.8122315Z 569 │ cancellingShareImportKeyRef.current === importKey 2026-10-24T06:23:36.8122370Z 570 │ ) { 2026-10-24T06:23:36.8122426Z 571 │ return; 2026-10-24T06:23:36.8122480Z 572 │ } 2026-10-24T06:23:36.8122532Z 573 │ 2026-10-24T06:23:36.8122597Z 574 │ if (!incomingShare) { 2026-10-24T06:23:36.8122792Z 575 │ if (isIncomingShareUnavailable && alertedUnavailableIncomingShareIdRef.current !== shareId) { 2026-10-24T06:23:36.8122917Z 576 │ alertedUnavailableIncomingShareIdRef.current = shareId; 2026-10-24T06:23:36.8122984Z 577 │ Dialog.alert( 2026-10-24T06:23:36.8123066Z 578 │ "Shared content unavailable", 2026-10-24T06:23:36.8123238Z 579 │ "The shared content is no longer in the inbox. You can continue editing this task draft.", 2026-10-24T06:23:36.8123295Z 580 │ ); 2026-10-24T06:23:36.8123355Z 581 │ } 2026-10-24T06:23:36.8123414Z 582 │ return; 2026-10-24T06:23:36.8123468Z 583 │ } 2026-10-24T06:23:36.8123520Z 584 │ 2026-10-24T06:23:36.8123576Z 585 │ if ( 2026-10-24T06:23:36.8123732Z 586 │ incomingShare.attachments.some((attachment) => attachment.type === "file") && 2026-10-24T06:23:36.8123833Z 587 │ selectedEnvironmentServerConfig === null 2026-10-24T06:23:36.8123887Z 588 │ ) { 2026-10-24T06:23:36.8123945Z 589 │ return; 2026-10-24T06:23:36.8123997Z 590 │ } 2026-10-24T06:23:36.8124049Z 591 │ 2026-10-24T06:23:36.8124184Z 592 │ if (alertedUnavailableIncomingShareIdRef.current === shareId) { 2026-10-24T06:23:36.8124301Z 593 │ alertedUnavailableIncomingShareIdRef.current = null; 2026-10-24T06:23:36.8124355Z 594 │ } 2026-10-24T06:23:36.8124512Z 595 │ startedShareImportKeyRef.current = importKey; 2026-10-24T06:23:36.8124625Z 596 │ const draftBackup = 2026-10-24T06:23:36.8124805Z 597 │ shareImportDraftBackupRef.current.get(importKey) ?? getComposerDraftSnapshot(draftKey); 2026-10-24T06:23:36.8124938Z 598 │ shareImportDraftBackupRef.current.set(importKey, draftBackup); 2026-10-24T06:23:36.8125027Z 599 │ const importToken = Symbol(importKey); 2026-10-24T06:23:36.8125103Z 600 │ let didReserveShare = false; 2026-10-24T06:23:36.8125176Z 601 │ let didConsumeShare = false; 2026-10-24T06:23:36.8125255Z 602 │ let needsDraftRestore = false; 2026-10-24T06:23:36.8125364Z 603 │ activeShareImportTokenRef.current = importToken; 2026-10-24T06:23:36.8125451Z 604 │ setImportingShareKey(importKey); 2026-10-24T06:23:36.8125537Z ·  ──────────┬───────── 2026-10-24T06:23:36.8125714Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T06:23:36.8125783Z 605 │ void (async () => { 2026-10-24T06:23:36.8125834Z ╰──── 2026-10-24T06:23:36.8126414Z  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-24T06:23:36.8126742Z  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-24T06:23:36.8126745Z 2026-10-24T06:23:36.8126973Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T06:23:36.8127127Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:524:5] 2026-10-24T06:23:36.8127203Z 523 │ props.initialProjectRef, 2026-10-24T06:23:36.8127272Z 524 │ props.incomingShareId, 2026-10-24T06:23:36.8127357Z ·  ──────────┬────────── 2026-10-24T06:23:36.8127519Z · ╰── Unnecessary dependency `props.incomingShareId` 2026-10-24T06:23:36.8127586Z 525 │ props.pendingTaskId, 2026-10-24T06:23:36.8127634Z ╰──── 2026-10-24T06:23:36.8127924Z  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-24T06:23:36.8128230Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.8128232Z 2026-10-24T06:23:36.8128446Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T06:23:36.8128598Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:543:5] 2026-10-24T06:23:36.8128710Z 542 │ loadedBranchesProjectKeyRef.current = projectKey; 2026-10-24T06:23:36.8128777Z 543 │ flow.loadBranches(); 2026-10-24T06:23:36.8128846Z ·  ──┬─ 2026-10-24T06:23:36.8128969Z · ╰── Missing dependency `flow` 2026-10-24T06:23:36.8129059Z 544 │ }, [flow.loadBranches, selectedProject]); 2026-10-24T06:23:36.8129144Z ·  ────────┬──────── 2026-10-24T06:23:36.8129339Z · ╰── Overly precise dependency `flow.loadBranches`, use `flow` instead 2026-10-24T06:23:36.8129392Z 545 │ 2026-10-24T06:23:36.8129441Z ╰──── 2026-10-24T06:23:36.8129912Z  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-24T06:23:36.8130249Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.8130252Z 2026-10-24T06:23:36.8130448Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T06:23:36.8130595Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:766:5] 2026-10-24T06:23:36.8130658Z 765 │ flow.draftKey, 2026-10-24T06:23:36.8130735Z 766 │ hasImportedIncomingShare, 2026-10-24T06:23:36.8130827Z ·  ────────────┬─────────── 2026-10-24T06:23:36.8130999Z · ╰── Unnecessary dependency `hasImportedIncomingShare` 2026-10-24T06:23:36.8131067Z 767 │ incomingShare, 2026-10-24T06:23:36.8131152Z 768 │ isIncomingShareInboxLoading, 2026-10-24T06:23:36.8131247Z ·  ─────────────┬───────────── 2026-10-24T06:23:36.8131424Z · ╰── Unnecessary dependency `isIncomingShareInboxLoading` 2026-10-24T06:23:36.8164948Z 769 │ isIncomingShareUnavailable, 2026-10-24T06:23:36.8165129Z 770 │ props.incomingShareId, 2026-10-24T06:23:36.8165276Z 771 │ props.initialProjectRef?.environmentId, 2026-10-24T06:23:36.8165401Z 772 │ props.initialProjectRef?.projectId, 2026-10-24T06:23:36.8165506Z 773 │ releaseShareReservation, 2026-10-24T06:23:36.8165600Z 774 │ reserveShare, 2026-10-24T06:23:36.8165740Z 775 │ selectedEnvironmentServerConfig, 2026-10-24T06:23:36.8165840Z 776 │ selectedProject, 2026-10-24T06:23:36.8165938Z 777 │ shareImportAttempt, 2026-10-24T06:23:36.8166066Z ·  ─────────┬──────── 2026-10-24T06:23:36.8166330Z · ╰── Unnecessary dependency `shareImportAttempt` 2026-10-24T06:23:36.8166411Z 778 │ ]); 2026-10-24T06:23:36.8166487Z ╰──── 2026-10-24T06:23:36.8166922Z  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-24T06:23:36.8167236Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.8167242Z 2026-10-24T06:23:36.8167520Z ⚠ eslint(no-unused-vars): Variable 'useDragRegion' is declared but never used. Unused variables should start with a '_'. 2026-10-24T06:23:36.8167673Z ╭─[apps/web/src/components/preview/PreviewPanelShell.tsx:61:9] 2026-10-24T06:23:36.8167724Z 60 │ ) { 2026-10-24T06:23:36.8167893Z 61 │ const useDragRegion = isElectron && props.mode !== "sheet" && props.mode !== "embedded"; 2026-10-24T06:23:36.8167971Z ·  ──────┬────── 2026-10-24T06:23:36.8168109Z · ╰── 'useDragRegion' is declared here 2026-10-24T06:23:36.8168200Z 62 │ const isInline = props.mode === "inline"; 2026-10-24T06:23:36.8168249Z ╰──── 2026-10-24T06:23:36.8168350Z  help: Consider removing this declaration. 2026-10-24T06:23:36.8168353Z 2026-10-24T06:23:36.8168507Z ⚠ react(immutability): This value cannot be modified 2026-10-24T06:23:36.8168815Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:111:5] 2026-10-24T06:23:36.8168919Z 107 │ ); 2026-10-24T06:23:36.8169065Z 108 │ const separationProgress = useSharedValue(props.showScrollToEnd ? 1 : 0); 2026-10-24T06:23:36.8169151Z ·  ─────────┬──────── 2026-10-24T06:23:36.8169299Z · ╰── `separationProgress` originates here 2026-10-24T06:23:36.8169349Z 109 │ 2026-10-24T06:23:36.8169411Z 110 │ useEffect(() => { 2026-10-24T06:23:36.8169577Z 111 │ separationProgress.value = withTiming(props.showScrollToEnd ? 1 : 0, CONTROL_TIMING); 2026-10-24T06:23:36.8169655Z ·  ─────────┬──────── 2026-10-24T06:23:36.8169803Z · ╰── `separationProgress` cannot be modified 2026-10-24T06:23:36.8169914Z 112 │ }, [props.showScrollToEnd, separationProgress]); 2026-10-24T06:23:36.8169966Z ╰──── 2026-10-24T06:23:36.8170225Z  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-24T06:23:36.8170524Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T06:23:36.8170527Z 2026-10-24T06:23:36.8170676Z ⚠ react(immutability): This value cannot be modified 2026-10-24T06:23:36.8170832Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5] 2026-10-24T06:23:36.8170941Z 128 │ // and repeatedly retargets the animation as it grows. 2026-10-24T06:23:36.8171053Z 129 │ const capsuleWidth = useSharedValue(null); 2026-10-24T06:23:36.8171136Z ·  ──────┬───── 2026-10-24T06:23:36.8171270Z · ╰── `capsuleWidth` originates here 2026-10-24T06:23:36.8171377Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T06:23:36.8171488Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T06:23:36.8171588Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T06:23:36.8171678Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T06:23:36.8171738Z 134 │ return; 2026-10-24T06:23:36.8171789Z 135 │ } 2026-10-24T06:23:36.8171891Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T06:23:36.8171970Z 137 │ measuredWidthRef.current = width; 2026-10-24T06:23:36.8172108Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T06:23:36.8172187Z ·  ──────┬───── 2026-10-24T06:23:36.8172324Z · ╰── `capsuleWidth` cannot be modified 2026-10-24T06:23:36.8172374Z 139 │ }; 2026-10-24T06:23:36.8172421Z ╰──── 2026-10-24T06:23:36.8172676Z  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-24T06:23:36.8172968Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T06:23:36.8172971Z 2026-10-24T06:23:36.8173120Z ⚠ react(immutability): This value cannot be modified 2026-10-24T06:23:36.8173276Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7] 2026-10-24T06:23:36.8173428Z 128 │ // and repeatedly retargets the animation as it grows. 2026-10-24T06:23:36.8173561Z 129 │ const capsuleWidth = useSharedValue(null); 2026-10-24T06:23:36.8173636Z ·  ──────┬───── 2026-10-24T06:23:36.8173767Z · ╰── `capsuleWidth` originates here 2026-10-24T06:23:36.8173872Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T06:23:36.8173982Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T06:23:36.8174080Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T06:23:36.8174173Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T06:23:36.8174229Z 134 │ return; 2026-10-24T06:23:36.8174279Z 135 │ } 2026-10-24T06:23:36.8174376Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T06:23:36.8174456Z 137 │ measuredWidthRef.current = width; 2026-10-24T06:23:36.8174597Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T06:23:36.8174650Z 139 │ }; 2026-10-24T06:23:36.8174736Z 140 │ const hasStatus = props.status !== null; 2026-10-24T06:23:36.8174868Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-24T06:23:36.8174935Z 142 │ useEffect(() => { 2026-10-24T06:23:36.8174998Z 143 │ if (!hasStatus) { 2026-10-24T06:23:36.8175079Z 144 │ measuredWidthRef.current = null; 2026-10-24T06:23:36.8175153Z 145 │ capsuleWidth.value = null; 2026-10-24T06:23:36.8175226Z ·  ──────┬───── 2026-10-24T06:23:36.8175364Z · ╰── `capsuleWidth` cannot be modified 2026-10-24T06:23:36.8175414Z 146 │ } 2026-10-24T06:23:36.8175462Z ╰──── 2026-10-24T06:23:36.8175720Z  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-24T06:23:36.8176014Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T06:23:36.8176017Z 2026-10-24T06:23:36.8176210Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T06:23:36.8176365Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7] 2026-10-24T06:23:36.8176493Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-24T06:23:36.8176556Z 142 │ useEffect(() => { 2026-10-24T06:23:36.8176629Z ·  ───┬─── 2026-10-24T06:23:36.8176936Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-24T06:23:36.8177022Z 143 │ if (!hasStatus) { 2026-10-24T06:23:36.8177105Z 144 │ measuredWidthRef.current = null; 2026-10-24T06:23:36.8177177Z 145 │ capsuleWidth.value = null; 2026-10-24T06:23:36.8177249Z ·  ──────┬───── 2026-10-24T06:23:36.8177380Z · ╰── This modifies `capsuleWidth` 2026-10-24T06:23:36.8177430Z 146 │ } 2026-10-24T06:23:36.8177477Z ╰──── 2026-10-24T06:23:36.8177804Z  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-24T06:23:36.8178096Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T06:23:36.8178103Z 2026-10-24T06:23:36.8178296Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T06:23:36.8178450Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5] 2026-10-24T06:23:36.8178555Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T06:23:36.8178666Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T06:23:36.8178786Z ·  ───────────────┬─────────────── 2026-10-24T06:23:36.8179019Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-24T06:23:36.8179120Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T06:23:36.8179212Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T06:23:36.8179276Z 134 │ return; 2026-10-24T06:23:36.8179329Z 135 │ } 2026-10-24T06:23:36.8179427Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T06:23:36.8179507Z 137 │ measuredWidthRef.current = width; 2026-10-24T06:23:36.8179642Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T06:23:36.8179715Z ·  ──────┬───── 2026-10-24T06:23:36.8179844Z · ╰── This modifies `capsuleWidth` 2026-10-24T06:23:36.8179894Z 139 │ }; 2026-10-24T06:23:36.8179941Z ╰──── 2026-10-24T06:23:36.8180270Z  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-24T06:23:36.8180571Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T06:23:36.8180576Z 2026-10-24T06:23:36.8181032Z ⚠ 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-24T06:23:36.8181183Z ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1680:7] 2026-10-24T06:23:36.8181272Z 1679 │ yield* harness.replaceSession; 2026-10-24T06:23:36.8181478Z 1680 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T06:23:36.8181625Z 1681 │ │ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) { 2026-10-24T06:23:36.8181755Z 1682 │ │ break; 2026-10-24T06:23:36.8181865Z 1683 │ │ } 2026-10-24T06:23:36.8181969Z 1684 │ │ yield* Effect.yieldNow; 2026-10-24T06:23:36.8182096Z 1685 │ ╰─▶ } 2026-10-24T06:23:36.8182166Z 1686 │ yield* Queue.offer( 2026-10-24T06:23:36.8182215Z ╰──── 2026-10-24T06:23:36.8182217Z 2026-10-24T06:23:36.8182670Z ⚠ 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-24T06:23:36.8182818Z ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1789:7] 2026-10-24T06:23:36.8182902Z 1788 │ yield* harness.replaceSession; 2026-10-24T06:23:36.8183107Z 1789 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T06:23:36.8183263Z 1790 │ │ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) break; 2026-10-24T06:23:36.8183366Z 1791 │ │ yield* Effect.yieldNow; 2026-10-24T06:23:36.8183491Z 1792 │ ╰─▶ } 2026-10-24T06:23:36.8183620Z 1793 │ expect(yield* Ref.get(harness.subscriptionCount)).toBe(2); 2026-10-24T06:23:36.8183669Z ╰──── 2026-10-24T06:23:36.8183671Z 2026-10-24T06:23:36.8184028Z ⚠ 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-24T06:23:36.8184155Z ╭─[apps/server/src/auth/RpcAuthorization.ts:237:17] 2026-10-24T06:23:36.8184291Z 236 │ const requiredScopesForSettingsUpdate = (payload: unknown) => { 2026-10-24T06:23:36.8184417Z 237 │ const input = Schema.decodeUnknownSync(SettingsUpdate)(payload); 2026-10-24T06:23:36.8184522Z ·  ──────────────────────── 2026-10-24T06:23:36.8184658Z 238 │ const scopes = requiredScopesForServerSettingsPatch(input.patch); 2026-10-24T06:23:36.8184707Z ╰──── 2026-10-24T06:23:36.8184710Z 2026-10-24T06:23:36.8185060Z ⚠ 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-24T06:23:36.8185179Z ╭─[apps/server/src/auth/RpcAuthorization.ts:256:26] 2026-10-24T06:23:36.8185274Z 255 │ if (method === WS_METHODS.assetsCreateUrl) { 2026-10-24T06:23:36.8185426Z 256 │ const { resource } = Schema.decodeUnknownSync(AssetCreateUrlInput)(payload); 2026-10-24T06:23:36.8185539Z ·  ──────────────────────── 2026-10-24T06:23:36.8185597Z 257 │ return [ 2026-10-24T06:23:36.8185645Z ╰──── 2026-10-24T06:23:36.8185648Z 2026-10-24T06:23:36.8185840Z ⚠ eslint(no-unused-vars): Identifier 'identity' is imported but never used. 2026-10-24T06:23:36.8185940Z ╭─[apps/server/src/auth/http.ts:28:10] 2026-10-24T06:23:36.8186025Z 27 │ import * as Schema from "effect/Schema"; 2026-10-24T06:23:36.8186114Z 28 │ import { identity } from "effect/Function"; 2026-10-24T06:23:36.8186185Z ·  ────┬─── 2026-10-24T06:23:36.8186316Z · ╰── 'identity' is imported here 2026-10-24T06:23:36.8186443Z 29 │ import * as Layer from "effect/Layer"; 2026-10-24T06:23:36.8186519Z ╰──── 2026-10-24T06:23:36.8186611Z  help: Consider removing this import. 2026-10-24T06:23:36.8186613Z 2026-10-24T06:23:36.8186773Z ⚠ react(immutability): This value cannot be modified 2026-10-24T06:23:36.8186942Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:174:5] 2026-10-24T06:23:36.8187080Z 170 │ const expandedAngle = props.collapsedDirection === "right" ? 90 : 180; 2026-10-24T06:23:36.8187209Z 171 │ const rotation = useSharedValue(props.expanded ? expandedAngle : 0); 2026-10-24T06:23:36.8187280Z ·  ────┬─── 2026-10-24T06:23:36.8187409Z · ╰── `rotation` originates here 2026-10-24T06:23:36.8187459Z 172 │ 2026-10-24T06:23:36.8187525Z 173 │ useLayoutEffect(() => { 2026-10-24T06:23:36.8187659Z 174 │ rotation.value = withTiming(props.expanded ? expandedAngle : 0, { 2026-10-24T06:23:36.8187730Z ·  ────┬─── 2026-10-24T06:23:36.8187860Z · ╰── `rotation` cannot be modified 2026-10-24T06:23:36.8187958Z 175 │ duration: THREAD_DISCLOSURE_TRANSITION_MS, 2026-10-24T06:23:36.8188007Z ╰──── 2026-10-24T06:23:36.8188263Z  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-24T06:23:36.8188558Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T06:23:36.8188561Z 2026-10-24T06:23:36.8188748Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T06:23:36.8188899Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:1246:23] 2026-10-24T06:23:36.8188967Z 1245 │ { 2026-10-24T06:23:36.8191101Z ·  ───────┬─────── 2026-10-24T06:23:36.8191256Z · ╰── This is the containing effect 2026-10-24T06:23:36.8191314Z 39 │ reset(); 2026-10-24T06:23:36.8191378Z 40 │ setInitialized(true); 2026-10-24T06:23:36.8191451Z ·  ───────┬────── 2026-10-24T06:23:36.8191616Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T06:23:36.8191675Z 41 │ }, [reset]); 2026-10-24T06:23:36.8191724Z ╰──── 2026-10-24T06:23:36.8192305Z  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-24T06:23:36.8192628Z  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-24T06:23:36.8192633Z 2026-10-24T06:23:36.8192881Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T06:23:36.8193039Z ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:93:5] 2026-10-24T06:23:36.8193089Z 88 │ 2026-10-24T06:23:36.8193150Z 89 │ useEffect(() => { 2026-10-24T06:23:36.8193216Z ·  ────┬──── 2026-10-24T06:23:36.8193343Z · ╰── This is the containing effect 2026-10-24T06:23:36.8193496Z 90 │ if (!needsPreparation || !initialProjectRef.branch || waitingForProject) return; 2026-10-24T06:23:36.8193598Z 91 │ const branchName = initialProjectRef.branch; 2026-10-24T06:23:36.8193664Z 92 │ let active = true; 2026-10-24T06:23:36.8193756Z 93 │ setPendingCheckouts((count) => count + 1); 2026-10-24T06:23:36.8193836Z ·  ─────────┬───────── 2026-10-24T06:23:36.8194007Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T06:23:36.8194156Z 94 │ // Serialize replacements: ignoring a stale result cannot undo its Git mutation. 2026-10-24T06:23:36.8194204Z ╰──── 2026-10-24T06:23:36.8194779Z  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-24T06:23:36.8195094Z  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-24T06:23:36.8195101Z 2026-10-24T06:23:36.8195317Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-24T06:23:36.8195436Z ╭─[apps/server/src/terminal/Manager.test.ts:731:31] 2026-10-24T06:23:36.8195491Z 730 │ ); 2026-10-24T06:23:36.8195658Z 731 │ const snapshot = events.filter((event) => event.type === "snapshot").at(-1)?.snapshot; 2026-10-24T06:23:36.8195750Z ·  ────── 2026-10-24T06:23:36.8195861Z 732 │ expect(snapshot?.history).toBe("aa😀\rEND"); 2026-10-24T06:23:36.8195910Z ╰──── 2026-10-24T06:23:36.8196076Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T06:23:36.8196140Z 2026-10-24T06:23:36.8196397Z ⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence. 2026-10-24T06:23:36.8196531Z ╭─[apps/web/src/components/chat/useComposerSend.ts:985:13] 2026-10-24T06:23:36.8196651Z 984 │ const changedBeforeDecline = draftChangedSinceSend(); 2026-10-24T06:23:36.8196919Z 985 │ ╭─▶ const pendingIdsBeforeDecline = pendingApprovalsRef.current.map( 2026-10-24T06:23:36.8197036Z 986 │ │ (approval) => approval.requestId, 2026-10-24T06:23:36.8197166Z 987 │ ╰─▶ ); 2026-10-24T06:23:36.8197301Z 988 │ const approvalResponding = approvalsToDecline.some((approval) => 2026-10-24T06:23:36.8197350Z ╰──── 2026-10-24T06:23:36.8197524Z  help: Switch to `Set` 2026-10-24T06:23:36.8197532Z 2026-10-24T06:23:36.8198010Z ⚠ 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-24T06:23:36.8198153Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:169:7] 2026-10-24T06:23:36.8198211Z 168 │ }); 2026-10-24T06:23:36.8198399Z 169 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T06:23:36.8198585Z 170 │ │ if ((yield* SubscriptionRef.get(shellState)).status === "synchronizing") break; 2026-10-24T06:23:36.8198688Z 171 │ │ yield* Effect.yieldNow; 2026-10-24T06:23:36.8198818Z 172 │ ╰─▶ } 2026-10-24T06:23:36.8198873Z 173 │ 2026-10-24T06:23:36.8198920Z ╰──── 2026-10-24T06:23:36.8198923Z 2026-10-24T06:23:36.8199370Z ⚠ 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-24T06:23:36.8199513Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:178:7] 2026-10-24T06:23:36.8199618Z 177 │ yield* Deferred.succeed(releaseSave, undefined); 2026-10-24T06:23:36.8199804Z 178 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T06:23:36.8200004Z 179 │ │ if ((yield* Ref.get(saved)).length > 0) break; 2026-10-24T06:23:36.8200141Z 180 │ │ yield* Effect.yieldNow; 2026-10-24T06:23:36.8200266Z 181 │ ╰─▶ } 2026-10-24T06:23:36.8200317Z 182 │ 2026-10-24T06:23:36.8200365Z ╰──── 2026-10-24T06:23:36.8200367Z 2026-10-24T06:23:36.8200809Z ⚠ 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-24T06:23:36.8200949Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:307:7] 2026-10-24T06:23:36.8201072Z 306 │ yield* Deferred.succeed(releaseUnenrichedSave, undefined); 2026-10-24T06:23:36.8201261Z 307 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T06:23:36.8201381Z 308 │ │ const values = yield* Ref.get(saved); 2026-10-24T06:23:36.8201569Z 309 │ │ if (values.length > 0 && values.at(-1)?.projects[0]?.repositoryIdentity != null) { 2026-10-24T06:23:36.8201654Z 310 │ │ break; 2026-10-24T06:23:36.8201729Z 311 │ │ } 2026-10-24T06:23:36.8201829Z 312 │ │ yield* Effect.yieldNow; 2026-10-24T06:23:36.8201954Z 313 │ ╰─▶ } 2026-10-24T06:23:36.8202005Z 314 │ 2026-10-24T06:23:36.8202053Z ╰──── 2026-10-24T06:23:36.8202056Z 2026-10-24T06:23:36.8202321Z ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'. 2026-10-24T06:23:36.8202438Z ╭─[apps/server/src/usage/UsageService.ts:169:7] 2026-10-24T06:23:36.8202487Z 168 │ 2026-10-24T06:23:36.8202562Z 169 │ const layerTest = Layer.succeed( 2026-10-24T06:23:36.8202634Z ·  ────┬──── 2026-10-24T06:23:36.8202764Z · ╰── 'layerTest' is declared here 2026-10-24T06:23:36.8202826Z 170 │ UsageService, 2026-10-24T06:23:36.8202874Z ╰──── 2026-10-24T06:23:36.8202974Z  help: Consider removing this declaration. 2026-10-24T06:23:36.8202977Z 2026-10-24T06:23:36.8203422Z ⚠ 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-24T06:23:36.8203553Z ╭─[apps/server/src/usage/UsageService.test.ts:2615:7] 2026-10-24T06:23:36.8203649Z 2614 │ let orphanedAt: number | undefined; 2026-10-24T06:23:36.8203870Z 2615 │ ╭─▶ for (let interruptAt = 1; interruptAt <= 31; interruptAt += 1) { 2026-10-24T06:23:36.8203989Z 2616 │ │ const tasks: Array<() => void> = []; 2026-10-24T06:23:36.8204135Z 2617 │ │ const dispatcher: Scheduler.SchedulerDispatcher = { 2026-10-24T06:23:36.8204267Z 2618 │ │ scheduleTask: (task) => tasks.push(task), 2026-10-24T06:23:36.8204361Z 2619 │ │ flush: () => { 2026-10-24T06:23:36.8204482Z 2620 │ │ let task: (() => void) | undefined; 2026-10-24T06:23:36.8204671Z 2621 │ │ while ((task = tasks.shift()) !== undefined) task(); 2026-10-24T06:23:36.8204782Z 2622 │ │ }, 2026-10-24T06:23:36.8204860Z 2623 │ │ }; 2026-10-24T06:23:36.8204929Z 2624 │ │ 2026-10-24T06:23:36.8205086Z 2625 │ │ let requestFiber: Fiber.Fiber | undefined; 2026-10-24T06:23:36.8205186Z 2626 │ │ let requestChecks = 0; 2026-10-24T06:23:36.8205312Z 2627 │ │ const scheduler: Scheduler.Scheduler = { 2026-10-24T06:23:36.8205419Z 2628 │ │ executionMode: "async", 2026-10-24T06:23:36.8205537Z 2629 │ │ makeDispatcher: () => dispatcher, 2026-10-24T06:23:36.8205646Z 2630 │ │ shouldYield: (fiber) => { 2026-10-24T06:23:36.8205780Z 2631 │ │ if (fiber !== requestFiber) return false; 2026-10-24T06:23:36.8205886Z 2632 │ │ requestChecks += 1; 2026-10-24T06:23:36.8206025Z 2633 │ │ if (requestChecks !== interruptAt) return false; 2026-10-24T06:23:36.8206139Z 2634 │ │ fiber.interruptUnsafe(); 2026-10-24T06:23:36.8206235Z 2635 │ │ return true; 2026-10-24T06:23:36.8206313Z 2636 │ │ }, 2026-10-24T06:23:36.8206392Z 2637 │ │ }; 2026-10-24T06:23:36.8206460Z 2638 │ │ 2026-10-24T06:23:36.8206578Z 2639 │ │ const input: UsageSummaryInput = { 2026-10-24T06:23:36.8206668Z 2640 │ │ ...WINDOW, 2026-10-24T06:23:36.8206844Z 2641 │ │ sinceDay: UsageDay.make("2026-09-01"), 2026-10-24T06:23:36.8207037Z 2642 │ │ untilDay: UsageDay.make(`2026-08-${String(interruptAt).padStart(2, "0")}`), 2026-10-24T06:23:36.8207114Z 2643 │ │ }; 2026-10-24T06:23:36.8207221Z 2644 │ │ const first = yield* service 2026-10-24T06:23:36.8207323Z 2645 │ │ .readSummary(input) 2026-10-24T06:23:36.8207408Z 2646 │ │ .pipe( 2026-10-24T06:23:36.8207502Z 2647 │ │ Effect.exit, 2026-10-24T06:23:36.8207656Z 2648 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-24T06:23:36.8207756Z 2649 │ │ Effect.forkChild, 2026-10-24T06:23:36.8207834Z 2650 │ │ ); 2026-10-24T06:23:36.8207938Z 2651 │ │ requestFiber = first; 2026-10-24T06:23:36.8208041Z 2652 │ │ yield* Effect.yieldNow; 2026-10-24T06:23:36.8208143Z 2653 │ │ dispatcher.flush(); 2026-10-24T06:23:36.8208211Z 2654 │ │ 2026-10-24T06:23:36.8208358Z 2655 │ │ const second = yield* service.readSummary(input).pipe( 2026-10-24T06:23:36.8208450Z 2656 │ │ Effect.match({ 2026-10-24T06:23:36.8208572Z 2657 │ │ onFailure: (error) => error.reason, 2026-10-24T06:23:36.8208692Z 2658 │ │ onSuccess: () => "success" as const, 2026-10-24T06:23:36.8208774Z 2659 │ │ }), 2026-10-24T06:23:36.8208970Z 2660 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-24T06:23:36.8209097Z 2661 │ │ Effect.forkChild, 2026-10-24T06:23:36.8209176Z 2662 │ │ ); 2026-10-24T06:23:36.8209278Z 2663 │ │ yield* Effect.yieldNow; 2026-10-24T06:23:36.8209375Z 2664 │ │ dispatcher.flush(); 2026-10-24T06:23:36.8209499Z 2665 │ │ const secondExit = second.pollUnsafe(); 2026-10-24T06:23:36.8209611Z 2666 │ │ if (secondExit === undefined) { 2026-10-24T06:23:36.8209721Z 2667 │ │ second.interruptUnsafe(); 2026-10-24T06:23:36.8209827Z 2668 │ │ orphanedAt = interruptAt; 2026-10-24T06:23:36.8209912Z 2669 │ │ break; 2026-10-24T06:23:36.8209988Z 2670 │ │ } 2026-10-24T06:23:36.8210109Z 2671 │ │ if (Exit.isFailure(secondExit)) { 2026-10-24T06:23:36.8210265Z 2672 │ │ assert.fail("the matching request fiber was interrupted"); 2026-10-24T06:23:36.8210340Z 2673 │ │ } 2026-10-24T06:23:36.8210487Z 2674 │ │ assert.strictEqual(secondExit.value, "invalidWindow"); 2026-10-24T06:23:36.8210617Z 2675 │ ╰─▶ } 2026-10-24T06:23:36.8210668Z 2676 │ 2026-10-24T06:23:36.8210720Z ╰──── 2026-10-24T06:23:36.8210722Z 2026-10-24T06:23:36.8210974Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T06:23:36.8211132Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5] 2026-10-24T06:23:36.8211196Z 259 │ .join("|"); 2026-10-24T06:23:36.8211265Z 260 │ useEffect(() => { 2026-10-24T06:23:36.8211335Z ·  ────┬──── 2026-10-24T06:23:36.8211461Z · ╰── This is the containing effect 2026-10-24T06:23:36.8211518Z 261 │ stop(); 2026-10-24T06:23:36.8211587Z ·  ──┬─ 2026-10-24T06:23:36.8211749Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T06:23:36.8211813Z 262 │ }, [orderVersion]); 2026-10-24T06:23:36.8211861Z ╰──── 2026-10-24T06:23:36.8212445Z  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-24T06:23:36.8212764Z  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-24T06:23:36.8212766Z 2026-10-24T06:23:36.8212977Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T06:23:36.8213130Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5] 2026-10-24T06:23:36.8213191Z 260 │ useEffect(() => { 2026-10-24T06:23:36.8213249Z 261 │ stop(); 2026-10-24T06:23:36.8213314Z ·  ──┬─ 2026-10-24T06:23:36.8213435Z · ╰── Missing dependency `stop` 2026-10-24T06:23:36.8213495Z 262 │ }, [orderVersion]); 2026-10-24T06:23:36.8213620Z ·  ──────┬───── 2026-10-24T06:23:36.8213792Z · ╰── Unnecessary dependency `orderVersion` 2026-10-24T06:23:36.8213850Z 263 │ useEffect( 2026-10-24T06:23:36.8213897Z ╰──── 2026-10-24T06:23:36.8214304Z  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-24T06:23:36.8214611Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.8214613Z 2026-10-24T06:23:36.8214752Z ⚠ react(refs): Cannot access refs during render 2026-10-24T06:23:36.8214906Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:96:9] 2026-10-24T06:23:36.8214984Z 95 │ const latest = useRef(props); 2026-10-24T06:23:36.8215050Z 96 │ latest.current = props; 2026-10-24T06:23:36.8215151Z ·  ───┬──────┬─── 2026-10-24T06:23:36.8215323Z · │ ╰── Cannot update ref value during render 2026-10-24T06:23:36.8215436Z · ╰── This value is a ref 2026-10-24T06:23:36.8215504Z 97 │ const gesture = useMemo( 2026-10-24T06:23:36.8215553Z ╰──── 2026-10-24T06:23:36.8216006Z  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-24T06:23:36.8216294Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T06:23:36.8216299Z 2026-10-24T06:23:36.8216439Z ⚠ react(refs): Cannot access refs during render 2026-10-24T06:23:36.8216594Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:104:18] 2026-10-24T06:23:36.8216657Z 103 │ .runOnJS(true) 2026-10-24T06:23:36.8216764Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T06:23:36.8216902Z ·  ───────────────┬────────────── 2026-10-24T06:23:36.8217097Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T06:23:36.8217225Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T06:23:36.8217273Z ╰──── 2026-10-24T06:23:36.8217729Z  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-24T06:23:36.8218014Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T06:23:36.8218017Z 2026-10-24T06:23:36.8218155Z ⚠ react(refs): Cannot access refs during render 2026-10-24T06:23:36.8218307Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:105:19] 2026-10-24T06:23:36.8218399Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T06:23:36.8218527Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T06:23:36.8218715Z ·  ──────────────────────────┬───────────────────────── 2026-10-24T06:23:36.8218944Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T06:23:36.8219064Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T06:23:36.8219112Z ╰──── 2026-10-24T06:23:36.8219566Z  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-24T06:23:36.8219848Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T06:23:36.8219850Z 2026-10-24T06:23:36.8219991Z ⚠ react(refs): Cannot access refs during render 2026-10-24T06:23:36.8220144Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:106:16] 2026-10-24T06:23:36.8220270Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T06:23:36.8220389Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T06:23:36.8220527Z ·  ──────────────────────────┬───────────────────────── 2026-10-24T06:23:36.8220724Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T06:23:36.8220845Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T06:23:36.8220895Z ╰──── 2026-10-24T06:23:36.8221352Z  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-24T06:23:36.8221637Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T06:23:36.8221639Z 2026-10-24T06:23:36.8221774Z ⚠ react(refs): Cannot access refs during render 2026-10-24T06:23:36.8221929Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:107:21] 2026-10-24T06:23:36.8222047Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T06:23:36.8222167Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T06:23:36.8222344Z ·  ───────────────────────┬────────────────────── 2026-10-24T06:23:36.8222569Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T06:23:36.8222635Z 108 │ [props.disabled], 2026-10-24T06:23:36.8222683Z ╰──── 2026-10-24T06:23:36.8223137Z  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-24T06:23:36.8223417Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T06:23:36.8223420Z 2026-10-24T06:23:36.8223558Z ⚠ react(refs): Cannot access refs during render 2026-10-24T06:23:36.8223715Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:249:9] 2026-10-24T06:23:36.8223826Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-24T06:23:36.8223928Z 249 │ latest.current = { rows, planners, moveThread }; 2026-10-24T06:23:36.8224028Z ·  ───┬──────┬─── 2026-10-24T06:23:36.8224202Z · │ ╰── Cannot update ref value during render 2026-10-24T06:23:36.8224313Z · ╰── This value is a ref 2026-10-24T06:23:36.8224366Z 250 │ 2026-10-24T06:23:36.8224414Z ╰──── 2026-10-24T06:23:36.8224868Z  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-24T06:23:36.8225152Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T06:23:36.8225155Z 2026-10-24T06:23:36.8225293Z ⚠ react(refs): Cannot access refs during render 2026-10-24T06:23:36.8225445Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:247:22] 2026-10-24T06:23:36.8225563Z 246 │ const [preview, setPreview] = useState(null); 2026-10-24T06:23:36.8225675Z 247 │ const translateY = useRef(new Animated.Value(0)).current; 2026-10-24T06:23:36.8225797Z ·  ──────────────────┬────────────────── 2026-10-24T06:23:36.8225958Z · ╰── Cannot access ref value during render 2026-10-24T06:23:36.8226070Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-24T06:23:36.8226122Z ╰──── 2026-10-24T06:23:36.8226569Z  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-24T06:23:36.8226872Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T06:23:36.8226875Z 2026-10-24T06:23:36.8227036Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T06:23:36.8227190Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:324:16] 2026-10-24T06:23:36.8227254Z 323 │ update(0); 2026-10-24T06:23:36.8227374Z 324 │ let last = performance.now(); 2026-10-24T06:23:36.8227491Z ·  ────────┬──────── 2026-10-24T06:23:36.8227628Z · ╰── Cannot call impure function 2026-10-24T06:23:36.8227693Z 325 │ const tick = () => { 2026-10-24T06:23:36.8227741Z ╰──── 2026-10-24T06:23:36.8228031Z  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-24T06:23:36.8228317Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T06:23:36.8228320Z 2026-10-24T06:23:36.8228506Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T06:23:36.8228664Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:99:15] 2026-10-24T06:23:36.8228724Z  98 │ () => 2026-10-24T06:23:36.8228786Z  99 │ Gesture.Pan() 2026-10-24T06:23:36.8228859Z ·  ─┬─ 2026-10-24T06:23:36.8228986Z · ╰── `Pan` may be a component 2026-10-24T06:23:36.8229063Z 100 │ .enabled(!props.disabled) 2026-10-24T06:23:36.8229110Z ╰──── 2026-10-24T06:23:36.8229375Z  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-24T06:23:36.8229812Z  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-24T06:23:36.8229817Z 2026-10-24T06:23:36.8229997Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T06:23:36.8230150Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:108:5] 2026-10-24T06:23:36.8230214Z 103 │ .runOnJS(true) 2026-10-24T06:23:36.8230310Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T06:23:36.8230396Z ·  ───┬── 2026-10-24T06:23:36.8230820Z · ╰── 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-24T06:23:36.8230945Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T06:23:36.8231071Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T06:23:36.8231193Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T06:23:36.8231257Z 108 │ [props.disabled], 2026-10-24T06:23:36.8231335Z ·  ────────┬─────── 2026-10-24T06:23:36.8231514Z · ╰── This dependency list is missing values used by the callback 2026-10-24T06:23:36.8231568Z 109 │ ); 2026-10-24T06:23:36.8231617Z ╰──── 2026-10-24T06:23:36.8231813Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T06:23:36.8232118Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.8232120Z 2026-10-24T06:23:36.8232445Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T06:23:36.8232627Z ╭─[apps/web/src/components/settings/SettingInheritance.tsx:163:24] 2026-10-24T06:23:36.8232680Z 162 │ keys, 2026-10-24T06:23:36.8232749Z 163 │ overridingProjects = [], 2026-10-24T06:23:36.8232829Z ·  ── 2026-10-24T06:23:36.8232892Z 164 │ onClearOverrides, 2026-10-24T06:23:36.8232939Z ╰──── 2026-10-24T06:23:36.8233248Z  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-24T06:23:36.8233251Z 2026-10-24T06:23:36.8233449Z ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed 2026-10-24T06:23:36.8233617Z ╭─[apps/server/src/sourceControl/SourceControlProviderRegistry.ts:15:13] 2026-10-24T06:23:36.8233689Z 14 │ } from "@t3tools/contracts"; 2026-10-24T06:23:36.8233776Z 15 │ import type {} from "@t3tools/contracts"; 2026-10-24T06:23:36.8233845Z ·  ── 2026-10-24T06:23:36.8234022Z 16 │ import { detectSourceControlProviderFromRemoteUrl } from "@t3tools/shared/sourceControl"; 2026-10-24T06:23:36.8234072Z ╰──── 2026-10-24T06:23:36.8234150Z  help: Remove empty braces 2026-10-24T06:23:36.8234153Z 2026-10-24T06:23:36.8234348Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T06:23:36.8234505Z ╭─[apps/web/src/components/settings/ProviderSettingsPanel.logic.ts:4:8] 2026-10-24T06:23:36.8234578Z 3 │ AuthProvidersManageScope, 2026-10-24T06:23:36.8234649Z 4 │ type AuthSessionState, 2026-10-24T06:23:36.8234730Z ·  ────────┬─────── 2026-10-24T06:23:36.8234871Z · ╰── 'AuthSessionState' is imported here 2026-10-24T06:23:36.8234933Z 5 │ type EnvironmentId, 2026-10-24T06:23:36.8234980Z ╰──── 2026-10-24T06:23:36.8235076Z  help: Consider removing this import. 2026-10-24T06:23:36.8235078Z 2026-10-24T06:23:36.8235513Z ⚠ 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-24T06:23:36.8235635Z ╭─[apps/server/src/serverSettings.test.ts:1741:32] 2026-10-24T06:23:36.8235800Z 1740 │ const model = createModelSelection(ProviderInstanceId.make("codex"), "gpt-5.5"); 2026-10-24T06:23:36.8235989Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-24T06:23:36.8236103Z ·  ─────────────────── 2026-10-24T06:23:36.8236207Z 1742 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-24T06:23:36.8236256Z ╰──── 2026-10-24T06:23:36.8236258Z 2026-10-24T06:23:36.8236691Z ⚠ 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-24T06:23:36.8236846Z ╭─[apps/server/src/serverSettings.test.ts:1742:34] 2026-10-24T06:23:36.8237025Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-24T06:23:36.8237172Z 1742 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-24T06:23:36.8237310Z ·  ─────────────────── 2026-10-24T06:23:36.8237503Z 1743 │ Schema.fromJsonString(Schema.Array(ProjectScript)), 2026-10-24T06:23:36.8237574Z ╰──── 2026-10-24T06:23:36.8237577Z 2026-10-24T06:23:36.8237768Z ⚠ eslint(no-unused-vars): Type 'EnvironmentId' is imported but never used. 2026-10-24T06:23:36.8237900Z ╭─[packages/client-runtime/src/state/sharedSettings.ts:2:3] 2026-10-24T06:23:36.8237962Z 1 │ import type { 2026-10-24T06:23:36.8238024Z 2 │ EnvironmentId, 2026-10-24T06:23:36.8238095Z ·  ──────┬────── 2026-10-24T06:23:36.8238226Z · ╰── 'EnvironmentId' is imported here 2026-10-24T06:23:36.8238309Z 3 │ ExecutionEnvironmentCapabilities, 2026-10-24T06:23:36.8238357Z ╰──── 2026-10-24T06:23:36.8238459Z  help: Consider removing this import. 2026-10-24T06:23:36.8238464Z 2026-10-24T06:23:36.8238645Z ⚠ eslint(no-unused-vars): Identifier 'Arr' is imported but never used. 2026-10-24T06:23:36.8238771Z ╭─[packages/client-runtime/src/state/threadSort.ts:4:13] 2026-10-24T06:23:36.8238883Z 3 │ import type { EnvironmentThreadShell } from "./models.ts"; 2026-10-24T06:23:36.8238961Z 4 │ import * as Arr from "effect/Array"; 2026-10-24T06:23:36.8239028Z ·  ─┬─ 2026-10-24T06:23:36.8239148Z · ╰── 'Arr' is imported here 2026-10-24T06:23:36.8239229Z 5 │ import * as Order from "effect/Order"; 2026-10-24T06:23:36.8239278Z ╰──── 2026-10-24T06:23:36.8239371Z  help: Consider removing this import. 2026-10-24T06:23:36.8239373Z 2026-10-24T06:23:36.8239564Z ⚠ eslint(no-unused-vars): Identifier 'Order' is imported but never used. 2026-10-24T06:23:36.8239692Z ╭─[packages/client-runtime/src/state/threadSort.ts:5:13] 2026-10-24T06:23:36.8239768Z 4 │ import * as Arr from "effect/Array"; 2026-10-24T06:23:36.8239844Z 5 │ import * as Order from "effect/Order"; 2026-10-24T06:23:36.8239915Z ·  ──┬── 2026-10-24T06:23:36.8240042Z · ╰── 'Order' is imported here 2026-10-24T06:23:36.8240091Z 6 │ 2026-10-24T06:23:36.8240138Z ╰──── 2026-10-24T06:23:36.8240231Z  help: Consider removing this import. 2026-10-24T06:23:36.8240233Z 2026-10-24T06:23:36.8240404Z ⚠ unicorn(no-new-array): Do not use `new Array(singleArgument)`. 2026-10-24T06:23:36.8240528Z ╭─[apps/web/src/terminal/ghostty/core.ts:194:19] 2026-10-24T06:23:36.8240650Z 193 │ const count = Math.min(CHUNK_SIZE, graphemeLength - start); 2026-10-24T06:23:36.8240738Z 194 │ const codes = new Array(count); 2026-10-24T06:23:36.8240843Z ·  ──────────────────────── 2026-10-24T06:23:36.8240943Z 195 │ for (let index = 0; index < count; index += 1) { 2026-10-24T06:23:36.8240991Z ╰──── 2026-10-24T06:23:36.8241402Z  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-24T06:23:36.8241405Z 2026-10-24T06:23:36.8241558Z ⚠ react(immutability): This value cannot be modified 2026-10-24T06:23:36.8241779Z ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:42:5] 2026-10-24T06:23:36.8241864Z 35 │ 2026-10-24T06:23:36.8241994Z 36 │ const inspectorProgress = useSharedValue(inspectorVisible ? 1 : 0); 2026-10-24T06:23:36.8242080Z ·  ────────┬──────── 2026-10-24T06:23:36.8242226Z · ╰── `inspectorProgress` originates here 2026-10-24T06:23:36.8242316Z 37 │ const { renderedInspectorWidth } = props; 2026-10-24T06:23:36.8242443Z 38 │ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0); 2026-10-24T06:23:36.8242493Z 39 │ 2026-10-24T06:23:36.8242569Z 40 │ const onClosed = props.onClosed; 2026-10-24T06:23:36.8242631Z 41 │ useEffect(() => { 2026-10-24T06:23:36.8242715Z 42 │ inspectorProgress.value = withTiming( 2026-10-24T06:23:36.8242794Z ·  ────────┬──────── 2026-10-24T06:23:36.8242951Z · ╰── `inspectorProgress` cannot be modified 2026-10-24T06:23:36.8243027Z 43 │ inspectorVisible ? 1 : 0, 2026-10-24T06:23:36.8243076Z ╰──── 2026-10-24T06:23:36.8243336Z  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-24T06:23:36.8243636Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T06:23:36.8243638Z 2026-10-24T06:23:36.8243788Z ⚠ react(immutability): This value cannot be modified 2026-10-24T06:23:36.8243941Z ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:67:7] 2026-10-24T06:23:36.8244031Z 37 │ const { renderedInspectorWidth } = props; 2026-10-24T06:23:36.8244164Z 38 │ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0); 2026-10-24T06:23:36.8244254Z ·  ──────────┬───────── 2026-10-24T06:23:36.8244402Z · ╰── `renderedContentWidth` originates here 2026-10-24T06:23:36.8244452Z 39 │ 2026-10-24T06:23:36.8244528Z 40 │ const onClosed = props.onClosed; 2026-10-24T06:23:36.8244591Z 41 │ useEffect(() => { 2026-10-24T06:23:36.8244675Z 42 │ inspectorProgress.value = withTiming( 2026-10-24T06:23:36.8244749Z 43 │ inspectorVisible ? 1 : 0, 2026-10-24T06:23:36.8244817Z 44 │ WORKSPACE_PANE_TIMING, 2026-10-24T06:23:36.8244881Z 45 │ (finished) => { 2026-10-24T06:23:36.8245013Z 46 │ if (finished === true && !inspectorVisible && onClosed !== undefined) { 2026-10-24T06:23:36.8245084Z 47 │ runOnJS(onClosed)(); 2026-10-24T06:23:36.8245139Z 48 │ } 2026-10-24T06:23:36.8245238Z 49 │ }, 2026-10-24T06:23:36.8245316Z 50 │ ); 2026-10-24T06:23:36.8245442Z 51 │ const targetWidth = inspectorVisible ? (inspectorWidth ?? 0) : 0; 2026-10-24T06:23:36.8245516Z 52 │ renderedInspectorWidth.set( 2026-10-24T06:23:36.8245655Z 53 │ resizing ? targetWidth : withTiming(targetWidth, WORKSPACE_PANE_TIMING), 2026-10-24T06:23:36.8245707Z 54 │ ); 2026-10-24T06:23:36.8245759Z 55 │ }, [ 2026-10-24T06:23:36.8245824Z 56 │ inspectorProgress, 2026-10-24T06:23:36.8245885Z 57 │ inspectorVisible, 2026-10-24T06:23:36.8245947Z 58 │ inspectorWidth, 2026-10-24T06:23:36.8246004Z 59 │ onClosed, 2026-10-24T06:23:36.8246072Z 60 │ renderedInspectorWidth, 2026-10-24T06:23:36.8246128Z 61 │ resizing, 2026-10-24T06:23:36.8246180Z 62 │ ]); 2026-10-24T06:23:36.8246231Z 63 │ 2026-10-24T06:23:36.8246291Z 64 │ useEffect(() => { 2026-10-24T06:23:36.8246383Z 65 │ const targetWidth = inspectorWidth ?? 0; 2026-10-24T06:23:36.8246467Z 66 │ if (!inspectorVisible || resizing) { 2026-10-24T06:23:36.8246560Z 67 │ renderedContentWidth.value = targetWidth; 2026-10-24T06:23:36.8246646Z ·  ──────────┬───────── 2026-10-24T06:23:36.8246843Z · ╰── `renderedContentWidth` cannot be modified 2026-10-24T06:23:36.8246901Z 68 │ return; 2026-10-24T06:23:36.8246951Z ╰──── 2026-10-24T06:23:36.8247211Z  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-24T06:23:36.8247505Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T06:23:36.8247508Z 2026-10-24T06:23:36.8247711Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T06:23:36.8247870Z ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:155:7] 2026-10-24T06:23:36.8247922Z 154 │ } 2026-10-24T06:23:36.8247985Z 155 │ }, [wrappedRender]); 2026-10-24T06:23:36.8248062Z ·  ──────┬────── 2026-10-24T06:23:36.8248207Z · ╰── Unnecessary dependency `wrappedRender` 2026-10-24T06:23:36.8248258Z 156 │ 2026-10-24T06:23:36.8248305Z ╰──── 2026-10-24T06:23:36.8248592Z  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-24T06:23:36.8248901Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.8248906Z 2026-10-24T06:23:36.8249139Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T06:23:36.8249295Z ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:800:42] 2026-10-24T06:23:36.8249347Z 799 │ > 2026-10-24T06:23:36.8249470Z 800 │ 2026-10-24T06:23:36.8249588Z ·  ──────────────────── 2026-10-24T06:23:36.8249685Z 801 │ 2026-10-24T06:23:36.8249732Z ╰──── 2026-10-24T06:23:36.8249950Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T06:23:36.8250136Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T06:23:36.8250185Z 2026-10-24T06:23:36.8250643Z ⚠ 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-24T06:23:36.8250785Z ╭─[apps/server/src/background/HostPowerMonitor.test.ts:133:11] 2026-10-24T06:23:36.8250912Z 132 │ const monitor = yield* HostPowerMonitor.HostPowerMonitor; 2026-10-24T06:23:36.8251052Z 133 │ ╭─▶ for ( 2026-10-24T06:23:36.8251151Z 134 │ │ let attempt = 0; 2026-10-24T06:23:36.8251321Z 135 │ │ attempt < 100 && (yield* monitor.snapshot).onBattery !== "true"; 2026-10-24T06:23:36.8251419Z 136 │ │ attempt += 1 2026-10-24T06:23:36.8251498Z 137 │ │ ) { 2026-10-24T06:23:36.8251606Z 138 │ │ yield* Effect.yieldNow; 2026-10-24T06:23:36.8251738Z 139 │ ╰─▶ } 2026-10-24T06:23:36.8251857Z 140 │ expect((yield* monitor.snapshot).onBattery).toBe("true"); 2026-10-24T06:23:36.8251905Z ╰──── 2026-10-24T06:23:36.8251908Z 2026-10-24T06:23:36.8252105Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T06:23:36.8252232Z ╭─[packages/client-runtime/src/state/filesystem.ts:3:8] 2026-10-24T06:23:36.8252299Z 2 │ AuthFilesystemReadScope, 2026-10-24T06:23:36.8252372Z 3 │ type AuthSessionState, 2026-10-24T06:23:36.8252458Z ·  ────────┬─────── 2026-10-24T06:23:36.8252600Z · ╰── 'AuthSessionState' is imported here 2026-10-24T06:23:36.8252670Z 4 │ type FilesystemBrowseEntry, 2026-10-24T06:23:36.8252719Z ╰──── 2026-10-24T06:23:36.8252813Z  help: Consider removing this import. 2026-10-24T06:23:36.8252816Z 2026-10-24T06:23:36.8252996Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-24T06:23:36.8253115Z ╭─[packages/client-runtime/src/state/shell.ts:189:5] 2026-10-24T06:23:36.8253219Z 186 │ let waiting = yield* Ref.get(awaitingCompletion); 2026-10-24T06:23:36.8253284Z 187 │ let next = initial; 2026-10-24T06:23:36.8253351Z ·  ──┬─ 2026-10-24T06:23:36.8253472Z · ╰── From this accumulator 2026-10-24T06:23:36.8253552Z 188 │ let receivedSnapshot = false; 2026-10-24T06:23:36.8253625Z 189 │ for (const item of items) { 2026-10-24T06:23:36.8253689Z ·  ─┬─ 2026-10-24T06:23:36.8253790Z · ╰── For this loop 2026-10-24T06:23:36.8253876Z 190 │ if (item.kind === "synchronized") { 2026-10-24T06:23:36.8253943Z 191 │ waiting = false; 2026-10-24T06:23:36.8254030Z 192 │ if (Option.isSome(next.snapshot)) { 2026-10-24T06:23:36.8254142Z 193 │ next = { ...next, status: "live", error: Option.none() }; 2026-10-24T06:23:36.8254225Z ·  ───┬─── 2026-10-24T06:23:36.8254353Z · ╰── From this spread 2026-10-24T06:23:36.8254408Z 194 │ } 2026-10-24T06:23:36.8254502Z ╰──── 2026-10-24T06:23:36.8254679Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-24T06:23:36.8254834Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T06:23:36.8254837Z 2026-10-24T06:23:36.8255035Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T06:23:36.8255163Z ╭─[apps/mobile/src/features/review/ReviewSheet.tsx:454:7] 2026-10-24T06:23:36.8255245Z 453 │ showAuxiliaryPane("inspector"); 2026-10-24T06:23:36.8255347Z 454 │ }, [environmentId, showAuxiliaryPane, threadId]); 2026-10-24T06:23:36.8255487Z ·  ──────┬────── ────┬─── 2026-10-24T06:23:36.8255686Z · │ ╰── Unnecessary dependency `threadId` 2026-10-24T06:23:36.8255832Z · ╰── Unnecessary dependency `environmentId` 2026-10-24T06:23:36.8255889Z 455 │ const { 2026-10-24T06:23:36.8255938Z ╰──── 2026-10-24T06:23:36.8256222Z  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-24T06:23:36.8256527Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.8256530Z 2026-10-24T06:23:36.8256721Z ⚠ react(static-components): Cannot create components during render 2026-10-24T06:23:36.8256878Z ╭─[apps/mobile/src/features/review/ReviewSheet.tsx:725:20] 2026-10-24T06:23:36.8256943Z 492 │ // same check. 2026-10-24T06:23:36.8257066Z 493 │ const NativeReviewDiffView = resolveNativeReviewDiffView(); 2026-10-24T06:23:36.8257183Z ·  ─────────────┬───────────── 2026-10-24T06:23:36.8257360Z · ╰── The component is created during render here 2026-10-24T06:23:36.8257508Z 494 │ const nativeReviewDiffViewRef = useRef(null); 2026-10-24T06:23:36.8257624Z 495 │ const showcasedReviewDrawRef = useRef(null); 2026-10-24T06:23:36.8257750Z 496 │ const [isPullRefreshing, setIsPullRefreshing] = useState(false); 2026-10-24T06:23:36.8257841Z 497 │ const handlePullToRefresh = async () => { 2026-10-24T06:23:36.8257915Z 498 │ setIsPullRefreshing(true); 2026-10-24T06:23:36.8257994Z 499 │ await refreshSelectedSection(); 2026-10-24T06:23:36.8258075Z 500 │ setIsPullRefreshing(false); 2026-10-24T06:23:36.8258130Z 501 │ }; 2026-10-24T06:23:36.8258269Z 502 │ const reviewFileNavigatorRef = useRef(null); 2026-10-24T06:23:36.8258407Z 503 │ const reviewFiles = parsedDiff.kind === "files" ? parsedDiff.files : []; 2026-10-24T06:23:36.8258513Z 504 │ const fileVisibility = useReviewFileVisibility({ 2026-10-24T06:23:36.8258600Z 505 │ threadKey: reviewCache.threadKey, 2026-10-24T06:23:36.8258687Z 506 │ sectionId: selectedSection?.id ?? null, 2026-10-24T06:23:36.8258752Z 507 │ files: reviewFiles, 2026-10-24T06:23:36.8258849Z 508 │ cachedExpandedFileIds: selectedSection?.id 2026-10-24T06:23:36.8258978Z 509 │ ? reviewCache.expandedFileIdsBySection[selectedSection.id] 2026-10-24T06:23:36.8259039Z 510 │ : undefined, 2026-10-24T06:23:36.8259129Z 511 │ cachedViewedFileIds: selectedSection?.id 2026-10-24T06:23:36.8259291Z 512 │ ? reviewCache.viewedFileIdsBySection[selectedSection.id] 2026-10-24T06:23:36.8259375Z 513 │ : undefined, 2026-10-24T06:23:36.8259426Z 514 │ }); 2026-10-24T06:23:36.8259611Z 515 │ const { collapsedFileIds, toggleExpandedFile, toggleViewedFile, viewedFileIds } = fileVisibility; 2026-10-24T06:23:36.8259738Z 516 │ const commentSelection = useReviewCommentSelectionController({ 2026-10-24T06:23:36.8259798Z 517 │ environmentId, 2026-10-24T06:23:36.8259856Z 518 │ threadId, 2026-10-24T06:23:36.8259921Z 519 │ selectedSection, 2026-10-24T06:23:36.8259989Z 520 │ nativeReviewDiffData, 2026-10-24T06:23:36.8260041Z 521 │ }); 2026-10-24T06:23:36.8260141Z 522 │ const nativeBridge = useNativeReviewDiffBridge({ 2026-10-24T06:23:36.8260223Z 523 │ threadKey: reviewCache.threadKey, 2026-10-24T06:23:36.8260313Z 524 │ sectionId: selectedSection?.id ?? null, 2026-10-24T06:23:36.8260390Z 525 │ diff: selectedSection?.diff, 2026-10-24T06:23:36.8260462Z 526 │ data: nativeReviewDiffData, 2026-10-24T06:23:36.8260528Z 527 │ collapsedFileIds, 2026-10-24T06:23:36.8260588Z 528 │ viewedFileIds, 2026-10-24T06:23:36.8260695Z 529 │ selectedRowIds: commentSelection.selectedRowIds, 2026-10-24T06:23:36.8260788Z 530 │ canHighlight: parsedDiff.kind === "files", 2026-10-24T06:23:36.8260840Z 531 │ }); 2026-10-24T06:23:36.8260911Z 532 │ const showcaseReviewKey = 2026-10-24T06:23:36.8261040Z 533 │ SHOWCASE_ENABLED && parsedDiff.kind === "files" && selectedSection 2026-10-24T06:23:36.8261239Z 534 │ ? `${reviewCache.threadKey}:${selectedSection.id}:${nativeBridge.tokensResetKey}:${nativeBridge.themeId}` 2026-10-24T06:23:36.8261298Z 535 │ : null; 2026-10-24T06:23:36.8261465Z 536 │ const handleNativeDebug = (event: NativeSyntheticEvent>) => { 2026-10-24T06:23:36.8261542Z 537 │ nativeBridge.onDebug(event); 2026-10-24T06:23:36.8261596Z 538 │ if ( 2026-10-24T06:23:36.8261673Z 539 │ showcaseReviewKey === null || 2026-10-24T06:23:36.8261790Z 540 │ showcasedReviewDrawRef.current === showcaseReviewKey || 2026-10-24T06:23:36.8261895Z 541 │ !isNativeReviewDiffDrawEvent(event.nativeEvent) 2026-10-24T06:23:36.8261948Z 542 │ ) { 2026-10-24T06:23:36.8262007Z 543 │ return; 2026-10-24T06:23:36.8262059Z 544 │ } 2026-10-24T06:23:36.8262166Z 545 │ showcasedReviewDrawRef.current = showcaseReviewKey; 2026-10-24T06:23:36.8262325Z 546 │ reportShowcaseSceneRendered({ scene: "review", themeId: nativeBridge.themeId }); 2026-10-24T06:23:36.8262378Z 547 │ }; 2026-10-24T06:23:36.8262427Z 548 │ 2026-10-24T06:23:36.8262546Z 549 │ const handleSelectFile = async (fileId: string | null) => { 2026-10-24T06:23:36.8262626Z 550 │ loadVisibleFile(fileId, true); 2026-10-24T06:23:36.8262714Z 551 │ commentSelection.clearSelection(); 2026-10-24T06:23:36.8262829Z 552 │ if (fileId !== null && collapsedFileIds.includes(fileId)) { 2026-10-24T06:23:36.8262903Z 553 │ toggleExpandedFile(fileId); 2026-10-24T06:23:36.8262955Z 554 │ } 2026-10-24T06:23:36.8263064Z 555 │ const nativeView = nativeReviewDiffViewRef.current; 2026-10-24T06:23:36.8263132Z 556 │ if (!nativeView) return; 2026-10-24T06:23:36.8263220Z 557 │ const result = await settlePromise(() => 2026-10-24T06:23:36.8263391Z 558 │ fileId === null ? nativeView.scrollToTop(true) : nativeView.scrollToFile(fileId, true), 2026-10-24T06:23:36.8263443Z 559 │ ); 2026-10-24T06:23:36.8263529Z 560 │ if (AsyncResult.isFailure(result)) { 2026-10-24T06:23:36.8263759Z 561 │ console.error("[review] Failed to navigate to diff file", squashAtomCommandFailure(result)); 2026-10-24T06:23:36.8263843Z 562 │ } 2026-10-24T06:23:36.8263894Z 563 │ }; 2026-10-24T06:23:36.8263975Z 564 │ const handleVisibleFileChange = ( 2026-10-24T06:23:36.8264101Z 565 │ event: NativeSyntheticEvent<{ readonly fileId?: string | null }>, 2026-10-24T06:23:36.8264156Z 566 │ ) => { 2026-10-24T06:23:36.8264261Z 567 │ loadVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-24T06:23:36.8264424Z 568 │ reviewFileNavigatorRef.current?.setVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-24T06:23:36.8264473Z 569 │ }; 2026-10-24T06:23:36.8264551Z 570 │ const renderInspector = () => ( 2026-10-24T06:23:36.8264617Z 571 │ void handleSelectFile(fileId)} 2026-10-24T06:23:36.8265117Z 577 │ /> 2026-10-24T06:23:36.8265168Z 578 │ ); 2026-10-24T06:23:36.8265218Z 579 │ 2026-10-24T06:23:36.8265396Z 580 │ const handleNativeToggleFile = (event: NativeSyntheticEvent<{ readonly fileId?: string }>) => { 2026-10-24T06:23:36.8265479Z 581 │ const { fileId } = event.nativeEvent; 2026-10-24T06:23:36.8265540Z 582 │ if (fileId) { 2026-10-24T06:23:36.8265617Z 583 │ loadVisibleFile(fileId, true); 2026-10-24T06:23:36.8265691Z 584 │ toggleExpandedFile(fileId); 2026-10-24T06:23:36.8265743Z 585 │ } 2026-10-24T06:23:36.8265794Z 586 │ }; 2026-10-24T06:23:36.8265843Z 587 │ 2026-10-24T06:23:36.8265931Z 588 │ const handleNativeToggleViewedFile = ( 2026-10-24T06:23:36.8266048Z 589 │ event: NativeSyntheticEvent<{ readonly fileId?: string }>, 2026-10-24T06:23:36.8266101Z 590 │ ) => { 2026-10-24T06:23:36.8266183Z 591 │ const { fileId } = event.nativeEvent; 2026-10-24T06:23:36.8266242Z 592 │ if (fileId) { 2026-10-24T06:23:36.8266314Z 593 │ toggleViewedFile(fileId); 2026-10-24T06:23:36.8266366Z 594 │ } 2026-10-24T06:23:36.8266418Z 595 │ }; 2026-10-24T06:23:36.8266466Z 596 │ 2026-10-24T06:23:36.8266537Z 597 │ const parsedDiffNotice = 2026-10-24T06:23:36.8266692Z 598 │ parsedDiff.kind === "files" || parsedDiff.kind === "raw" ? parsedDiff.notice : null; 2026-10-24T06:23:36.8266835Z 599 │ const hasCachedSelectedDiff = selectedSection?.diff != null; 2026-10-24T06:23:36.8266987Z 600 │ const hasAnyCachedDiff = reviewSections.some((section) => section.diff != null); 2026-10-24T06:23:36.8267109Z 601 │ const sectionMenu = buildReviewSectionMenu(reviewSections); 2026-10-24T06:23:36.8267265Z 602 │ const { showConnectionNotice, showSectionToolbar } = resolveReviewAvailability({ 2026-10-24T06:23:36.8267371Z 603 │ hasEnvironmentPresentation: environment.isReady, 2026-10-24T06:23:36.8267468Z 604 │ isEnvironmentConnected: isEnvironmentReady, 2026-10-24T06:23:36.8267536Z 605 │ hasCachedSelectedDiff, 2026-10-24T06:23:36.8267598Z 606 │ hasAnyCachedDiff, 2026-10-24T06:23:36.8267648Z 607 │ }); 2026-10-24T06:23:36.8267732Z 608 │ const handleRetryEnvironment = () => { 2026-10-24T06:23:36.8267817Z 609 │ void retryEnvironment(environmentId); 2026-10-24T06:23:36.8267867Z 610 │ }; 2026-10-24T06:23:36.8267947Z 611 │ const handleReturnToThread = () => { 2026-10-24T06:23:36.8268021Z 612 │ if (navigation.canGoBack()) { 2026-10-24T06:23:36.8268149Z 613 │ navigation.goBack(); 2026-10-24T06:23:36.8268236Z 614 │ return; 2026-10-24T06:23:36.8268286Z 615 │ } 2026-10-24T06:23:36.8268365Z 616 │ navigation.navigate("Thread", { 2026-10-24T06:23:36.8268451Z 617 │ environmentId: String(environmentId), 2026-10-24T06:23:36.8268526Z 618 │ threadId: String(threadId), 2026-10-24T06:23:36.8268578Z 619 │ }); 2026-10-24T06:23:36.8268633Z 620 │ }; 2026-10-24T06:23:36.8268708Z 621 │ const androidHeaderSubtitle = [ 2026-10-24T06:23:36.8268776Z 622 │ selectedSection?.title, 2026-10-24T06:23:36.8268851Z 623 │ headerDiffSummary.additions, 2026-10-24T06:23:36.8268928Z 624 │ headerDiffSummary.deletions, 2026-10-24T06:23:36.8268980Z 625 │ ] 2026-10-24T06:23:36.8269081Z 626 │ .filter((part): part is string => Boolean(part)) 2026-10-24T06:23:36.8269142Z 627 │ .join(" · "); 2026-10-24T06:23:36.8269197Z 628 │ 2026-10-24T06:23:36.8269274Z 629 │ const showChangedFilesPane = 2026-10-24T06:23:36.8269343Z 630 │ !showConnectionNotice && 2026-10-24T06:23:36.8269415Z 631 │ selectedSection !== null && 2026-10-24T06:23:36.8269491Z 632 │ parsedDiff.kind === "files" && 2026-10-24T06:23:36.8269567Z 633 │ NativeReviewDiffView !== null; 2026-10-24T06:23:36.8269730Z 634 │ useRegisterWorkspaceInspector(showChangedFilesPane ? renderInspector : undefined); 2026-10-24T06:23:36.8269897Z 635 │ const showChangedFilesToggle = panes.supportsAuxiliaryPane && showChangedFilesPane; 2026-10-24T06:23:36.8269947Z 636 │ 2026-10-24T06:23:36.8270017Z 637 │ const listHeader = (() => { 2026-10-24T06:23:36.8270098Z 638 │ const children: ReactElement[] = []; 2026-10-24T06:23:36.8270148Z 639 │ 2026-10-24T06:23:36.8270209Z 640 │ if (error) { 2026-10-24T06:23:36.8270279Z 641 │ children.push( 2026-10-24T06:23:36.8270338Z 642 │ 2026-10-24T06:23:36.8270969Z 649 │ Review unavailable 2026-10-24T06:23:36.8271122Z 650 │ {error} 2026-10-24T06:23:36.8271180Z 651 │ , 2026-10-24T06:23:36.8271233Z 652 │ ); 2026-10-24T06:23:36.8271283Z 653 │ } 2026-10-24T06:23:36.8271332Z 654 │ 2026-10-24T06:23:36.8271451Z 655 │ if (parsedDiffNotice) { 2026-10-24T06:23:36.8271638Z 656 │ children.push(); 2026-10-24T06:23:36.8271688Z 657 │ } 2026-10-24T06:23:36.8271737Z 658 │ 2026-10-24T06:23:36.8271812Z 659 │ if (children.length === 0) { 2026-10-24T06:23:36.8271873Z 660 │ return null; 2026-10-24T06:23:36.8271923Z 661 │ } 2026-10-24T06:23:36.8271973Z 662 │ 2026-10-24T06:23:36.8272040Z 663 │ return <>{children}; 2026-10-24T06:23:36.8272092Z 664 │ })(); 2026-10-24T06:23:36.8272160Z 665 │ const headerSubtitle = [ 2026-10-24T06:23:36.8272235Z 666 │ headerDiffSummary.additions, 2026-10-24T06:23:36.8272309Z 667 │ headerDiffSummary.deletions, 2026-10-24T06:23:36.8272386Z 668 │ pendingReviewCommentCount > 0 2026-10-24T06:23:36.8272560Z 669 │ ? `${pendingReviewCommentCount} comment${pendingReviewCommentCount === 1 ? "" : "s"}` 2026-10-24T06:23:36.8272621Z 670 │ : null, 2026-10-24T06:23:36.8272674Z 671 │ ] 2026-10-24T06:23:36.8272735Z 672 │ .filter(Boolean) 2026-10-24T06:23:36.8272795Z 673 │ .join(" · "); 2026-10-24T06:23:36.8272926Z 674 │ const headerTitleText = selectedSection?.title ?? "Review changes"; 2026-10-24T06:23:36.8272979Z 675 │ 2026-10-24T06:23:36.8273035Z 676 │ return ( 2026-10-24T06:23:36.8273092Z 677 │ <> 2026-10-24T06:23:36.8273158Z 678 │ 2026-10-24T06:23:36.8274478Z 694 │ 2026-10-24T06:23:36.8274541Z 695 │ 2026-10-24T06:23:36.8274666Z 696 │ 2026-10-24T06:23:36.8274749Z 697 │ {showConnectionNotice ? ( 2026-10-24T06:23:36.8274889Z 698 │ 2026-10-24T06:23:36.8274976Z 699 │ 2026-10-24T06:23:36.8276060Z 711 │ 2026-10-24T06:23:36.8276215Z 712 │ ) : selectedSection && parsedDiff.kind === "files" && NativeReviewDiffView ? ( 2026-10-24T06:23:36.8276276Z 713 │ 2026-10-24T06:23:36.8276773Z 719 │ 2026-10-24T06:23:36.8277293Z 723 │ {listHeader} 2026-10-24T06:23:36.8277520Z 724 │ 2026-10-24T06:23:36.8277647Z 725 │ { 2026-10-24T06:23:36.8289248Z ·  ────┬──── 2026-10-24T06:23:36.8289390Z · ╰── This is the containing effect 2026-10-24T06:23:36.8289478Z 57 │ scheduler.reset(); 2026-10-24T06:23:36.8289613Z 58 │ highlightedRowIdsRef.current = new Set(); 2026-10-24T06:23:36.8289722Z 59 │ visibleChunkIndexRef.current = 0; 2026-10-24T06:23:36.8289847Z 60 │ setVisibleRange({ firstRowIndex: 0, lastRowIndex: 80 }); 2026-10-24T06:23:36.8289957Z ·  ───────┬─────── 2026-10-24T06:23:36.8290161Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T06:23:36.8290306Z 61 │ setTokensPatchJson(createEmptyTokenPatch(resetKey)); 2026-10-24T06:23:36.8290366Z ╰──── 2026-10-24T06:23:36.8290981Z  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-24T06:23:36.8291318Z  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-24T06:23:36.8291321Z 2026-10-24T06:23:36.8291563Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T06:23:36.8291757Z ╭─[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:63:7] 2026-10-24T06:23:36.8291863Z 62 │ return () => scheduler.cancel(); 2026-10-24T06:23:36.8291973Z 63 │ }, [enabled, resetKey, rows.length, scheduler]); 2026-10-24T06:23:36.8292141Z ·  ───┬─── ─────┬───── 2026-10-24T06:23:36.8292361Z · │ ╰── Unnecessary dependency `rows.length` 2026-10-24T06:23:36.8292525Z · ╰── Unnecessary dependency `enabled` 2026-10-24T06:23:36.8292588Z 64 │ 2026-10-24T06:23:36.8292656Z ╰──── 2026-10-24T06:23:36.8293037Z  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-24T06:23:36.8293397Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.8293400Z 2026-10-24T06:23:36.8293626Z ⚠ eslint(no-unused-vars): Function 'describeSchedule' is declared but never used. 2026-10-24T06:23:36.8293761Z ╭─[apps/server/src/scheduledTasks/Schedule.ts:79:10] 2026-10-24T06:23:36.8293841Z 78 │ 2026-10-24T06:23:36.8294010Z 79 │ function describeSchedule(schedule: ScheduledTaskSchedule): string { 2026-10-24T06:23:36.8294121Z ·  ────────┬─────── 2026-10-24T06:23:36.8294277Z · ╰── 'describeSchedule' is declared here 2026-10-24T06:23:36.8294399Z 80 │ if (schedule.type === "webhook") return "On webhook"; 2026-10-24T06:23:36.8294500Z ╰──── 2026-10-24T06:23:36.8294629Z  help: Consider removing this declaration. 2026-10-24T06:23:36.8294631Z 2026-10-24T06:23:36.8294989Z ⚠ 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-24T06:23:36.8295147Z ╭─[apps/server/src/vcs/GitVcsDriverCore.test.ts:1786:34] 2026-10-24T06:23:36.8295306Z 1785 │ const stat = branch.files!.find((file) => file.path === path)!; 2026-10-24T06:23:36.8295492Z 1786 │ const request = yield* Schema.decodeEffect(ReviewDiffPreviewInput)({ 2026-10-24T06:23:36.8295629Z ·  ─────────────────── 2026-10-24T06:23:36.8295704Z 1787 │ cwd, 2026-10-24T06:23:36.8295776Z ╰──── 2026-10-24T06:23:36.8295779Z 2026-10-24T06:23:36.8296080Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T06:23:36.8296270Z ╭─[apps/mobile/src/features/review/ReviewCommentComposerSheet.tsx:103:7] 2026-10-24T06:23:36.8296332Z 100 │ 2026-10-24T06:23:36.8296420Z 101 │ useEffect(() => { 2026-10-24T06:23:36.8296525Z ·  ────┬──── 2026-10-24T06:23:36.8296684Z · ╰── This is the containing effect 2026-10-24T06:23:36.8296829Z 102 │ if (!target || selectedLines.length === 0) { 2026-10-24T06:23:36.8296936Z 103 │ setHighlightedLinesById({}); 2026-10-24T06:23:36.8297049Z ·  ───────────┬─────────── 2026-10-24T06:23:36.8297273Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T06:23:36.8297395Z 104 │ return; 2026-10-24T06:23:36.8297505Z ╰──── 2026-10-24T06:23:36.8298109Z  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-24T06:23:36.8298454Z  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-24T06:23:36.8298457Z 2026-10-24T06:23:36.8298737Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T06:23:36.8298933Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:107:5] 2026-10-24T06:23:36.8299019Z 104 │ 2026-10-24T06:23:36.8299100Z 105 │ useEffect(() => { 2026-10-24T06:23:36.8299212Z ·  ────┬──── 2026-10-24T06:23:36.8299355Z · ╰── This is the containing effect 2026-10-24T06:23:36.8299461Z 106 │ clearReviewCommentTarget(); 2026-10-24T06:23:36.8299578Z 107 │ setPendingNativeCommentSelection(null); 2026-10-24T06:23:36.8299712Z ·  ────────────────┬─────────────── 2026-10-24T06:23:36.8299903Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T06:23:36.8300004Z 108 │ }, [selectedSection?.id]); 2026-10-24T06:23:36.8300078Z ╰──── 2026-10-24T06:23:36.8300682Z  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-24T06:23:36.8301038Z  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-24T06:23:36.8301040Z 2026-10-24T06:23:36.8301304Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T06:23:36.8301510Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:112:7] 2026-10-24T06:23:36.8301587Z 109 │ 2026-10-24T06:23:36.8301675Z 110 │ useEffect(() => { 2026-10-24T06:23:36.8301761Z ·  ────┬──── 2026-10-24T06:23:36.8301922Z · ╰── This is the containing effect 2026-10-24T06:23:36.8302033Z 111 │ if (activeCommentTarget === null) { 2026-10-24T06:23:36.8302150Z 112 │ setPendingNativeCommentSelection(null); 2026-10-24T06:23:36.8302276Z ·  ────────────────┬─────────────── 2026-10-24T06:23:36.8302486Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T06:23:36.8302566Z 113 │ } 2026-10-24T06:23:36.8302644Z ╰──── 2026-10-24T06:23:36.8303250Z  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-24T06:23:36.8303627Z  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-24T06:23:36.8303670Z 2026-10-24T06:23:36.8303874Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T06:23:36.8304078Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:108:7] 2026-10-24T06:23:36.8304196Z 107 │ setPendingNativeCommentSelection(null); 2026-10-24T06:23:36.8304308Z 108 │ }, [selectedSection?.id]); 2026-10-24T06:23:36.8304403Z ·  ─────────┬───────── 2026-10-24T06:23:36.8304589Z · ╰── Unnecessary dependency `selectedSection?.id` 2026-10-24T06:23:36.8304669Z 109 │ 2026-10-24T06:23:36.8304749Z ╰──── 2026-10-24T06:23:36.8305057Z  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-24T06:23:36.8305388Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.8305390Z 2026-10-24T06:23:36.8305580Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T06:23:36.8305727Z ╭─[apps/web/src/components/CommandPalette.tsx:1996:20] 2026-10-24T06:23:36.8305886Z 1995 │ title: inferProjectTitleFromPath(destinationPath), 2026-10-24T06:23:36.8305994Z 1996 │ createdAt: new Date().toISOString(), 2026-10-24T06:23:36.8306108Z ·  ─────┬──── 2026-10-24T06:23:36.8306282Z · ╰── Cannot call impure function 2026-10-24T06:23:36.8306422Z 1997 │ remoteUrl: addProjectCloneFlow.remoteUrl, 2026-10-24T06:23:36.8306490Z ╰──── 2026-10-24T06:23:36.8306817Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T06:23:36.8307131Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T06:23:36.8307134Z 2026-10-24T06:23:36.8307339Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T06:23:36.8307507Z ╭─[apps/mobile/src/features/review/ReviewCommentCard.tsx:223:31] 2026-10-24T06:23:36.8307641Z 222 │ ? snippetTokens.map((line, lineIndex) => ( 2026-10-24T06:23:36.8307765Z 223 │ 2026-10-24T06:23:36.8307897Z ·  ─────────────── 2026-10-24T06:23:36.8308019Z 224 │ {lineIndex > 0 ? "\n" : ""} 2026-10-24T06:23:36.8308085Z ╰──── 2026-10-24T06:23:36.8308256Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T06:23:36.8308258Z 2026-10-24T06:23:36.8308470Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T06:23:36.8308634Z ╭─[apps/mobile/src/features/review/ReviewCommentCard.tsx:227:25] 2026-10-24T06:23:36.8308730Z 226 │ 0 ? value : null; 2026-10-24T06:23:36.8311542Z ╰──── 2026-10-24T06:23:36.8311667Z  help: Consider removing this declaration. 2026-10-24T06:23:36.8311670Z 2026-10-24T06:23:36.8311994Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T06:23:36.8312185Z ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:473:19] 2026-10-24T06:23:36.8312256Z 472 │ onFilters, 2026-10-24T06:23:36.8312354Z 473 │ authorOptions = [], 2026-10-24T06:23:36.8312460Z ·  ── 2026-10-24T06:23:36.8312559Z 474 │ labelOptions = [], 2026-10-24T06:23:36.8312619Z ╰──── 2026-10-24T06:23:36.8312959Z  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-24T06:23:36.8312962Z 2026-10-24T06:23:36.8313251Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T06:23:36.8313456Z ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:474:18] 2026-10-24T06:23:36.8313548Z 473 │ authorOptions = [], 2026-10-24T06:23:36.8313622Z 474 │ labelOptions = [], 2026-10-24T06:23:36.8313732Z ·  ── 2026-10-24T06:23:36.8313826Z 475 │ optionScope, 2026-10-24T06:23:36.8313909Z ╰──── 2026-10-24T06:23:36.8314231Z  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-24T06:23:36.8314234Z 2026-10-24T06:23:36.8314449Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T06:23:36.8314583Z ╭─[apps/mobile/src/lib/useHoverGesture.ts:8:15] 2026-10-24T06:23:36.8314679Z 7 │ () => 2026-10-24T06:23:36.8314754Z 8 │ Gesture.Hover() 2026-10-24T06:23:36.8314910Z ·  ──┬── 2026-10-24T06:23:36.8315096Z · ╰── `Hover` may be a component 2026-10-24T06:23:36.8315198Z 9 │ .manualActivation(true) 2026-10-24T06:23:36.8315268Z ╰──── 2026-10-24T06:23:36.8315568Z  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-24T06:23:36.8316034Z  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-24T06:23:36.8316037Z 2026-10-24T06:23:36.8316238Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T06:23:36.8320074Z ╭─[apps/web/src/components/pullRequest/PullRequestChecksPopover.tsx:88:15] 2026-10-24T06:23:36.8320193Z 87 │
  • ` or list indent), 2026-10-24T06:23:36.8323899Z ╰──── 2026-10-24T06:23:36.8324150Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T06:23:36.8324153Z 2026-10-24T06:23:36.8324402Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T06:23:36.8324531Z ╭─[packages/provider-grok/src/server/adapter.ts:408:7] 2026-10-24T06:23:36.8324585Z 407 │ 2026-10-24T06:23:36.8324655Z 408 │ const layer: Layer.Layer< 2026-10-24T06:23:36.8324724Z ·  ──┬── 2026-10-24T06:23:36.8324847Z · ╰── 'layer' is declared here 2026-10-24T06:23:36.8324944Z 409 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T06:23:36.8324998Z ╰──── 2026-10-24T06:23:36.8325101Z  help: Consider removing this declaration. 2026-10-24T06:23:36.8325104Z 2026-10-24T06:23:36.8325323Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-24T06:23:36.8325464Z ╭─[packages/client-runtime/src/operations/projects.ts:228:51] 2026-10-24T06:23:36.8325526Z 227 │ ): string { 2026-10-24T06:23:36.8325679Z 228 │ const folderName = workspaceRoot.split(/[\\/]/).filter(Boolean).at(-1) ?? ""; 2026-10-24T06:23:36.8325789Z ·  ────── 2026-10-24T06:23:36.8325921Z 229 │ return target.owner ? `${target.owner}/${folderName}` : folderName; 2026-10-24T06:23:36.8325973Z ╰──── 2026-10-24T06:23:36.8326146Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T06:23:36.8326151Z 2026-10-24T06:23:36.8326614Z ⚠ 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-24T06:23:36.8326827Z ╭─[apps/mobile/src/features/agent-awareness/remoteRegistration.test.ts:223:5] 2026-10-24T06:23:36.8326901Z 222 │ let idlePasses = 0; 2026-10-24T06:23:36.8327044Z 223 │ ╭─▶ for (;;) { 2026-10-24T06:23:36.8327181Z 224 │ │ yield* Effect.promise(() => Promise.resolve()); 2026-10-24T06:23:36.8327324Z 225 │ │ const pending = backgroundRuntime.pending.shift(); 2026-10-24T06:23:36.8327425Z 226 │ │ if (!pending) { 2026-10-24T06:23:36.8327521Z 227 │ │ idlePasses++; 2026-10-24T06:23:36.8327625Z 228 │ │ if (idlePasses >= 3) { 2026-10-24T06:23:36.8327709Z 229 │ │ return; 2026-10-24T06:23:36.8327788Z 230 │ │ } 2026-10-24T06:23:36.8327874Z 231 │ │ continue; 2026-10-24T06:23:36.8327949Z 232 │ │ } 2026-10-24T06:23:36.8328039Z 233 │ │ idlePasses = 0; 2026-10-24T06:23:36.8328153Z 234 │ │ const exit = yield* Effect.exit( 2026-10-24T06:23:36.8328362Z 235 │ │ pending.operation as Effect.Effect, 2026-10-24T06:23:36.8328497Z 236 │ │ ); 2026-10-24T06:23:36.8328628Z 237 │ │ yield* Effect.sync(() => { 2026-10-24T06:23:36.8328733Z 238 │ │ pending.resolve(exit); 2026-10-24T06:23:36.8328811Z 239 │ │ }); 2026-10-24T06:23:36.8328941Z 240 │ ╰─▶ } 2026-10-24T06:23:36.8328996Z 241 │ }, 2026-10-24T06:23:36.8329047Z ╰──── 2026-10-24T06:23:36.8329050Z 2026-10-24T06:23:36.8329302Z ⚠ eslint(no-unused-vars): Function 'promptResponseHasMissingXAiStopReason' is declared but never used. 2026-10-24T06:23:36.8329452Z ╭─[packages/provider-grok/src/server/xaiAcpExtension.ts:1620:10] 2026-10-24T06:23:36.8329503Z 1619 │ 2026-10-24T06:23:36.8329715Z 1620 │ function promptResponseHasMissingXAiStopReason(response: EffectAcpSchema.PromptResponse): boolean { 2026-10-24T06:23:36.8329837Z ·  ──────────────────┬────────────────── 2026-10-24T06:23:36.8330039Z · ╰── 'promptResponseHasMissingXAiStopReason' is declared here 2026-10-24T06:23:36.8330114Z 1621 │ const meta = response._meta; 2026-10-24T06:23:36.8330167Z ╰──── 2026-10-24T06:23:36.8330269Z  help: Consider removing this declaration. 2026-10-24T06:23:36.8330272Z 2026-10-24T06:23:36.8330526Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T06:23:36.8330672Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:400:5] 2026-10-24T06:23:36.8330721Z 398 │ 2026-10-24T06:23:36.8330789Z 399 │ useEffect(() => { 2026-10-24T06:23:36.8330868Z ·  ────┬──── 2026-10-24T06:23:36.8331000Z · ╰── This is the containing effect 2026-10-24T06:23:36.8331089Z 400 │ setInspectorSelection((current) => { 2026-10-24T06:23:36.8331174Z ·  ──────────┬────────── 2026-10-24T06:23:36.8331349Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T06:23:36.8331451Z 401 │ if (props.renderInspector === undefined) { 2026-10-24T06:23:36.8331499Z ╰──── 2026-10-24T06:23:36.8332084Z  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-24T06:23:36.8332447Z  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-24T06:23:36.8332478Z 2026-10-24T06:23:36.8332686Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T06:23:36.8332835Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:528:24] 2026-10-24T06:23:36.8332990Z 527 │ const inspectorHeaderInset = Platform.OS === "ios" ? 0 : safeAreaInsets.top; 2026-10-24T06:23:36.8333156Z 528 │ ╭─▶ const GitInspector = () => ( 2026-10-24T06:23:36.8333251Z 529 │ │ 2026-10-24T06:23:36.8333853Z 534 │ ╰─▶ ); 2026-10-24T06:23:36.8333930Z 535 │ const FilesInspector = () => 2026-10-24T06:23:36.8333982Z ╰──── 2026-10-24T06:23:36.8334195Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-24T06:23:36.8334197Z 2026-10-24T06:23:36.8334404Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T06:23:36.8334548Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:535:26] 2026-10-24T06:23:36.8334613Z 534 │ ); 2026-10-24T06:23:36.8334776Z 535 │ ╭─▶ const FilesInspector = () => 2026-10-24T06:23:36.8334923Z 536 │ │ selectedThread !== null && selectedThreadCwd !== null ? ( 2026-10-24T06:23:36.8335025Z 537 │ │ 2026-10-24T06:23:36.8335982Z 545 │ ╰─▶ ) : null; 2026-10-24T06:23:36.8336126Z 546 │ const RouteInspector = () => props.renderInspector?.(inspectorHeaderInset); 2026-10-24T06:23:36.8336176Z ╰──── 2026-10-24T06:23:36.8336388Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-24T06:23:36.8336391Z 2026-10-24T06:23:36.8336568Z ⚠ eslint(no-unused-vars): Type 'Scope' is imported but never used. 2026-10-24T06:23:36.8336699Z ╭─[apps/server/src/provider/ProviderAuthService.ts:15:18] 2026-10-24T06:23:36.8336817Z 14 │ import * as Layer from "effect/Layer"; 2026-10-24T06:23:36.8336963Z 15 │ import type * as Scope from "effect/Scope"; 2026-10-24T06:23:36.8337070Z ·  ──┬── 2026-10-24T06:23:36.8337202Z · ╰── 'Scope' is imported here 2026-10-24T06:23:36.8337288Z 16 │ import * as Stream from "effect/Stream"; 2026-10-24T06:23:36.8337340Z ╰──── 2026-10-24T06:23:36.8337436Z  help: Consider removing this import. 2026-10-24T06:23:36.8337438Z 2026-10-24T06:23:36.8337686Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T06:23:36.8337833Z ╭─[apps/mobile/src/features/threads/use-worktree-setup.ts:30:40] 2026-10-24T06:23:36.8337991Z 28 │ const snapshot = resolveWorktreeSetupSnapshot(input.threadId, query.data, live); 2026-10-24T06:23:36.8338055Z 29 │ useEffect(() => { 2026-10-24T06:23:36.8338129Z ·  ────┬──── 2026-10-24T06:23:36.8338261Z · ╰── This is the containing effect 2026-10-24T06:23:36.8338380Z 30 │ if (snapshot && snapshot !== live) setHeld({ key, snapshot }); 2026-10-24T06:23:36.8338483Z ·  ───┬─── 2026-10-24T06:23:36.8338670Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T06:23:36.8338742Z 31 │ }, [key, live, snapshot]); 2026-10-24T06:23:36.8338794Z ╰──── 2026-10-24T06:23:36.8339381Z  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-24T06:23:36.8339693Z  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-24T06:23:36.8339695Z 2026-10-24T06:23:36.8339943Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T06:23:36.8340096Z ╭─[apps/mobile/src/features/terminal/terminalLaunchContext.ts:117:5] 2026-10-24T06:23:36.8340260Z 112 │ const [entry, setEntry] = useState(() => ({ key: input.targetKey, location: candidate })); 2026-10-24T06:23:36.8340325Z 113 │ useEffect(() => { 2026-10-24T06:23:36.8340392Z ·  ────┬──── 2026-10-24T06:23:36.8340524Z · ╰── This is the containing effect 2026-10-24T06:23:36.8340690Z 114 │ if (entry.key === input.targetKey && (entry.location !== null || candidate === null)) { 2026-10-24T06:23:36.8340756Z 115 │ return; 2026-10-24T06:23:36.8340810Z 116 │ } 2026-10-24T06:23:36.8340926Z 117 │ setEntry({ key: input.targetKey, location: candidate }); 2026-10-24T06:23:36.8340998Z ·  ────┬─── 2026-10-24T06:23:36.8341167Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T06:23:36.8341287Z 118 │ }, [candidate, entry.key, entry.location, input.targetKey]); 2026-10-24T06:23:36.8341340Z ╰──── 2026-10-24T06:23:36.8341968Z  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-24T06:23:36.8342316Z  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-24T06:23:36.8342319Z 2026-10-24T06:23:36.8342508Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T06:23:36.8342661Z ╭─[apps/mobile/src/features/terminal/TerminalContextSheet.tsx:72:15] 2026-10-24T06:23:36.8342727Z 71 │ label.name.trim().toLowerCase()); 2026-10-24T06:23:36.8345904Z ·  ───────────────────────────────────────────────────────────────────── 2026-10-24T06:23:36.8346052Z 266 │ const holds = (label: string) => labels.includes(label.trim().toLowerCase()); 2026-10-24T06:23:36.8346102Z ╰──── 2026-10-24T06:23:36.8346178Z  help: Switch to `Set` 2026-10-24T06:23:36.8346181Z 2026-10-24T06:23:36.8346430Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T06:23:36.8346585Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:444:5] 2026-10-24T06:23:36.8346648Z 434 │ : null; 2026-10-24T06:23:36.8346725Z 435 │ useEffect(() => { 2026-10-24T06:23:36.8346794Z ·  ────┬──── 2026-10-24T06:23:36.8347004Z · ╰── This is the containing effect 2026-10-24T06:23:36.8347099Z 436 │ if ( 2026-10-24T06:23:36.8347175Z 437 │ props.active === false || 2026-10-24T06:23:36.8347247Z 438 │ activeDraftKey !== null || 2026-10-24T06:23:36.8347329Z 439 │ editingPendingTask !== null || 2026-10-24T06:23:36.8347404Z 440 │ selectedProject === null 2026-10-24T06:23:36.8347462Z 441 │ ) { 2026-10-24T06:23:36.8347519Z 442 │ return; 2026-10-24T06:23:36.8347574Z 443 │ } 2026-10-24T06:23:36.8347643Z 444 │ setActiveDraftKey( 2026-10-24T06:23:36.8347723Z ·  ────────┬──────── 2026-10-24T06:23:36.8347890Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T06:23:36.8347961Z 445 │ createNewTaskDraft({ 2026-10-24T06:23:36.8348017Z ╰──── 2026-10-24T06:23:36.8348603Z  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-24T06:23:36.8348915Z  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-24T06:23:36.8348921Z 2026-10-24T06:23:36.8349155Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T06:23:36.8349318Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:1244:36] 2026-10-24T06:23:36.8349427Z 1243 │ 2026-10-24T06:23:36.8349619Z 1244 │ {props.children} 2026-10-24T06:23:36.8349728Z ·  ───────────── 2026-10-24T06:23:36.8349803Z 1245 │ 2026-10-24T06:23:36.8349855Z ╰──── 2026-10-24T06:23:36.8350074Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T06:23:36.8350209Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T06:23:36.8350211Z 2026-10-24T06:23:36.8350461Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T06:23:36.8350631Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:643:5] 2026-10-24T06:23:36.8350687Z 638 │ 2026-10-24T06:23:36.8350749Z 639 │ useEffect(() => { 2026-10-24T06:23:36.8350819Z ·  ────┬──── 2026-10-24T06:23:36.8350947Z · ╰── This is the containing effect 2026-10-24T06:23:36.8351057Z 640 │ if (pendingLaunchEntry.key === launchTargetKey) { 2026-10-24T06:23:36.8351114Z 641 │ return; 2026-10-24T06:23:36.8351167Z 642 │ } 2026-10-24T06:23:36.8351239Z 643 │ setPendingLaunchEntry({ 2026-10-24T06:23:36.8351324Z ·  ──────────┬────────── 2026-10-24T06:23:36.8351491Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T06:23:36.8351564Z 644 │ key: launchTargetKey, 2026-10-24T06:23:36.8351616Z ╰──── 2026-10-24T06:23:36.8352250Z  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-24T06:23:36.8352599Z  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-24T06:23:36.8352602Z 2026-10-24T06:23:36.8352851Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T06:23:36.8353014Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:653:5] 2026-10-24T06:23:36.8353066Z 648 │ 2026-10-24T06:23:36.8353129Z 649 │ useEffect(() => { 2026-10-24T06:23:36.8353200Z ·  ────┬──── 2026-10-24T06:23:36.8353333Z · ╰── This is the containing effect 2026-10-24T06:23:36.8353445Z 650 │ if (initialAttachGridEntry.key === launchTargetKey) { 2026-10-24T06:23:36.8353510Z 651 │ return; 2026-10-24T06:23:36.8353562Z 652 │ } 2026-10-24T06:23:36.8353639Z 653 │ setInitialAttachGridEntry({ 2026-10-24T06:23:36.8353730Z ·  ────────────┬──────────── 2026-10-24T06:23:36.8353902Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T06:23:36.8353969Z 654 │ key: launchTargetKey, 2026-10-24T06:23:36.8354019Z ╰──── 2026-10-24T06:23:36.8354602Z  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-24T06:23:36.8354915Z  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-24T06:23:36.8354918Z 2026-10-24T06:23:36.8355168Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T06:23:36.8355329Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:746:7] 2026-10-24T06:23:36.8355383Z 743 │ 2026-10-24T06:23:36.8355447Z 744 │ useEffect(() => { 2026-10-24T06:23:36.8355518Z ·  ────┬──── 2026-10-24T06:23:36.8355643Z · ╰── This is the containing effect 2026-10-24T06:23:36.8355791Z 745 │ if (!routeEnvironmentId || !routeThreadId) { 2026-10-24T06:23:36.8355890Z 746 │ setLastGridSize({ 2026-10-24T06:23:36.8355973Z ·  ───────┬─────── 2026-10-24T06:23:36.8356140Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T06:23:36.8356223Z 747 │ cols: DEFAULT_TERMINAL_COLS, 2026-10-24T06:23:36.8356275Z ╰──── 2026-10-24T06:23:36.8356888Z  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-24T06:23:36.8357204Z  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-24T06:23:36.8357211Z 2026-10-24T06:23:36.8357476Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T06:23:36.8357685Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:538:24] 2026-10-24T06:23:36.8357743Z 537 │ }); 2026-10-24T06:23:36.8357863Z 538 │ }, [terminal.buffer, terminal.buffer.length, terminalKey]); 2026-10-24T06:23:36.8357970Z ·  ───────────┬────────── 2026-10-24T06:23:36.8358215Z · ╰── Overly precise dependency `terminal.buffer.length`, use `terminal.buffer` instead 2026-10-24T06:23:36.8358374Z 539 │ const cwd = terminal.summary?.cwd ?? selectedThreadProject?.workspaceRoot ?? null; 2026-10-24T06:23:36.8358432Z ╰──── 2026-10-24T06:23:36.8358723Z  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-24T06:23:36.8359027Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.8359029Z 2026-10-24T06:23:36.8359225Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T06:23:36.8359386Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:709:7] 2026-10-24T06:23:36.8359479Z 708 │ sentInitialInputKeyRef.current = null; 2026-10-24T06:23:36.8359545Z 709 │ }, [terminalKey]); 2026-10-24T06:23:36.8359620Z ·  ─────┬───── 2026-10-24T06:23:36.8359768Z · ╰── Unnecessary dependency `terminalKey` 2026-10-24T06:23:36.8359819Z 710 │ 2026-10-24T06:23:36.8359871Z ╰──── 2026-10-24T06:23:36.8360153Z  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-24T06:23:36.8360455Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.8360457Z 2026-10-24T06:23:36.8360652Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T06:23:36.8360813Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:800:52] 2026-10-24T06:23:36.8360870Z 799 │ }; 2026-10-24T06:23:36.8361107Z 800 │ }, [canOperateTerminal, isRunning, pasteSession, terminal.lifecycleVersion, terminalKey]); 2026-10-24T06:23:36.8361322Z ·  ────────────┬──────────── ─────┬───── 2026-10-24T06:23:36.8361549Z · │ ╰── Unnecessary dependency `terminalKey` 2026-10-24T06:23:36.8361753Z · ╰── Unnecessary dependency `terminal.lifecycleVersion` 2026-10-24T06:23:36.8361806Z 801 │ 2026-10-24T06:23:36.8361856Z ╰──── 2026-10-24T06:23:36.8362137Z  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-24T06:23:36.8362442Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.8362448Z 2026-10-24T06:23:36.8362589Z ⚠ react(refs): Cannot access refs during render 2026-10-24T06:23:36.8362754Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:793:24] 2026-10-24T06:23:36.8362806Z 792 │ } 2026-10-24T06:23:36.8362909Z 793 │ const pasteSession = pasteSessionRef.current; 2026-10-24T06:23:36.8363019Z ·  ───────────┬─────────── 2026-10-24T06:23:36.8363182Z · ╰── Cannot access ref value during render 2026-10-24T06:23:36.8363232Z 794 │ 2026-10-24T06:23:36.8363279Z ╰──── 2026-10-24T06:23:36.8363740Z  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-24T06:23:36.8364026Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T06:23:36.8364029Z 2026-10-24T06:23:36.8364237Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T06:23:36.8364375Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:773:7] 2026-10-24T06:23:36.8364473Z 772 │ if (settingsSheetPresentation.isActive) { 2026-10-24T06:23:36.8364598Z 773 │ settingsRoutePresentation.present(settingsRouteSession); 2026-10-24T06:23:36.8364694Z ·  ────────────┬──────────── 2026-10-24T06:23:36.8364865Z · ╰── Missing dependency `settingsRoutePresentation` 2026-10-24T06:23:36.8364916Z 774 │ } 2026-10-24T06:23:36.8365114Z 775 │ }, [settingsRoutePresentation.present, settingsRouteSession, settingsSheetPresentation.isActive]); 2026-10-24T06:23:36.8365219Z ·  ────────────────┬──────────────── 2026-10-24T06:23:36.8365497Z · ╰── Overly precise dependency `settingsRoutePresentation.present`, use `settingsRoutePresentation` instead 2026-10-24T06:23:36.8365546Z 776 │ 2026-10-24T06:23:36.8365594Z ╰──── 2026-10-24T06:23:36.8366048Z  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-24T06:23:36.8366376Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.8366379Z 2026-10-24T06:23:36.8366529Z ⚠ react(immutability): This value cannot be modified 2026-10-24T06:23:36.8366669Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:391:5] 2026-10-24T06:23:36.8366870Z 387 │ typeof props.style.borderRadius === "number" ? props.style.borderRadius : 0; 2026-10-24T06:23:36.8367001Z 388 │ const animatedBorderRadius = useSharedValue(targetBorderRadius); 2026-10-24T06:23:36.8367090Z ·  ──────────┬───────── 2026-10-24T06:23:36.8367242Z · ╰── `animatedBorderRadius` originates here 2026-10-24T06:23:36.8367401Z 389 │ const shouldAnimate = props.animateLayout !== false && Platform.OS !== "android"; 2026-10-24T06:23:36.8367471Z 390 │ useLayoutEffect(() => { 2026-10-24T06:23:36.8367569Z 391 │ animatedBorderRadius.value = shouldAnimate 2026-10-24T06:23:36.8367652Z ·  ──────────┬───────── 2026-10-24T06:23:36.8367806Z · ╰── `animatedBorderRadius` cannot be modified 2026-10-24T06:23:36.8367892Z 392 │ ? withTiming(targetBorderRadius, { 2026-10-24T06:23:36.8367941Z ╰──── 2026-10-24T06:23:36.8368198Z  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-24T06:23:36.8368494Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T06:23:36.8368496Z 2026-10-24T06:23:36.8368953Z ⚠ 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-24T06:23:36.8369087Z ╭─[packages/client-runtime/src/rpc/client.test.ts:131:9] 2026-10-24T06:23:36.8369146Z 130 │ ) { 2026-10-24T06:23:36.8369350Z 131 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T06:23:36.8369471Z 132 │ │ if (subscriptions.length >= count) { 2026-10-24T06:23:36.8369558Z 133 │ │ return; 2026-10-24T06:23:36.8369637Z 134 │ │ } 2026-10-24T06:23:36.8369746Z 135 │ │ yield* Effect.yieldNow; 2026-10-24T06:23:36.8369879Z 136 │ ╰─▶ } 2026-10-24T06:23:36.8370040Z 137 │ return yield* Effect.die(new Error(`Expected ${count} durable subscriptions.`)); 2026-10-24T06:23:36.8370088Z ╰──── 2026-10-24T06:23:36.8370091Z 2026-10-24T06:23:36.8370539Z ⚠ 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-24T06:23:36.8370668Z ╭─[packages/client-runtime/src/rpc/client.test.ts:252:7] 2026-10-24T06:23:36.8370824Z 251 │ yield* SubscriptionRef.set(activeSession, Option.some(session(firstClient))); 2026-10-24T06:23:36.8371118Z 252 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 1; attempt += 1) { 2026-10-24T06:23:36.8371246Z 253 │ │ yield* Effect.yieldNow; 2026-10-24T06:23:36.8371374Z 254 │ ╰─▶ } 2026-10-24T06:23:36.8371495Z 255 │ yield* SubscriptionRef.set(activeSession, Option.none()); 2026-10-24T06:23:36.8371544Z ╰──── 2026-10-24T06:23:36.8371547Z 2026-10-24T06:23:36.8371991Z ⚠ 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-24T06:23:36.8372117Z ╭─[packages/client-runtime/src/rpc/client.test.ts:258:7] 2026-10-24T06:23:36.8372171Z 257 │ 2026-10-24T06:23:36.8372417Z 258 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-24T06:23:36.8372519Z 259 │ │ yield* Effect.yieldNow; 2026-10-24T06:23:36.8372645Z 260 │ ╰─▶ } 2026-10-24T06:23:36.8372746Z 261 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-24T06:23:36.8372796Z ╰──── 2026-10-24T06:23:36.8372798Z 2026-10-24T06:23:36.8373242Z ⚠ 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-24T06:23:36.8373368Z ╭─[packages/client-runtime/src/rpc/client.test.ts:322:7] 2026-10-24T06:23:36.8373429Z 321 │ ); 2026-10-24T06:23:36.8373677Z 322 │ ╭─▶ for (let attempt = 0; attempt < 100 && observedFailures.length < 1; attempt += 1) { 2026-10-24T06:23:36.8373776Z 323 │ │ yield* Effect.yieldNow; 2026-10-24T06:23:36.8373900Z 324 │ ╰─▶ } 2026-10-24T06:23:36.8373950Z 325 │ 2026-10-24T06:23:36.8373999Z ╰──── 2026-10-24T06:23:36.8374001Z 2026-10-24T06:23:36.8374445Z ⚠ 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-24T06:23:36.8374569Z ╭─[packages/client-runtime/src/rpc/client.test.ts:330:7] 2026-10-24T06:23:36.8374769Z 329 │ yield* SubscriptionRef.set(activeSession, Option.some(session(secondClient))); 2026-10-24T06:23:36.8375036Z 330 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-24T06:23:36.8375135Z 331 │ │ yield* Effect.yieldNow; 2026-10-24T06:23:36.8375259Z 332 │ ╰─▶ } 2026-10-24T06:23:36.8375359Z 333 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-24T06:23:36.8375411Z ╰──── 2026-10-24T06:23:36.8375413Z 2026-10-24T06:23:36.8375594Z ⚠ react(static-components): Cannot create components during render 2026-10-24T06:23:36.8375750Z ╭─[apps/mobile/src/features/terminal/NativeTerminalSurface.tsx:234:10] 2026-10-24T06:23:36.8375837Z 196 │ const { onInput, onResize } = props; 2026-10-24T06:23:36.8375979Z 197 │ const NativeTerminalSurfaceView = resolveNativeTerminalSurfaceView(); 2026-10-24T06:23:36.8376109Z ·  ────────────────┬─────────────── 2026-10-24T06:23:36.8376294Z · ╰── The component is created during render here 2026-10-24T06:23:36.8376418Z 198 │ const hasNativeSurface = Boolean(NativeTerminalSurfaceView); 2026-10-24T06:23:36.8376466Z 199 │ 2026-10-24T06:23:36.8376529Z 200 │ useEffect(() => { 2026-10-24T06:23:36.8376614Z 201 │ terminalDebugLog("native:surface", { 2026-10-24T06:23:36.8376697Z 202 │ terminalKey: props.terminalKey, 2026-10-24T06:23:36.8376779Z 203 │ native: hasNativeSurface, 2026-10-24T06:23:36.8376937Z 204 │ hardwareKeyRevision: getNativeTerminalHardwareKeyRevision(), 2026-10-24T06:23:36.8377024Z 205 │ bufferLen: props.buffer.length, 2026-10-24T06:23:36.8377103Z 206 │ isRunning: props.isRunning, 2026-10-24T06:23:36.8377154Z 207 │ }); 2026-10-24T06:23:36.8377310Z 208 │ }, [hasNativeSurface, props.buffer.length, props.isRunning, props.terminalKey]); 2026-10-24T06:23:36.8377395Z 209 │ const handleNativeInput = useCallback( 2026-10-24T06:23:36.8377506Z 210 │ (event: NativeSyntheticEvent) => { 2026-10-24T06:23:36.8377599Z 211 │ if (!props.isRunning || props.readOnly) { 2026-10-24T06:23:36.8377657Z 212 │ return; 2026-10-24T06:23:36.8377710Z 213 │ } 2026-10-24T06:23:36.8377797Z 214 │ terminalDebugLog("native:onInput", { 2026-10-24T06:23:36.8377943Z 215 │ codes: Array.from(event.nativeEvent.data, (char) => char.codePointAt(0)), 2026-10-24T06:23:36.8377999Z 216 │ }); 2026-10-24T06:23:36.8378087Z 217 │ onInput(event.nativeEvent.data); 2026-10-24T06:23:36.8378142Z 218 │ }, 2026-10-24T06:23:36.8378235Z 219 │ [onInput, props.isRunning, props.readOnly], 2026-10-24T06:23:36.8378287Z 220 │ ); 2026-10-24T06:23:36.8378372Z 221 │ const handleNativeResize = useCallback( 2026-10-24T06:23:36.8378483Z 222 │ (event: NativeSyntheticEvent) => { 2026-10-24T06:23:36.8378541Z 223 │ onResize({ 2026-10-24T06:23:36.8378623Z 224 │ cols: event.nativeEvent.cols, 2026-10-24T06:23:36.8378702Z 225 │ rows: event.nativeEvent.rows, 2026-10-24T06:23:36.8378757Z 226 │ }); 2026-10-24T06:23:36.8378808Z 227 │ }, 2026-10-24T06:23:36.8378868Z 228 │ [onResize], 2026-10-24T06:23:36.8378920Z 229 │ ); 2026-10-24T06:23:36.8378969Z 230 │ 2026-10-24T06:23:36.8379050Z 231 │ if (NativeTerminalSurfaceView) { 2026-10-24T06:23:36.8379161Z 232 │ return ( 2026-10-24T06:23:36.8379264Z 233 │ 2026-10-24T06:23:36.8379339Z 234 │ decodeJson(message)).filter(isRpcRequest)[index]; 2026-10-24T06:23:36.8383062Z 242 │ │ if (request) { 2026-10-24T06:23:36.8383151Z 243 │ │ return request; 2026-10-24T06:23:36.8383220Z 244 │ │ } 2026-10-24T06:23:36.8383318Z 245 │ │ yield* Effect.yieldNow; 2026-10-24T06:23:36.8383438Z 246 │ ╰─▶ } 2026-10-24T06:23:36.8383601Z 247 │ return yield* Effect.die(new Error("Expected the RPC protocol to send a request.")); 2026-10-24T06:23:36.8383649Z ╰──── 2026-10-24T06:23:36.8383651Z 2026-10-24T06:23:36.8383833Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T06:23:36.8384030Z ╭─[apps/mobile/src/features/threads/ThreadQueueControl.tsx:602:27] 2026-10-24T06:23:36.8384222Z 601 │ const onEnd = useEffectEvent((y: number, success: boolean) => props.onEnd(y, success)); 2026-10-24T06:23:36.8384295Z 602 │ const gesture = Gesture.Pan() 2026-10-24T06:23:36.8384378Z ·  ─┬─ 2026-10-24T06:23:36.8384516Z · ╰── `Pan` may be a component 2026-10-24T06:23:36.8384589Z 603 │ .enabled(!props.disabled) 2026-10-24T06:23:36.8384637Z ╰──── 2026-10-24T06:23:36.8384909Z  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-24T06:23:36.8385346Z  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-24T06:23:36.8385352Z 2026-10-24T06:23:36.8385512Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T06:23:36.8385664Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:697:76] 2026-10-24T06:23:36.8385835Z 696 │ const [snoozeGateClock, setSnoozeGateClock] = useState(() => ({ thread, now: Date.now() })); 2026-10-24T06:23:36.8385995Z 697 │ if (snoozeGateClock.thread !== thread) setSnoozeGateClock({ thread, now: Date.now() }); 2026-10-24T06:23:36.8386128Z ·  ─────┬──── 2026-10-24T06:23:36.8386307Z · ╰── Cannot call impure function 2026-10-24T06:23:36.8386441Z 698 │ const snoozeGateNow = new Date(snoozeGateClock.now).toISOString(); 2026-10-24T06:23:36.8386493Z ╰──── 2026-10-24T06:23:36.8386779Z  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-24T06:23:36.8387087Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T06:23:36.8387089Z 2026-10-24T06:23:36.8387251Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T06:23:36.8387403Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:718:71] 2026-10-24T06:23:36.8387480Z 717 │ const snoozePresets = useMemo( 2026-10-24T06:23:36.8387659Z 718 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-24T06:23:36.8387788Z ·  ─────┬──── 2026-10-24T06:23:36.8387968Z · ╰── Cannot call impure function 2026-10-24T06:23:36.8388082Z 719 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-24T06:23:36.8388132Z ╰──── 2026-10-24T06:23:36.8388399Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T06:23:36.8388683Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T06:23:36.8388688Z 2026-10-24T06:23:36.8388907Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T06:23:36.8389081Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:719:6] 2026-10-24T06:23:36.8389251Z 718 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-24T06:23:36.8389360Z 719 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-24T06:23:36.8389449Z ·  ────────────┬─────────── 2026-10-24T06:23:36.8389624Z · ╰── Unnecessary dependency `props.snoozePresetMinute` 2026-10-24T06:23:36.8389676Z 720 │ ); 2026-10-24T06:23:36.8389724Z ╰──── 2026-10-24T06:23:36.8390030Z  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-24T06:23:36.8390342Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.8390348Z 2026-10-24T06:23:36.8390522Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T06:23:36.8390672Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:765:7] 2026-10-24T06:23:36.8390737Z 764 │ thread.pinnedAt, 2026-10-24T06:23:36.8390797Z 765 │ variant, 2026-10-24T06:23:36.8390868Z ·  ───┬─── 2026-10-24T06:23:36.8391001Z · ╰── Unnecessary dependency `variant` 2026-10-24T06:23:36.8391052Z 766 │ ], 2026-10-24T06:23:36.8391102Z ╰──── 2026-10-24T06:23:36.8391409Z  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-24T06:23:36.8391717Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.8391720Z 2026-10-24T06:23:36.8391909Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T06:23:36.8392062Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:1215:21] 2026-10-24T06:23:36.8392191Z 1214 │ {providerDrivers.slice(0, -1).map((driver, index) => ( 2026-10-24T06:23:36.8392320Z 1215 │ 2026-10-24T06:23:36.8392431Z ·  ────────────────────────── 2026-10-24T06:23:36.8392544Z 1216 │ 2026-10-24T06:23:36.8392597Z ╰──── 2026-10-24T06:23:36.8392740Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T06:23:36.8392743Z 2026-10-24T06:23:36.8393014Z ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'. 2026-10-24T06:23:36.8393141Z ╭─[apps/server/src/provider/AntigravityAuth.ts:285:20] 2026-10-24T06:23:36.8393194Z 284 │ }, 2026-10-24T06:23:36.8393274Z 285 │ (effect, flow, stopSessions) => 2026-10-24T06:23:36.8393362Z ·  ──────┬───── 2026-10-24T06:23:36.8393507Z · ╰── 'stopSessions' is declared here 2026-10-24T06:23:36.8393570Z 286 │ effect.pipe( 2026-10-24T06:23:36.8393671Z ╰──── 2026-10-24T06:23:36.8393799Z  help: Consider removing this parameter. 2026-10-24T06:23:36.8393802Z 2026-10-24T06:23:36.8393960Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T06:23:36.8394097Z ╭─[apps/server/src/process/externalLauncher.test.ts:186:12] 2026-10-24T06:23:36.8394148Z 185 │ 2026-10-24T06:23:36.8394247Z 186 │ for (const {} of ["darwin", "linux"] as const) { 2026-10-24T06:23:36.8394314Z ·  ── 2026-10-24T06:23:36.8394366Z 187 │ } 2026-10-24T06:23:36.8394414Z ╰──── 2026-10-24T06:23:36.8394641Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T06:23:36.8394643Z 2026-10-24T06:23:36.8394801Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T06:23:36.8394938Z ╭─[apps/server/src/process/externalLauncher.test.ts:189:12] 2026-10-24T06:23:36.8394990Z 188 │ 2026-10-24T06:23:36.8395053Z 189 │ for (const {} of [ 2026-10-24T06:23:36.8395118Z ·  ── 2026-10-24T06:23:36.8395210Z 190 │ { kind: "browser", folderVerb: "none" }, 2026-10-24T06:23:36.8395259Z ╰──── 2026-10-24T06:23:36.8395477Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T06:23:36.8395479Z 2026-10-24T06:23:36.8395636Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T06:23:36.8395768Z ╭─[apps/server/src/process/externalLauncher.test.ts:311:12] 2026-10-24T06:23:36.8395819Z 310 │ 2026-10-24T06:23:36.8395948Z 311 │ for (const {} of ["rejected", "spawn-error", "stalled"] as const) { 2026-10-24T06:23:36.8396015Z ·  ── 2026-10-24T06:23:36.8396066Z 312 │ } 2026-10-24T06:23:36.8396115Z ╰──── 2026-10-24T06:23:36.8396333Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T06:23:36.8396335Z 2026-10-24T06:23:36.8396493Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T06:23:36.8396623Z ╭─[apps/server/src/process/externalLauncher.test.ts:314:12] 2026-10-24T06:23:36.8396674Z 313 │ 2026-10-24T06:23:36.8396748Z 314 │ for (const {} of [ 2026-10-24T06:23:36.8396850Z ·  ── 2026-10-24T06:23:36.8396902Z 315 │ { 2026-10-24T06:23:36.8396951Z ╰──── 2026-10-24T06:23:36.8397177Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T06:23:36.8397182Z 2026-10-24T06:23:36.8397789Z ⚠ 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-24T06:23:36.8397931Z ╭─[apps/server/src/provider/acp/AntigravityProtocol.ts:263:20] 2026-10-24T06:23:36.8398014Z 262 │ ...(update._meta !== undefined 2026-10-24T06:23:36.8398175Z 263 │ ? { _meta: Schema.is(Schema.Record(Schema.String, Schema.Json))(meta) ? meta : null } 2026-10-24T06:23:36.8398262Z ·  ───────── 2026-10-24T06:23:36.8398319Z 264 │ : {}), 2026-10-24T06:23:36.8398368Z ╰──── 2026-10-24T06:23:36.8398371Z 2026-10-24T06:23:36.8398640Z ⚠ eslint(no-unused-vars): Identifier 'HookForwarder' is imported but never used. 2026-10-24T06:23:36.8398776Z ╭─[infra/relay/src/http/Api.ts:69:13] 2026-10-24T06:23:36.8398912Z 68 │ import * as EnvironmentLinks from "../environments/EnvironmentLinks.ts"; 2026-10-24T06:23:36.8399024Z 69 │ import * as HookForwarder from "../hooks/HookForwarder.ts"; 2026-10-24T06:23:36.8399106Z ·  ──────┬────── 2026-10-24T06:23:36.8399247Z · ╰── 'HookForwarder' is imported here 2026-10-24T06:23:36.8399345Z 70 │ import * as HeldHooks from "../hooks/HeldHooks.ts"; 2026-10-24T06:23:36.8399395Z ╰──── 2026-10-24T06:23:36.8399490Z  help: Consider removing this import. 2026-10-24T06:23:36.8399493Z 2026-10-24T06:23:36.8399954Z ⚠ 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-24T06:23:36.8400108Z ╭─[packages/client-runtime/src/connection/supervisor.test.ts:135:3] 2026-10-24T06:23:36.8400216Z 134 │ let lastState = yield* SubscriptionRef.get(state); 2026-10-24T06:23:36.8400424Z 135 │ ╭─▶ for (let iteration = 0; iteration < 100; iteration += 1) { 2026-10-24T06:23:36.8400556Z 136 │ │ lastState = yield* SubscriptionRef.get(state); 2026-10-24T06:23:36.8400658Z 137 │ │ if (predicate(lastState)) { 2026-10-24T06:23:36.8400751Z 138 │ │ return lastState; 2026-10-24T06:23:36.8400822Z 139 │ │ } 2026-10-24T06:23:36.8400926Z 140 │ │ yield* Effect.yieldNow; 2026-10-24T06:23:36.8401050Z 141 │ ╰─▶ } 2026-10-24T06:23:36.8401121Z 142 │ return yield* Effect.die( 2026-10-24T06:23:36.8401171Z ╰──── 2026-10-24T06:23:36.8401174Z 2026-10-24T06:23:36.8401361Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T06:23:36.8401522Z ╭─[apps/web/src/components/pullRequest/PullRequestSummaryTab.tsx:814:17] 2026-10-24T06:23:36.8401581Z 813 │
    { 2026-10-24T06:23:36.8402857Z ·  ────┬──── 2026-10-24T06:23:36.8402988Z · ╰── This is the containing effect 2026-10-24T06:23:36.8403057Z 2139 │ setExpandedVideo(null); 2026-10-24T06:23:36.8403137Z ·  ────────┬─────── 2026-10-24T06:23:36.8403314Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T06:23:36.8403390Z 2140 │ setExpandedFile(null); 2026-10-24T06:23:36.8403438Z ╰──── 2026-10-24T06:23:36.8404026Z  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-24T06:23:36.8404346Z  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-24T06:23:36.8404348Z 2026-10-24T06:23:36.8404569Z ⚠ eslint(no-unused-vars): Identifier 'isMarkdownFileLinkLabel' is imported but never used. 2026-10-24T06:23:36.8404703Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:66:10] 2026-10-24T06:23:36.8404836Z 65 │ import { resolveAssetUrl } from "@t3tools/client-runtime/state/assets"; 2026-10-24T06:23:36.8404971Z 66 │ import { isMarkdownFileLinkLabel } from "@t3tools/shared/markdownLinks"; 2026-10-24T06:23:36.8405066Z ·  ───────────┬─────────── 2026-10-24T06:23:36.8405227Z · ╰── 'isMarkdownFileLinkLabel' is imported here 2026-10-24T06:23:36.8405379Z 67 │ import { formatAttachmentSize } from "@t3tools/client-runtime/state/attachments"; 2026-10-24T06:23:36.8405429Z ╰──── 2026-10-24T06:23:36.8405523Z  help: Consider removing this import. 2026-10-24T06:23:36.8405526Z 2026-10-24T06:23:36.8405727Z ⚠ eslint(no-unused-vars): Identifier 'createContext' is imported but never used. 2026-10-24T06:23:36.8405858Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:92:3] 2026-10-24T06:23:36.8405915Z 91 │ import { 2026-10-24T06:23:36.8405978Z 92 │ createContext, 2026-10-24T06:23:36.8406049Z ·  ──────┬────── 2026-10-24T06:23:36.8406182Z · ╰── 'createContext' is imported here 2026-10-24T06:23:36.8406234Z 93 │ memo, 2026-10-24T06:23:36.8406282Z ╰──── 2026-10-24T06:23:36.8406375Z  help: Consider removing this import. 2026-10-24T06:23:36.8406378Z 2026-10-24T06:23:36.8406582Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-24T06:23:36.8406722Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:108:3] 2026-10-24T06:23:36.8406779Z 107 │ import { 2026-10-24T06:23:36.8406881Z 108 │ ActivityIndicator, 2026-10-24T06:23:36.8407008Z ·  ────────┬──────── 2026-10-24T06:23:36.8407178Z · ╰── 'ActivityIndicator' is imported here 2026-10-24T06:23:36.8407234Z 109 │ Image, 2026-10-24T06:23:36.8407284Z ╰──── 2026-10-24T06:23:36.8407374Z  help: Consider removing this import. 2026-10-24T06:23:36.8407378Z 2026-10-24T06:23:36.8407569Z ⚠ eslint(no-unused-vars): Identifier 'ScrollView' is imported but never used. 2026-10-24T06:23:36.8407696Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:115:3] 2026-10-24T06:23:36.8407755Z 114 │ Pressable, 2026-10-24T06:23:36.8407815Z 115 │ ScrollView, 2026-10-24T06:23:36.8407884Z ·  ─────┬──── 2026-10-24T06:23:36.8408012Z · ╰── 'ScrollView' is imported here 2026-10-24T06:23:36.8408077Z 116 │ StyleSheet, 2026-10-24T06:23:36.8408127Z ╰──── 2026-10-24T06:23:36.8408219Z  help: Consider removing this import. 2026-10-24T06:23:36.8408221Z 2026-10-24T06:23:36.8408412Z ⚠ eslint(no-unused-vars): Identifier 'NativeText' is imported but never used. 2026-10-24T06:23:36.8408544Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:117:11] 2026-10-24T06:23:36.8408601Z 116 │ StyleSheet, 2026-10-24T06:23:36.8408666Z 117 │ Text as NativeText, 2026-10-24T06:23:36.8408741Z ·  ─────┬──── 2026-10-24T06:23:36.8408874Z · ╰── 'NativeText' is imported here 2026-10-24T06:23:36.8408936Z 118 │ type ColorValue, 2026-10-24T06:23:36.8408984Z ╰──── 2026-10-24T06:23:36.8409075Z  help: Consider removing this import. 2026-10-24T06:23:36.8409077Z 2026-10-24T06:23:36.8409290Z ⚠ eslint(no-unused-vars): Identifier 'tryOpenExternalUrl' is imported but never used. 2026-10-24T06:23:36.8409421Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:140:10] 2026-10-24T06:23:36.8409551Z 139 │ import { copyTextWithHaptic } from "../../lib/copyTextWithHaptic"; 2026-10-24T06:23:36.8409675Z 140 │ import { tryOpenExternalUrl } from "../../lib/openExternalUrl"; 2026-10-24T06:23:36.8409761Z ·  ─────────┬──────── 2026-10-24T06:23:36.8409912Z · ╰── 'tryOpenExternalUrl' is imported here 2026-10-24T06:23:36.8410054Z 141 │ import { downloadAndShareAttachment } from "../../lib/attachmentDownload"; 2026-10-24T06:23:36.8410102Z ╰──── 2026-10-24T06:23:36.8410194Z  help: Consider removing this import. 2026-10-24T06:23:36.8410196Z 2026-10-24T06:23:36.8410410Z ⚠ eslint(no-unused-vars): Identifier 'faviconUrlForOrigin' is imported but never used. 2026-10-24T06:23:36.8410540Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:143:10] 2026-10-24T06:23:36.8410672Z 142 │ import { hasWideMarkdownBlock } from "../../lib/wideMarkdownBlocks"; 2026-10-24T06:23:36.8410792Z 143 │ import { faviconUrlForOrigin } from "@t3tools/shared/favicon"; 2026-10-24T06:23:36.8410879Z ·  ─────────┬───────── 2026-10-24T06:23:36.8411029Z · ╰── 'faviconUrlForOrigin' is imported here 2026-10-24T06:23:36.8411085Z 144 │ import { 2026-10-24T06:23:36.8411133Z ╰──── 2026-10-24T06:23:36.8411222Z  help: Consider removing this import. 2026-10-24T06:23:36.8411225Z 2026-10-24T06:23:36.8411479Z ⚠ eslint(no-unused-vars): Identifier 'MediaVideoPlayer' is imported but never used. 2026-10-24T06:23:36.8411638Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:157:10] 2026-10-24T06:23:36.8411781Z 156 │ import { VideoAttachmentTile } from "../../components/VideoAttachmentTile"; 2026-10-24T06:23:36.8411911Z 157 │ import { MediaVideoPlayer } from "../../components/MediaVideoPlayer"; 2026-10-24T06:23:36.8411994Z ·  ────────┬─────── 2026-10-24T06:23:36.8412140Z · ╰── 'MediaVideoPlayer' is imported here 2026-10-24T06:23:36.8412276Z 158 │ import { resolveMarkdownMediaPreview } from "../../lib/markdownMedia"; 2026-10-24T06:23:36.8412324Z ╰──── 2026-10-24T06:23:36.8412414Z  help: Consider removing this import. 2026-10-24T06:23:36.8412416Z 2026-10-24T06:23:36.8412634Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoPreviewUri' is imported but never used. 2026-10-24T06:23:36.8412765Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:161:3] 2026-10-24T06:23:36.8412843Z 160 │ attachmentVideoPreviewSource, 2026-10-24T06:23:36.8412912Z 161 │ mediaVideoPreviewUri, 2026-10-24T06:23:36.8412993Z ·  ──────────┬───────── 2026-10-24T06:23:36.8413144Z · ╰── 'mediaVideoPreviewUri' is imported here 2026-10-24T06:23:36.8413214Z 162 │ mediaVideoThumbnailKey, 2026-10-24T06:23:36.8413261Z ╰──── 2026-10-24T06:23:36.8413353Z  help: Consider removing this import. 2026-10-24T06:23:36.8413355Z 2026-10-24T06:23:36.8413571Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoThumbnailKey' is imported but never used. 2026-10-24T06:23:36.8413704Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:162:3] 2026-10-24T06:23:36.8413774Z 161 │ mediaVideoPreviewUri, 2026-10-24T06:23:36.8413841Z 162 │ mediaVideoThumbnailKey, 2026-10-24T06:23:36.8413925Z ·  ───────────┬────────── 2026-10-24T06:23:36.8414080Z · ╰── 'mediaVideoThumbnailKey' is imported here 2026-10-24T06:23:36.8414159Z 163 │ type MediaVideoPreviewSource, 2026-10-24T06:23:36.8414206Z ╰──── 2026-10-24T06:23:36.8414297Z  help: Consider removing this import. 2026-10-24T06:23:36.8414299Z 2026-10-24T06:23:36.8414505Z ⚠ eslint(no-unused-vars): Type 'MediaVideoPreviewSource' is imported but never used. 2026-10-24T06:23:36.8414633Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:163:8] 2026-10-24T06:23:36.8414701Z 162 │ mediaVideoThumbnailKey, 2026-10-24T06:23:36.8414783Z 163 │ type MediaVideoPreviewSource, 2026-10-24T06:23:36.8414876Z ·  ───────────┬─────────── 2026-10-24T06:23:36.8415036Z · ╰── 'MediaVideoPreviewSource' is imported here 2026-10-24T06:23:36.8415119Z 164 │ } from "../../lib/videoPreviewSource"; 2026-10-24T06:23:36.8415168Z ╰──── 2026-10-24T06:23:36.8415259Z  help: Consider removing this import. 2026-10-24T06:23:36.8415261Z 2026-10-24T06:23:36.8415454Z ⚠ eslint(no-unused-vars): Type 'ReviewDiffTheme' is imported but never used. 2026-10-24T06:23:36.8415579Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:171:15] 2026-10-24T06:23:36.8415750Z 170 │ import { parseReviewCommentMessageSegments } from "../review/reviewCommentSelection"; 2026-10-24T06:23:36.8415885Z 171 │ import type { ReviewDiffTheme } from "../review/shikiReviewHighlighter"; 2026-10-24T06:23:36.8416020Z ·  ───────┬─────── 2026-10-24T06:23:36.8416193Z · ╰── 'ReviewDiffTheme' is imported here 2026-10-24T06:23:36.8416249Z 172 │ import { 2026-10-24T06:23:36.8416299Z ╰──── 2026-10-24T06:23:36.8416390Z  help: Consider removing this import. 2026-10-24T06:23:36.8416393Z 2026-10-24T06:23:36.8416615Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownFontSizes' is imported but never used. 2026-10-24T06:23:36.8416751Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:186:3] 2026-10-24T06:23:36.8416807Z 185 │ import { 2026-10-24T06:23:36.8416902Z 186 │ resolveMarkdownFontSizes, 2026-10-24T06:23:36.8416988Z ·  ────────────┬─────────── 2026-10-24T06:23:36.8417152Z · ╰── 'resolveMarkdownFontSizes' is imported here 2026-10-24T06:23:36.8417238Z 187 │ resolveNativeMarkdownTypography, 2026-10-24T06:23:36.8417288Z ╰──── 2026-10-24T06:23:36.8417378Z  help: Consider removing this import. 2026-10-24T06:23:36.8417381Z 2026-10-24T06:23:36.8417599Z ⚠ eslint(no-unused-vars): Identifier 'markdownLinkIconSource' is imported but never used. 2026-10-24T06:23:36.8417727Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:191:10] 2026-10-24T06:23:36.8417855Z 190 │ import { PierreEntryIcon } from "../../components/PierreEntryIcon"; 2026-10-24T06:23:36.8417985Z 191 │ import { markdownLinkIconSource } from "../../lib/markdownLinkIcons"; 2026-10-24T06:23:36.8418075Z ·  ───────────┬────────── 2026-10-24T06:23:36.8418240Z · ╰── 'markdownLinkIconSource' is imported here 2026-10-24T06:23:36.8418299Z 192 │ import { 2026-10-24T06:23:36.8418347Z ╰──── 2026-10-24T06:23:36.8418437Z  help: Consider removing this import. 2026-10-24T06:23:36.8418439Z 2026-10-24T06:23:36.8418690Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownInlineCodePresentation' is imported but never used. 2026-10-24T06:23:36.8418817Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:194:3] 2026-10-24T06:23:36.8418892Z 193 │ normalizeNativeMarkdownUrl, 2026-10-24T06:23:36.8418982Z 194 │ resolveMarkdownInlineCodePresentation, 2026-10-24T06:23:36.8419089Z ·  ──────────────────┬────────────────── 2026-10-24T06:23:36.8419283Z · ╰── 'resolveMarkdownInlineCodePresentation' is imported here 2026-10-24T06:23:36.8419353Z 195 │ resolveMarkdownLinkIcon, 2026-10-24T06:23:36.8419447Z ╰──── 2026-10-24T06:23:36.8419565Z  help: Consider removing this import. 2026-10-24T06:23:36.8419567Z 2026-10-24T06:23:36.8419786Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownLinkIcon' is imported but never used. 2026-10-24T06:23:36.8419912Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:195:3] 2026-10-24T06:23:36.8420001Z 194 │ resolveMarkdownInlineCodePresentation, 2026-10-24T06:23:36.8420070Z 195 │ resolveMarkdownLinkIcon, 2026-10-24T06:23:36.8420156Z ·  ───────────┬─────────── 2026-10-24T06:23:36.8420314Z · ╰── 'resolveMarkdownLinkIcon' is imported here 2026-10-24T06:23:36.8420398Z 196 │ resolveMarkdownLinkPresentation, 2026-10-24T06:23:36.8420447Z ╰──── 2026-10-24T06:23:36.8420543Z  help: Consider removing this import. 2026-10-24T06:23:36.8420547Z 2026-10-24T06:23:36.8420768Z ⚠ eslint(no-unused-vars): Identifier 'useMarkdownCodeHighlight' is imported but never used. 2026-10-24T06:23:36.8420894Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:234:10] 2026-10-24T06:23:36.8420994Z 233 │ import { ThreadMcpApp } from "./McpAppWebView"; 2026-10-24T06:23:36.8421133Z 234 │ import { useMarkdownCodeHighlight } from "./markdownCodeHighlightState"; 2026-10-24T06:23:36.8421229Z ·  ────────────┬─────────── 2026-10-24T06:23:36.8421392Z · ╰── 'useMarkdownCodeHighlight' is imported here 2026-10-24T06:23:36.8421449Z 235 │ import { 2026-10-24T06:23:36.8421497Z ╰──── 2026-10-24T06:23:36.8421589Z  help: Consider removing this import. 2026-10-24T06:23:36.8421592Z 2026-10-24T06:23:36.8421799Z ⚠ eslint(no-unused-vars): Identifier 'useAssetUrlState' is imported but never used. 2026-10-24T06:23:36.8421928Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:238:3] 2026-10-24T06:23:36.8421990Z 237 │ useAssetUrl, 2026-10-24T06:23:36.8422054Z 238 │ useAssetUrlState, 2026-10-24T06:23:36.8422132Z ·  ────────┬─────── 2026-10-24T06:23:36.8422273Z · ╰── 'useAssetUrlState' is imported here 2026-10-24T06:23:36.8422339Z 239 │ useRefreshAssetUrl, 2026-10-24T06:23:36.8422388Z ╰──── 2026-10-24T06:23:36.8422478Z  help: Consider removing this import. 2026-10-24T06:23:36.8422480Z 2026-10-24T06:23:36.8422673Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T06:23:36.8422808Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2141:7] 2026-10-24T06:23:36.8422881Z 2140 │ setExpandedFile(null); 2026-10-24T06:23:36.8423035Z 2141 │ }, [props.environmentId, props.threadId, props.contentPresentation.kind]); 2026-10-24T06:23:36.8423250Z ·  ─────────┬───────── ───────┬────── ───────────────┬────────────── 2026-10-24T06:23:36.8423536Z · │ │ ╰── Unnecessary dependency `props.contentPresentation.kind` 2026-10-24T06:23:36.8423731Z · │ ╰── Unnecessary dependency `props.threadId` 2026-10-24T06:23:36.8423891Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-24T06:23:36.8424081Z 2142 │ const horizontalPadding = props.layoutVariant === "split" ? 20 : 16; 2026-10-24T06:23:36.8424157Z ╰──── 2026-10-24T06:23:36.8424446Z  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-24T06:23:36.8424751Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.8424754Z 2026-10-24T06:23:36.8424947Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T06:23:36.8425075Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2609:7] 2026-10-24T06:23:36.8425169Z 2608 │ reportHeaderMaterialVisibility(false); 2026-10-24T06:23:36.8425284Z 2609 │ }, [feedThreadKey, reportHeaderMaterialVisibility]); 2026-10-24T06:23:36.8425363Z ·  ──────┬────── 2026-10-24T06:23:36.8425508Z · ╰── Unnecessary dependency `feedThreadKey` 2026-10-24T06:23:36.8425559Z 2610 │ 2026-10-24T06:23:36.8425609Z ╰──── 2026-10-24T06:23:36.8425894Z  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-24T06:23:36.8426195Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.8426197Z 2026-10-24T06:23:36.8426389Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T06:23:36.8426524Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2625:7] 2026-10-24T06:23:36.8426581Z 2624 │ } 2026-10-24T06:23:36.8426708Z 2625 │ }, [listMountKey, props.contentInsetEndAdjustment, listRef]); 2026-10-24T06:23:36.8426812Z ·  ──────┬───── 2026-10-24T06:23:36.8426956Z · ╰── Unnecessary dependency `listMountKey` 2026-10-24T06:23:36.8427007Z 2626 │ 2026-10-24T06:23:36.8427055Z ╰──── 2026-10-24T06:23:36.8427336Z  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-24T06:23:36.8427636Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.8427639Z 2026-10-24T06:23:36.8427835Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T06:23:36.8427965Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2782:7] 2026-10-24T06:23:36.8428016Z 2781 │ } 2026-10-24T06:23:36.8428193Z 2782 │ }, [expandedTurnIds, expandedWorkGroups, expandedWorkRows, settleDisclosureAfterLayout]); 2026-10-24T06:23:36.8428387Z ·  ───────┬─────── ─────────┬──────── ────────┬─────── 2026-10-24T06:23:36.8428632Z · │ │ ╰── Unnecessary dependency `expandedWorkRows` 2026-10-24T06:23:36.8428830Z · │ ╰── Unnecessary dependency `expandedWorkGroups` 2026-10-24T06:23:36.8429024Z · ╰── Unnecessary dependency `expandedTurnIds` 2026-10-24T06:23:36.8429164Z 2783 │ 2026-10-24T06:23:36.8429212Z ╰──── 2026-10-24T06:23:36.8429493Z  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-24T06:23:36.8429793Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.8429795Z 2026-10-24T06:23:36.8429970Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T06:23:36.8430100Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:613:9] 2026-10-24T06:23:36.8430156Z 612 │ }; 2026-10-24T06:23:36.8430271Z 613 │ }, [props.environmentId, attachment.id, httpBaseUrl]), 2026-10-24T06:23:36.8430457Z ·  ─────────┬───────── ──────┬────── ─────┬───── 2026-10-24T06:23:36.8430696Z · │ │ ╰── Unnecessary dependency `httpBaseUrl` 2026-10-24T06:23:36.8430887Z · │ ╰── Unnecessary dependency `attachment.id` 2026-10-24T06:23:36.8431045Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-24T06:23:36.8431097Z 614 │ ); 2026-10-24T06:23:36.8431145Z ╰──── 2026-10-24T06:23:36.8431448Z  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-24T06:23:36.8431757Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.8431762Z 2026-10-24T06:23:36.8432014Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T06:23:36.8432174Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:215:7] 2026-10-24T06:23:36.8432227Z 211 │ }; 2026-10-24T06:23:36.8432290Z 212 │ useEffect(() => { 2026-10-24T06:23:36.8432358Z ·  ────┬──── 2026-10-24T06:23:36.8432486Z · ╰── This is the containing effect 2026-10-24T06:23:36.8432653Z 213 │ const inserted = ownerKey ? readComposerDraftSelection(ownerKey, draftMessage) : null; 2026-10-24T06:23:36.8432761Z 214 │ if (inserted) { 2026-10-24T06:23:36.8432866Z 215 │ setSelection((current) => 2026-10-24T06:23:36.8432943Z ·  ──────┬───── 2026-10-24T06:23:36.8433111Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T06:23:36.8433278Z 216 │ current.start === inserted.start && current.end === inserted.end ? current : inserted, 2026-10-24T06:23:36.8433326Z ╰──── 2026-10-24T06:23:36.8433911Z  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-24T06:23:36.8434231Z  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-24T06:23:36.8434235Z 2026-10-24T06:23:36.8434485Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T06:23:36.8434642Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:296:7] 2026-10-24T06:23:36.8434714Z 284 │ }, [hasWorkspaceSnapshot]); 2026-10-24T06:23:36.8434776Z 285 │ useEffect(() => { 2026-10-24T06:23:36.8434845Z ·  ────┬──── 2026-10-24T06:23:36.8434971Z · ╰── This is the containing effect 2026-10-24T06:23:36.8435112Z 286 │ if (!environmentId || !projectCwd || !selectedProviderInstanceId) return; 2026-10-24T06:23:36.8435257Z 287 │ const key = `${environmentId}:${selectedProviderInstanceId}:${projectCwd}`; 2026-10-24T06:23:36.8435329Z 288 │ const now = Date.now(); 2026-10-24T06:23:36.8435443Z 289 │ const lastRequest = workspaceRefreshKeyRef.current; 2026-10-24T06:23:36.8435496Z 290 │ if ( 2026-10-24T06:23:36.8435571Z 291 │ lastRequest?.key === key && 2026-10-24T06:23:36.8435705Z 292 │ now - lastRequest.requestedAt < PROVIDER_WORKSPACE_SNAPSHOT_TTL_MS 2026-10-24T06:23:36.8435757Z 293 │ ) 2026-10-24T06:23:36.8435814Z 294 │ return; 2026-10-24T06:23:36.8435982Z 295 │ if (hasCurrentProviderWorkspaceSnapshot(selectedProviderStatus, projectCwd, now)) { 2026-10-24T06:23:36.8436068Z 296 │ setWorkspaceRefreshRetry(null); 2026-10-24T06:23:36.8436161Z ·  ────────────┬─────────── 2026-10-24T06:23:36.8436335Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T06:23:36.8436398Z 297 │ return; 2026-10-24T06:23:36.8436450Z ╰──── 2026-10-24T06:23:36.8437060Z  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-24T06:23:36.8437369Z  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-24T06:23:36.8437373Z 2026-10-24T06:23:36.8437603Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T06:23:36.8437760Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:326:5] 2026-10-24T06:23:36.8437870Z 325 │ }, [ 2026-10-24T06:23:36.8437970Z 326 │ draftMessage, 2026-10-24T06:23:36.8438043Z ·  ──────┬───── 2026-10-24T06:23:36.8438186Z · ╰── Unnecessary dependency `draftMessage` 2026-10-24T06:23:36.8438248Z 327 │ environmentId, 2026-10-24T06:23:36.8438299Z ╰──── 2026-10-24T06:23:36.8438585Z  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-24T06:23:36.8438887Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.8438889Z 2026-10-24T06:23:36.8439347Z ⚠ 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-24T06:23:36.8439470Z ╭─[packages/shared/src/atomicWrite.test.ts:139:5] 2026-10-24T06:23:36.8439544Z 138 │ Effect.gen(function* () { 2026-10-24T06:23:36.8439732Z 139 │ ╭─▶ while (fiber.pollUnsafe() === undefined) { 2026-10-24T06:23:36.8439851Z 140 │ │ yield* TestClock.adjust("100 millis"); 2026-10-24T06:23:36.8440163Z 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-24T06:23:36.8440341Z 142 │ │ yield* Effect.promise(() => new Promise((resolve) => setImmediate(resolve))); 2026-10-24T06:23:36.8440472Z 143 │ ╰─▶ } 2026-10-24T06:23:36.8440557Z 144 │ return yield* Fiber.join(fiber); 2026-10-24T06:23:36.8440606Z ╰──── 2026-10-24T06:23:36.8440609Z 2026-10-24T06:23:36.8440860Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T06:23:36.8440979Z ╭─[apps/server/src/serverRuntimeStartup.ts:728:7] 2026-10-24T06:23:36.8441031Z 727 │ 2026-10-24T06:23:36.8441110Z 728 │ const layer = layerWithOptions(); 2026-10-24T06:23:36.8441177Z ·  ──┬── 2026-10-24T06:23:36.8441296Z · ╰── 'layer' is declared here 2026-10-24T06:23:36.8441346Z ╰──── 2026-10-24T06:23:36.8441447Z  help: Consider removing this declaration. 2026-10-24T06:23:36.8441450Z 2026-10-24T06:23:36.8441704Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T06:23:36.8441839Z ╭─[apps/mobile/src/features/files/FileTreeBrowser.tsx:155:5] 2026-10-24T06:23:36.8441890Z 150 │ 2026-10-24T06:23:36.8441954Z 151 │ useEffect(() => { 2026-10-24T06:23:36.8442021Z ·  ────┬──── 2026-10-24T06:23:36.8442146Z · ╰── This is the containing effect 2026-10-24T06:23:36.8442227Z 152 │ if (!controlledSelectedPath) { 2026-10-24T06:23:36.8442285Z 153 │ return; 2026-10-24T06:23:36.8442339Z 154 │ } 2026-10-24T06:23:36.8442418Z 155 │ setExpandedPaths((current) => { 2026-10-24T06:23:36.8442497Z ·  ────────┬─────── 2026-10-24T06:23:36.8442716Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T06:23:36.8442863Z 156 │ const ancestors = ancestorPaths(controlledSelectedPath); 2026-10-24T06:23:36.8442911Z ╰──── 2026-10-24T06:23:36.8443491Z  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-24T06:23:36.8443804Z  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-24T06:23:36.8443806Z 2026-10-24T06:23:36.8443985Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T06:23:36.8444090Z ╭─[packages/shared/src/qrCode.ts:458:44] 2026-10-24T06:23:36.8444153Z 457 │ ): Array { 2026-10-24T06:23:36.8444256Z 458 │ let result: Array = divisor.map((_) => 0); 2026-10-24T06:23:36.8444357Z ·  ┬ 2026-10-24T06:23:36.8444496Z · ╰── '_' is declared here 2026-10-24T06:23:36.8444564Z 459 │ for (const b of data) { 2026-10-24T06:23:36.8444613Z ╰──── 2026-10-24T06:23:36.8444711Z  help: Consider removing this parameter. 2026-10-24T06:23:36.8444714Z 2026-10-24T06:23:36.8444904Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T06:23:36.8445045Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:257:7] 2026-10-24T06:23:36.8445146Z 256 │ return () => cancelAnimationFrame(frame); 2026-10-24T06:23:36.8445225Z 257 │ }, [props.path, targetIndex]); 2026-10-24T06:23:36.8445299Z ·  ─────┬──── 2026-10-24T06:23:36.8445439Z · ╰── Unnecessary dependency `props.path` 2026-10-24T06:23:36.8445490Z 258 │ 2026-10-24T06:23:36.8445537Z ╰──── 2026-10-24T06:23:36.8445823Z  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-24T06:23:36.8446123Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.8446127Z 2026-10-24T06:23:36.8446315Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T06:23:36.8446462Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:293:23] 2026-10-24T06:23:36.8446535Z 292 │ 2026-10-24T06:23:36.8447688Z ·  ─────────── 2026-10-24T06:23:36.8447753Z 310 │ {body} 2026-10-24T06:23:36.8447802Z ╰──── 2026-10-24T06:23:36.8447943Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T06:23:36.8447946Z 2026-10-24T06:23:36.8448108Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T06:23:36.8448248Z ╭─[apps/server/src/provider/Drivers/CodexDriver.test.ts:466:14] 2026-10-24T06:23:36.8448300Z 465 │ 2026-10-24T06:23:36.8448399Z 466 │ for (const {} of ["direct", "wrapper"] as const) { 2026-10-24T06:23:36.8448467Z ·  ── 2026-10-24T06:23:36.8448519Z 467 │ } 2026-10-24T06:23:36.8448568Z ╰──── 2026-10-24T06:23:36.8448798Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T06:23:36.8448803Z 2026-10-24T06:23:36.8449052Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T06:23:36.8449218Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:123:7] 2026-10-24T06:23:36.8449268Z 118 │ 2026-10-24T06:23:36.8449332Z 119 │ useEffect(() => { 2026-10-24T06:23:36.8449398Z ·  ────┬──── 2026-10-24T06:23:36.8449524Z · ╰── This is the containing effect 2026-10-24T06:23:36.8449603Z 120 │ if (orientationSettled) return; 2026-10-24T06:23:36.8449711Z 121 │ const orientation = getNativeShowcaseOrientation(); 2026-10-24T06:23:36.8449786Z 122 │ if (orientation === null) { 2026-10-24T06:23:36.8449868Z 123 │ setOrientationSettled(true); 2026-10-24T06:23:36.8449955Z ·  ──────────┬────────── 2026-10-24T06:23:36.8450124Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T06:23:36.8450180Z 124 │ return; 2026-10-24T06:23:36.8450229Z ╰──── 2026-10-24T06:23:36.8450805Z  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-24T06:23:36.8451120Z  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-24T06:23:36.8451126Z 2026-10-24T06:23:36.8451376Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T06:23:36.8451539Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:304:7] 2026-10-24T06:23:36.8451590Z 292 │ 2026-10-24T06:23:36.8451652Z 293 │ useEffect(() => { 2026-10-24T06:23:36.8451719Z ·  ────┬──── 2026-10-24T06:23:36.8451843Z · ╰── This is the containing effect 2026-10-24T06:23:36.8451898Z 294 │ if ( 2026-10-24T06:23:36.8451962Z 295 │ scene === null || 2026-10-24T06:23:36.8452036Z 296 │ requestedScene === null || 2026-10-24T06:23:36.8452108Z 297 │ scene !== requestedScene || 2026-10-24T06:23:36.8452170Z 298 │ !hasFixture || 2026-10-24T06:23:36.8452288Z 299 │ !orientationSettled || 2026-10-24T06:23:36.8452384Z 300 │ !themeApplied || 2026-10-24T06:23:36.8452494Z 301 │ (scene === "agent-activity" && !agentActivityStaged) || 2026-10-24T06:23:36.8452625Z 302 │ !isShowcaseNativeContentReady({ scene, themeId, renderSignal }) 2026-10-24T06:23:36.8452679Z 303 │ ) { 2026-10-24T06:23:36.8452744Z 304 │ setReadyScene(null); 2026-10-24T06:23:36.8452819Z ·  ──────┬────── 2026-10-24T06:23:36.8452985Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T06:23:36.8453044Z 305 │ return; 2026-10-24T06:23:36.8453091Z ╰──── 2026-10-24T06:23:36.8453673Z  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-24T06:23:36.8453985Z  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-24T06:23:36.8453987Z 2026-10-24T06:23:36.8454250Z ⚠ eslint(no-unused-vars): Variable 'lastOutcome' is declared but never used. Unused variables should start with a '_'. 2026-10-24T06:23:36.8454419Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:128:9] 2026-10-24T06:23:36.8454485Z 127 │ let cancelled = false; 2026-10-24T06:23:36.8454573Z 128 │ let lastOutcome: string | null = null; 2026-10-24T06:23:36.8454648Z ·  ─────┬───── 2026-10-24T06:23:36.8454785Z · ╰── 'lastOutcome' is declared here 2026-10-24T06:23:36.8454960Z 129 │ void retryShowcaseOperation(async () => applyNativeShowcaseOrientation(orientation), { 2026-10-24T06:23:36.8455009Z ╰──── 2026-10-24T06:23:36.8455110Z  help: Consider removing this declaration. 2026-10-24T06:23:36.8455113Z 2026-10-24T06:23:36.8455361Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T06:23:36.8455527Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:329:7] 2026-10-24T06:23:36.8455578Z 324 │ }; 2026-10-24T06:23:36.8455640Z 325 │ useEffect(() => { 2026-10-24T06:23:36.8455708Z ·  ────┬──── 2026-10-24T06:23:36.8455834Z · ╰── This is the containing effect 2026-10-24T06:23:36.8455933Z 326 │ if (!guidesEnabled && section === "guide") { 2026-10-24T06:23:36.8456029Z 327 │ requestedSection.current = "overview"; 2026-10-24T06:23:36.8456188Z 328 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-24T06:23:36.8456257Z 329 │ setSection("overview"); 2026-10-24T06:23:36.8456329Z ·  ─────┬──── 2026-10-24T06:23:36.8456495Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T06:23:36.8456547Z 330 │ } 2026-10-24T06:23:36.8456595Z ╰──── 2026-10-24T06:23:36.8457257Z  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-24T06:23:36.8457597Z  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-24T06:23:36.8457600Z 2026-10-24T06:23:36.8457796Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T06:23:36.8457960Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:331:6] 2026-10-24T06:23:36.8458054Z 326 │ if (!guidesEnabled && section === "guide") { 2026-10-24T06:23:36.8458144Z 327 │ requestedSection.current = "overview"; 2026-10-24T06:23:36.8458224Z ·  ────────┬─────── 2026-10-24T06:23:36.8458671Z · ╰── 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-24T06:23:36.8458833Z 328 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-24T06:23:36.8458975Z ·  ─────────┬───────── ──────┬────── 2026-10-24T06:23:36.8459463Z · │ ╰── 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-24T06:23:36.8459905Z · ╰── 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-24T06:23:36.8459979Z 329 │ setSection("overview"); 2026-10-24T06:23:36.8460031Z 330 │ } 2026-10-24T06:23:36.8460119Z 331 │ }, [guidesEnabled, section, insets.top]); 2026-10-24T06:23:36.8460227Z ·  ──────────────────┬───────────────── 2026-10-24T06:23:36.8460415Z · ╰── This dependency list is missing values used by the callback 2026-10-24T06:23:36.8460498Z 332 │ const tabContent = activityContent; 2026-10-24T06:23:36.8460545Z ╰──── 2026-10-24T06:23:36.8460707Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T06:23:36.8461013Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.8461016Z 2026-10-24T06:23:36.8461257Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T06:23:36.8461453Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:868:6] 2026-10-24T06:23:36.8461508Z 851 │ if ( 2026-10-24T06:23:36.8461620Z 852 │ lastSelection.current.path === route.params.path && 2026-10-24T06:23:36.8461695Z ·  ──────┬────── 2026-10-24T06:23:36.8462121Z · ╰── 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-24T06:23:36.8462241Z 853 │ lastSelection.current.id === route.params.fileSelectionId 2026-10-24T06:23:36.8462294Z 854 │ ) 2026-10-24T06:23:36.8462352Z 855 │ return; 2026-10-24T06:23:36.8462528Z 856 │ lastSelection.current = { path: route.params.path, id: route.params.fileSelectionId }; 2026-10-24T06:23:36.8462660Z 857 │ if (route.params.focus) navigation.setParams({ focus: undefined }); 2026-10-24T06:23:36.8462742Z 858 │ setJumpPath(route.params.path); 2026-10-24T06:23:36.8462812Z 859 │ setSelectedRowId(null); 2026-10-24T06:23:36.8462888Z 860 │ jumpStarted.current = false; 2026-10-24T06:23:36.8463029Z 861 │ const file = data.files.find((entry) => entry.path === route.params.path); 2026-10-24T06:23:36.8463119Z 862 │ if (!file || !nativeView.current) return; 2026-10-24T06:23:36.8463205Z ·  ─────┬──── 2026-10-24T06:23:36.8463643Z · ╰── 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-24T06:23:36.8463767Z 863 │ setCollapsedIds((ids) => ids.filter((id) => id !== file.id)); 2026-10-24T06:23:36.8463842Z 864 │ jumpStarted.current = true; 2026-10-24T06:23:36.8463973Z 865 │ void nativeView.current.scrollToFile(file.id, false).catch(() => { 2026-10-24T06:23:36.8464050Z 866 │ jumpStarted.current = false; 2026-10-24T06:23:36.8464102Z 867 │ }); 2026-10-24T06:23:36.8464294Z 868 │ }, [route.params.path, route.params.fileSelectionId, route.params.focus, data.files, navigation]); 2026-10-24T06:23:36.8464487Z ·  ──────────────────────────────────────────────┬────────────────────────────────────────────── 2026-10-24T06:23:36.8464698Z · ╰── This dependency list is missing values used by the callback 2026-10-24T06:23:36.8464811Z 869 │ const appliedFilter = useRef(filter.hideTestFiles); 2026-10-24T06:23:36.8464863Z ╰──── 2026-10-24T06:23:36.8465025Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T06:23:36.8465332Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.8465334Z 2026-10-24T06:23:36.8465625Z ⚠ eslint(no-unused-vars): Variable 'layerFromProviderAdapter' is declared but never used. Unused variables should start with a '_'. 2026-10-24T06:23:36.8465785Z ╭─[apps/server/src/orchestration-v2/ProviderAdapterRegistry.ts:346:7] 2026-10-24T06:23:36.8465834Z 345 │ 2026-10-24T06:23:36.8465933Z 346 │ const layerFromProviderAdapter: Layer.Layer< 2026-10-24T06:23:36.8466076Z ·  ────────────┬─────────── 2026-10-24T06:23:36.8466265Z · ╰── 'layerFromProviderAdapter' is declared here 2026-10-24T06:23:36.8466340Z 347 │ ProviderAdapterRegistryV2, 2026-10-24T06:23:36.8466393Z ╰──── 2026-10-24T06:23:36.8466494Z  help: Consider removing this declaration. 2026-10-24T06:23:36.8466496Z 2026-10-24T06:23:36.8466974Z ⚠ 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-24T06:23:36.8467138Z ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:566:7] 2026-10-24T06:23:36.8467236Z 565 │ let afterSequence = created[0]!.sequence; 2026-10-24T06:23:36.8467432Z 566 │ ╭─▶ for (let index = 1; index <= 32; index += 1) { 2026-10-24T06:23:36.8467534Z 567 │ │ const nextEvent = { 2026-10-24T06:23:36.8467686Z 568 │ │ id: EventId.make(`event:foundation-stream-race:${index}`), 2026-10-24T06:23:36.8467818Z 569 │ │ type: "thread.metadata-updated" as const, 2026-10-24T06:23:36.8467906Z 570 │ │ threadId, 2026-10-24T06:23:36.8468009Z 571 │ │ providerInstanceId, 2026-10-24T06:23:36.8468102Z 572 │ │ occurredAt: now, 2026-10-24T06:23:36.8468244Z 573 │ │ payload: { ...thread, title: `Race update ${index}` }, 2026-10-24T06:23:36.8468370Z 574 │ │ } satisfies OrchestrationV2DomainEvent; 2026-10-24T06:23:36.8468486Z 575 │ │ const reader = yield* eventSink 2026-10-24T06:23:36.8468604Z 576 │ │ .stream({ threadId, afterSequence }) 2026-10-24T06:23:36.8468730Z 577 │ │ .pipe(Stream.runHead, Effect.forkChild); 2026-10-24T06:23:36.8468831Z 578 │ │ yield* Effect.yieldNow; 2026-10-24T06:23:36.8468987Z 579 │ │ const written = yield* eventSink.write({ events: [nextEvent] }); 2026-10-24T06:23:36.8469112Z 580 │ │ const received = yield* Fiber.join(reader); 2026-10-24T06:23:36.8469223Z 581 │ │ if (Option.isNone(received)) { 2026-10-24T06:23:36.8469419Z 582 │ │ return yield* Effect.die("The event stream ended before delivering the live event."); 2026-10-24T06:23:36.8469502Z 583 │ │ } 2026-10-24T06:23:36.8469658Z 584 │ │ assert.equal(received.value.sequence, written[0]?.sequence); 2026-10-24T06:23:36.8469798Z 585 │ │ assert.equal(received.value.event.id, nextEvent.id); 2026-10-24T06:23:36.8469921Z 586 │ │ afterSequence = received.value.sequence; 2026-10-24T06:23:36.8470048Z 587 │ ╰─▶ } 2026-10-24T06:23:36.8470104Z 588 │ }), 2026-10-24T06:23:36.8470153Z ╰──── 2026-10-24T06:23:36.8470155Z 2026-10-24T06:23:36.8470604Z ⚠ 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-24T06:23:36.8470818Z ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:2327:9] 2026-10-24T06:23:36.8470922Z 2326 │ let settled = false; 2026-10-24T06:23:36.8471075Z 2327 │ ╭─▶ while (!settled) { 2026-10-24T06:23:36.8471228Z 2328 │ │ settled = (yield* outbox.listByCommandId(commandId)).every( 2026-10-24T06:23:36.8471356Z 2329 │ │ (effect) => effect.status === "succeeded", 2026-10-24T06:23:36.8471437Z 2330 │ │ ); 2026-10-24T06:23:36.8471556Z 2331 │ │ if (!settled) yield* Effect.yieldNow; 2026-10-24T06:23:36.8471689Z 2332 │ ╰─▶ } 2026-10-24T06:23:36.8471804Z 2333 │ }).pipe(Effect.provide(layerWorker), Effect.scoped); 2026-10-24T06:23:36.8471859Z ╰──── 2026-10-24T06:23:36.8471865Z 2026-10-24T06:23:36.8472059Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T06:23:36.8472214Z ╭─[apps/mobile/src/features/workspace/WorkspaceToolbar.ios.tsx:114:33] 2026-10-24T06:23:36.8472308Z 113 │ return () => cancelAnimationFrame(frame); 2026-10-24T06:23:36.8472403Z 114 │ }, [restoreSearch, tabActive, bottomSearch]); 2026-10-24T06:23:36.8472506Z ·  ──────┬───── 2026-10-24T06:23:36.8472673Z · ╰── Unnecessary dependency `bottomSearch` 2026-10-24T06:23:36.8472773Z 115 │ const composeButton = nativeToolbarCompose ? ( 2026-10-24T06:23:36.8472827Z ╰──── 2026-10-24T06:23:36.8473121Z  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-24T06:23:36.8473430Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.8473433Z 2026-10-24T06:23:36.8473706Z ⚠ eslint(no-unused-vars): Variable 'layerUnavailable' is declared but never used. Unused variables should start with a '_'. 2026-10-24T06:23:36.8473849Z ╭─[apps/server/src/orchestration-v2/Orchestrator.ts:12366:7] 2026-10-24T06:23:36.8473901Z 12365 │ 2026-10-24T06:23:36.8474036Z 12366 │ const layerUnavailable: Layer.Layer = Layer.succeed( 2026-10-24T06:23:36.8474119Z ·  ────────┬─────── 2026-10-24T06:23:36.8474271Z · ╰── 'layerUnavailable' is declared here 2026-10-24T06:23:36.8474339Z 12367 │ OrchestratorV2, 2026-10-24T06:23:36.8474390Z ╰──── 2026-10-24T06:23:36.8474490Z  help: Consider removing this declaration. 2026-10-24T06:23:36.8474492Z 2026-10-24T06:23:36.8474706Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T06:23:36.8474832Z ╭─[scripts/lib/cli-external-packages.test.ts:114:11] 2026-10-24T06:23:36.8474898Z 113 │ const declared = { 2026-10-24T06:23:36.8474987Z 114 │ ...(manifest.dependencies ?? {}), 2026-10-24T06:23:36.8475096Z ·  ──────────────────────────────── 2026-10-24T06:23:36.8475197Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T06:23:36.8475244Z ╰──── 2026-10-24T06:23:36.8475553Z  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-24T06:23:36.8475584Z 2026-10-24T06:23:36.8475794Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T06:23:36.8475915Z ╭─[scripts/lib/cli-external-packages.test.ts:115:11] 2026-10-24T06:23:36.8476001Z 114 │ ...(manifest.dependencies ?? {}), 2026-10-24T06:23:36.8476098Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T06:23:36.8476214Z ·  ──────────────────────────────────────── 2026-10-24T06:23:36.8476309Z 116 │ ...(manifest.peerDependencies ?? {}), 2026-10-24T06:23:36.8476357Z ╰──── 2026-10-24T06:23:36.8476617Z  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-24T06:23:36.8476623Z 2026-10-24T06:23:36.8476867Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T06:23:36.8476987Z ╭─[scripts/lib/cli-external-packages.test.ts:116:11] 2026-10-24T06:23:36.8477085Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T06:23:36.8477175Z 116 │ ...(manifest.peerDependencies ?? {}), 2026-10-24T06:23:36.8477285Z ·  ──────────────────────────────────── 2026-10-24T06:23:36.8477342Z 117 │ }; 2026-10-24T06:23:36.8477623Z ╰──── 2026-10-24T06:23:36.8477876Z  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-24T06:23:36.8477879Z 2026-10-24T06:23:36.8478093Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T06:23:36.8478227Z ╭─[apps/mobile/src/state/use-model-option-memory.ts:21:7] 2026-10-24T06:23:36.8478290Z 20 │ [instanceId]: { 2026-10-24T06:23:36.8478365Z 21 │ ...(state[instanceId] ?? {}), 2026-10-24T06:23:36.8478461Z ·  ──────────────────────────── 2026-10-24T06:23:36.8478526Z 22 │ [model]: options, 2026-10-24T06:23:36.8478575Z ╰──── 2026-10-24T06:23:36.8478828Z  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-24T06:23:36.8478831Z 2026-10-24T06:23:36.8479024Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T06:23:36.8479135Z ╭─[apps/mobile/src/state/thread-order.ts:29:7] 2026-10-24T06:23:36.8479281Z 28 │ getPendingThreadOrder(); 2026-10-24T06:23:36.8480663Z 29 │ }, [nowMinute, snoozeWakeTick]); 2026-10-24T06:23:36.8480788Z ·  ────┬──── ───────┬────── 2026-10-24T06:23:36.8480980Z · │ ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T06:23:36.8481115Z · ╰── Unnecessary dependency `nowMinute` 2026-10-24T06:23:36.8481179Z 30 │ return pending; 2026-10-24T06:23:36.8481227Z ╰──── 2026-10-24T06:23:36.8481514Z  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-24T06:23:36.8481826Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.8481831Z 2026-10-24T06:23:36.8482006Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T06:23:36.8482186Z ╭─[apps/mobile/src/features/keyboard/HardwareKeyboardCommandProvider.tsx:116:34] 2026-10-24T06:23:36.8482252Z 115 │ return [...commands]; 2026-10-24T06:23:36.8482381Z 116 │ }, [activeThreadRef, pathname, registrationVersion, navigation]); 2026-10-24T06:23:36.8482490Z ·  ─────────┬───────── 2026-10-24T06:23:36.8482672Z · ╰── Unnecessary dependency `registrationVersion` 2026-10-24T06:23:36.8482722Z 117 │ 2026-10-24T06:23:36.8482771Z ╰──── 2026-10-24T06:23:36.8483083Z  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-24T06:23:36.8483385Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.8483389Z 2026-10-24T06:23:36.8483528Z ⚠ react(refs): Cannot access refs during render 2026-10-24T06:23:36.8483692Z ╭─[apps/mobile/src/features/voice-input/useVoiceInputController.ts:27:14] 2026-10-24T06:23:36.8483772Z 26 │ const latestInput = useRef(input); 2026-10-24T06:23:36.8483847Z 27 │ latestInput.current = input; 2026-10-24T06:23:36.8483953Z ·  ─────┬─────────┬─── 2026-10-24T06:23:36.8484137Z · │ ╰── Cannot update ref value during render 2026-10-24T06:23:36.8484253Z · ╰── This value is a ref 2026-10-24T06:23:36.8484326Z 28 │ const mounted = useRef(true); 2026-10-24T06:23:36.8484373Z ╰──── 2026-10-24T06:23:36.8484826Z  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-24T06:23:36.8485112Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T06:23:36.8485115Z 2026-10-24T06:23:36.8485267Z ⚠ react(immutability): This value cannot be modified 2026-10-24T06:23:36.8485492Z ╭─[apps/mobile/src/features/voice-input/GlobalVoiceInputControl.tsx:68:5] 2026-10-24T06:23:36.8485621Z 65 │ const [expanded, setExpanded] = useState(false); 2026-10-24T06:23:36.8485702Z 66 │ const progress = useSharedValue(0); 2026-10-24T06:23:36.8485773Z ·  ────┬─── 2026-10-24T06:23:36.8485902Z · ╰── `progress` originates here 2026-10-24T06:23:36.8485963Z 67 │ useEffect(() => { 2026-10-24T06:23:36.8486082Z 68 │ progress.value = withTiming(expanded ? 1 : 0, MORPH_TIMING); 2026-10-24T06:23:36.8486150Z ·  ────┬─── 2026-10-24T06:23:36.8486282Z · ╰── `progress` cannot be modified 2026-10-24T06:23:36.8486349Z 69 │ }, [expanded, progress]); 2026-10-24T06:23:36.8486397Z ╰──── 2026-10-24T06:23:36.8486658Z  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-24T06:23:36.8486995Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T06:23:36.8486998Z 2026-10-24T06:23:36.8487140Z ⚠ react(refs): Cannot access refs during render 2026-10-24T06:23:36.8487295Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:122:38] 2026-10-24T06:23:36.8487451Z 121 │ const audioLevelsRef = useRef(Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-24T06:23:36.8487570Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-24T06:23:36.8487685Z ·  ───────────┬────────── 2026-10-24T06:23:36.8487859Z · ╰── Cannot access ref value during render 2026-10-24T06:23:36.8487978Z 123 │ const sessionRef = useRef(null); 2026-10-24T06:23:36.8488027Z ╰──── 2026-10-24T06:23:36.8488479Z  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-24T06:23:36.8488759Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T06:23:36.8488761Z 2026-10-24T06:23:36.8488898Z ⚠ react(refs): Cannot access refs during render 2026-10-24T06:23:36.8489049Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:8] 2026-10-24T06:23:36.8489100Z 125 │ 2026-10-24T06:23:36.8489208Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T06:23:36.8489294Z ·  ─────────┬──────── 2026-10-24T06:23:36.8489441Z · ╰── Cannot access ref value during render 2026-10-24T06:23:36.8489540Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T06:23:36.8489587Z ╰──── 2026-10-24T06:23:36.8490039Z  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-24T06:23:36.8490320Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T06:23:36.8490322Z 2026-10-24T06:23:36.8490506Z ⚠ react(refs): Cannot access refs during render 2026-10-24T06:23:36.8490684Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:7] 2026-10-24T06:23:36.8490733Z 125 │ 2026-10-24T06:23:36.8490836Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T06:23:36.8490920Z ·  ─────────┬───────── 2026-10-24T06:23:36.8491065Z · ╰── Cannot access ref value during render 2026-10-24T06:23:36.8491160Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T06:23:36.8491210Z ╰──── 2026-10-24T06:23:36.8491663Z  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-24T06:23:36.8491945Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T06:23:36.8491947Z 2026-10-24T06:23:36.8492084Z ⚠ react(refs): Cannot access refs during render 2026-10-24T06:23:36.8492234Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:31] 2026-10-24T06:23:36.8492284Z 125 │ 2026-10-24T06:23:36.8492385Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T06:23:36.8492494Z ·  ─────────┬───────── 2026-10-24T06:23:36.8492656Z · ╰── Cannot access ref value during render 2026-10-24T06:23:36.8492750Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T06:23:36.8492804Z ╰──── 2026-10-24T06:23:36.8493253Z  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-24T06:23:36.8493534Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T06:23:36.8493536Z 2026-10-24T06:23:36.8493673Z ⚠ react(refs): Cannot access refs during render 2026-10-24T06:23:36.8493824Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:30] 2026-10-24T06:23:36.8493874Z 125 │ 2026-10-24T06:23:36.8493973Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T06:23:36.8494084Z ·  ──────────┬───────── 2026-10-24T06:23:36.8494247Z · ╰── Cannot access ref value during render 2026-10-24T06:23:36.8494342Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T06:23:36.8494389Z ╰──── 2026-10-24T06:23:36.8494837Z  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-24T06:23:36.8495120Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T06:23:36.8495122Z 2026-10-24T06:23:36.8495311Z ⚠ react(refs): Cannot access refs during render 2026-10-24T06:23:36.8495489Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:127:46] 2026-10-24T06:23:36.8495595Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T06:23:36.8495780Z 127 │ ╭─▶ const recorder = createLazyVoiceRecorder({ 2026-10-24T06:23:36.8495948Z 128 │ │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-24T06:23:36.8496069Z 129 │ │ onStatus: (status: RecordingStatus) => { 2026-10-24T06:23:36.8496218Z 130 │ │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-24T06:23:36.8496332Z 131 │ │ isFinished: status.isFinished, 2026-10-24T06:23:36.8496509Z 132 │ │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-24T06:23:36.8496611Z 133 │ │ error: status.error, 2026-10-24T06:23:36.8496706Z 134 │ │ url: status.url, 2026-10-24T06:23:36.8496793Z 135 │ │ }); 2026-10-24T06:23:36.8496896Z 136 │ │ }, 2026-10-24T06:23:36.8497085Z 137 │ │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-24T06:23:36.8497189Z 138 │ │ selectInput: (inputs) => { 2026-10-24T06:23:36.8497337Z 139 │ │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-24T06:23:36.8497480Z 140 │ │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-24T06:23:36.8497646Z 141 │ │ const known = microphoneOrder(preferences.value.microphones); 2026-10-24T06:23:36.8497783Z 142 │ │ const order = rememberMicrophones(known, inputs); 2026-10-24T06:23:36.8497879Z 143 │ │ if (order !== known) { 2026-10-24T06:23:36.8498012Z 144 │ │ registry.set(updateMobilePreferencesAtom, { 2026-10-24T06:23:36.8498123Z 145 │ │ transform: (current) => ({ 2026-10-24T06:23:36.8498321Z 146 │ │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-24T06:23:36.8498402Z 147 │ │ }), 2026-10-24T06:23:36.8498481Z 148 │ │ }); 2026-10-24T06:23:36.8498556Z 149 │ │ } 2026-10-24T06:23:36.8498696Z 150 │ │ return preferredMicrophoneInput(inputs, order); 2026-10-24T06:23:36.8498772Z 151 │ │ }, 2026-10-24T06:23:36.8498900Z 152 │ ├─▶ }); 2026-10-24T06:23:36.8499129Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T06:23:36.8499211Z 153 │ recorderRef.current = recorder; 2026-10-24T06:23:36.8499260Z ╰──── 2026-10-24T06:23:36.8499712Z  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-24T06:23:36.8500054Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T06:23:36.8500084Z 2026-10-24T06:23:36.8500222Z ⚠ react(refs): Cannot access refs during render 2026-10-24T06:23:36.8500376Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:153:16] 2026-10-24T06:23:36.8500429Z 152 │ }); 2026-10-24T06:23:36.8500511Z 153 │ recorderRef.current = recorder; 2026-10-24T06:23:36.8500620Z ·  ─────┬─────────┬─── 2026-10-24T06:23:36.8500798Z · │ ╰── Cannot update ref value during render 2026-10-24T06:23:36.8500910Z · ╰── This value is a ref 2026-10-24T06:23:36.8501011Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T06:23:36.8501060Z ╰──── 2026-10-24T06:23:36.8501515Z  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-24T06:23:36.8501798Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T06:23:36.8501800Z 2026-10-24T06:23:36.8501936Z ⚠ react(refs): Cannot access refs during render 2026-10-24T06:23:36.8502087Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:48] 2026-10-24T06:23:36.8502169Z 153 │ recorderRef.current = recorder; 2026-10-24T06:23:36.8502355Z 154 │ ╭─▶ sessionRef.current = new VoiceInputSession({ 2026-10-24T06:23:36.8502440Z 155 │ │ recorder, 2026-10-24T06:23:36.8502568Z 156 │ │ getTranscriber: getLocalVoiceTranscriber, 2026-10-24T06:23:36.8502682Z 157 │ │ requestPermission: async () => { 2026-10-24T06:23:36.8502840Z 158 │ │ const permission = await requestRecordingPermissionsAsync(); 2026-10-24T06:23:36.8503023Z 159 │ │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-24T06:23:36.8503096Z 160 │ │ }, 2026-10-24T06:23:36.8503233Z 161 │ │ configureRecording: configureVoiceRecordingAudio, 2026-10-24T06:23:36.8503362Z 162 │ │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-24T06:23:36.8503491Z 163 │ │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-24T06:23:36.8503692Z 164 │ │ onStateChange: (nextState) => 2026-10-24T06:23:36.8503820Z 165 │ │ setState({ 2026-10-24T06:23:36.8503917Z 166 │ │ state: nextState, 2026-10-24T06:23:36.8504048Z 167 │ │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-24T06:23:36.8504169Z 168 │ │ label: sessionRef.current?.label ?? null, 2026-10-24T06:23:36.8504247Z 169 │ │ }), 2026-10-24T06:23:36.8504371Z 170 │ ├─▶ }); 2026-10-24T06:23:36.8504561Z · ╰──── Cannot access ref value during render 2026-10-24T06:23:36.8504613Z 171 │ } 2026-10-24T06:23:36.8504662Z ╰──── 2026-10-24T06:23:36.8505119Z  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-24T06:23:36.8505404Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T06:23:36.8505406Z 2026-10-24T06:23:36.8505542Z ⚠ react(refs): Cannot access refs during render 2026-10-24T06:23:36.8505694Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:15] 2026-10-24T06:23:36.8505772Z 153 │ recorderRef.current = recorder; 2026-10-24T06:23:36.8505871Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T06:23:36.8505982Z ·  ─────┬────────┬─── 2026-10-24T06:23:36.8506159Z · │ ╰── Cannot update ref value during render 2026-10-24T06:23:36.8506272Z · ╰── This value is a ref 2026-10-24T06:23:36.8506333Z 155 │ recorder, 2026-10-24T06:23:36.8506382Z ╰──── 2026-10-24T06:23:36.8506862Z  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-24T06:23:36.8507149Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T06:23:36.8507151Z 2026-10-24T06:23:36.8507294Z ⚠ react(refs): Cannot access refs during render 2026-10-24T06:23:36.8507447Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:7] 2026-10-24T06:23:36.8507530Z 184 │ return () => subscription.remove(); 2026-10-24T06:23:36.8507592Z 185 │ }, [controller]); 2026-10-24T06:23:36.8507666Z ·  ─────┬──── 2026-10-24T06:23:36.8507808Z · ╰── Cannot access ref value during render 2026-10-24T06:23:36.8507857Z 186 │ 2026-10-24T06:23:36.8507906Z ╰──── 2026-10-24T06:23:36.8508353Z  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-24T06:23:36.8508684Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T06:23:36.8508713Z 2026-10-24T06:23:36.8508849Z ⚠ react(refs): Cannot access refs during render 2026-10-24T06:23:36.8508999Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:6] 2026-10-24T06:23:36.8509081Z 184 │ return () => subscription.remove(); 2026-10-24T06:23:36.8509143Z 185 │ }, [controller]); 2026-10-24T06:23:36.8509219Z ·  ──────┬───── 2026-10-24T06:23:36.8509357Z · ╰── Cannot access ref value during render 2026-10-24T06:23:36.8509406Z 186 │ 2026-10-24T06:23:36.8509453Z ╰──── 2026-10-24T06:23:36.8509907Z  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-24T06:23:36.8510189Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T06:23:36.8510192Z 2026-10-24T06:23:36.8510327Z ⚠ react(refs): Cannot access refs during render 2026-10-24T06:23:36.8510477Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:6] 2026-10-24T06:23:36.8510530Z 191 │ }, 2026-10-24T06:23:36.8510598Z 192 │ [controller, recorder], 2026-10-24T06:23:36.8510670Z ·  ─────┬──── 2026-10-24T06:23:36.8510810Z · ╰── Cannot access ref value during render 2026-10-24T06:23:36.8510862Z 193 │ ); 2026-10-24T06:23:36.8510912Z ╰──── 2026-10-24T06:23:36.8511362Z  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-24T06:23:36.8511641Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T06:23:36.8511644Z 2026-10-24T06:23:36.8511779Z ⚠ react(refs): Cannot access refs during render 2026-10-24T06:23:36.8511930Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:175:20] 2026-10-24T06:23:36.8512015Z 174 │ const controller = session.controller; 2026-10-24T06:23:36.8512099Z 175 │ const recorder = recorderRef.current; 2026-10-24T06:23:36.8512202Z ·  ─────────┬───────── 2026-10-24T06:23:36.8512358Z · ╰── Cannot access ref value during render 2026-10-24T06:23:36.8512407Z 176 │ 2026-10-24T06:23:36.8512455Z ╰──── 2026-10-24T06:23:36.8512902Z  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-24T06:23:36.8513180Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T06:23:36.8513182Z 2026-10-24T06:23:36.8513319Z ⚠ react(refs): Cannot access refs during render 2026-10-24T06:23:36.8513512Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:5] 2026-10-24T06:23:36.8513594Z 191 │ }, 2026-10-24T06:23:36.8513662Z 192 │ [controller, recorder], 2026-10-24T06:23:36.8513747Z ·  ───────────┬────────── 2026-10-24T06:23:36.8513890Z · ╰── Cannot access ref value during render 2026-10-24T06:23:36.8513942Z 193 │ ); 2026-10-24T06:23:36.8513990Z ╰──── 2026-10-24T06:23:36.8514436Z  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-24T06:23:36.8514718Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T06:23:36.8514726Z 2026-10-24T06:23:36.8514861Z ⚠ react(refs): Cannot access refs during render 2026-10-24T06:23:36.8515011Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:20] 2026-10-24T06:23:36.8515098Z 245 │ return () => clearInterval(intervalId); 2026-10-24T06:23:36.8515205Z 246 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-24T06:23:36.8515288Z ·  ─────┬──── 2026-10-24T06:23:36.8515438Z · ╰── Cannot access ref value during render 2026-10-24T06:23:36.8515487Z 247 │ 2026-10-24T06:23:36.8515535Z ╰──── 2026-10-24T06:23:36.8515986Z  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-24T06:23:36.8516268Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T06:23:36.8516271Z 2026-10-24T06:23:36.8516406Z ⚠ react(refs): Cannot access refs during render 2026-10-24T06:23:36.8516556Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:6] 2026-10-24T06:23:36.8516641Z 245 │ return () => clearInterval(intervalId); 2026-10-24T06:23:36.8516755Z 246 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-24T06:23:36.8516908Z ·  ────────────────────────┬─────────────────────── 2026-10-24T06:23:36.8517069Z · ╰── Cannot access ref value during render 2026-10-24T06:23:36.8517121Z 247 │ 2026-10-24T06:23:36.8517169Z ╰──── 2026-10-24T06:23:36.8517686Z  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-24T06:23:36.8517966Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T06:23:36.8517968Z 2026-10-24T06:23:36.8518104Z ⚠ react(refs): Cannot access refs during render 2026-10-24T06:23:36.8518253Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:261:5] 2026-10-24T06:23:36.8518318Z 260 │ setOwnerFocused, 2026-10-24T06:23:36.8518442Z 261 │ session, 2026-10-24T06:23:36.8518548Z ·  ───┬─── 2026-10-24T06:23:36.8518682Z · ╰── Cannot access ref value during render 2026-10-24T06:23:36.8518738Z 262 │ stop, 2026-10-24T06:23:36.8518785Z ╰──── 2026-10-24T06:23:36.8519232Z  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-24T06:23:36.8519509Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T06:23:36.8519513Z 2026-10-24T06:23:36.8519648Z ⚠ react(refs): Cannot access refs during render 2026-10-24T06:23:36.8519801Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:251:10] 2026-10-24T06:23:36.8519854Z 250 │ 2026-10-24T06:23:36.8519990Z 251 │ ╭─▶ return { 2026-10-24T06:23:36.8520194Z 252 │ │ isAvailable: getLocalVoiceTranscriber() !== null || getNativeShowcaseScene() !== null, 2026-10-24T06:23:36.8520271Z 253 │ │ state, 2026-10-24T06:23:36.8520356Z 254 │ │ audioLevels, 2026-10-24T06:23:36.8520446Z 255 │ │ elapsedSeconds, 2026-10-24T06:23:36.8520570Z 256 │ │ isBusy: voiceInputBlocksSubmission(state), 2026-10-24T06:23:36.8520648Z 257 │ │ ownerKey, 2026-10-24T06:23:36.8520723Z 258 │ │ label, 2026-10-24T06:23:36.8520814Z 259 │ │ focusedOwners, 2026-10-24T06:23:36.8520906Z 260 │ │ setOwnerFocused, 2026-10-24T06:23:36.8520984Z 261 │ │ session, 2026-10-24T06:23:36.8521058Z 262 │ │ stop, 2026-10-24T06:23:36.8521133Z 263 │ │ cancel, 2026-10-24T06:23:36.8521255Z 264 │ ├─▶ }; 2026-10-24T06:23:36.8521446Z · ╰──── Cannot access ref value during render 2026-10-24T06:23:36.8521499Z 265 │ } 2026-10-24T06:23:36.8521547Z ╰──── 2026-10-24T06:23:36.8522003Z  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-24T06:23:36.8522287Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T06:23:36.8522289Z 2026-10-24T06:23:36.8522439Z ⚠ react(immutability): This value cannot be modified 2026-10-24T06:23:36.8522591Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7] 2026-10-24T06:23:36.8522745Z 121 │ const audioLevelsRef = useRef(Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-24T06:23:36.8522862Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-24T06:23:36.8522938Z ·  ─────┬───── 2026-10-24T06:23:36.8523072Z · ╰── `audioLevels` originates here 2026-10-24T06:23:36.8523234Z 123 │ const sessionRef = useRef(null); 2026-10-24T06:23:36.8523407Z 124 │ const recorderRef = useRef | null>(null); 2026-10-24T06:23:36.8523458Z 125 │ 2026-10-24T06:23:36.8523560Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T06:23:36.8523655Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T06:23:36.8523787Z 128 │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-24T06:23:36.8523877Z 129 │ onStatus: (status: RecordingStatus) => { 2026-10-24T06:23:36.8523992Z 130 │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-24T06:23:36.8524075Z 131 │ isFinished: status.isFinished, 2026-10-24T06:23:36.8524210Z 132 │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-24T06:23:36.8524284Z 133 │ error: status.error, 2026-10-24T06:23:36.8524355Z 134 │ url: status.url, 2026-10-24T06:23:36.8524415Z 135 │ }); 2026-10-24T06:23:36.8524467Z 136 │ }, 2026-10-24T06:23:36.8524626Z 137 │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-24T06:23:36.8524700Z 138 │ selectInput: (inputs) => { 2026-10-24T06:23:36.8524817Z 139 │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-24T06:23:36.8524924Z 140 │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-24T06:23:36.8525051Z 141 │ const known = microphoneOrder(preferences.value.microphones); 2026-10-24T06:23:36.8525154Z 142 │ const order = rememberMicrophones(known, inputs); 2026-10-24T06:23:36.8525222Z 143 │ if (order !== known) { 2026-10-24T06:23:36.8525324Z 144 │ registry.set(updateMobilePreferencesAtom, { 2026-10-24T06:23:36.8525410Z 145 │ transform: (current) => ({ 2026-10-24T06:23:36.8525581Z 146 │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-24T06:23:36.8525639Z 147 │ }), 2026-10-24T06:23:36.8525699Z 148 │ }); 2026-10-24T06:23:36.8525753Z 149 │ } 2026-10-24T06:23:36.8525857Z 150 │ return preferredMicrophoneInput(inputs, order); 2026-10-24T06:23:36.8525909Z 151 │ }, 2026-10-24T06:23:36.8525961Z 152 │ }); 2026-10-24T06:23:36.8526040Z 153 │ recorderRef.current = recorder; 2026-10-24T06:23:36.8526138Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T06:23:36.8526195Z 155 │ recorder, 2026-10-24T06:23:36.8526291Z 156 │ getTranscriber: getLocalVoiceTranscriber, 2026-10-24T06:23:36.8526371Z 157 │ requestPermission: async () => { 2026-10-24T06:23:36.8526501Z 158 │ const permission = await requestRecordingPermissionsAsync(); 2026-10-24T06:23:36.8526654Z 159 │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-24T06:23:36.8526708Z 160 │ }, 2026-10-24T06:23:36.8526850Z 161 │ configureRecording: configureVoiceRecordingAudio, 2026-10-24T06:23:36.8526951Z 162 │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-24T06:23:36.8527048Z 163 │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-24T06:23:36.8527126Z 164 │ onStateChange: (nextState) => 2026-10-24T06:23:36.8527186Z 165 │ setState({ 2026-10-24T06:23:36.8527255Z 166 │ state: nextState, 2026-10-24T06:23:36.8527355Z 167 │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-24T06:23:36.8527449Z 168 │ label: sessionRef.current?.label ?? null, 2026-10-24T06:23:36.8527506Z 169 │ }), 2026-10-24T06:23:36.8527609Z 170 │ }); 2026-10-24T06:23:36.8527686Z 171 │ } 2026-10-24T06:23:36.8527736Z 172 │ 2026-10-24T06:23:36.8527816Z 173 │ const session = sessionRef.current; 2026-10-24T06:23:36.8527900Z 174 │ const controller = session.controller; 2026-10-24T06:23:36.8527982Z 175 │ const recorder = recorderRef.current; 2026-10-24T06:23:36.8528032Z 176 │ 2026-10-24T06:23:36.8528095Z 177 │ useEffect(() => { 2026-10-24T06:23:36.8528238Z 178 │ const subscription = AppState.addEventListener("change", (nextState) => { 2026-10-24T06:23:36.8528374Z 179 │ // iOS reports `inactive` while its permission dialog is open. Only the 2026-10-24T06:23:36.8528511Z 180 │ // real background state cancels preparation; recorder status handles 2026-10-24T06:23:36.8528611Z 181 │ // calls and route interruptions during capture. 2026-10-24T06:23:36.8528745Z 182 │ if (nextState === "background") controller.appMovedToBackground(); 2026-10-24T06:23:36.8528801Z 183 │ }); 2026-10-24T06:23:36.8528882Z 184 │ return () => subscription.remove(); 2026-10-24T06:23:36.8528943Z 185 │ }, [controller]); 2026-10-24T06:23:36.8528991Z 186 │ 2026-10-24T06:23:36.8529049Z 187 │ useEffect( 2026-10-24T06:23:36.8529109Z 188 │ () => () => { 2026-10-24T06:23:36.8529178Z 189 │ controller.dispose(); 2026-10-24T06:23:36.8529242Z 190 │ recorder.release(); 2026-10-24T06:23:36.8529295Z 191 │ }, 2026-10-24T06:23:36.8529361Z 192 │ [controller, recorder], 2026-10-24T06:23:36.8529411Z 193 │ ); 2026-10-24T06:23:36.8529459Z 194 │ 2026-10-24T06:23:36.8529519Z 195 │ useEffect(() => { 2026-10-24T06:23:36.8529607Z 196 │ if (state.phase !== "recording") return; 2026-10-24T06:23:36.8529656Z 197 │ 2026-10-24T06:23:36.8529806Z 198 │ const tag = `voice-input:${keepAwakeId}:${++keepAwakeSessionRef.current}`; 2026-10-24T06:23:36.8529910Z 199 │ const activation = activateKeepAwakeAsync(tag); 2026-10-24T06:23:36.8529988Z 200 │ void activation.catch(() => {}); 2026-10-24T06:23:36.8530047Z 201 │ return () => { 2026-10-24T06:23:36.8530192Z 202 │ // Release after activation settles, even if the recording ends immediately. 2026-10-24T06:23:36.8530326Z 203 │ void activation.then(() => deactivateKeepAwake(tag)).catch(() => {}); 2026-10-24T06:23:36.8530379Z 204 │ }; 2026-10-24T06:23:36.8530453Z 205 │ }, [keepAwakeId, state.phase]); 2026-10-24T06:23:36.8530503Z 206 │ 2026-10-24T06:23:36.8530562Z 207 │ useEffect(() => { 2026-10-24T06:23:36.8530692Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-24T06:23:36.8530739Z 209 │ 2026-10-24T06:23:36.8530906Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-24T06:23:36.8531092Z 211 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-24T06:23:36.8531191Z 212 │ audioLevels.value = audioLevelsRef.current; 2026-10-24T06:23:36.8531264Z ·  ─────┬───── 2026-10-24T06:23:36.8531402Z · ╰── `audioLevels` cannot be modified 2026-10-24T06:23:36.8531454Z 213 │ } 2026-10-24T06:23:36.8531502Z ╰──── 2026-10-24T06:23:36.8531762Z  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-24T06:23:36.8532060Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T06:23:36.8532063Z 2026-10-24T06:23:36.8532264Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T06:23:36.8532420Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7] 2026-10-24T06:23:36.8532470Z 206 │ 2026-10-24T06:23:36.8532530Z 207 │ useEffect(() => { 2026-10-24T06:23:36.8532604Z ·  ───┬─── 2026-10-24T06:23:36.8532933Z · ╰── This function may (indirectly) reassign or modify `audioLevels` after render 2026-10-24T06:23:36.8533143Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-24T06:23:36.8533199Z 209 │ 2026-10-24T06:23:36.8533316Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-24T06:23:36.8533466Z 211 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-24T06:23:36.8533569Z 212 │ audioLevels.value = audioLevelsRef.current; 2026-10-24T06:23:36.8533644Z ·  ─────┬───── 2026-10-24T06:23:36.8533778Z · ╰── This modifies `audioLevels` 2026-10-24T06:23:36.8533829Z 213 │ } 2026-10-24T06:23:36.8533876Z ╰──── 2026-10-24T06:23:36.8534211Z  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-24T06:23:36.8534509Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T06:23:36.8534511Z 2026-10-24T06:23:36.8534663Z ⚠ react(immutability): This value cannot be modified 2026-10-24T06:23:36.8534833Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:93:5] 2026-10-24T06:23:36.8534885Z 90 │ }) { 2026-10-24T06:23:36.8534994Z 91 │ const rotation = useSharedValue(props.hidden ? 1 : 0); 2026-10-24T06:23:36.8535065Z ·  ────┬─── 2026-10-24T06:23:36.8535192Z · ╰── `rotation` originates here 2026-10-24T06:23:36.8535258Z 92 │ useLayoutEffect(() => { 2026-10-24T06:23:36.8535395Z 93 │ rotation.value = withTiming(props.hidden ? 1 : 0, TOOLBAR_FLIP_TIMING); 2026-10-24T06:23:36.8535464Z ·  ────┬─── 2026-10-24T06:23:36.8535593Z · ╰── `rotation` cannot be modified 2026-10-24T06:23:36.8535665Z 94 │ }, [props.hidden, rotation]); 2026-10-24T06:23:36.8535715Z ╰──── 2026-10-24T06:23:36.8536024Z  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-24T06:23:36.8536351Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T06:23:36.8536354Z 2026-10-24T06:23:36.8536502Z ⚠ react(immutability): This value cannot be modified 2026-10-24T06:23:36.8536669Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:269:5] 2026-10-24T06:23:36.8536772Z 266 │ const variant = props.variant ?? "plain"; 2026-10-24T06:23:36.8536941Z 267 │ const loadingVisibility = useSharedValue(props.loading ? 1 : 0); 2026-10-24T06:23:36.8537024Z ·  ────────┬──────── 2026-10-24T06:23:36.8537167Z · ╰── `loadingVisibility` originates here 2026-10-24T06:23:36.8537240Z 268 │ useLayoutEffect(() => { 2026-10-24T06:23:36.8537394Z 269 │ loadingVisibility.value = withTiming(props.loading ? 1 : 0, DICTATION_TIMING); 2026-10-24T06:23:36.8537474Z ·  ────────┬──────── 2026-10-24T06:23:36.8537618Z · ╰── `loadingVisibility` cannot be modified 2026-10-24T06:23:36.8537706Z 270 │ }, [loadingVisibility, props.loading]); 2026-10-24T06:23:36.8537755Z ╰──── 2026-10-24T06:23:36.8538008Z  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-24T06:23:36.8538300Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T06:23:36.8538303Z 2026-10-24T06:23:36.8538456Z ⚠ react(immutability): This value cannot be modified 2026-10-24T06:23:36.8538619Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:328:5] 2026-10-24T06:23:36.8538670Z 325 │ }) { 2026-10-24T06:23:36.8538822Z 326 │ const recordingVisibility = useSharedValue(props.phase === "recording" ? 1 : 0); 2026-10-24T06:23:36.8538908Z ·  ─────────┬───────── 2026-10-24T06:23:36.8539058Z · ╰── `recordingVisibility` originates here 2026-10-24T06:23:36.8539125Z 327 │ useLayoutEffect(() => { 2026-10-24T06:23:36.8539305Z 328 │ recordingVisibility.value = withTiming(props.phase === "recording" ? 1 : 0, DICTATION_TIMING); 2026-10-24T06:23:36.8539388Z ·  ─────────┬───────── 2026-10-24T06:23:36.8539545Z · ╰── `recordingVisibility` cannot be modified 2026-10-24T06:23:36.8539635Z 329 │ }, [props.phase, recordingVisibility]); 2026-10-24T06:23:36.8539683Z ╰──── 2026-10-24T06:23:36.8539936Z  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-24T06:23:36.8540232Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T06:23:36.8540235Z 2026-10-24T06:23:36.8540596Z ⚠ 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-24T06:23:36.8540713Z ╭─[packages/shared/src/otelEnvironment.ts:146:14] 2026-10-24T06:23:36.8540768Z 145 │ name, 2026-10-24T06:23:36.8540955Z 146 │ (raw) => Schema.decodeUnknownOption(OtlpProtocol)(raw.toLowerCase()), 2026-10-24T06:23:36.8541087Z ·  ────────────────────────── 2026-10-24T06:23:36.8541206Z 147 │ `${name} is not http/protobuf or http/json, ${NOT_EXPORTED}`, 2026-10-24T06:23:36.8541253Z ╰──── 2026-10-24T06:23:36.8541256Z 2026-10-24T06:23:36.8541507Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T06:23:36.8541632Z ╭─[apps/mobile/src/state/use-vcs-action-state.ts:86:5] 2026-10-24T06:23:36.8541734Z 83 │ const [nowMs, setNowMs] = useState(() => Date.now()); 2026-10-24T06:23:36.8541795Z 84 │ useEffect(() => { 2026-10-24T06:23:36.8541863Z ·  ────┬──── 2026-10-24T06:23:36.8541989Z · ╰── This is the containing effect 2026-10-24T06:23:36.8542080Z 85 │ if (!actionState.isRunning) return; 2026-10-24T06:23:36.8542145Z 86 │ setNowMs(Date.now()); 2026-10-24T06:23:36.8542212Z ·  ────┬─── 2026-10-24T06:23:36.8542378Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T06:23:36.8542500Z 87 │ const interval = setInterval(() => setNowMs(Date.now()), 1000); 2026-10-24T06:23:36.8542547Z ╰──── 2026-10-24T06:23:36.8543132Z  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-24T06:23:36.8543452Z  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-24T06:23:36.8543457Z 2026-10-24T06:23:36.8543670Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T06:23:36.8543801Z ╭─[apps/mobile/src/state/use-composer-drafts.ts:1022:15] 2026-10-24T06:23:36.8543864Z 1021 │ instanceId, 2026-10-24T06:23:36.8544003Z 1022 │ { ...(persisted.modelOptionMemory[instanceId] ?? {}), ...models }, 2026-10-24T06:23:36.8544137Z ·  ────────────────────────────────────────────────── 2026-10-24T06:23:36.8544197Z 1023 │ ]), 2026-10-24T06:23:36.8544246Z ╰──── 2026-10-24T06:23:36.8544501Z  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-24T06:23:36.8544508Z 2026-10-24T06:23:36.8544705Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T06:23:36.8544841Z ╭─[apps/mobile/src/state/use-thread-outbox-drain.ts:1315:5] 2026-10-24T06:23:36.8544919Z 1314 │ queuedMessagesByThreadKey, 2026-10-24T06:23:36.8544978Z 1315 │ retryTick, 2026-10-24T06:23:36.8545049Z ·  ────┬──── 2026-10-24T06:23:36.8545188Z · ╰── Unnecessary dependency `retryTick` 2026-10-24T06:23:36.8545256Z 1316 │ restoreQueuedMessage, 2026-10-24T06:23:36.8545305Z ╰──── 2026-10-24T06:23:36.8545588Z  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-24T06:23:36.8545937Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T06:23:36.8545968Z 2026-10-24T06:23:36.8546174Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T06:23:36.8546309Z ╭─[packages/shared/src/composerContextLegacySend.ts:19:45] 2026-10-24T06:23:36.8546429Z 18 │ const occurrences = collectComposerContextReferences(text); 2026-10-24T06:23:36.8546533Z 19 │ for (const occurrence of [...occurrences].reverse()) { 2026-10-24T06:23:36.8546640Z ·  ─────── 2026-10-24T06:23:36.8546760Z 20 │ const record = recordsById.get(occurrence.contextId); 2026-10-24T06:23:36.8546809Z ╰──── 2026-10-24T06:23:36.8547094Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T06:23:36.8547100Z 2026-10-24T06:23:36.8547321Z ⚠ eslint(no-unneeded-ternary): Unnecessary use of boolean literals in conditional expression 2026-10-24T06:23:36.8547441Z ╭─[packages/shared/src/serverSettings.test.ts:35:7] 2026-10-24T06:23:36.8547616Z 34 │ const fallback = fallbackTextGenerationModelSelection(providerInstances, (instanceId) => 2026-10-24T06:23:36.8547710Z 35 │ instanceId === configured ? true : false, 2026-10-24T06:23:36.8547822Z ·  ──────────────────────────────────────── 2026-10-24T06:23:36.8547874Z 36 │ ); 2026-10-24T06:23:36.8547921Z ╰──── 2026-10-24T06:23:36.8548012Z  help: Remove this ternary operator 2026-10-24T06:23:36.8548015Z 2026-10-24T06:23:36.8548231Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T06:23:36.8548348Z ╭─[packages/shared/src/serverSettings.ts:346:9] 2026-10-24T06:23:36.8548444Z 345 │ const entry: ProjectSettingsOverrides = { 2026-10-24T06:23:36.8548570Z 346 │ ...(entries.get(projectId) ?? currentEntries[projectId] ?? {}), 2026-10-24T06:23:36.8548718Z ·  ────────────────────────────────────────────────────────────── 2026-10-24T06:23:36.8548774Z 347 │ }; 2026-10-24T06:23:36.8548821Z ╰──── 2026-10-24T06:23:36.8549076Z  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-24T06:23:36.8549078Z 2026-10-24T06:23:36.8549288Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in Array.prototype.reduce() 2026-10-24T06:23:36.8549453Z ╭─[packages/shared/src/serverSettings.ts:448:24] 2026-10-24T06:23:36.8549554Z 447 │ const favorites = 2026-10-24T06:23:36.8549657Z 448 │ setModelFavorites?.reduce((current, change) => { 2026-10-24T06:23:36.8549741Z ·  ───┬── 2026-10-24T06:23:36.8549862Z · ╰── For this reduce 2026-10-24T06:23:36.8549939Z 449 │ const exists = current.some( 2026-10-24T06:23:36.8550107Z 450 │ (favorite) => favorite.provider === change.provider && favorite.model === change.model, 2026-10-24T06:23:36.8550161Z 451 │ ); 2026-10-24T06:23:36.8550230Z 452 │ return change.favorite 2026-10-24T06:23:36.8550288Z 453 │ ? exists 2026-10-24T06:23:36.8550348Z 454 │ ? current 2026-10-24T06:23:36.8550485Z 455 │ : [...current, { provider: change.provider, model: change.model }] 2026-10-24T06:23:36.8550568Z ·  ─────┬──── 2026-10-24T06:23:36.8550682Z · ╰── From this spread 2026-10-24T06:23:36.8550748Z 456 │ : current.filter( 2026-10-24T06:23:36.8550797Z ╰──── 2026-10-24T06:23:36.8550995Z  help: Consider using `Object.assign()` or `Array.prototype.push()` to mutate the accumulator instead. 2026-10-24T06:23:36.8551145Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T06:23:36.8551148Z 2026-10-24T06:23:36.8551329Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-24T06:23:36.8551441Z ╭─[packages/shared/src/serverSettings.ts:466:3] 2026-10-24T06:23:36.8551497Z 464 │ null; 2026-10-24T06:23:36.8551611Z 465 │ let nextModelPreferences = initialModelPreferences; 2026-10-24T06:23:36.8551697Z ·  ──────────┬───────── 2026-10-24T06:23:36.8551821Z · ╰── From this accumulator 2026-10-24T06:23:36.8551917Z 466 │ for (const change of setModelsHidden ?? []) { 2026-10-24T06:23:36.8551980Z ·  ─┬─ 2026-10-24T06:23:36.8552082Z · ╰── For this loop 2026-10-24T06:23:36.8552212Z 467 │ const preferences = nextModelPreferences?.[change.provider] ?? { 2026-10-24T06:23:36.8552278Z 468 │ hiddenModels: [], 2026-10-24T06:23:36.8552340Z 469 │ modelOrder: [], 2026-10-24T06:23:36.8552393Z 470 │ }; 2026-10-24T06:23:36.8552567Z 471 │ const hiddenModels = preferences.hiddenModels.filter((model) => model !== change.model); 2026-10-24T06:23:36.8552677Z 472 │ if (change.hidden) hiddenModels.push(change.model); 2026-10-24T06:23:36.8552750Z 473 │ nextModelPreferences = { 2026-10-24T06:23:36.8552824Z 474 │ ...nextModelPreferences, 2026-10-24T06:23:36.8552915Z ·  ───────────┬─────────── 2026-10-24T06:23:36.8553035Z · ╰── From this spread 2026-10-24T06:23:36.8553141Z 475 │ [change.provider]: { ...preferences, hiddenModels }, 2026-10-24T06:23:36.8553191Z ╰──── 2026-10-24T06:23:36.8553342Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-24T06:23:36.8553490Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T06:23:36.8553493Z 2026-10-24T06:23:36.8553680Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T06:23:36.8553866Z ╭─[apps/mobile/modules/t3-source-text/src/SourceText.tsx:36:9] 2026-10-24T06:23:36.8553976Z 35 │