2026-10-24T00:18:14.8790825Z Current runner version: '2.338.1' 2026-10-24T00:18:14.8795118Z Runner name: 'blacksmith-8vcpu-ubuntu-2404-465kg4uhcneglbcj' 2026-10-24T00:18:14.8795949Z Runner group name: 'blacksmith scale sets - blacksmith-8vcpu-ubuntu-2404' 2026-10-24T00:18:14.8796810Z Machine name: 'ip-172-31-73-130' 2026-10-24T00:18:14.8798631Z ##[group]GITHUB_TOKEN Permissions 2026-10-24T00:18:14.8800315Z Contents: read 2026-10-24T00:18:14.8800730Z Metadata: read 2026-10-24T00:18:14.8801163Z ##[endgroup] 2026-10-24T00:18:14.8802723Z Secret source: Actions 2026-10-24T00:18:14.8803436Z Cache mode: write 2026-10-24T00:18:14.8803955Z Prepare workflow directory 2026-10-24T00:18:14.9020186Z Prepare all required actions 2026-10-24T00:18:14.9056406Z Getting action download info 2026-10-24T00:18:15.0294580Z Download action repository 'actions/checkout@v6' (SHA:d23441a48e516b6c34aea4fa41551a30e30af803) 2026-10-24T00:18:15.0680734Z Download action repository 'actions/cache@v6' (SHA:55cc8345863c7cc4c66a329aec7e433d2d1c52a9) 2026-10-24T00:18:15.1984855Z Setting BLACKSMITH_ACTIONS_RESULTS_URL to https://results-receiver.actions.githubusercontent.com/ 2026-10-24T00:18:15.2028361Z Complete job name: Lint 2026-10-24T00:18:15.2518609Z A job started hook has been configured by the self-hosted runner administrator 2026-10-24T00:18:15.2724858Z ##[group]Run '/setup.sh' 2026-10-24T00:18:15.2762241Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T00:18:15.2763139Z env: 2026-10-24T00:18:15.2763513Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 160 2026-10-24T00:18:15.2764004Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 480 2026-10-24T00:18:15.2764478Z BLACKSMITH_CHECK_RUN_ID: 120722315357 2026-10-24T00:18:15.2764951Z BLACKSMITH_JOB_DISPLAY_NAME: Lint 2026-10-24T00:18:15.2765409Z GITHUB_ACTIONS_CACHE_MODE: write 2026-10-24T00:18:15.2765848Z ##[endgroup] 2026-10-24T00:18:15.3092436Z Logging daemon started (blacksmithd for logs) 2026-10-24T00:18:15.3210994Z Results daemon started (blacksmithd for results) 2026-10-24T00:18:15.3434053Z Background adoption and SSH setup started (PID: 3024) 2026-10-24T00:18:15.3436819Z 2026-10-24T00:18:15.3437268Z ---------------------------------------- 2026-10-24T00:18:15.3437830Z View this job: https://app.blacksmith.sh/pingdotgg/runs/40044291740/jobs/120722315357 2026-10-24T00:18:15.3438277Z SSH Access (using your GitHub SSH key): 2026-10-24T00:18:15.3438737Z ssh -p 64003 runner@blacksmith-8vcpu-ubuntu-2404-465kg4uhcneglbcj.vm.blacksmith.sh 2026-10-24T00:18:15.3439111Z 2026-10-24T00:18:15.3439233Z No GitHub SSH key? Add one at: 2026-10-24T00:18:15.3439763Z https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account 2026-10-24T00:18:15.3440193Z 2026-10-24T00:18:15.3440313Z ---------------------------------------- 2026-10-24T00:18:15.3440507Z 2026-10-24T00:18:15.3440671Z VM ID: blacksmith-8vcpu-ubuntu-2404-465kg4uhcneglbcj 2026-10-24T00:18:15.3441017Z Host: production-152.236.40.214-x8664 2026-10-24T00:18:15.3441319Z Host Agent PID: 4129740 2026-10-24T00:18:15.3441618Z Host Agent Git SHA: 1637818df 2026-10-24T00:18:15.3441931Z Host CPU Manufacturer: AuthenticAMD 2026-10-24T00:18:15.3442241Z Blacksmith Host Generation: gen 2 2026-10-24T00:18:15.3442552Z Petname: production-accepted-emu-a3e93a81 2026-10-24T00:18:15.3442870Z Region: us-east 2026-10-24T00:18:15.3443124Z Rootfs Version: ubuntu24-full-x64-081926 2026-10-24T00:18:15.3449516Z OS Version: Ubuntu 24.04.4 LTS 2026-10-24T00:18:15.3449735Z 2026-10-24T00:18:15.3449865Z Enabling Blacksmith transparent cache 2026-10-24T00:18:15.3685330Z ##[group]Run actions/checkout@v6 2026-10-24T00:18:15.3685654Z with: 2026-10-24T00:18:15.3686005Z sparse-checkout: /* !/.repos/ !/apps/mobile/modules/t3-terminal/Vendor/**/*.a 2026-10-24T00:18:15.3686430Z sparse-checkout-cone-mode: false 2026-10-24T00:18:15.3686730Z repository: pingdotgg/t3code 2026-10-24T00:18:15.3688661Z token: *** 2026-10-24T00:18:15.3688959Z ssh-strict: true 2026-10-24T00:18:15.3689213Z ssh-user: git 2026-10-24T00:18:15.3689457Z persist-credentials: true 2026-10-24T00:18:15.3689884Z clean: true 2026-10-24T00:18:15.3690112Z fetch-depth: 1 2026-10-24T00:18:15.3690345Z fetch-tags: false 2026-10-24T00:18:15.3690587Z show-progress: true 2026-10-24T00:18:15.3690828Z lfs: false 2026-10-24T00:18:15.3691151Z submodules: false 2026-10-24T00:18:15.3691399Z set-safe-directory: true 2026-10-24T00:18:15.3691845Z allow-unsafe-pr-checkout: false 2026-10-24T00:18:15.3692120Z env: 2026-10-24T00:18:15.3692375Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 160 2026-10-24T00:18:15.3692684Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 480 2026-10-24T00:18:15.3692992Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T00:18:15.3693273Z ##[endgroup] 2026-10-24T00:18:15.5075782Z Syncing repository: pingdotgg/t3code 2026-10-24T00:18:15.5077062Z ##[group]Getting Git version info 2026-10-24T00:18:15.5077456Z Working directory is '/home/runner/_work/t3code/t3code' 2026-10-24T00:18:15.5078008Z [command]/usr/local/bin/git version 2026-10-24T00:18:15.5161723Z git version 2.55.0 2026-10-24T00:18:15.5177679Z ##[endgroup] 2026-10-24T00:18:15.5186296Z Temporarily overriding HOME='/home/runner/_work/_temp/381affb9-5a6f-4033-9344-7e50b453cf22' before making global git config changes 2026-10-24T00:18:15.5187043Z Adding repository directory to the temporary git global config as a safe directory 2026-10-24T00:18:15.5191687Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code 2026-10-24T00:18:15.5226658Z Deleting the contents of '/home/runner/_work/t3code/t3code' 2026-10-24T00:18:15.5228527Z ##[group]Determining repository object format 2026-10-24T00:18:15.5229905Z ##[endgroup] 2026-10-24T00:18:15.5230293Z ##[group]Initializing the repository 2026-10-24T00:18:15.5232264Z [command]/usr/local/bin/git init /home/runner/_work/t3code/t3code 2026-10-24T00:18:15.5270449Z hint: Using 'master' as the name for the initial branch. This default branch name 2026-10-24T00:18:15.5270992Z hint: will change to "main" in Git 3.0. To configure the initial branch name 2026-10-24T00:18:15.5271524Z hint: to use in all of your new repositories, which will suppress this warning, 2026-10-24T00:18:15.5271918Z hint: call: 2026-10-24T00:18:15.5272146Z hint: 2026-10-24T00:18:15.5272434Z hint: git config --global init.defaultBranch 2026-10-24T00:18:15.5272767Z hint: 2026-10-24T00:18:15.5273079Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and 2026-10-24T00:18:15.5273578Z hint: 'development'. The just-created branch can be renamed via this command: 2026-10-24T00:18:15.5273979Z hint: 2026-10-24T00:18:15.5274215Z hint: git branch -m 2026-10-24T00:18:15.5274469Z hint: 2026-10-24T00:18:15.5274806Z hint: Disable this message with "git config set advice.defaultBranchName false" 2026-10-24T00:18:15.5275334Z Initialized empty Git repository in /home/runner/_work/t3code/t3code/.git/ 2026-10-24T00:18:15.5276425Z [command]/usr/local/bin/git remote add origin https://github.com/pingdotgg/t3code 2026-10-24T00:18:15.5304456Z ##[endgroup] 2026-10-24T00:18:15.5304861Z ##[group]Disabling automatic garbage collection 2026-10-24T00:18:15.5306704Z [command]/usr/local/bin/git config --local gc.auto 0 2026-10-24T00:18:15.5327395Z ##[endgroup] 2026-10-24T00:18:15.5327781Z ##[group]Setting up auth 2026-10-24T00:18:15.5328073Z Removing SSH command configuration 2026-10-24T00:18:15.5332363Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand 2026-10-24T00:18:15.5356615Z [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-24T00:18:15.5492071Z Removing HTTP extra header 2026-10-24T00:18:15.5495906Z [command]/usr/local/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader 2026-10-24T00:18:15.5518205Z [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-24T00:18:15.5632079Z Removing includeIf entries pointing to credentials config files 2026-10-24T00:18:15.5635574Z [command]/usr/local/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir: 2026-10-24T00:18:15.5659781Z [command]/usr/local/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url 2026-10-24T00:18:15.5772492Z [command]/usr/local/bin/git config --file /home/runner/_work/_temp/git-credentials-6b88c3fe-5e84-4876-9e6d-3d86bb392a57.config http.https://github.com/.extraheader AUTHORIZATION: basic *** 2026-10-24T00:18:15.5803124Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git.path /home/runner/_work/_temp/git-credentials-6b88c3fe-5e84-4876-9e6d-3d86bb392a57.config 2026-10-24T00:18:15.5845241Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git/worktrees/*.path /home/runner/_work/_temp/git-credentials-6b88c3fe-5e84-4876-9e6d-3d86bb392a57.config 2026-10-24T00:18:15.5868158Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git.path /github/runner_temp/git-credentials-6b88c3fe-5e84-4876-9e6d-3d86bb392a57.config 2026-10-24T00:18:15.5889286Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git/worktrees/*.path /github/runner_temp/git-credentials-6b88c3fe-5e84-4876-9e6d-3d86bb392a57.config 2026-10-24T00:18:15.5907878Z ##[endgroup] 2026-10-24T00:18:15.5908294Z ##[group]Fetching the repository 2026-10-24T00:18:15.5912607Z [command]/usr/local/bin/git -c protocol.version=2 fetch --no-tags --prune --no-recurse-submodules --filter=blob:none --depth=1 origin +52628d863e977e1a8b16644141fd00ba96640b16:refs/remotes/origin/main 2026-10-24T00:18:15.8280810Z From https://github.com/pingdotgg/t3code 2026-10-24T00:18:15.8281617Z * [new ref] 52628d863e977e1a8b16644141fd00ba96640b16 -> origin/main 2026-10-24T00:18:15.8313914Z [command]/usr/local/bin/git branch --list --remote origin/main 2026-10-24T00:18:15.8341073Z origin/main 2026-10-24T00:18:15.8346793Z [command]/usr/local/bin/git rev-parse refs/remotes/origin/main 2026-10-24T00:18:15.8367606Z 52628d863e977e1a8b16644141fd00ba96640b16 2026-10-24T00:18:15.8369546Z ##[endgroup] 2026-10-24T00:18:15.8369998Z ##[group]Determining the checkout info 2026-10-24T00:18:15.8370627Z ##[endgroup] 2026-10-24T00:18:15.8371054Z ##[group]Setting up sparse checkout 2026-10-24T00:18:15.8373624Z [command]/usr/local/bin/git config core.sparseCheckout true 2026-10-24T00:18:15.8399589Z [command]/usr/local/bin/git rev-parse --git-path info/sparse-checkout 2026-10-24T00:18:15.8416550Z .git/info/sparse-checkout 2026-10-24T00:18:15.8420249Z ##[endgroup] 2026-10-24T00:18:15.8420663Z ##[group]Checking out the ref 2026-10-24T00:18:15.8422838Z [command]/usr/local/bin/git checkout --progress --force -B main refs/remotes/origin/main 2026-10-24T00:18:22.3667622Z Updating files: 0% (1/6315) 2026-10-24T00:18:22.3702922Z Updating files: 1% (64/6315) 2026-10-24T00:18:22.3721641Z Updating files: 2% (127/6315) 2026-10-24T00:18:22.3746539Z Updating files: 3% (190/6315) 2026-10-24T00:18:22.3769657Z Updating files: 4% (253/6315) 2026-10-24T00:18:22.3806191Z Updating files: 5% (316/6315) 2026-10-24T00:18:22.3829138Z Updating files: 6% (379/6315) 2026-10-24T00:18:22.3896456Z Updating files: 7% (443/6315) 2026-10-24T00:18:22.3931166Z Updating files: 8% (506/6315) 2026-10-24T00:18:22.3955478Z Updating files: 9% (569/6315) 2026-10-24T00:18:22.4262442Z Updating files: 10% (632/6315) 2026-10-24T00:18:22.4279620Z Updating files: 11% (695/6315) 2026-10-24T00:18:22.4292886Z Updating files: 12% (758/6315) 2026-10-24T00:18:22.4309530Z Updating files: 13% (821/6315) 2026-10-24T00:18:22.4328981Z Updating files: 14% (885/6315) 2026-10-24T00:18:22.4350242Z Updating files: 15% (948/6315) 2026-10-24T00:18:22.4372014Z Updating files: 16% (1011/6315) 2026-10-24T00:18:22.4389147Z Updating files: 17% (1074/6315) 2026-10-24T00:18:22.4409998Z Updating files: 18% (1137/6315) 2026-10-24T00:18:22.4428028Z Updating files: 19% (1200/6315) 2026-10-24T00:18:22.4454018Z Updating files: 20% (1263/6315) 2026-10-24T00:18:22.4475712Z Updating files: 21% (1327/6315) 2026-10-24T00:18:22.4497143Z Updating files: 22% (1390/6315) 2026-10-24T00:18:22.4512706Z Updating files: 23% (1453/6315) 2026-10-24T00:18:22.4528312Z Updating files: 24% (1516/6315) 2026-10-24T00:18:22.4547707Z Updating files: 25% (1579/6315) 2026-10-24T00:18:22.4565150Z Updating files: 26% (1642/6315) 2026-10-24T00:18:22.4581717Z Updating files: 27% (1706/6315) 2026-10-24T00:18:22.4605860Z Updating files: 28% (1769/6315) 2026-10-24T00:18:22.4653808Z Updating files: 29% (1832/6315) 2026-10-24T00:18:22.4682421Z Updating files: 30% (1895/6315) 2026-10-24T00:18:22.4718673Z Updating files: 31% (1958/6315) 2026-10-24T00:18:22.4761159Z Updating files: 32% (2021/6315) 2026-10-24T00:18:22.4806638Z Updating files: 33% (2084/6315) 2026-10-24T00:18:22.4891107Z Updating files: 34% (2148/6315) 2026-10-24T00:18:22.4951272Z Updating files: 35% (2211/6315) 2026-10-24T00:18:22.4988214Z Updating files: 36% (2274/6315) 2026-10-24T00:18:22.5027241Z Updating files: 37% (2337/6315) 2026-10-24T00:18:22.5075239Z Updating files: 38% (2400/6315) 2026-10-24T00:18:22.5103744Z Updating files: 39% (2463/6315) 2026-10-24T00:18:22.5139368Z Updating files: 40% (2526/6315) 2026-10-24T00:18:22.5175784Z Updating files: 41% (2590/6315) 2026-10-24T00:18:22.5193733Z Updating files: 42% (2653/6315) 2026-10-24T00:18:22.5205575Z Updating files: 43% (2716/6315) 2026-10-24T00:18:22.5227128Z Updating files: 44% (2779/6315) 2026-10-24T00:18:22.5260160Z Updating files: 45% (2842/6315) 2026-10-24T00:18:22.5286086Z Updating files: 46% (2905/6315) 2026-10-24T00:18:22.5317831Z Updating files: 47% (2969/6315) 2026-10-24T00:18:22.5348426Z Updating files: 48% (3032/6315) 2026-10-24T00:18:22.5383419Z Updating files: 49% (3095/6315) 2026-10-24T00:18:22.5425155Z Updating files: 50% (3158/6315) 2026-10-24T00:18:22.5442625Z Updating files: 51% (3221/6315) 2026-10-24T00:18:22.5479721Z Updating files: 52% (3284/6315) 2026-10-24T00:18:22.5510020Z Updating files: 53% (3347/6315) 2026-10-24T00:18:22.5533192Z Updating files: 54% (3411/6315) 2026-10-24T00:18:22.5559047Z Updating files: 55% (3474/6315) 2026-10-24T00:18:22.5582508Z Updating files: 56% (3537/6315) 2026-10-24T00:18:22.5598757Z Updating files: 57% (3600/6315) 2026-10-24T00:18:22.5620325Z Updating files: 58% (3663/6315) 2026-10-24T00:18:22.6027237Z Updating files: 59% (3726/6315) 2026-10-24T00:18:22.6040051Z Updating files: 60% (3789/6315) 2026-10-24T00:18:22.6057476Z Updating files: 61% (3853/6315) 2026-10-24T00:18:22.6076785Z Updating files: 62% (3916/6315) 2026-10-24T00:18:22.6100185Z Updating files: 63% (3979/6315) 2026-10-24T00:18:22.6127603Z Updating files: 64% (4042/6315) 2026-10-24T00:18:22.6149621Z Updating files: 65% (4105/6315) 2026-10-24T00:18:22.6168550Z Updating files: 66% (4168/6315) 2026-10-24T00:18:22.6195775Z Updating files: 67% (4232/6315) 2026-10-24T00:18:22.6209393Z Updating files: 68% (4295/6315) 2026-10-24T00:18:22.6229929Z Updating files: 69% (4358/6315) 2026-10-24T00:18:22.6244231Z Updating files: 70% (4421/6315) 2026-10-24T00:18:22.6261487Z Updating files: 71% (4484/6315) 2026-10-24T00:18:22.6279519Z Updating files: 72% (4547/6315) 2026-10-24T00:18:22.6306214Z Updating files: 73% (4610/6315) 2026-10-24T00:18:22.6582646Z Updating files: 74% (4674/6315) 2026-10-24T00:18:22.6786821Z Updating files: 75% (4737/6315) 2026-10-24T00:18:22.6812121Z Updating files: 76% (4800/6315) 2026-10-24T00:18:22.6833210Z Updating files: 77% (4863/6315) 2026-10-24T00:18:22.6862959Z Updating files: 78% (4926/6315) 2026-10-24T00:18:22.6883568Z Updating files: 79% (4989/6315) 2026-10-24T00:18:22.6905182Z Updating files: 80% (5052/6315) 2026-10-24T00:18:22.6925519Z Updating files: 81% (5116/6315) 2026-10-24T00:18:22.6944885Z Updating files: 82% (5179/6315) 2026-10-24T00:18:22.6964046Z Updating files: 83% (5242/6315) 2026-10-24T00:18:22.6987486Z Updating files: 84% (5305/6315) 2026-10-24T00:18:22.7008309Z Updating files: 85% (5368/6315) 2026-10-24T00:18:22.7032734Z Updating files: 86% (5431/6315) 2026-10-24T00:18:22.7110101Z Updating files: 87% (5495/6315) 2026-10-24T00:18:22.7144423Z Updating files: 88% (5558/6315) 2026-10-24T00:18:22.7162146Z Updating files: 89% (5621/6315) 2026-10-24T00:18:22.7190148Z Updating files: 90% (5684/6315) 2026-10-24T00:18:22.7229241Z Updating files: 91% (5747/6315) 2026-10-24T00:18:22.7245392Z Updating files: 92% (5810/6315) 2026-10-24T00:18:22.7263804Z Updating files: 93% (5873/6315) 2026-10-24T00:18:22.7288706Z Updating files: 94% (5937/6315) 2026-10-24T00:18:22.7333492Z Updating files: 95% (6000/6315) 2026-10-24T00:18:22.7399349Z Updating files: 96% (6063/6315) 2026-10-24T00:18:22.7429847Z Updating files: 97% (6126/6315) 2026-10-24T00:18:22.7482336Z Updating files: 98% (6189/6315) 2026-10-24T00:18:22.7503530Z Updating files: 99% (6252/6315) 2026-10-24T00:18:22.7504660Z Updating files: 100% (6315/6315) 2026-10-24T00:18:22.7504931Z Updating files: 100% (6315/6315), done. 2026-10-24T00:18:22.7687691Z Switched to a new branch 'main' 2026-10-24T00:18:22.7688100Z branch 'main' set up to track 'origin/main'. 2026-10-24T00:18:22.7703882Z ##[endgroup] 2026-10-24T00:18:22.7759821Z [command]/usr/local/bin/git log -1 --format=%H 2026-10-24T00:18:22.7788212Z 52628d863e977e1a8b16644141fd00ba96640b16 2026-10-24T00:18:22.7889776Z ##[group]Run files="$(git ls-files .github/pr-assets)" 2026-10-24T00:18:22.7890100Z files="$(git ls-files .github/pr-assets)" 2026-10-24T00:18:22.7890315Z if test -n "$files"; then 2026-10-24T00:18:22.7890568Z  printf 'PR evidence must be uploaded to GitHub, not committed:\n%s\n' "$files" >&2 2026-10-24T00:18:22.7890800Z  exit 1 2026-10-24T00:18:22.7890926Z fi 2026-10-24T00:18:22.7913959Z shell: /usr/bin/bash -e {0} 2026-10-24T00:18:22.7914117Z env: 2026-10-24T00:18:22.7914251Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 160 2026-10-24T00:18:22.7914443Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 480 2026-10-24T00:18:22.7914601Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T00:18:22.7914750Z ##[endgroup] 2026-10-24T00:18:22.8120308Z Prepare all required actions 2026-10-24T00:18:22.8120715Z Getting action download info 2026-10-24T00:18:22.8929216Z Download action repository 'voidzero-dev/setup-vp@v1' (SHA:250f29ce396baf5e8f24498e17c0dfdebabc26eb) 2026-10-24T00:18:23.0231163Z ##[group]Run ./.github/actions/setup-ci-deps 2026-10-24T00:18:23.0231384Z env: 2026-10-24T00:18:23.0231522Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 160 2026-10-24T00:18:23.0231688Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 480 2026-10-24T00:18:23.0231841Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T00:18:23.0231986Z ##[endgroup] 2026-10-24T00:18:23.1693768Z ##[start-action display=Resolve Vite+ version;id=__self.vp] 2026-10-24T00:18:23.1716417Z ##[group]Run echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-24T00:18:23.1717030Z echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-24T00:18:23.1717527Z echo "node=$(jq -r '.engines.node' package.json)" >> "$GITHUB_OUTPUT" 2026-10-24T00:18:23.1717828Z echo "pnpm=$(jq -r '.packageManager' package.json)" >> "$GITHUB_OUTPUT" 2026-10-24T00:18:23.1739938Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T00:18:23.1740130Z env: 2026-10-24T00:18:23.1740257Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 160 2026-10-24T00:18:23.1740412Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 480 2026-10-24T00:18:23.1740597Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T00:18:23.1740787Z ##[endgroup] 2026-10-24T00:18:23.1835291Z ##[end-action id=__self.vp;outcome=success;conclusion=success;duration_ms=14] 2026-10-24T00:18:23.1837473Z ##[start-action display=Cache Vite+;id=__self.vp_cache] 2026-10-24T00:18:23.1891141Z ##[group]Run actions/cache@v6 2026-10-24T00:18:23.1891304Z with: 2026-10-24T00:18:23.1891762Z path: ~/.vite-plus 2026-10-24T00:18:23.1891946Z key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T00:18:23.1892168Z enableCrossOsArchive: false 2026-10-24T00:18:23.1892312Z fail-on-cache-miss: false 2026-10-24T00:18:23.1892445Z lookup-only: false 2026-10-24T00:18:23.1892561Z save-always: false 2026-10-24T00:18:23.1892680Z env: 2026-10-24T00:18:23.1892795Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 160 2026-10-24T00:18:23.1892974Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 480 2026-10-24T00:18:23.1893126Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T00:18:23.1893265Z ##[endgroup] 2026-10-24T00:18:23.4208804Z Cache hit for: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T00:18:23.9167166Z Received 170349591 of 170349591 (100.0%), 345.7 MBs/sec 2026-10-24T00:18:23.9167472Z Cache Size: ~162 MB (170349591 B) 2026-10-24T00:18:23.9201970Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/482c1cc4-dc04-494c-9063-10c6fadadc10/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T00:18:24.8467778Z Cache restored successfully 2026-10-24T00:18:24.8666632Z Cache restored from key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T00:18:24.8771344Z ##[end-action id=__self.vp_cache;outcome=success;conclusion=success;duration_ms=1693] 2026-10-24T00:18:24.8774608Z ##[start-action display=Use cached Vite+;id=__self.__run] 2026-10-24T00:18:24.8801562Z ##[group]Run echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-24T00:18:24.8801798Z echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-24T00:18:24.8801985Z "$HOME/.vite-plus/bin/vp" env use "26.12.1" 2026-10-24T00:18:24.8827130Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T00:18:24.8827312Z env: 2026-10-24T00:18:24.8827442Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 160 2026-10-24T00:18:24.8827598Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 480 2026-10-24T00:18:24.8827753Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T00:18:24.8827918Z ##[endgroup] 2026-10-24T00:18:24.8887806Z Using Node.js v26.12.1 (resolved from 26.12.1) 2026-10-24T00:18:24.8899601Z ##[end-action id=__self.__run;outcome=success;conclusion=success;duration_ms=12] 2026-10-24T00:18:24.8902339Z ##[start-action display=Setup Vite+;id=__self.__voidzero-dev_setup-vp] 2026-10-24T00:18:24.8908586Z ##[end-action id=__self.__voidzero-dev_setup-vp;outcome=skipped;conclusion=skipped;duration_ms=0] 2026-10-24T00:18:24.8910221Z ##[start-action display=Resolve pnpm store path;id=__self.pnpm_store] 2026-10-24T00:18:24.8923722Z ##[group]Run store_path="$(vp pm cache dir)" 2026-10-24T00:18:24.8924029Z store_path="$(vp pm cache dir)" 2026-10-24T00:18:24.8924308Z echo "path=$store_path" >> "$GITHUB_OUTPUT" 2026-10-24T00:18:24.8951092Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T00:18:24.8951290Z env: 2026-10-24T00:18:24.8951421Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 160 2026-10-24T00:18:24.8951594Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 480 2026-10-24T00:18:24.8951844Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T00:18:24.8951992Z ##[endgroup] 2026-10-24T00:18:24.9146830Z ##[end-action id=__self.pnpm_store;outcome=success;conclusion=success;duration_ms=23] 2026-10-24T00:18:24.9149450Z ##[start-action display=Cache full pnpm store;id=__self.__actions_cache] 2026-10-24T00:18:24.9588690Z ##[group]Run actions/cache@v6 2026-10-24T00:18:24.9589183Z with: 2026-10-24T00:18:24.9589539Z path: /home/runner/.local/share/pnpm/store/v11 2026-10-24T00:18:24.9590133Z key: pnpm-full-v1-Linux-X64-3cb0b4d7cff93dc8fe33f2ea73cac71ca25a36270fcb648b9b4a9320151012ef 2026-10-24T00:18:24.9590649Z restore-keys: pnpm-full-v1-Linux-X64- 2026-10-24T00:18:24.9590978Z enableCrossOsArchive: false 2026-10-24T00:18:24.9591265Z fail-on-cache-miss: false 2026-10-24T00:18:24.9591543Z lookup-only: false 2026-10-24T00:18:24.9591798Z save-always: false 2026-10-24T00:18:24.9592066Z env: 2026-10-24T00:18:24.9592408Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 160 2026-10-24T00:18:24.9593178Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 480 2026-10-24T00:18:24.9593504Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T00:18:24.9593801Z ##[endgroup] 2026-10-24T00:18:25.1848043Z Cache hit for: pnpm-full-v1-Linux-X64-3cb0b4d7cff93dc8fe33f2ea73cac71ca25a36270fcb648b9b4a9320151012ef 2026-10-24T00:18:26.2628135Z Received 536870912 of 995020926 (54.0%), 489.0 MBs/sec 2026-10-24T00:18:27.0601692Z Received 995020926 of 995020926 (100.0%), 514.6 MBs/sec 2026-10-24T00:18:27.0602083Z Cache Size: ~949 MB (995020926 B) 2026-10-24T00:18:27.0648176Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/a3eb616c-cdb8-402c-aec4-f28279cc713c/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T00:18:33.2609030Z Cache restored successfully 2026-10-24T00:18:33.3120264Z Cache restored from key: pnpm-full-v1-Linux-X64-3cb0b4d7cff93dc8fe33f2ea73cac71ca25a36270fcb648b9b4a9320151012ef 2026-10-24T00:18:33.3191659Z ##[end-action id=__self.__actions_cache;outcome=success;conclusion=success;duration_ms=8404] 2026-10-24T00:18:33.3193878Z ##[start-action display=Install dependencies;id=__self.__run_2] 2026-10-24T00:18:33.3205425Z ##[group]Run vp install 2026-10-24T00:18:33.3205584Z vp install 2026-10-24T00:18:33.3226541Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T00:18:33.3226715Z env: 2026-10-24T00:18:33.3226838Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 160 2026-10-24T00:18:33.3226996Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 480 2026-10-24T00:18:33.3227152Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T00:18:33.3227295Z ##[endgroup] 2026-10-24T00:18:33.3632851Z Scope: all 33 workspace projects 2026-10-24T00:18:33.4902941Z ? Verifying lockfile against supply-chain policies (2088 entries)... 2026-10-24T00:18:33.7886641Z Packages are hard linked from the content-addressable store to the virtual store. 2026-10-24T00:18:33.7887232Z Content-addressable store is at: /home/runner/.local/share/pnpm/store/v11 2026-10-24T00:18:33.7887613Z Virtual store is at: node_modules/.pnpm 2026-10-24T00:18:36.3962396Z ✓ Lockfile passes supply-chain policies (2088 entries in 2.9s) 2026-10-24T00:18:36.3962690Z Lockfile is up to date, resolution step is skipped 2026-10-24T00:18:36.4160091Z Packages: +1721 2026-10-24T00:18:36.4160306Z ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2026-10-24T00:18:36.4623535Z Progress: resolved 1721, reused 1718, downloaded 0, added 1721, done 2026-10-24T00:18:37.6492299Z . prepare$ vp config --no-agent 2026-10-24T00:18:37.8082382Z . prepare: Done 2026-10-24T00:18:37.8107423Z 2026-10-24T00:18:37.8108064Z devDependencies: 2026-10-24T00:18:37.8108360Z + @coderabbitai/config 1.1.0 2026-10-24T00:18:37.8108615Z + @shadcn/lint 0.1.5 2026-10-24T00:18:37.8108903Z + @types/node 24.12.4 2026-10-24T00:18:37.8109118Z + knip 6.34.0 2026-10-24T00:18:37.8109354Z + typescript <- @tsc-rs/typescript 0.8.0 2026-10-24T00:18:37.8109626Z + vite-plus 1.3.0 2026-10-24T00:18:37.8109744Z 2026-10-24T00:18:37.8135576Z Done in 4.5s using pnpm v12.14.0 2026-10-24T00:18:37.8339549Z ##[end-action id=__self.__run_2;outcome=success;conclusion=success;duration_ms=4514] 2026-10-24T00:18:37.9429330Z ##[group]Run actions/cache@v6 2026-10-24T00:18:37.9429514Z with: 2026-10-24T00:18:37.9429661Z path: ~/.cache/electron 2026-10-24T00:18:37.9430016Z key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T00:18:37.9430424Z enableCrossOsArchive: false 2026-10-24T00:18:37.9430669Z fail-on-cache-miss: false 2026-10-24T00:18:37.9430887Z lookup-only: false 2026-10-24T00:18:37.9431114Z save-always: false 2026-10-24T00:18:37.9431313Z env: 2026-10-24T00:18:37.9431519Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 160 2026-10-24T00:18:37.9431782Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 480 2026-10-24T00:18:37.9432061Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T00:18:37.9432322Z ##[endgroup] 2026-10-24T00:18:38.1672837Z Cache hit for: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T00:18:38.4008262Z Received 122906203 of 122906203 (100.0%), 569.0 MBs/sec 2026-10-24T00:18:38.4009269Z Cache Size: ~117 MB (122906203 B) 2026-10-24T00:18:38.4028587Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/4328b50f-f2b0-406f-8f11-9aeab00f019e/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T00:18:38.4664448Z Cache restored successfully 2026-10-24T00:18:38.4848266Z Cache restored from key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T00:18:38.4974817Z ##[group]Run vp run --filter @t3tools/desktop ensure:electron 2026-10-24T00:18:38.4975079Z vp run --filter @t3tools/desktop ensure:electron 2026-10-24T00:18:38.4997018Z shell: /usr/bin/bash -e {0} 2026-10-24T00:18:38.4997165Z env: 2026-10-24T00:18:38.4997286Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 160 2026-10-24T00:18:38.4997450Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 480 2026-10-24T00:18:38.4997598Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T00:18:38.4997737Z ##[endgroup] 2026-10-24T00:18:38.7385390Z ~/apps/desktop$ node scripts/ensure-electron-runtime.mjs ⊘ cache disabled 2026-10-24T00:18:39.3980824Z /home/runner/_work/t3code/t3code/node_modules/.pnpm/electron@44.9.3_supports-color@8.1.1/node_modules/electron/dist/electron 2026-10-24T00:18:39.4005303Z 2026-10-24T00:18:39.4101711Z ##[group]Run vp run knip:check 2026-10-24T00:18:39.4101930Z vp run knip:check 2026-10-24T00:18:39.4123625Z shell: /usr/bin/bash -e {0} 2026-10-24T00:18:39.4123804Z env: 2026-10-24T00:18:39.4123932Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 160 2026-10-24T00:18:39.4124089Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 480 2026-10-24T00:18:39.4124239Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T00:18:39.4124386Z ##[endgroup] 2026-10-24T00:18:39.6019314Z $ knip --include files,dependencies --no-config-hints ⊘ cache disabled 2026-10-24T00:18:44.5482325Z 2026-10-24T00:18:44.5485628Z $ 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-24T00:18:54.4180569Z 2026-10-24T00:18:54.4181733Z --- 2026-10-24T00:18:54.4182028Z vp run: 2/2 successful. (Run `vp run --last-details` for full details) 2026-10-24T00:18:54.4258760Z ##[group]Run vp run --filter @t3tools/source-control-github generate --check 2026-10-24T00:18:54.4259079Z vp run --filter @t3tools/source-control-github generate --check 2026-10-24T00:18:54.4279785Z shell: /usr/bin/bash -e {0} 2026-10-24T00:18:54.4279928Z env: 2026-10-24T00:18:54.4280046Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 160 2026-10-24T00:18:54.4280206Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 480 2026-10-24T00:18:54.4280360Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T00:18:54.4280508Z ##[endgroup] 2026-10-24T00:18:54.5915926Z ~/packages/source-control-github$ graphqlgen --check ⊘ cache disabled 2026-10-24T00:18:54.8045723Z 2026-10-24T00:18:54.8138254Z ##[group]Run vp run --filter t3 generate --check 2026-10-24T00:18:54.8138541Z vp run --filter t3 generate --check 2026-10-24T00:18:54.8159077Z shell: /usr/bin/bash -e {0} 2026-10-24T00:18:54.8159214Z env: 2026-10-24T00:18:54.8159351Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 160 2026-10-24T00:18:54.8159510Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 480 2026-10-24T00:18:54.8159659Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T00:18:54.8159808Z ##[endgroup] 2026-10-24T00:18:54.9942468Z ~/apps/server$ graphqlgen --check ⊘ cache disabled 2026-10-24T00:18:55.1907725Z 2026-10-24T00:18:55.1989401Z ##[group]Run vp check 2026-10-24T00:18:55.1989568Z vp check 2026-10-24T00:18:55.2011255Z shell: /usr/bin/bash -e {0} 2026-10-24T00:18:55.2011424Z env: 2026-10-24T00:18:55.2011648Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 160 2026-10-24T00:18:55.2011807Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 480 2026-10-24T00:18:55.2011952Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T00:18:55.2012095Z ##[endgroup] 2026-10-24T00:18:55.8118935Z pass: All 5672 files are correctly formatted (440ms, 8 threads) 2026-10-24T00:19:01.7895083Z warn: Lint warnings found 2026-10-24T00:19:01.7896453Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T00:19:01.7896876Z ╭─[apps/server/src/serverRuntimeStartup.ts:728:7] 2026-10-24T00:19:01.7897099Z 727 │ 2026-10-24T00:19:01.7897252Z 728 │ const layer = layerWithOptions(); 2026-10-24T00:19:01.7897456Z ·  ──┬── 2026-10-24T00:19:01.7897683Z · ╰── 'layer' is declared here 2026-10-24T00:19:01.7897877Z ╰──── 2026-10-24T00:19:01.7898062Z  help: Consider removing this declaration. 2026-10-24T00:19:01.7898197Z 2026-10-24T00:19:01.7898441Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-24T00:19:01.7898807Z ╭─[apps/server/src/terminal/Manager.test.ts:731:31] 2026-10-24T00:19:01.7899021Z 730 │ ); 2026-10-24T00:19:01.7899288Z 731 │ const snapshot = events.filter((event) => event.type === "snapshot").at(-1)?.snapshot; 2026-10-24T00:19:01.7899579Z ·  ────── 2026-10-24T00:19:01.7899808Z 732 │ expect(snapshot?.history).toBe("aa😀\rEND"); 2026-10-24T00:19:01.7899979Z ╰──── 2026-10-24T00:19:01.7900211Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T00:19:01.7900391Z 2026-10-24T00:19:01.7900626Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T00:19:01.7900988Z ╭─[apps/mobile/src/state/use-model-option-memory.ts:21:7] 2026-10-24T00:19:01.7901214Z 20 │ [instanceId]: { 2026-10-24T00:19:01.7901391Z 21 │ ...(state[instanceId] ?? {}), 2026-10-24T00:19:01.7901604Z ·  ──────────────────────────── 2026-10-24T00:19:01.7901782Z 22 │ [model]: options, 2026-10-24T00:19:01.7901920Z ╰──── 2026-10-24T00:19:01.7902249Z  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-24T00:19:01.7902508Z 2026-10-24T00:19:01.7902967Z ⚠ 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-24T00:19:01.7903524Z ╭─[apps/server/src/assets/AssetAccess.test.ts:1043:32] 2026-10-24T00:19:01.7903812Z 1042 │ expect(error._tag).toBe("AssetGitHubMediaUrlValidationError"); 2026-10-24T00:19:01.7904223Z 1043 │ const encoded = yield* Schema.encodeEffect(Schema.fromJsonString(AssetAccessError))(error); 2026-10-24T00:19:01.7904547Z ·  ─────────────────── 2026-10-24T00:19:01.7904769Z 1044 │ expect(encoded).not.toContain(url); 2026-10-24T00:19:01.7904944Z ╰──── 2026-10-24T00:19:01.7905000Z 2026-10-24T00:19:01.7905246Z ⚠ unicorn(prefer-string-starts-ends-with): Prefer String#startsWith over a regex with a caret. 2026-10-24T00:19:01.7905604Z ╭─[apps/server/src/vcs/GitVcsDriverCore.ts:509:11] 2026-10-24T00:19:01.7905839Z 508 │ GIT_DIAGNOSTIC_LINE_PATTERN.test(line) || 2026-10-24T00:19:01.7906094Z 509 │ (!/^remote:/.test(line) && SSH_TRANSPORT_REFUSAL_PATTERN.test(line)), 2026-10-24T00:19:01.7906329Z ·  ─────────────── 2026-10-24T00:19:01.7906486Z 510 │ ) 2026-10-24T00:19:01.7906770Z ╰──── 2026-10-24T00:19:01.7907036Z  help: Replace `/^remote:/.test(line)` with `line.startsWith('remote:')`. 2026-10-24T00:19:01.7907201Z 2026-10-24T00:19:01.7907914Z ⚠ 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-24T00:19:01.7908525Z ╭─[apps/server/src/background/HostPowerMonitor.test.ts:133:11] 2026-10-24T00:19:01.7908811Z 132 │ const monitor = yield* HostPowerMonitor.HostPowerMonitor; 2026-10-24T00:19:01.7909121Z 133 │ ╭─▶ for ( 2026-10-24T00:19:01.7909371Z 134 │ │ let attempt = 0; 2026-10-24T00:19:01.7909665Z 135 │ │ attempt < 100 && (yield* monitor.snapshot).onBattery !== "true"; 2026-10-24T00:19:01.7909935Z 136 │ │ attempt += 1 2026-10-24T00:19:01.7910138Z 137 │ │ ) { 2026-10-24T00:19:01.7910354Z 138 │ │ yield* Effect.yieldNow; 2026-10-24T00:19:01.7910616Z 139 │ ╰─▶ } 2026-10-24T00:19:01.7910879Z 140 │ expect((yield* monitor.snapshot).onBattery).toBe("true"); 2026-10-24T00:19:01.7911068Z ╰──── 2026-10-24T00:19:01.7911123Z 2026-10-24T00:19:01.7911489Z ⚠ 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-24T00:19:01.7911960Z ╭─[apps/server/src/vcs/GitVcsDriverCore.test.ts:1786:34] 2026-10-24T00:19:01.7912243Z 1785 │ const stat = branch.files!.find((file) => file.path === path)!; 2026-10-24T00:19:01.7912542Z 1786 │ const request = yield* Schema.decodeEffect(ReviewDiffPreviewInput)({ 2026-10-24T00:19:01.7912823Z ·  ─────────────────── 2026-10-24T00:19:01.7913019Z 1787 │ cwd, 2026-10-24T00:19:01.7913151Z ╰──── 2026-10-24T00:19:01.7913210Z 2026-10-24T00:19:01.7913422Z ⚠ eslint(no-unused-vars): Identifier 'HookForwarder' is imported but never used. 2026-10-24T00:19:01.7913734Z ╭─[infra/relay/src/http/Api.ts:69:13] 2026-10-24T00:19:01.7914026Z 68 │ import * as EnvironmentLinks from "../environments/EnvironmentLinks.ts"; 2026-10-24T00:19:01.7914311Z 69 │ import * as HookForwarder from "../hooks/HookForwarder.ts"; 2026-10-24T00:19:01.7914533Z ·  ──────┬────── 2026-10-24T00:19:01.7914785Z · ╰── 'HookForwarder' is imported here 2026-10-24T00:19:01.7915045Z 70 │ import * as HeldHooks from "../hooks/HeldHooks.ts"; 2026-10-24T00:19:01.7915209Z ╰──── 2026-10-24T00:19:01.7915371Z  help: Consider removing this import. 2026-10-24T00:19:01.7915490Z 2026-10-24T00:19:01.7915774Z ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'. 2026-10-24T00:19:01.7916173Z ╭─[apps/server/src/provider/AntigravityAuth.ts:285:20] 2026-10-24T00:19:01.7916371Z 284 │ }, 2026-10-24T00:19:01.7916524Z 285 │ (effect, flow, stopSessions) => 2026-10-24T00:19:01.7916719Z ·  ──────┬───── 2026-10-24T00:19:01.7917082Z · ╰── 'stopSessions' is declared here 2026-10-24T00:19:01.7917335Z 286 │ effect.pipe( 2026-10-24T00:19:01.7917471Z ╰──── 2026-10-24T00:19:01.7917627Z  help: Consider removing this parameter. 2026-10-24T00:19:01.7917748Z 2026-10-24T00:19:01.7917927Z ⚠ unicorn(no-new-array): Do not use `new Array(singleArgument)`. 2026-10-24T00:19:01.7918229Z ╭─[apps/web/src/terminal/ghostty/core.ts:194:19] 2026-10-24T00:19:01.7918488Z 193 │ const count = Math.min(CHUNK_SIZE, graphemeLength - start); 2026-10-24T00:19:01.7918722Z 194 │ const codes = new Array(count); 2026-10-24T00:19:01.7918940Z ·  ──────────────────────── 2026-10-24T00:19:01.7919168Z 195 │ for (let index = 0; index < count; index += 1) { 2026-10-24T00:19:01.7919334Z ╰──── 2026-10-24T00:19:01.7919828Z  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-24T00:19:01.7920213Z 2026-10-24T00:19:01.7920473Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T00:19:01.7920851Z ╭─[packages/provider-pi/src/server/adapter.ts:3405:7] 2026-10-24T00:19:01.7921043Z 3404 │ 2026-10-24T00:19:01.7921302Z 3405 │ const layer: Layer.Layer = 2026-10-24T00:19:01.7921574Z ·  ──┬── 2026-10-24T00:19:01.7921792Z · ╰── 'layer' is declared here 2026-10-24T00:19:01.7921993Z 3406 │ Layer.effect( 2026-10-24T00:19:01.7922130Z ╰──── 2026-10-24T00:19:01.7922290Z  help: Consider removing this declaration. 2026-10-24T00:19:01.7922410Z 2026-10-24T00:19:01.7922611Z ⚠ eslint(no-unused-vars): Identifier 'Duration' is imported but never used. 2026-10-24T00:19:01.7922939Z ╭─[packages/provider-pi/src/server/adapter.test.ts:24:13] 2026-10-24T00:19:01.7923180Z 23 │ import * as Deferred from "effect/Deferred"; 2026-10-24T00:19:01.7923385Z 24 │ import * as Duration from "effect/Duration"; 2026-10-24T00:19:01.7923570Z ·  ────┬─── 2026-10-24T00:19:01.7923810Z · ╰── 'Duration' is imported here 2026-10-24T00:19:01.7924089Z 25 │ import * as Effect from "effect/Effect"; 2026-10-24T00:19:01.7924248Z ╰──── 2026-10-24T00:19:01.7924406Z  help: Consider removing this import. 2026-10-24T00:19:01.7924525Z 2026-10-24T00:19:01.7924698Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T00:19:01.7925013Z ╭─[apps/server/src/provider/Drivers/CodexDriver.test.ts:466:14] 2026-10-24T00:19:01.7925225Z 465 │ 2026-10-24T00:19:01.7925390Z 466 │ for (const {} of ["direct", "wrapper"] as const) { 2026-10-24T00:19:01.7925586Z ·  ── 2026-10-24T00:19:01.7925729Z 467 │ } 2026-10-24T00:19:01.7925846Z ╰──── 2026-10-24T00:19:01.7926135Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T00:19:01.7926363Z 2026-10-24T00:19:01.7926847Z ⚠ 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-24T00:19:01.7927349Z ╭─[packages/effect-acp/src/client.ts:1269:11] 2026-10-24T00:19:01.7927634Z 1268 │ extNotificationHandlers.set(CLIENT_METHODS.mcp_message, (params) => 2026-10-24T00:19:01.7927967Z 1269 │ Schema.decodeUnknownEffect(AcpSchemaV2.MessageMcpNotification)(params).pipe( 2026-10-24T00:19:01.7928249Z ·  ────────────────────────── 2026-10-24T00:19:01.7928506Z 1270 │ Effect.mapError(() => AcpError.AcpRequestError.invalidParams()), 2026-10-24T00:19:01.7928715Z ╰──── 2026-10-24T00:19:01.7928774Z 2026-10-24T00:19:01.7929117Z ⚠ 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-24T00:19:01.7929548Z ╭─[packages/effect-acp/src/schema.test.ts:18:12] 2026-10-24T00:19:01.7929851Z 17 │ const command = { name: "plan", description: "Make a plan", input: { hint: "Task" } }; 2026-10-24T00:19:01.7930138Z 18 │ expect(Schema.is(V1.AvailableCommand)(command)).toBe(true); 2026-10-24T00:19:01.7930358Z ·  ───────── 2026-10-24T00:19:01.7930513Z 19 │ expect( 2026-10-24T00:19:01.7930639Z ╰──── 2026-10-24T00:19:01.7930696Z 2026-10-24T00:19:01.7931027Z ⚠ 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-24T00:19:01.7931457Z ╭─[packages/effect-acp/src/schema.test.ts:20:7] 2026-10-24T00:19:01.7931756Z 19 │ expect( 2026-10-24T00:19:01.7932005Z 20 │ Schema.is(V2.AvailableCommand)({ ...command, input: { type: "text", hint: "Task" } }), 2026-10-24T00:19:01.7932379Z ·  ───────── 2026-10-24T00:19:01.7932544Z 21 │ ).toBe(true); 2026-10-24T00:19:01.7932676Z ╰──── 2026-10-24T00:19:01.7932730Z 2026-10-24T00:19:01.7933161Z ⚠ 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-24T00:19:01.7933707Z ╭─[apps/server/src/provider/acp/AntigravityProtocol.ts:263:20] 2026-10-24T00:19:01.7933968Z 262 │ ...(update._meta !== undefined 2026-10-24T00:19:01.7934251Z 263 │ ? { _meta: Schema.is(Schema.Record(Schema.String, Schema.Json))(meta) ? meta : null } 2026-10-24T00:19:01.7934510Z ·  ───────── 2026-10-24T00:19:01.7934682Z 264 │ : {}), 2026-10-24T00:19:01.7934812Z ╰──── 2026-10-24T00:19:01.7934870Z 2026-10-24T00:19:01.7935341Z ⚠ 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-24T00:19:01.7935893Z ╭─[packages/effect-acp/src/errors.test.ts:129:28] 2026-10-24T00:19:01.7936124Z 128 │ const secret = "acp-summary-secret"; 2026-10-24T00:19:01.7936360Z 129 │ const cause = yield* Schema.decodeUnknownEffect( 2026-10-24T00:19:01.7936604Z ·  ────────────────────────── 2026-10-24T00:19:01.7936801Z 130 │ Schema.Struct({ 2026-10-24T00:19:01.7936944Z ╰──── 2026-10-24T00:19:01.7937003Z 2026-10-24T00:19:01.7937211Z ⚠ eslint(no-unused-vars): Type 'ThreadRunSummary' is imported but never used. 2026-10-24T00:19:01.7937689Z ╭─[apps/web/src/types.ts:22:3] 2026-10-24T00:19:01.7937919Z 21 │ EnvironmentThreadShell, 2026-10-24T00:19:01.7938081Z 22 │ ThreadRunSummary, 2026-10-24T00:19:01.7938249Z ·  ────────┬─────── 2026-10-24T00:19:01.7938487Z · ╰── 'ThreadRunSummary' is imported here 2026-10-24T00:19:01.7938709Z 23 │ ThreadRuntimeSummary, 2026-10-24T00:19:01.7938850Z ╰──── 2026-10-24T00:19:01.7939005Z  help: Consider removing this import. 2026-10-24T00:19:01.7939125Z 2026-10-24T00:19:01.7939418Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T00:19:01.7939866Z ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:473:19] 2026-10-24T00:19:01.7940105Z 472 │ onFilters, 2026-10-24T00:19:01.7940258Z 473 │ authorOptions = [], 2026-10-24T00:19:01.7940431Z ·  ── 2026-10-24T00:19:01.7940595Z 474 │ labelOptions = [], 2026-10-24T00:19:01.7940738Z ╰──── 2026-10-24T00:19:01.7941123Z  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-24T00:19:01.7941432Z 2026-10-24T00:19:01.7941724Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T00:19:01.7942168Z ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:474:18] 2026-10-24T00:19:01.7942417Z 473 │ authorOptions = [], 2026-10-24T00:19:01.7942567Z 474 │ labelOptions = [], 2026-10-24T00:19:01.7942740Z ·  ── 2026-10-24T00:19:01.7942905Z 475 │ optionScope, 2026-10-24T00:19:01.7943041Z ╰──── 2026-10-24T00:19:01.7943416Z  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-24T00:19:01.7943726Z 2026-10-24T00:19:01.7944240Z ⚠ 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-24T00:19:01.7944787Z ╭─[packages/effect-acp/src/protocol.test.ts:500:31] 2026-10-24T00:19:01.7944983Z 499 │ 2026-10-24T00:19:01.7945159Z 500 │ const response = yield* Schema.decodeUnknownEffect( 2026-10-24T00:19:01.7945488Z ·  ────────────────────────── 2026-10-24T00:19:01.7945755Z 501 │ Schema.fromJsonString(JsonRpcErrorResponse), 2026-10-24T00:19:01.7945931Z ╰──── 2026-10-24T00:19:01.7945991Z 2026-10-24T00:19:01.7946180Z ⚠ eslint(no-unused-vars): Type 'Scope' is imported but never used. 2026-10-24T00:19:01.7946504Z ╭─[apps/server/src/provider/ProviderAuthService.ts:15:18] 2026-10-24T00:19:01.7946745Z 14 │ import * as Layer from "effect/Layer"; 2026-10-24T00:19:01.7946952Z 15 │ import type * as Scope from "effect/Scope"; 2026-10-24T00:19:01.7947146Z ·  ──┬── 2026-10-24T00:19:01.7947377Z · ╰── 'Scope' is imported here 2026-10-24T00:19:01.7947608Z 16 │ import * as Stream from "effect/Stream"; 2026-10-24T00:19:01.7947767Z ╰──── 2026-10-24T00:19:01.7947932Z  help: Consider removing this import. 2026-10-24T00:19:01.7948048Z 2026-10-24T00:19:01.7948292Z ⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence. 2026-10-24T00:19:01.7948661Z ╭─[apps/web/src/components/chat/useComposerSend.ts:985:13] 2026-10-24T00:19:01.7948942Z 984 │ const changedBeforeDecline = draftChangedSinceSend(); 2026-10-24T00:19:01.7949347Z 985 │ ╭─▶ const pendingIdsBeforeDecline = pendingApprovalsRef.current.map( 2026-10-24T00:19:01.7949709Z 986 │ │ (approval) => approval.requestId, 2026-10-24T00:19:01.7949995Z 987 │ ╰─▶ ); 2026-10-24T00:19:01.7950286Z 988 │ const approvalResponding = approvalsToDecline.some((approval) => 2026-10-24T00:19:01.7950507Z ╰──── 2026-10-24T00:19:01.7950647Z  help: Switch to `Set` 2026-10-24T00:19:01.7950749Z 2026-10-24T00:19:01.7951142Z ⚠ 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-24T00:19:01.7951631Z ╭─[packages/shared/src/otelEnvironment.ts:146:14] 2026-10-24T00:19:01.7951828Z 145 │ name, 2026-10-24T00:19:01.7952049Z 146 │ (raw) => Schema.decodeUnknownOption(OtlpProtocol)(raw.toLowerCase()), 2026-10-24T00:19:01.7952319Z ·  ────────────────────────── 2026-10-24T00:19:01.7952567Z 147 │ `${name} is not http/protobuf or http/json, ${NOT_EXPORTED}`, 2026-10-24T00:19:01.7952758Z ╰──── 2026-10-24T00:19:01.7952826Z 2026-10-24T00:19:01.7953039Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T00:19:01.7953419Z ╭─[apps/web/src/components/pullRequest/PullRequestSummaryTab.tsx:814:17] 2026-10-24T00:19:01.7953670Z 813 │
= 2026-10-24T00:19:01.7973789Z ·  ──┬── 2026-10-24T00:19:01.7974064Z · ╰── 'layer' is declared here 2026-10-24T00:19:01.7974263Z 3756 │ Layer.effect( 2026-10-24T00:19:01.7974401Z ╰──── 2026-10-24T00:19:01.7974559Z  help: Consider removing this declaration. 2026-10-24T00:19:01.7974678Z 2026-10-24T00:19:01.7974846Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T00:19:01.7975164Z ╭─[apps/server/src/process/externalLauncher.test.ts:186:12] 2026-10-24T00:19:01.7975368Z 185 │ 2026-10-24T00:19:01.7975534Z 186 │ for (const {} of ["darwin", "linux"] as const) { 2026-10-24T00:19:01.7975719Z ·  ── 2026-10-24T00:19:01.7975862Z 187 │ } 2026-10-24T00:19:01.7975973Z ╰──── 2026-10-24T00:19:01.7976264Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T00:19:01.7976484Z 2026-10-24T00:19:01.7976651Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T00:19:01.7976959Z ╭─[apps/server/src/process/externalLauncher.test.ts:189:12] 2026-10-24T00:19:01.7977157Z 188 │ 2026-10-24T00:19:01.7977288Z 189 │ for (const {} of [ 2026-10-24T00:19:01.7977442Z ·  ── 2026-10-24T00:19:01.7977620Z 190 │ { kind: "browser", folderVerb: "none" }, 2026-10-24T00:19:01.7977926Z ╰──── 2026-10-24T00:19:01.7978326Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T00:19:01.7978555Z 2026-10-24T00:19:01.7978728Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T00:19:01.7979029Z ╭─[apps/server/src/process/externalLauncher.test.ts:311:12] 2026-10-24T00:19:01.7979236Z 310 │ 2026-10-24T00:19:01.7979425Z 311 │ for (const {} of ["rejected", "spawn-error", "stalled"] as const) { 2026-10-24T00:19:01.7979637Z ·  ── 2026-10-24T00:19:01.7979777Z 312 │ } 2026-10-24T00:19:01.7979892Z ╰──── 2026-10-24T00:19:01.7980169Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T00:19:01.7980396Z 2026-10-24T00:19:01.7980566Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T00:19:01.7980869Z ╭─[apps/server/src/process/externalLauncher.test.ts:314:12] 2026-10-24T00:19:01.7981069Z 313 │ 2026-10-24T00:19:01.7981190Z 314 │ for (const {} of [ 2026-10-24T00:19:01.7981340Z ·  ── 2026-10-24T00:19:01.7981489Z 315 │ { 2026-10-24T00:19:01.7981601Z ╰──── 2026-10-24T00:19:01.7981882Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T00:19:01.7982102Z 2026-10-24T00:19:01.7982400Z ⚠ eslint(no-unused-vars): Variable 'layerFromProviderAdapter' is declared but never used. Unused variables should start with a '_'. 2026-10-24T00:19:01.7982852Z ╭─[apps/server/src/orchestration-v2/ProviderAdapterRegistry.ts:346:7] 2026-10-24T00:19:01.7983071Z 345 │ 2026-10-24T00:19:01.7983238Z 346 │ const layerFromProviderAdapter: Layer.Layer< 2026-10-24T00:19:01.7983450Z ·  ────────────┬─────────── 2026-10-24T00:19:01.7983718Z · ╰── 'layerFromProviderAdapter' is declared here 2026-10-24T00:19:01.7983987Z 347 │ ProviderAdapterRegistryV2, 2026-10-24T00:19:01.7984142Z ╰──── 2026-10-24T00:19:01.7984299Z  help: Consider removing this declaration. 2026-10-24T00:19:01.7984420Z 2026-10-24T00:19:01.7984621Z ⚠ eslint(no-unsafe-optional-chaining): Unsafe usage of optional chaining 2026-10-24T00:19:01.7984980Z ╭─[apps/server/src/orchestration-v2/ThreadLaunchService.test.ts:1783:8] 2026-10-24T00:19:01.7985213Z 1782 │ assert.equal( 2026-10-24T00:19:01.7985449Z 1783 │ (stored.context?.records[0] as { attachmentId: string }).attachmentId, 2026-10-24T00:19:01.7985706Z ·  ────────────────────────── 2026-10-24T00:19:01.7985900Z 1784 │ stored.attachments[0]?.id, 2026-10-24T00:19:01.7986053Z ╰──── 2026-10-24T00:19:01.7986282Z  help: If this short-circuits with 'undefined' the evaluation will throw TypeError 2026-10-24T00:19:01.7986458Z 2026-10-24T00:19:01.7986926Z ⚠ 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-24T00:19:01.7987526Z ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:566:7] 2026-10-24T00:19:01.7987799Z 565 │ let afterSequence = created[0]!.sequence; 2026-10-24T00:19:01.7988203Z 566 │ ╭─▶ for (let index = 1; index <= 32; index += 1) { 2026-10-24T00:19:01.7988541Z 567 │ │ const nextEvent = { 2026-10-24T00:19:01.7988820Z 568 │ │ id: EventId.make(`event:foundation-stream-race:${index}`), 2026-10-24T00:19:01.7989115Z 569 │ │ type: "thread.metadata-updated" as const, 2026-10-24T00:19:01.7989355Z 570 │ │ threadId, 2026-10-24T00:19:01.7989567Z 571 │ │ providerInstanceId, 2026-10-24T00:19:01.7989790Z 572 │ │ occurredAt: now, 2026-10-24T00:19:01.7990054Z 573 │ │ payload: { ...thread, title: `Race update ${index}` }, 2026-10-24T00:19:01.7990339Z 574 │ │ } satisfies OrchestrationV2DomainEvent; 2026-10-24T00:19:01.7990601Z 575 │ │ const reader = yield* eventSink 2026-10-24T00:19:01.7990858Z 576 │ │ .stream({ threadId, afterSequence }) 2026-10-24T00:19:01.7991126Z 577 │ │ .pipe(Stream.runHead, Effect.forkChild); 2026-10-24T00:19:01.7991377Z 578 │ │ yield* Effect.yieldNow; 2026-10-24T00:19:01.7991661Z 579 │ │ const written = yield* eventSink.write({ events: [nextEvent] }); 2026-10-24T00:19:01.7991961Z 580 │ │ const received = yield* Fiber.join(reader); 2026-10-24T00:19:01.7992218Z 581 │ │ if (Option.isNone(received)) { 2026-10-24T00:19:01.7992550Z 582 │ │ return yield* Effect.die("The event stream ended before delivering the live event."); 2026-10-24T00:19:01.7992834Z 583 │ │ } 2026-10-24T00:19:01.7993096Z 584 │ │ assert.equal(received.value.sequence, written[0]?.sequence); 2026-10-24T00:19:01.7993413Z 585 │ │ assert.equal(received.value.event.id, nextEvent.id); 2026-10-24T00:19:01.7993692Z 586 │ │ afterSequence = received.value.sequence; 2026-10-24T00:19:01.7994051Z 587 │ ╰─▶ } 2026-10-24T00:19:01.7994247Z 588 │ }), 2026-10-24T00:19:01.7994378Z ╰──── 2026-10-24T00:19:01.7994440Z 2026-10-24T00:19:01.7994908Z ⚠ 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-24T00:19:01.7995568Z ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:2327:9] 2026-10-24T00:19:01.7995879Z 2326 │ let settled = false; 2026-10-24T00:19:01.7996145Z 2327 │ ╭─▶ while (!settled) { 2026-10-24T00:19:01.7996471Z 2328 │ │ settled = (yield* outbox.listByCommandId(commandId)).every( 2026-10-24T00:19:01.7996772Z 2329 │ │ (effect) => effect.status === "succeeded", 2026-10-24T00:19:01.7996998Z 2330 │ │ ); 2026-10-24T00:19:01.7997229Z 2331 │ │ if (!settled) yield* Effect.yieldNow; 2026-10-24T00:19:01.7997501Z 2332 │ ╰─▶ } 2026-10-24T00:19:01.7997772Z 2333 │ }).pipe(Effect.provide(layerWorker), Effect.scoped); 2026-10-24T00:19:01.7997961Z ╰──── 2026-10-24T00:19:01.7998020Z 2026-10-24T00:19:01.7998219Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T00:19:01.7998584Z ╭─[apps/web/src/components/pullRequest/PullRequestChecksPopover.tsx:88:15] 2026-10-24T00:19:01.7998827Z 87 │
  • label.name.trim().toLowerCase()); 2026-10-24T00:19:01.8029557Z ·  ───────────────────────────────────────────────────────────────────── 2026-10-24T00:19:01.8029872Z 266 │ const holds = (label: string) => labels.includes(label.trim().toLowerCase()); 2026-10-24T00:19:01.8030081Z ╰──── 2026-10-24T00:19:01.8030218Z  help: Switch to `Set` 2026-10-24T00:19:01.8030314Z 2026-10-24T00:19:01.8030500Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T00:19:01.8030842Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:100:85] 2026-10-24T00:19:01.8031117Z  99 │ const startEditor = startScheduledTaskEditor; 2026-10-24T00:19:01.8031425Z 100 │ const resetEditor = useCallback(() => startEditor(defaultEditor), [defaultEditor, startEditor]); 2026-10-24T00:19:01.8031760Z ·  ─────┬───── 2026-10-24T00:19:01.8032110Z · ╰── Unnecessary dependency `startEditor` 2026-10-24T00:19:01.8032379Z 101 │ const readEditor = useCallback( 2026-10-24T00:19:01.8032531Z ╰──── 2026-10-24T00:19:01.8032905Z  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-24T00:19:01.8033518Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8033818Z 2026-10-24T00:19:01.8034106Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T00:19:01.8034498Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:121:7] 2026-10-24T00:19:01.8034728Z 120 │ setEditor, 2026-10-24T00:19:01.8034872Z 121 │ startEditor, 2026-10-24T00:19:01.8035035Z ·  ─────┬───── 2026-10-24T00:19:01.8035274Z · ╰── Unnecessary dependency `startEditor` 2026-10-24T00:19:01.8035487Z 122 │ hasChanges, 2026-10-24T00:19:01.8035617Z ╰──── 2026-10-24T00:19:01.8035985Z  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-24T00:19:01.8036597Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8036897Z 2026-10-24T00:19:01.8037161Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T00:19:01.8037593Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:119:10] 2026-10-24T00:19:01.8037842Z 117 │ 2026-10-24T00:19:01.8037969Z 118 │ useEffect(() => { 2026-10-24T00:19:01.8038133Z ·  ────┬──── 2026-10-24T00:19:01.8038354Z · ╰── This is the containing effect 2026-10-24T00:19:01.8038578Z 119 │ void refreshNotifications(); 2026-10-24T00:19:01.8038771Z ·  ──────────┬───────── 2026-10-24T00:19:01.8039060Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T00:19:01.8039380Z 120 │ const subscription = AppState.addEventListener("change", (state) => { 2026-10-24T00:19:01.8039590Z ╰──── 2026-10-24T00:19:01.8040249Z  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-24T00:19:01.8041114Z  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-24T00:19:01.8041418Z 2026-10-24T00:19:01.8041683Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T00:19:01.8042120Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:128:7] 2026-10-24T00:19:01.8042361Z 125 │ 2026-10-24T00:19:01.8042488Z 126 │ useEffect(() => { 2026-10-24T00:19:01.8042644Z ·  ────┬──── 2026-10-24T00:19:01.8042866Z · ╰── This is the containing effect 2026-10-24T00:19:01.8043070Z 127 │ if (!isLoaded) { 2026-10-24T00:19:01.8043253Z 128 │ setLiveActivityStatus("checking"); 2026-10-24T00:19:01.8043456Z ·  ──────────┬────────── 2026-10-24T00:19:01.8043732Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T00:19:01.8044018Z 129 │ return; 2026-10-24T00:19:01.8044145Z ╰──── 2026-10-24T00:19:01.8044870Z  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-24T00:19:01.8045769Z  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-24T00:19:01.8046072Z 2026-10-24T00:19:01.8046300Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-24T00:19:01.8046697Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:1998:15] 2026-10-24T00:19:01.8046939Z 1997 │ assert.equal( 2026-10-24T00:19:01.8047182Z 1998 │ items.filter((item) => item.type === "assistant_message").at(-1)?.text, 2026-10-24T00:19:01.8047424Z ·  ────── 2026-10-24T00:19:01.8047602Z 1999 │ "authoritative answer", 2026-10-24T00:19:01.8047756Z ╰──── 2026-10-24T00:19:01.8047983Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T00:19:01.8048160Z 2026-10-24T00:19:01.8048635Z ⚠ 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-24T00:19:01.8049227Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:3951:7] 2026-10-24T00:19:01.8049586Z 3950 │ const closeFiber = yield* Scope.close(sessionScope, Exit.void).pipe(Effect.forkScoped); 2026-10-24T00:19:01.8049990Z 3951 │ ╭─▶ while (!responseLifecycle.includes("failed")) { 2026-10-24T00:19:01.8050309Z 3952 │ │ yield* Effect.yieldNow; 2026-10-24T00:19:01.8050569Z 3953 │ ╰─▶ } 2026-10-24T00:19:01.8050834Z 3954 │ const responseExit = yield* Fiber.join(responseFiber); 2026-10-24T00:19:01.8051019Z ╰──── 2026-10-24T00:19:01.8051077Z 2026-10-24T00:19:01.8052495Z ⚠ 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-24T00:19:01.8053085Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6062:9] 2026-10-24T00:19:01.8053355Z 6061 │ .pipe(Effect.forkScoped); 2026-10-24T00:19:01.8053652Z 6062 │ ╭─▶ while (promptGates.length < 1) { 2026-10-24T00:19:01.8053991Z 6063 │ │ yield* Effect.yieldNow; 2026-10-24T00:19:01.8054254Z 6064 │ ╰─▶ } 2026-10-24T00:19:01.8054570Z 6065 │ assert.isDefined(sessionUpdateHandler, "session update handler must be wired"); 2026-10-24T00:19:01.8054796Z ╰──── 2026-10-24T00:19:01.8054852Z 2026-10-24T00:19:01.8055316Z ⚠ 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-24T00:19:01.8055979Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6197:9] 2026-10-24T00:19:01.8056296Z 6196 │ .pipe(Effect.forkScoped); 2026-10-24T00:19:01.8056589Z 6197 │ ╭─▶ while (promptGates.length < 2) { 2026-10-24T00:19:01.8056879Z 6198 │ │ yield* Effect.yieldNow; 2026-10-24T00:19:01.8057140Z 6199 │ ╰─▶ } 2026-10-24T00:19:01.8057451Z 6200 │ if (sessionUpdateHandler === undefined || capturedMutation.current === null) { 2026-10-24T00:19:01.8057675Z ╰──── 2026-10-24T00:19:01.8057733Z 2026-10-24T00:19:01.8058002Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T00:19:01.8058418Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts:10578:7] 2026-10-24T00:19:01.8058651Z 10577 │ 2026-10-24T00:19:01.8058789Z 10578 │ const layer: Layer.Layer< 2026-10-24T00:19:01.8058962Z ·  ──┬── 2026-10-24T00:19:01.8059188Z · ╰── 'layer' is declared here 2026-10-24T00:19:01.8059427Z 10579 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T00:19:01.8059599Z ╰──── 2026-10-24T00:19:01.8059776Z  help: Consider removing this declaration. 2026-10-24T00:19:01.8059903Z 2026-10-24T00:19:01.8060111Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T00:19:01.8060459Z ╭─[apps/mobile/modules/t3-source-text/src/SourceText.tsx:36:9] 2026-10-24T00:19:01.8060712Z 35 │ ` or list indent), 2026-10-24T00:19:01.8075866Z ╰──── 2026-10-24T00:19:01.8076193Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T00:19:01.8076455Z 2026-10-24T00:19:01.8076617Z ⚠ react(refs): Cannot access refs during render 2026-10-24T00:19:01.8076945Z ╭─[apps/mobile/src/features/diffs/nativeReviewDiffSurface.ts:277:39] 2026-10-24T00:19:01.8077183Z 276 │ 2026-10-24T00:19:01.8077445Z 277 │ ╭─▶ return createElement(RawNativeView, { 2026-10-24T00:19:01.8077739Z 278 │ │ ...nativeProps, 2026-10-24T00:19:01.8078005Z 279 │ │ refreshEnabled: props.onPullToRefresh !== undefined, 2026-10-24T00:19:01.8078267Z 280 │ │ ref: nativeRef, 2026-10-24T00:19:01.8078520Z 281 │ ├─▶ }); 2026-10-24T00:19:01.8078923Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T00:19:01.8079218Z 282 │ } 2026-10-24T00:19:01.8079350Z ╰──── 2026-10-24T00:19:01.8079907Z  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-24T00:19:01.8080674Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T00:19:01.8080965Z 2026-10-24T00:19:01.8081201Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T00:19:01.8081568Z ╭─[scripts/lib/cli-external-packages.test.ts:114:11] 2026-10-24T00:19:01.8081791Z 113 │ const declared = { 2026-10-24T00:19:01.8081991Z 114 │ ...(manifest.dependencies ?? {}), 2026-10-24T00:19:01.8082229Z ·  ──────────────────────────────── 2026-10-24T00:19:01.8082469Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T00:19:01.8082647Z ╰──── 2026-10-24T00:19:01.8082986Z  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-24T00:19:01.8083255Z 2026-10-24T00:19:01.8083486Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T00:19:01.8083844Z ╭─[scripts/lib/cli-external-packages.test.ts:115:11] 2026-10-24T00:19:01.8084119Z 114 │ ...(manifest.dependencies ?? {}), 2026-10-24T00:19:01.8084342Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T00:19:01.8084679Z ·  ──────────────────────────────────────── 2026-10-24T00:19:01.8084959Z 116 │ ...(manifest.peerDependencies ?? {}), 2026-10-24T00:19:01.8085140Z ╰──── 2026-10-24T00:19:01.8085474Z  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-24T00:19:01.8085743Z 2026-10-24T00:19:01.8085980Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T00:19:01.8086338Z ╭─[scripts/lib/cli-external-packages.test.ts:116:11] 2026-10-24T00:19:01.8086592Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T00:19:01.8086815Z 116 │ ...(manifest.peerDependencies ?? {}), 2026-10-24T00:19:01.8087059Z ·  ──────────────────────────────────── 2026-10-24T00:19:01.8087251Z 117 │ }; 2026-10-24T00:19:01.8087387Z ╰──── 2026-10-24T00:19:01.8087723Z  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-24T00:19:01.8087989Z 2026-10-24T00:19:01.8088198Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T00:19:01.8088560Z ╭─[apps/mobile/src/features/review/ReviewCommentCard.tsx:223:31] 2026-10-24T00:19:01.8088848Z 222 │ ? snippetTokens.map((line, lineIndex) => ( 2026-10-24T00:19:01.8089080Z 223 │ 2026-10-24T00:19:01.8089316Z ·  ─────────────── 2026-10-24T00:19:01.8089541Z 224 │ {lineIndex > 0 ? "\n" : ""} 2026-10-24T00:19:01.8089711Z ╰──── 2026-10-24T00:19:01.8089937Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T00:19:01.8090111Z 2026-10-24T00:19:01.8090319Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T00:19:01.8090681Z ╭─[apps/mobile/src/features/review/ReviewCommentCard.tsx:227:25] 2026-10-24T00:19:01.8090927Z 226 │ { 2026-10-24T00:19:01.8093433Z ·  ────┬──── 2026-10-24T00:19:01.8093668Z · ╰── This is the containing effect 2026-10-24T00:19:01.8093888Z 57 │ scheduler.reset(); 2026-10-24T00:19:01.8094111Z 58 │ highlightedRowIdsRef.current = new Set(); 2026-10-24T00:19:01.8094341Z 59 │ visibleChunkIndexRef.current = 0; 2026-10-24T00:19:01.8094577Z 60 │ setVisibleRange({ firstRowIndex: 0, lastRowIndex: 80 }); 2026-10-24T00:19:01.8094804Z ·  ───────┬─────── 2026-10-24T00:19:01.8095178Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T00:19:01.8095547Z 61 │ setTokensPatchJson(createEmptyTokenPatch(resetKey)); 2026-10-24T00:19:01.8095739Z ╰──── 2026-10-24T00:19:01.8096436Z  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-24T00:19:01.8097358Z  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-24T00:19:01.8097688Z 2026-10-24T00:19:01.8097909Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T00:19:01.8098310Z ╭─[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:63:7] 2026-10-24T00:19:01.8098594Z 62 │ return () => scheduler.cancel(); 2026-10-24T00:19:01.8098811Z 63 │ }, [enabled, resetKey, rows.length, scheduler]); 2026-10-24T00:19:01.8099079Z ·  ───┬─── ─────┬───── 2026-10-24T00:19:01.8099426Z · │ ╰── Unnecessary dependency `rows.length` 2026-10-24T00:19:01.8099774Z · ╰── Unnecessary dependency `enabled` 2026-10-24T00:19:01.8099981Z 64 │ 2026-10-24T00:19:01.8100103Z ╰──── 2026-10-24T00:19:01.8100474Z  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-24T00:19:01.8101114Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8101434Z 2026-10-24T00:19:01.8101617Z ⚠ eslint(no-control-regex): Unexpected control character 2026-10-24T00:19:01.8102005Z ╭─[apps/mobile/src/features/settings/SettingsProviderAccountsRouteScreen.tsx:220:46] 2026-10-24T00:19:01.8102362Z 219 │ 2026-10-24T00:19:01.8102687Z 220 │ {interaction.output.replace(/\x1b\[[0-?]*[ -/]*[@-~]/g, "")} 2026-10-24T00:19:01.8102961Z ·  ──┬─ 2026-10-24T00:19:01.8103275Z · ╰── 'U+001B' is a control character. 2026-10-24T00:19:01.8103514Z 221 │ 2026-10-24T00:19:01.8103739Z ╰──── 2026-10-24T00:19:01.8104111Z  help: Avoid matching control characters in regular expressions. If intentional, disable this rule for the expression. 2026-10-24T00:19:01.8104354Z 2026-10-24T00:19:01.8104539Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T00:19:01.8104853Z ╭─[apps/web/src/components/CommandPalette.tsx:1996:20] 2026-10-24T00:19:01.8105136Z 1995 │ title: inferProjectTitleFromPath(destinationPath), 2026-10-24T00:19:01.8105379Z 1996 │ createdAt: new Date().toISOString(), 2026-10-24T00:19:01.8105596Z ·  ─────┬──── 2026-10-24T00:19:01.8105862Z · ╰── Cannot call impure function 2026-10-24T00:19:01.8106127Z 1997 │ remoteUrl: addProjectCloneFlow.remoteUrl, 2026-10-24T00:19:01.8106321Z ╰──── 2026-10-24T00:19:01.8106686Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T00:19:01.8107295Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T00:19:01.8107596Z 2026-10-24T00:19:01.8107872Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T00:19:01.8108340Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:107:5] 2026-10-24T00:19:01.8108597Z 104 │ 2026-10-24T00:19:01.8108737Z 105 │ useEffect(() => { 2026-10-24T00:19:01.8108903Z ·  ────┬──── 2026-10-24T00:19:01.8109150Z · ╰── This is the containing effect 2026-10-24T00:19:01.8109385Z 106 │ clearReviewCommentTarget(); 2026-10-24T00:19:01.8109598Z 107 │ setPendingNativeCommentSelection(null); 2026-10-24T00:19:01.8109837Z ·  ────────────────┬─────────────── 2026-10-24T00:19:01.8110148Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T00:19:01.8110408Z 108 │ }, [selectedSection?.id]); 2026-10-24T00:19:01.8110564Z ╰──── 2026-10-24T00:19:01.8111268Z  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-24T00:19:01.8112191Z  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-24T00:19:01.8112516Z 2026-10-24T00:19:01.8112795Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T00:19:01.8113260Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:112:7] 2026-10-24T00:19:01.8113518Z 109 │ 2026-10-24T00:19:01.8113656Z 110 │ useEffect(() => { 2026-10-24T00:19:01.8113827Z ·  ────┬──── 2026-10-24T00:19:01.8114106Z · ╰── This is the containing effect 2026-10-24T00:19:01.8114345Z 111 │ if (activeCommentTarget === null) { 2026-10-24T00:19:01.8114565Z 112 │ setPendingNativeCommentSelection(null); 2026-10-24T00:19:01.8114893Z ·  ────────────────┬─────────────── 2026-10-24T00:19:01.8115248Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T00:19:01.8115501Z 113 │ } 2026-10-24T00:19:01.8115626Z ╰──── 2026-10-24T00:19:01.8116320Z  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-24T00:19:01.8117232Z  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-24T00:19:01.8117558Z 2026-10-24T00:19:01.8117782Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T00:19:01.8118194Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:108:7] 2026-10-24T00:19:01.8118503Z 107 │ setPendingNativeCommentSelection(null); 2026-10-24T00:19:01.8118703Z 108 │ }, [selectedSection?.id]); 2026-10-24T00:19:01.8118902Z ·  ─────────┬───────── 2026-10-24T00:19:01.8119183Z · ╰── Unnecessary dependency `selectedSection?.id` 2026-10-24T00:19:01.8119414Z 109 │ 2026-10-24T00:19:01.8119534Z ╰──── 2026-10-24T00:19:01.8119907Z  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-24T00:19:01.8120536Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8120851Z 2026-10-24T00:19:01.8121350Z ⚠ 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-24T00:19:01.8121964Z ╭─[packages/client-runtime/src/connection/supervisor.test.ts:135:3] 2026-10-24T00:19:01.8122262Z 134 │ let lastState = yield* SubscriptionRef.get(state); 2026-10-24T00:19:01.8122628Z 135 │ ╭─▶ for (let iteration = 0; iteration < 100; iteration += 1) { 2026-10-24T00:19:01.8122995Z 136 │ │ lastState = yield* SubscriptionRef.get(state); 2026-10-24T00:19:01.8123274Z 137 │ │ if (predicate(lastState)) { 2026-10-24T00:19:01.8123513Z 138 │ │ return lastState; 2026-10-24T00:19:01.8123710Z 139 │ │ } 2026-10-24T00:19:01.8123952Z 140 │ │ yield* Effect.yieldNow; 2026-10-24T00:19:01.8124217Z 141 │ ╰─▶ } 2026-10-24T00:19:01.8124447Z 142 │ return yield* Effect.die( 2026-10-24T00:19:01.8124608Z ╰──── 2026-10-24T00:19:01.8124670Z 2026-10-24T00:19:01.8124948Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T00:19:01.8125395Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:335:7] 2026-10-24T00:19:01.8125646Z 330 │ }; 2026-10-24T00:19:01.8125785Z 331 │ useEffect(() => { 2026-10-24T00:19:01.8126027Z ·  ────┬──── 2026-10-24T00:19:01.8126300Z · ╰── This is the containing effect 2026-10-24T00:19:01.8126550Z 332 │ if (!guidesEnabled && section === "guide") { 2026-10-24T00:19:01.8126782Z 333 │ requestedSection.current = "overview"; 2026-10-24T00:19:01.8127079Z 334 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-24T00:19:01.8127344Z 335 │ setSection("overview"); 2026-10-24T00:19:01.8127525Z ·  ─────┬──── 2026-10-24T00:19:01.8127809Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T00:19:01.8128046Z 336 │ } 2026-10-24T00:19:01.8128173Z ╰──── 2026-10-24T00:19:01.8128874Z  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-24T00:19:01.8129795Z  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-24T00:19:01.8130120Z 2026-10-24T00:19:01.8130336Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T00:19:01.8130736Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:337:6] 2026-10-24T00:19:01.8131023Z 332 │ if (!guidesEnabled && section === "guide") { 2026-10-24T00:19:01.8131247Z 333 │ requestedSection.current = "overview"; 2026-10-24T00:19:01.8131461Z ·  ────────┬─────── 2026-10-24T00:19:01.8132127Z · ╰── 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-24T00:19:01.8132725Z 334 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-24T00:19:01.8133077Z ·  ─────────┬───────── ──────┬────── 2026-10-24T00:19:01.8133761Z · │ ╰── 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-24T00:19:01.8134748Z · ╰── 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-24T00:19:01.8135254Z 335 │ setSection("overview"); 2026-10-24T00:19:01.8135416Z 336 │ } 2026-10-24T00:19:01.8135581Z 337 │ }, [guidesEnabled, section, insets.top]); 2026-10-24T00:19:01.8135823Z ·  ──────────────────┬───────────────── 2026-10-24T00:19:01.8136158Z · ╰── This dependency list is missing values used by the callback 2026-10-24T00:19:01.8136452Z 338 │ const tabContent = activityContent; 2026-10-24T00:19:01.8136618Z ╰──── 2026-10-24T00:19:01.8136861Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T00:19:01.8137463Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8137832Z 2026-10-24T00:19:01.8138049Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T00:19:01.8138446Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:873:6] 2026-10-24T00:19:01.8138697Z 856 │ if ( 2026-10-24T00:19:01.8138899Z 857 │ lastSelection.current.path === route.params.path && 2026-10-24T00:19:01.8139129Z ·  ──────┬────── 2026-10-24T00:19:01.8139694Z · ╰── 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-24T00:19:01.8140254Z 858 │ lastSelection.current.id === route.params.fileSelectionId 2026-10-24T00:19:01.8140465Z 859 │ ) 2026-10-24T00:19:01.8140608Z 860 │ return; 2026-10-24T00:19:01.8140878Z 861 │ lastSelection.current = { path: route.params.path, id: route.params.fileSelectionId }; 2026-10-24T00:19:01.8141214Z 862 │ if (route.params.focus) navigation.setParams({ focus: undefined }); 2026-10-24T00:19:01.8141471Z 863 │ setJumpPath(route.params.path); 2026-10-24T00:19:01.8141663Z 864 │ setSelectedRowId(null); 2026-10-24T00:19:01.8141848Z 865 │ jumpStarted.current = false; 2026-10-24T00:19:01.8142111Z 866 │ const file = data.files.find((entry) => entry.path === route.params.path); 2026-10-24T00:19:01.8142381Z 867 │ if (!file || !nativeView.current) return; 2026-10-24T00:19:01.8142597Z ·  ─────┬──── 2026-10-24T00:19:01.8143180Z · ╰── 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-24T00:19:01.8143732Z 868 │ setCollapsedIds((ids) => ids.filter((id) => id !== file.id)); 2026-10-24T00:19:01.8143991Z 869 │ jumpStarted.current = true; 2026-10-24T00:19:01.8144247Z 870 │ void nativeView.current.scrollToFile(file.id, false).catch(() => { 2026-10-24T00:19:01.8144497Z 871 │ jumpStarted.current = false; 2026-10-24T00:19:01.8144666Z 872 │ }); 2026-10-24T00:19:01.8144953Z 873 │ }, [route.params.path, route.params.fileSelectionId, route.params.focus, data.files, navigation]); 2026-10-24T00:19:01.8145391Z ·  ──────────────────────────────────────────────┬────────────────────────────────────────────── 2026-10-24T00:19:01.8145894Z · ╰── This dependency list is missing values used by the callback 2026-10-24T00:19:01.8146281Z 874 │ const appliedFilter = useRef(filter.hideTestFiles); 2026-10-24T00:19:01.8146474Z ╰──── 2026-10-24T00:19:01.8146711Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T00:19:01.8147231Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8147551Z 2026-10-24T00:19:01.8147847Z ⚠ eslint(no-unused-vars): Variable 'layerDaemon' is declared but never used. Unused variables should start with a '_'. 2026-10-24T00:19:01.8148273Z ╭─[apps/server/src/orchestration-v2/EffectWorker.ts:914:7] 2026-10-24T00:19:01.8148495Z 913 │ 2026-10-24T00:19:01.8148766Z 914 │ const layerDaemon: Layer.Layer = Layer.effectDiscard( 2026-10-24T00:19:01.8149051Z ·  ─────┬───── 2026-10-24T00:19:01.8149299Z · ╰── 'layerDaemon' is declared here 2026-10-24T00:19:01.8149541Z 915 │ runDaemon.pipe(Effect.forkScoped), 2026-10-24T00:19:01.8149711Z ╰──── 2026-10-24T00:19:01.8149885Z  help: Consider removing this declaration. 2026-10-24T00:19:01.8150013Z 2026-10-24T00:19:01.8150289Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T00:19:01.8150742Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:123:7] 2026-10-24T00:19:01.8150985Z 118 │ 2026-10-24T00:19:01.8151128Z 119 │ useEffect(() => { 2026-10-24T00:19:01.8151298Z ·  ────┬──── 2026-10-24T00:19:01.8151536Z · ╰── This is the containing effect 2026-10-24T00:19:01.8151768Z 120 │ if (orientationSettled) return; 2026-10-24T00:19:01.8152000Z 121 │ const orientation = getNativeShowcaseOrientation(); 2026-10-24T00:19:01.8152216Z 122 │ if (orientation === null) { 2026-10-24T00:19:01.8152409Z 123 │ setOrientationSettled(true); 2026-10-24T00:19:01.8152620Z ·  ──────────┬────────── 2026-10-24T00:19:01.8152913Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T00:19:01.8153164Z 124 │ return; 2026-10-24T00:19:01.8153303Z ╰──── 2026-10-24T00:19:01.8154041Z  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-24T00:19:01.8154954Z  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-24T00:19:01.8155276Z 2026-10-24T00:19:01.8155554Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T00:19:01.8156000Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:304:7] 2026-10-24T00:19:01.8156242Z 292 │ 2026-10-24T00:19:01.8156378Z 293 │ useEffect(() => { 2026-10-24T00:19:01.8156547Z ·  ────┬──── 2026-10-24T00:19:01.8156844Z · ╰── This is the containing effect 2026-10-24T00:19:01.8157100Z 294 │ if ( 2026-10-24T00:19:01.8157245Z 295 │ scene === null || 2026-10-24T00:19:01.8157422Z 296 │ requestedScene === null || 2026-10-24T00:19:01.8157610Z 297 │ scene !== requestedScene || 2026-10-24T00:19:01.8157787Z 298 │ !hasFixture || 2026-10-24T00:19:01.8157955Z 299 │ !orientationSettled || 2026-10-24T00:19:01.8158126Z 300 │ !themeApplied || 2026-10-24T00:19:01.8158347Z 301 │ (scene === "agent-activity" && !agentActivityStaged) || 2026-10-24T00:19:01.8158632Z 302 │ !isShowcaseNativeContentReady({ scene, themeId, renderSignal }) 2026-10-24T00:19:01.8158851Z 303 │ ) { 2026-10-24T00:19:01.8158998Z 304 │ setReadyScene(null); 2026-10-24T00:19:01.8159182Z ·  ──────┬────── 2026-10-24T00:19:01.8159475Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T00:19:01.8159726Z 305 │ return; 2026-10-24T00:19:01.8159863Z ╰──── 2026-10-24T00:19:01.8160562Z  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-24T00:19:01.8161487Z  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-24T00:19:01.8161818Z 2026-10-24T00:19:01.8162115Z ⚠ eslint(no-unused-vars): Variable 'lastOutcome' is declared but never used. Unused variables should start with a '_'. 2026-10-24T00:19:01.8162575Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:128:9] 2026-10-24T00:19:01.8162848Z 127 │ let cancelled = false; 2026-10-24T00:19:01.8163045Z 128 │ let lastOutcome: string | null = null; 2026-10-24T00:19:01.8163247Z ·  ─────┬───── 2026-10-24T00:19:01.8163495Z · ╰── 'lastOutcome' is declared here 2026-10-24T00:19:01.8163838Z 129 │ void retryShowcaseOperation(async () => applyNativeShowcaseOrientation(orientation), { 2026-10-24T00:19:01.8164112Z ╰──── 2026-10-24T00:19:01.8164287Z  help: Consider removing this declaration. 2026-10-24T00:19:01.8164414Z 2026-10-24T00:19:01.8164634Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T00:19:01.8165005Z ╭─[apps/mobile/src/features/review/ReviewSheet.tsx:454:7] 2026-10-24T00:19:01.8165250Z 453 │ showAuxiliaryPane("inspector"); 2026-10-24T00:19:01.8165477Z 454 │ }, [environmentId, showAuxiliaryPane, threadId]); 2026-10-24T00:19:01.8165767Z ·  ──────┬────── ────┬─── 2026-10-24T00:19:01.8166138Z · │ ╰── Unnecessary dependency `threadId` 2026-10-24T00:19:01.8166499Z · ╰── Unnecessary dependency `environmentId` 2026-10-24T00:19:01.8166723Z 455 │ const { 2026-10-24T00:19:01.8166859Z ╰──── 2026-10-24T00:19:01.8167236Z  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-24T00:19:01.8167952Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8168322Z 2026-10-24T00:19:01.8168519Z ⚠ react(static-components): Cannot create components during render 2026-10-24T00:19:01.8168870Z ╭─[apps/mobile/src/features/review/ReviewSheet.tsx:725:20] 2026-10-24T00:19:01.8169097Z 492 │ // same check. 2026-10-24T00:19:01.8169321Z 493 │ const NativeReviewDiffView = resolveNativeReviewDiffView(); 2026-10-24T00:19:01.8169605Z ·  ─────────────┬───────────── 2026-10-24T00:19:01.8169940Z · ╰── The component is created during render here 2026-10-24T00:19:01.8170294Z 494 │ const nativeReviewDiffViewRef = useRef(null); 2026-10-24T00:19:01.8170600Z 495 │ const showcasedReviewDrawRef = useRef(null); 2026-10-24T00:19:01.8170886Z 496 │ const [isPullRefreshing, setIsPullRefreshing] = useState(false); 2026-10-24T00:19:01.8171142Z 497 │ const handlePullToRefresh = async () => { 2026-10-24T00:19:01.8171346Z 498 │ setIsPullRefreshing(true); 2026-10-24T00:19:01.8171607Z 499 │ await refreshSelectedSection(); 2026-10-24T00:19:01.8171806Z 500 │ setIsPullRefreshing(false); 2026-10-24T00:19:01.8171971Z 501 │ }; 2026-10-24T00:19:01.8172196Z 502 │ const reviewFileNavigatorRef = useRef(null); 2026-10-24T00:19:01.8172514Z 503 │ const reviewFiles = parsedDiff.kind === "files" ? parsedDiff.files : []; 2026-10-24T00:19:01.8172796Z 504 │ const fileVisibility = useReviewFileVisibility({ 2026-10-24T00:19:01.8173027Z 505 │ threadKey: reviewCache.threadKey, 2026-10-24T00:19:01.8173248Z 506 │ sectionId: selectedSection?.id ?? null, 2026-10-24T00:19:01.8173436Z 507 │ files: reviewFiles, 2026-10-24T00:19:01.8173640Z 508 │ cachedExpandedFileIds: selectedSection?.id 2026-10-24T00:19:01.8173927Z 509 │ ? reviewCache.expandedFileIdsBySection[selectedSection.id] 2026-10-24T00:19:01.8174155Z 510 │ : undefined, 2026-10-24T00:19:01.8174345Z 511 │ cachedViewedFileIds: selectedSection?.id 2026-10-24T00:19:01.8174599Z 512 │ ? reviewCache.viewedFileIdsBySection[selectedSection.id] 2026-10-24T00:19:01.8174814Z 513 │ : undefined, 2026-10-24T00:19:01.8174959Z 514 │ }); 2026-10-24T00:19:01.8175244Z 515 │ const { collapsedFileIds, toggleExpandedFile, toggleViewedFile, viewedFileIds } = fileVisibility; 2026-10-24T00:19:01.8175593Z 516 │ const commentSelection = useReviewCommentSelectionController({ 2026-10-24T00:19:01.8175825Z 517 │ environmentId, 2026-10-24T00:19:01.8175981Z 518 │ threadId, 2026-10-24T00:19:01.8176134Z 519 │ selectedSection, 2026-10-24T00:19:01.8176301Z 520 │ nativeReviewDiffData, 2026-10-24T00:19:01.8176460Z 521 │ }); 2026-10-24T00:19:01.8176640Z 522 │ const nativeBridge = useNativeReviewDiffBridge({ 2026-10-24T00:19:01.8176861Z 523 │ threadKey: reviewCache.threadKey, 2026-10-24T00:19:01.8177075Z 524 │ sectionId: selectedSection?.id ?? null, 2026-10-24T00:19:01.8177275Z 525 │ diff: selectedSection?.diff, 2026-10-24T00:19:01.8177462Z 526 │ data: nativeReviewDiffData, 2026-10-24T00:19:01.8177638Z 527 │ collapsedFileIds, 2026-10-24T00:19:01.8177802Z 528 │ viewedFileIds, 2026-10-24T00:19:01.8178009Z 529 │ selectedRowIds: commentSelection.selectedRowIds, 2026-10-24T00:19:01.8178248Z 530 │ canHighlight: parsedDiff.kind === "files", 2026-10-24T00:19:01.8178531Z 531 │ }); 2026-10-24T00:19:01.8178737Z 532 │ const showcaseReviewKey = 2026-10-24T00:19:01.8178981Z 533 │ SHOWCASE_ENABLED && parsedDiff.kind === "files" && selectedSection 2026-10-24T00:19:01.8179362Z 534 │ ? `${reviewCache.threadKey}:${selectedSection.id}:${nativeBridge.tokensResetKey}:${nativeBridge.themeId}` 2026-10-24T00:19:01.8179652Z 535 │ : null; 2026-10-24T00:19:01.8179911Z 536 │ const handleNativeDebug = (event: NativeSyntheticEvent>) => { 2026-10-24T00:19:01.8180193Z 537 │ nativeBridge.onDebug(event); 2026-10-24T00:19:01.8180360Z 538 │ if ( 2026-10-24T00:19:01.8180524Z 539 │ showcaseReviewKey === null || 2026-10-24T00:19:01.8180766Z 540 │ showcasedReviewDrawRef.current === showcaseReviewKey || 2026-10-24T00:19:01.8181032Z 541 │ !isNativeReviewDiffDrawEvent(event.nativeEvent) 2026-10-24T00:19:01.8181231Z 542 │ ) { 2026-10-24T00:19:01.8181376Z 543 │ return; 2026-10-24T00:19:01.8181515Z 544 │ } 2026-10-24T00:19:01.8181712Z 545 │ showcasedReviewDrawRef.current = showcaseReviewKey; 2026-10-24T00:19:01.8182029Z 546 │ reportShowcaseSceneRendered({ scene: "review", themeId: nativeBridge.themeId }); 2026-10-24T00:19:01.8182276Z 547 │ }; 2026-10-24T00:19:01.8182405Z 548 │ 2026-10-24T00:19:01.8182692Z 549 │ const handleSelectFile = async (fileId: string | null) => { 2026-10-24T00:19:01.8182931Z 550 │ loadVisibleFile(fileId, true); 2026-10-24T00:19:01.8183136Z 551 │ commentSelection.clearSelection(); 2026-10-24T00:19:01.8183387Z 552 │ if (fileId !== null && collapsedFileIds.includes(fileId)) { 2026-10-24T00:19:01.8183621Z 553 │ toggleExpandedFile(fileId); 2026-10-24T00:19:01.8183788Z 554 │ } 2026-10-24T00:19:01.8184020Z 555 │ const nativeView = nativeReviewDiffViewRef.current; 2026-10-24T00:19:01.8184239Z 556 │ if (!nativeView) return; 2026-10-24T00:19:01.8184443Z 557 │ const result = await settlePromise(() => 2026-10-24T00:19:01.8184748Z 558 │ fileId === null ? nativeView.scrollToTop(true) : nativeView.scrollToFile(fileId, true), 2026-10-24T00:19:01.8185004Z 559 │ ); 2026-10-24T00:19:01.8185169Z 560 │ if (AsyncResult.isFailure(result)) { 2026-10-24T00:19:01.8185487Z 561 │ console.error("[review] Failed to navigate to diff file", squashAtomCommandFailure(result)); 2026-10-24T00:19:01.8185747Z 562 │ } 2026-10-24T00:19:01.8185875Z 563 │ }; 2026-10-24T00:19:01.8186030Z 564 │ const handleVisibleFileChange = ( 2026-10-24T00:19:01.8186282Z 565 │ event: NativeSyntheticEvent<{ readonly fileId?: string | null }>, 2026-10-24T00:19:01.8186504Z 566 │ ) => { 2026-10-24T00:19:01.8186700Z 567 │ loadVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-24T00:19:01.8187021Z 568 │ reviewFileNavigatorRef.current?.setVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-24T00:19:01.8187270Z 569 │ }; 2026-10-24T00:19:01.8187426Z 570 │ const renderInspector = () => ( 2026-10-24T00:19:01.8187610Z 571 │ void handleSelectFile(fileId)} 2026-10-24T00:19:01.8188867Z 577 │ /> 2026-10-24T00:19:01.8188996Z 578 │ ); 2026-10-24T00:19:01.8189123Z 579 │ 2026-10-24T00:19:01.8189465Z 580 │ const handleNativeToggleFile = (event: NativeSyntheticEvent<{ readonly fileId?: string }>) => { 2026-10-24T00:19:01.8189814Z 581 │ const { fileId } = event.nativeEvent; 2026-10-24T00:19:01.8189999Z 582 │ if (fileId) { 2026-10-24T00:19:01.8190178Z 583 │ loadVisibleFile(fileId, true); 2026-10-24T00:19:01.8190376Z 584 │ toggleExpandedFile(fileId); 2026-10-24T00:19:01.8190539Z 585 │ } 2026-10-24T00:19:01.8190666Z 586 │ }; 2026-10-24T00:19:01.8190784Z 587 │ 2026-10-24T00:19:01.8190947Z 588 │ const handleNativeToggleViewedFile = ( 2026-10-24T00:19:01.8191189Z 589 │ event: NativeSyntheticEvent<{ readonly fileId?: string }>, 2026-10-24T00:19:01.8191397Z 590 │ ) => { 2026-10-24T00:19:01.8191559Z 591 │ const { fileId } = event.nativeEvent; 2026-10-24T00:19:01.8191737Z 592 │ if (fileId) { 2026-10-24T00:19:01.8191905Z 593 │ toggleViewedFile(fileId); 2026-10-24T00:19:01.8192063Z 594 │ } 2026-10-24T00:19:01.8192196Z 595 │ }; 2026-10-24T00:19:01.8192320Z 596 │ 2026-10-24T00:19:01.8192462Z 597 │ const parsedDiffNotice = 2026-10-24T00:19:01.8192733Z 598 │ parsedDiff.kind === "files" || parsedDiff.kind === "raw" ? parsedDiff.notice : null; 2026-10-24T00:19:01.8193044Z 599 │ const hasCachedSelectedDiff = selectedSection?.diff != null; 2026-10-24T00:19:01.8193358Z 600 │ const hasAnyCachedDiff = reviewSections.some((section) => section.diff != null); 2026-10-24T00:19:01.8193665Z 601 │ const sectionMenu = buildReviewSectionMenu(reviewSections); 2026-10-24T00:19:01.8194022Z 602 │ const { showConnectionNotice, showSectionToolbar } = resolveReviewAvailability({ 2026-10-24T00:19:01.8194327Z 603 │ hasEnvironmentPresentation: environment.isReady, 2026-10-24T00:19:01.8194571Z 604 │ isEnvironmentConnected: isEnvironmentReady, 2026-10-24T00:19:01.8194775Z 605 │ hasCachedSelectedDiff, 2026-10-24T00:19:01.8194955Z 606 │ hasAnyCachedDiff, 2026-10-24T00:19:01.8195105Z 607 │ }); 2026-10-24T00:19:01.8195270Z 608 │ const handleRetryEnvironment = () => { 2026-10-24T00:19:01.8195478Z 609 │ void retryEnvironment(environmentId); 2026-10-24T00:19:01.8205224Z 610 │ }; 2026-10-24T00:19:01.8205398Z 611 │ const handleReturnToThread = () => { 2026-10-24T00:19:01.8205602Z 612 │ if (navigation.canGoBack()) { 2026-10-24T00:19:01.8205786Z 613 │ navigation.goBack(); 2026-10-24T00:19:01.8205951Z 614 │ return; 2026-10-24T00:19:01.8206091Z 615 │ } 2026-10-24T00:19:01.8206248Z 616 │ navigation.navigate("Thread", { 2026-10-24T00:19:01.8206462Z 617 │ environmentId: String(environmentId), 2026-10-24T00:19:01.8206664Z 618 │ threadId: String(threadId), 2026-10-24T00:19:01.8206828Z 619 │ }); 2026-10-24T00:19:01.8206962Z 620 │ }; 2026-10-24T00:19:01.8207117Z 621 │ const androidHeaderSubtitle = [ 2026-10-24T00:19:01.8207309Z 622 │ selectedSection?.title, 2026-10-24T00:19:01.8207495Z 623 │ headerDiffSummary.additions, 2026-10-24T00:19:01.8207691Z 624 │ headerDiffSummary.deletions, 2026-10-24T00:19:01.8207854Z 625 │ ] 2026-10-24T00:19:01.8208037Z 626 │ .filter((part): part is string => Boolean(part)) 2026-10-24T00:19:01.8208235Z 627 │ .join(" · "); 2026-10-24T00:19:01.8208377Z 628 │ 2026-10-24T00:19:01.8208522Z 629 │ const showChangedFilesPane = 2026-10-24T00:19:01.8208705Z 630 │ !showConnectionNotice && 2026-10-24T00:19:01.8208891Z 631 │ selectedSection !== null && 2026-10-24T00:19:01.8209078Z 632 │ parsedDiff.kind === "files" && 2026-10-24T00:19:01.8209276Z 633 │ NativeReviewDiffView !== null; 2026-10-24T00:19:01.8209670Z 634 │ useRegisterWorkspaceInspector(showChangedFilesPane ? renderInspector : undefined); 2026-10-24T00:19:01.8210109Z 635 │ const showChangedFilesToggle = panes.supportsAuxiliaryPane && showChangedFilesPane; 2026-10-24T00:19:01.8210358Z 636 │ 2026-10-24T00:19:01.8210498Z 637 │ const listHeader = (() => { 2026-10-24T00:19:01.8210681Z 638 │ const children: ReactElement[] = []; 2026-10-24T00:19:01.8210843Z 639 │ 2026-10-24T00:19:01.8210973Z 640 │ if (error) { 2026-10-24T00:19:01.8211121Z 641 │ children.push( 2026-10-24T00:19:01.8211276Z 642 │ 2026-10-24T00:19:01.8212691Z 649 │ Review unavailable 2026-10-24T00:19:01.8213020Z 650 │ {error} 2026-10-24T00:19:01.8213249Z 651 │ , 2026-10-24T00:19:01.8213383Z 652 │ ); 2026-10-24T00:19:01.8213508Z 653 │ } 2026-10-24T00:19:01.8213632Z 654 │ 2026-10-24T00:19:01.8213770Z 655 │ if (parsedDiffNotice) { 2026-10-24T00:19:01.8214053Z 656 │ children.push(); 2026-10-24T00:19:01.8214283Z 657 │ } 2026-10-24T00:19:01.8214403Z 658 │ 2026-10-24T00:19:01.8214538Z 659 │ if (children.length === 0) { 2026-10-24T00:19:01.8214705Z 660 │ return null; 2026-10-24T00:19:01.8214841Z 661 │ } 2026-10-24T00:19:01.8214967Z 662 │ 2026-10-24T00:19:01.8215097Z 663 │ return <>{children}; 2026-10-24T00:19:01.8215245Z 664 │ })(); 2026-10-24T00:19:01.8215385Z 665 │ const headerSubtitle = [ 2026-10-24T00:19:01.8215554Z 666 │ headerDiffSummary.additions, 2026-10-24T00:19:01.8215738Z 667 │ headerDiffSummary.deletions, 2026-10-24T00:19:01.8215918Z 668 │ pendingReviewCommentCount > 0 2026-10-24T00:19:01.8216202Z 669 │ ? `${pendingReviewCommentCount} comment${pendingReviewCommentCount === 1 ? "" : "s"}` 2026-10-24T00:19:01.8216443Z 670 │ : null, 2026-10-24T00:19:01.8216579Z 671 │ ] 2026-10-24T00:19:01.8216706Z 672 │ .filter(Boolean) 2026-10-24T00:19:01.8216859Z 673 │ .join(" · "); 2026-10-24T00:19:01.8217076Z 674 │ const headerTitleText = selectedSection?.title ?? "Review changes"; 2026-10-24T00:19:01.8217279Z 675 │ 2026-10-24T00:19:01.8217409Z 676 │ return ( 2026-10-24T00:19:01.8217470Z 677 │ <> 2026-10-24T00:19:01.8217537Z 678 │ 2026-10-24T00:19:01.8219102Z 694 │ 2026-10-24T00:19:01.8219172Z 695 │ 2026-10-24T00:19:01.8219296Z 696 │ 2026-10-24T00:19:01.8219378Z 697 │ {showConnectionNotice ? ( 2026-10-24T00:19:01.8219524Z 698 │ 2026-10-24T00:19:01.8219618Z 699 │ 2026-10-24T00:19:01.8220677Z 711 │ 2026-10-24T00:19:01.8220838Z 712 │ ) : selectedSection && parsedDiff.kind === "files" && NativeReviewDiffView ? ( 2026-10-24T00:19:01.8220900Z 713 │ 2026-10-24T00:19:01.8221363Z 719 │ 2026-10-24T00:19:01.8221728Z 723 │ {listHeader} 2026-10-24T00:19:01.8221852Z 724 │ 2026-10-24T00:19:01.8221938Z 725 │ { 2026-10-24T00:19:01.8223756Z ·  ────┬──── 2026-10-24T00:19:01.8223891Z · ╰── This is the containing effect 2026-10-24T00:19:01.8224027Z 640 │ if (pendingLaunchEntry.key === launchTargetKey) { 2026-10-24T00:19:01.8224093Z 641 │ return; 2026-10-24T00:19:01.8224155Z 642 │ } 2026-10-24T00:19:01.8224230Z 643 │ setPendingLaunchEntry({ 2026-10-24T00:19:01.8224323Z ·  ──────────┬────────── 2026-10-24T00:19:01.8224502Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T00:19:01.8224583Z 644 │ key: launchTargetKey, 2026-10-24T00:19:01.8224635Z ╰──── 2026-10-24T00:19:01.8225257Z  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-24T00:19:01.8225591Z  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-24T00:19:01.8225594Z 2026-10-24T00:19:01.8225860Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T00:19:01.8226036Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:653:5] 2026-10-24T00:19:01.8226089Z 648 │ 2026-10-24T00:19:01.8226157Z 649 │ useEffect(() => { 2026-10-24T00:19:01.8226236Z ·  ────┬──── 2026-10-24T00:19:01.8226374Z · ╰── This is the containing effect 2026-10-24T00:19:01.8226491Z 650 │ if (initialAttachGridEntry.key === launchTargetKey) { 2026-10-24T00:19:01.8226554Z 651 │ return; 2026-10-24T00:19:01.8226614Z 652 │ } 2026-10-24T00:19:01.8226698Z 653 │ setInitialAttachGridEntry({ 2026-10-24T00:19:01.8226793Z ·  ────────────┬──────────── 2026-10-24T00:19:01.8226976Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T00:19:01.8227052Z 654 │ key: launchTargetKey, 2026-10-24T00:19:01.8227103Z ╰──── 2026-10-24T00:19:01.8227767Z  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-24T00:19:01.8228133Z  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-24T00:19:01.8228136Z 2026-10-24T00:19:01.8228398Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T00:19:01.8228571Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:746:7] 2026-10-24T00:19:01.8228627Z 743 │ 2026-10-24T00:19:01.8228694Z 744 │ useEffect(() => { 2026-10-24T00:19:01.8228767Z ·  ────┬──── 2026-10-24T00:19:01.8228905Z · ╰── This is the containing effect 2026-10-24T00:19:01.8229010Z 745 │ if (!routeEnvironmentId || !routeThreadId) { 2026-10-24T00:19:01.8229081Z 746 │ setLastGridSize({ 2026-10-24T00:19:01.8229167Z ·  ───────┬─────── 2026-10-24T00:19:01.8229344Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T00:19:01.8229429Z 747 │ cols: DEFAULT_TERMINAL_COLS, 2026-10-24T00:19:01.8229487Z ╰──── 2026-10-24T00:19:01.8230108Z  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-24T00:19:01.8230451Z  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-24T00:19:01.8230457Z 2026-10-24T00:19:01.8230670Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T00:19:01.8230845Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:538:24] 2026-10-24T00:19:01.8230908Z 537 │ }); 2026-10-24T00:19:01.8231038Z 538 │ }, [terminal.buffer, terminal.buffer.length, terminalKey]); 2026-10-24T00:19:01.8231158Z ·  ───────────┬────────── 2026-10-24T00:19:01.8231417Z · ╰── Overly precise dependency `terminal.buffer.length`, use `terminal.buffer` instead 2026-10-24T00:19:01.8231584Z 539 │ const cwd = terminal.summary?.cwd ?? selectedThreadProject?.workspaceRoot ?? null; 2026-10-24T00:19:01.8231653Z ╰──── 2026-10-24T00:19:01.8231962Z  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-24T00:19:01.8232311Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8232314Z 2026-10-24T00:19:01.8232522Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T00:19:01.8232700Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:709:7] 2026-10-24T00:19:01.8232804Z 708 │ sentInitialInputKeyRef.current = null; 2026-10-24T00:19:01.8232876Z 709 │ }, [terminalKey]); 2026-10-24T00:19:01.8232956Z ·  ─────┬───── 2026-10-24T00:19:01.8233172Z · ╰── Unnecessary dependency `terminalKey` 2026-10-24T00:19:01.8233271Z 710 │ 2026-10-24T00:19:01.8233325Z ╰──── 2026-10-24T00:19:01.8233627Z  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-24T00:19:01.8233974Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8233979Z 2026-10-24T00:19:01.8234195Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T00:19:01.8234373Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:800:52] 2026-10-24T00:19:01.8234434Z 799 │ }; 2026-10-24T00:19:01.8234624Z 800 │ }, [canOperateTerminal, isRunning, pasteSession, terminal.lifecycleVersion, terminalKey]); 2026-10-24T00:19:01.8234822Z ·  ────────────┬──────────── ─────┬───── 2026-10-24T00:19:01.8235065Z · │ ╰── Unnecessary dependency `terminalKey` 2026-10-24T00:19:01.8235285Z · ╰── Unnecessary dependency `terminal.lifecycleVersion` 2026-10-24T00:19:01.8235340Z 801 │ 2026-10-24T00:19:01.8235396Z ╰──── 2026-10-24T00:19:01.8235699Z  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-24T00:19:01.8236026Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8236031Z 2026-10-24T00:19:01.8236186Z ⚠ react(refs): Cannot access refs during render 2026-10-24T00:19:01.8236359Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:793:24] 2026-10-24T00:19:01.8236421Z 792 │ } 2026-10-24T00:19:01.8236534Z 793 │ const pasteSession = pasteSessionRef.current; 2026-10-24T00:19:01.8236657Z ·  ───────────┬─────────── 2026-10-24T00:19:01.8236824Z · ╰── Cannot access ref value during render 2026-10-24T00:19:01.8236881Z 794 │ 2026-10-24T00:19:01.8236941Z ╰──── 2026-10-24T00:19:01.8237439Z  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-24T00:19:01.8237744Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T00:19:01.8237749Z 2026-10-24T00:19:01.8238019Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T00:19:01.8238195Z ╭─[apps/mobile/src/features/review/ReviewCommentComposerSheet.tsx:103:7] 2026-10-24T00:19:01.8238255Z 100 │ 2026-10-24T00:19:01.8238327Z 101 │ useEffect(() => { 2026-10-24T00:19:01.8238402Z ·  ────┬──── 2026-10-24T00:19:01.8238606Z · ╰── This is the containing effect 2026-10-24T00:19:01.8238762Z 102 │ if (!target || selectedLines.length === 0) { 2026-10-24T00:19:01.8238852Z 103 │ setHighlightedLinesById({}); 2026-10-24T00:19:01.8238947Z ·  ───────────┬─────────── 2026-10-24T00:19:01.8239130Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T00:19:01.8239196Z 104 │ return; 2026-10-24T00:19:01.8239254Z ╰──── 2026-10-24T00:19:01.8239882Z  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-24T00:19:01.8240232Z  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-24T00:19:01.8240239Z 2026-10-24T00:19:01.8240514Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T00:19:01.8240652Z ╭─[apps/mobile/src/lib/useHoverGesture.ts:8:15] 2026-10-24T00:19:01.8240717Z 7 │ () => 2026-10-24T00:19:01.8240784Z 8 │ Gesture.Hover() 2026-10-24T00:19:01.8240870Z ·  ──┬── 2026-10-24T00:19:01.8241018Z · ╰── `Hover` may be a component 2026-10-24T00:19:01.8241131Z 9 │ .manualActivation(true) 2026-10-24T00:19:01.8241187Z ╰──── 2026-10-24T00:19:01.8241491Z  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-24T00:19:01.8241963Z  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-24T00:19:01.8241966Z 2026-10-24T00:19:01.8242210Z ⚠ eslint(no-unused-vars): Identifier 'HostProcess' is imported but never used. 2026-10-24T00:19:01.8242401Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:25:13] 2026-10-24T00:19:01.8242500Z 24 │ import * as Schema from "effect/Schema"; 2026-10-24T00:19:01.8242628Z 25 │ import * as HostProcess from "@t3tools/shared/HostProcess"; 2026-10-24T00:19:01.8242723Z ·  ─────┬───── 2026-10-24T00:19:01.8242908Z · ╰── 'HostProcess' is imported here 2026-10-24T00:19:01.8242986Z 26 │ 2026-10-24T00:19:01.8243044Z ╰──── 2026-10-24T00:19:01.8243187Z  help: Consider removing this import. 2026-10-24T00:19:01.8243190Z 2026-10-24T00:19:01.8243486Z ⚠ eslint(no-unused-vars): Variable 'serverConfig' is declared but never used. Unused variables should start with a '_'. 2026-10-24T00:19:01.8243663Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:124:11] 2026-10-24T00:19:01.8243755Z 123 │ const path = yield* Path.Path; 2026-10-24T00:19:01.8243882Z 124 │ const serverConfig = yield* ServerConfig.ServerConfig; 2026-10-24T00:19:01.8244027Z ·  ──────┬───── 2026-10-24T00:19:01.8244178Z · ╰── 'serverConfig' is declared here 2026-10-24T00:19:01.8244406Z 125 │ const serverSettings = yield* ServerSettings.ServerSettingsService; 2026-10-24T00:19:01.8244514Z ╰──── 2026-10-24T00:19:01.8244629Z  help: Consider removing this declaration. 2026-10-24T00:19:01.8244631Z 2026-10-24T00:19:01.8244921Z ⚠ eslint(no-unused-vars): Variable 'serverSettings' is declared but never used. Unused variables should start with a '_'. 2026-10-24T00:19:01.8245096Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:125:11] 2026-10-24T00:19:01.8245220Z 124 │ const serverConfig = yield* ServerConfig.ServerConfig; 2026-10-24T00:19:01.8245368Z 125 │ const serverSettings = yield* ServerSettings.ServerSettingsService; 2026-10-24T00:19:01.8245463Z ·  ───────┬────── 2026-10-24T00:19:01.8245616Z · ╰── 'serverSettings' is declared here 2026-10-24T00:19:01.8245771Z 126 │ const gitWorkflow = yield* GitWorkflowService.GitWorkflowService; 2026-10-24T00:19:01.8245834Z ╰──── 2026-10-24T00:19:01.8245948Z  help: Consider removing this declaration. 2026-10-24T00:19:01.8245951Z 2026-10-24T00:19:01.8246281Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T00:19:01.8246453Z ╭─[apps/mobile/src/Stack.tsx:1068:21] 2026-10-24T00:19:01.8246561Z 1067 │ } 2026-10-24T00:19:01.8246998Z ·  ───────────────────────────────────────────── 2026-10-24T00:19:01.8247113Z 1069 │ screenListeners={{ 2026-10-24T00:19:01.8247204Z ╰──── 2026-10-24T00:19:01.8247780Z  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-24T00:19:01.8247787Z 2026-10-24T00:19:01.8247997Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T00:19:01.8248171Z ╭─[apps/mobile/src/features/terminal/TerminalContextSheet.tsx:72:15] 2026-10-24T00:19:01.8248243Z 71 │ { 2026-10-24T00:19:01.8249896Z 57 │ if (pulse) { 2026-10-24T00:19:01.8249993Z 58 │ pulseProgress.value = withRepeat( 2026-10-24T00:19:01.8250080Z ·  ──────┬────── 2026-10-24T00:19:01.8250291Z · ╰── `pulseProgress` cannot be modified 2026-10-24T00:19:01.8250369Z 59 │ withTiming(1, { 2026-10-24T00:19:01.8250430Z ╰──── 2026-10-24T00:19:01.8250720Z  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-24T00:19:01.8251051Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T00:19:01.8251054Z 2026-10-24T00:19:01.8251358Z ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'. 2026-10-24T00:19:01.8251600Z ╭─[packages/provider-cursor/src/server/auth.ts:249:20] 2026-10-24T00:19:01.8251672Z 248 │ }, 2026-10-24T00:19:01.8251764Z 249 │ (effect, flow, stopSessions) => 2026-10-24T00:19:01.8251875Z ·  ──────┬───── 2026-10-24T00:19:01.8252116Z · ╰── 'stopSessions' is declared here 2026-10-24T00:19:01.8252193Z 250 │ effect.pipe( 2026-10-24T00:19:01.8252252Z ╰──── 2026-10-24T00:19:01.8252363Z  help: Consider removing this parameter. 2026-10-24T00:19:01.8252370Z 2026-10-24T00:19:01.8252648Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T00:19:01.8252835Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:79:5] 2026-10-24T00:19:01.8252893Z 76 │ 2026-10-24T00:19:01.8252964Z 77 │ useEffect(() => { 2026-10-24T00:19:01.8253040Z ·  ────┬──── 2026-10-24T00:19:01.8253192Z · ╰── This is the containing effect 2026-10-24T00:19:01.8253334Z 78 │ const { host, code } = parsePairingUrl(connectionPairingUrl); 2026-10-24T00:19:01.8253412Z 79 │ setHostInput(host); 2026-10-24T00:19:01.8253492Z ·  ──────┬───── 2026-10-24T00:19:01.8253679Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T00:19:01.8253754Z 80 │ setCodeInput(code); 2026-10-24T00:19:01.8253812Z ╰──── 2026-10-24T00:19:01.8254508Z  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-24T00:19:01.8254966Z  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-24T00:19:01.8255025Z 2026-10-24T00:19:01.8255304Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T00:19:01.8255489Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:89:5] 2026-10-24T00:19:01.8255548Z 82 │ 2026-10-24T00:19:01.8255614Z 83 │ useEffect(() => { 2026-10-24T00:19:01.8255691Z ·  ────┬──── 2026-10-24T00:19:01.8255835Z · ╰── This is the containing effect 2026-10-24T00:19:01.8255932Z 84 │ if (routePairingUrl.length === 0) { 2026-10-24T00:19:01.8255996Z 85 │ return; 2026-10-24T00:19:01.8256058Z 86 │ } 2026-10-24T00:19:01.8256116Z 87 │ 2026-10-24T00:19:01.8256249Z 88 │ const { host, code } = parsePairingUrl(routePairingUrl); 2026-10-24T00:19:01.8256325Z 89 │ setHostInput(host); 2026-10-24T00:19:01.8256409Z ·  ──────┬───── 2026-10-24T00:19:01.8256590Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T00:19:01.8256659Z 90 │ setCodeInput(code); 2026-10-24T00:19:01.8256717Z ╰──── 2026-10-24T00:19:01.8257355Z  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-24T00:19:01.8257705Z  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-24T00:19:01.8257710Z 2026-10-24T00:19:01.8257988Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T00:19:01.8258169Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:95:7] 2026-10-24T00:19:01.8258227Z 92 │ 2026-10-24T00:19:01.8258298Z 93 │ useEffect(() => { 2026-10-24T00:19:01.8258376Z ·  ────┬──── 2026-10-24T00:19:01.8258513Z · ╰── This is the containing effect 2026-10-24T00:19:01.8258603Z 94 │ if (pairingConnectionError) { 2026-10-24T00:19:01.8258686Z 95 │ setIsSubmitting(false); 2026-10-24T00:19:01.8258777Z ·  ───────┬─────── 2026-10-24T00:19:01.8258963Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T00:19:01.8259028Z 96 │ } 2026-10-24T00:19:01.8259084Z ╰──── 2026-10-24T00:19:01.8259720Z  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-24T00:19:01.8260063Z  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-24T00:19:01.8260066Z 2026-10-24T00:19:01.8260265Z ⚠ react(static-components): Cannot create components during render 2026-10-24T00:19:01.8260508Z ╭─[apps/mobile/src/features/terminal/NativeTerminalSurface.tsx:234:10] 2026-10-24T00:19:01.8260645Z 196 │ const { onInput, onResize } = props; 2026-10-24T00:19:01.8260808Z 197 │ const NativeTerminalSurfaceView = resolveNativeTerminalSurfaceView(); 2026-10-24T00:19:01.8260953Z ·  ────────────────┬─────────────── 2026-10-24T00:19:01.8261157Z · ╰── The component is created during render here 2026-10-24T00:19:01.8261295Z 198 │ const hasNativeSurface = Boolean(NativeTerminalSurfaceView); 2026-10-24T00:19:01.8261354Z 199 │ 2026-10-24T00:19:01.8261425Z 200 │ useEffect(() => { 2026-10-24T00:19:01.8261522Z 201 │ terminalDebugLog("native:surface", { 2026-10-24T00:19:01.8261618Z 202 │ terminalKey: props.terminalKey, 2026-10-24T00:19:01.8261703Z 203 │ native: hasNativeSurface, 2026-10-24T00:19:01.8261856Z 204 │ hardwareKeyRevision: getNativeTerminalHardwareKeyRevision(), 2026-10-24T00:19:01.8261959Z 205 │ bufferLen: props.buffer.length, 2026-10-24T00:19:01.8262048Z 206 │ isRunning: props.isRunning, 2026-10-24T00:19:01.8262109Z 207 │ }); 2026-10-24T00:19:01.8262278Z 208 │ }, [hasNativeSurface, props.buffer.length, props.isRunning, props.terminalKey]); 2026-10-24T00:19:01.8262376Z 209 │ const handleNativeInput = useCallback( 2026-10-24T00:19:01.8262502Z 210 │ (event: NativeSyntheticEvent) => { 2026-10-24T00:19:01.8262610Z 211 │ if (!props.isRunning || props.readOnly) { 2026-10-24T00:19:01.8262679Z 212 │ return; 2026-10-24T00:19:01.8262742Z 213 │ } 2026-10-24T00:19:01.8262841Z 214 │ terminalDebugLog("native:onInput", { 2026-10-24T00:19:01.8263004Z 215 │ codes: Array.from(event.nativeEvent.data, (char) => char.codePointAt(0)), 2026-10-24T00:19:01.8263073Z 216 │ }); 2026-10-24T00:19:01.8263172Z 217 │ onInput(event.nativeEvent.data); 2026-10-24T00:19:01.8263234Z 218 │ }, 2026-10-24T00:19:01.8263342Z 219 │ [onInput, props.isRunning, props.readOnly], 2026-10-24T00:19:01.8263400Z 220 │ ); 2026-10-24T00:19:01.8263501Z 221 │ const handleNativeResize = useCallback( 2026-10-24T00:19:01.8263628Z 222 │ (event: NativeSyntheticEvent) => { 2026-10-24T00:19:01.8263694Z 223 │ onResize({ 2026-10-24T00:19:01.8263785Z 224 │ cols: event.nativeEvent.cols, 2026-10-24T00:19:01.8263875Z 225 │ rows: event.nativeEvent.rows, 2026-10-24T00:19:01.8263960Z 226 │ }); 2026-10-24T00:19:01.8264038Z 227 │ }, 2026-10-24T00:19:01.8264109Z 228 │ [onResize], 2026-10-24T00:19:01.8264170Z 229 │ ); 2026-10-24T00:19:01.8264230Z 230 │ 2026-10-24T00:19:01.8264325Z 231 │ if (NativeTerminalSurfaceView) { 2026-10-24T00:19:01.8264395Z 232 │ return ( 2026-10-24T00:19:01.8264480Z 233 │ 2026-10-24T00:19:01.8264566Z 234 │ { 2026-10-24T00:19:01.8266394Z ·  ────┬──── 2026-10-24T00:19:01.8266537Z · ╰── This is the containing effect 2026-10-24T00:19:01.8266637Z 400 │ setInspectorSelection((current) => { 2026-10-24T00:19:01.8266734Z ·  ──────────┬────────── 2026-10-24T00:19:01.8266922Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T00:19:01.8267043Z 401 │ if (props.renderInspector === undefined) { 2026-10-24T00:19:01.8267100Z ╰──── 2026-10-24T00:19:01.8267746Z  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-24T00:19:01.8268091Z  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-24T00:19:01.8268094Z 2026-10-24T00:19:01.8268326Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T00:19:01.8268490Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:528:24] 2026-10-24T00:19:01.8268661Z 527 │ const inspectorHeaderInset = Platform.OS === "ios" ? 0 : safeAreaInsets.top; 2026-10-24T00:19:01.8268850Z 528 │ ╭─▶ const GitInspector = () => ( 2026-10-24T00:19:01.8268957Z 529 │ │ 2026-10-24T00:19:01.8269622Z 534 │ ╰─▶ ); 2026-10-24T00:19:01.8269709Z 535 │ const FilesInspector = () => 2026-10-24T00:19:01.8269766Z ╰──── 2026-10-24T00:19:01.8270012Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-24T00:19:01.8270017Z 2026-10-24T00:19:01.8270247Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T00:19:01.8270412Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:535:26] 2026-10-24T00:19:01.8270472Z 534 │ ); 2026-10-24T00:19:01.8270651Z 535 │ ╭─▶ const FilesInspector = () => 2026-10-24T00:19:01.8270815Z 536 │ │ selectedThread !== null && selectedThreadCwd !== null ? ( 2026-10-24T00:19:01.8270931Z 537 │ │ 2026-10-24T00:19:01.8272077Z 545 │ ╰─▶ ) : null; 2026-10-24T00:19:01.8272237Z 546 │ const RouteInspector = () => props.renderInspector?.(inspectorHeaderInset); 2026-10-24T00:19:01.8272294Z ╰──── 2026-10-24T00:19:01.8272531Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-24T00:19:01.8272537Z 2026-10-24T00:19:01.8272816Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T00:19:01.8272989Z ╭─[apps/mobile/src/features/terminal/terminalLaunchContext.ts:117:5] 2026-10-24T00:19:01.8273167Z 112 │ const [entry, setEntry] = useState(() => ({ key: input.targetKey, location: candidate })); 2026-10-24T00:19:01.8273242Z 113 │ useEffect(() => { 2026-10-24T00:19:01.8273321Z ·  ────┬──── 2026-10-24T00:19:01.8273468Z · ╰── This is the containing effect 2026-10-24T00:19:01.8273641Z 114 │ if (entry.key === input.targetKey && (entry.location !== null || candidate === null)) { 2026-10-24T00:19:01.8273712Z 115 │ return; 2026-10-24T00:19:01.8273780Z 116 │ } 2026-10-24T00:19:01.8273931Z 117 │ setEntry({ key: input.targetKey, location: candidate }); 2026-10-24T00:19:01.8274010Z ·  ────┬─── 2026-10-24T00:19:01.8274192Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T00:19:01.8274322Z 118 │ }, [candidate, entry.key, entry.location, input.targetKey]); 2026-10-24T00:19:01.8274383Z ╰──── 2026-10-24T00:19:01.8275019Z  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-24T00:19:01.8275420Z  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-24T00:19:01.8275459Z 2026-10-24T00:19:01.8275766Z ⚠ eslint(no-unused-vars): Variable 'layerUnavailable' is declared but never used. Unused variables should start with a '_'. 2026-10-24T00:19:01.8275926Z ╭─[apps/server/src/orchestration-v2/Orchestrator.ts:12340:7] 2026-10-24T00:19:01.8275986Z 12339 │ 2026-10-24T00:19:01.8276136Z 12340 │ const layerUnavailable: Layer.Layer = Layer.succeed( 2026-10-24T00:19:01.8276232Z ·  ────────┬─────── 2026-10-24T00:19:01.8276397Z · ╰── 'layerUnavailable' is declared here 2026-10-24T00:19:01.8276472Z 12341 │ OrchestratorV2, 2026-10-24T00:19:01.8276528Z ╰──── 2026-10-24T00:19:01.8276643Z  help: Consider removing this declaration. 2026-10-24T00:19:01.8276654Z 2026-10-24T00:19:01.8276830Z ⚠ react(immutability): This value cannot be modified 2026-10-24T00:19:01.8276985Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:174:5] 2026-10-24T00:19:01.8277137Z 170 │ const expandedAngle = props.collapsedDirection === "right" ? 90 : 180; 2026-10-24T00:19:01.8277285Z 171 │ const rotation = useSharedValue(props.expanded ? expandedAngle : 0); 2026-10-24T00:19:01.8277366Z ·  ────┬─── 2026-10-24T00:19:01.8277508Z · ╰── `rotation` originates here 2026-10-24T00:19:01.8277563Z 172 │ 2026-10-24T00:19:01.8277639Z 173 │ useLayoutEffect(() => { 2026-10-24T00:19:01.8277788Z 174 │ rotation.value = withTiming(props.expanded ? expandedAngle : 0, { 2026-10-24T00:19:01.8277868Z ·  ────┬─── 2026-10-24T00:19:01.8278015Z · ╰── `rotation` cannot be modified 2026-10-24T00:19:01.8278127Z 175 │ duration: THREAD_DISCLOSURE_TRANSITION_MS, 2026-10-24T00:19:01.8278185Z ╰──── 2026-10-24T00:19:01.8278471Z  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-24T00:19:01.8278796Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T00:19:01.8278799Z 2026-10-24T00:19:01.8279009Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T00:19:01.8279175Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:1246:23] 2026-10-24T00:19:01.8279248Z 1245 │ new Promise((resolve) => setImmediate(resolve))); 2026-10-24T00:19:01.8281665Z 143 │ ╰─▶ } 2026-10-24T00:19:01.8281756Z 144 │ return yield* Fiber.join(fiber); 2026-10-24T00:19:01.8281815Z ╰──── 2026-10-24T00:19:01.8281818Z 2026-10-24T00:19:01.8281988Z ⚠ react(immutability): This value cannot be modified 2026-10-24T00:19:01.8282168Z ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:42:5] 2026-10-24T00:19:01.8282225Z 35 │ 2026-10-24T00:19:01.8282374Z 36 │ const inspectorProgress = useSharedValue(inspectorVisible ? 1 : 0); 2026-10-24T00:19:01.8282470Z ·  ────────┬──────── 2026-10-24T00:19:01.8282634Z · ╰── `inspectorProgress` originates here 2026-10-24T00:19:01.8282733Z 37 │ const { renderedInspectorWidth } = props; 2026-10-24T00:19:01.8282877Z 38 │ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0); 2026-10-24T00:19:01.8282934Z 39 │ 2026-10-24T00:19:01.8283020Z 40 │ const onClosed = props.onClosed; 2026-10-24T00:19:01.8283089Z 41 │ useEffect(() => { 2026-10-24T00:19:01.8283187Z 42 │ inspectorProgress.value = withTiming( 2026-10-24T00:19:01.8283283Z ·  ────────┬──────── 2026-10-24T00:19:01.8283447Z · ╰── `inspectorProgress` cannot be modified 2026-10-24T00:19:01.8283526Z 43 │ inspectorVisible ? 1 : 0, 2026-10-24T00:19:01.8283595Z ╰──── 2026-10-24T00:19:01.8283882Z  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-24T00:19:01.8284246Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T00:19:01.8284249Z 2026-10-24T00:19:01.8284417Z ⚠ react(immutability): This value cannot be modified 2026-10-24T00:19:01.8284584Z ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:67:7] 2026-10-24T00:19:01.8284690Z 37 │ const { renderedInspectorWidth } = props; 2026-10-24T00:19:01.8284834Z 38 │ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0); 2026-10-24T00:19:01.8284934Z ·  ──────────┬───────── 2026-10-24T00:19:01.8285098Z · ╰── `renderedContentWidth` originates here 2026-10-24T00:19:01.8285157Z 39 │ 2026-10-24T00:19:01.8285244Z 40 │ const onClosed = props.onClosed; 2026-10-24T00:19:01.8285316Z 41 │ useEffect(() => { 2026-10-24T00:19:01.8285409Z 42 │ inspectorProgress.value = withTiming( 2026-10-24T00:19:01.8285494Z 43 │ inspectorVisible ? 1 : 0, 2026-10-24T00:19:01.8285572Z 44 │ WORKSPACE_PANE_TIMING, 2026-10-24T00:19:01.8285646Z 45 │ (finished) => { 2026-10-24T00:19:01.8285791Z 46 │ if (finished === true && !inspectorVisible && onClosed !== undefined) { 2026-10-24T00:19:01.8285937Z 47 │ runOnJS(onClosed)(); 2026-10-24T00:19:01.8286045Z 48 │ } 2026-10-24T00:19:01.8286104Z 49 │ }, 2026-10-24T00:19:01.8286167Z 50 │ ); 2026-10-24T00:19:01.8286310Z 51 │ const targetWidth = inspectorVisible ? (inspectorWidth ?? 0) : 0; 2026-10-24T00:19:01.8286395Z 52 │ renderedInspectorWidth.set( 2026-10-24T00:19:01.8286547Z 53 │ resizing ? targetWidth : withTiming(targetWidth, WORKSPACE_PANE_TIMING), 2026-10-24T00:19:01.8286608Z 54 │ ); 2026-10-24T00:19:01.8286668Z 55 │ }, [ 2026-10-24T00:19:01.8286743Z 56 │ inspectorProgress, 2026-10-24T00:19:01.8286812Z 57 │ inspectorVisible, 2026-10-24T00:19:01.8286882Z 58 │ inspectorWidth, 2026-10-24T00:19:01.8286950Z 59 │ onClosed, 2026-10-24T00:19:01.8287027Z 60 │ renderedInspectorWidth, 2026-10-24T00:19:01.8287089Z 61 │ resizing, 2026-10-24T00:19:01.8287149Z 62 │ ]); 2026-10-24T00:19:01.8287214Z 63 │ 2026-10-24T00:19:01.8287283Z 64 │ useEffect(() => { 2026-10-24T00:19:01.8287382Z 65 │ const targetWidth = inspectorWidth ?? 0; 2026-10-24T00:19:01.8287475Z 66 │ if (!inspectorVisible || resizing) { 2026-10-24T00:19:01.8287581Z 67 │ renderedContentWidth.value = targetWidth; 2026-10-24T00:19:01.8287675Z ·  ──────────┬───────── 2026-10-24T00:19:01.8287849Z · ╰── `renderedContentWidth` cannot be modified 2026-10-24T00:19:01.8287912Z 68 │ return; 2026-10-24T00:19:01.8287973Z ╰──── 2026-10-24T00:19:01.8288249Z  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-24T00:19:01.8288579Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T00:19:01.8288584Z 2026-10-24T00:19:01.8288789Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T00:19:01.8288990Z ╭─[apps/mobile/src/features/keyboard/HardwareKeyboardCommandProvider.tsx:116:34] 2026-10-24T00:19:01.8289066Z 115 │ return [...commands]; 2026-10-24T00:19:01.8289207Z 116 │ }, [activeThreadRef, pathname, registrationVersion, navigation]); 2026-10-24T00:19:01.8289336Z ·  ─────────┬───────── 2026-10-24T00:19:01.8289538Z · ╰── Unnecessary dependency `registrationVersion` 2026-10-24T00:19:01.8289599Z 117 │ 2026-10-24T00:19:01.8289653Z ╰──── 2026-10-24T00:19:01.8289998Z  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-24T00:19:01.8290342Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8290344Z 2026-10-24T00:19:01.8290646Z ⚠ eslint(no-unused-vars): Variable 'legacyCredentials' is declared but never used. Unused variables should start with a '_'. 2026-10-24T00:19:01.8290818Z ╭─[packages/provider-cursor/src/server/credentialStore.test.ts:15:7] 2026-10-24T00:19:01.8290871Z 14 │ 2026-10-24T00:19:01.8290952Z 15 │ const legacyCredentials = { 2026-10-24T00:19:01.8291043Z ·  ────────┬──────── 2026-10-24T00:19:01.8291204Z · ╰── 'legacyCredentials' is declared here 2026-10-24T00:19:01.8291340Z 16 │ version: 1 as const, 2026-10-24T00:19:01.8291441Z ╰──── 2026-10-24T00:19:01.8291571Z  help: Consider removing this declaration. 2026-10-24T00:19:01.8291574Z 2026-10-24T00:19:01.8291871Z ⚠ eslint(no-unneeded-ternary): Unnecessary use of boolean literals in conditional expression 2026-10-24T00:19:01.8292004Z ╭─[packages/shared/src/serverSettings.test.ts:35:7] 2026-10-24T00:19:01.8292200Z 34 │ const fallback = fallbackTextGenerationModelSelection(providerInstances, (instanceId) => 2026-10-24T00:19:01.8292305Z 35 │ instanceId === configured ? true : false, 2026-10-24T00:19:01.8292434Z ·  ──────────────────────────────────────── 2026-10-24T00:19:01.8292495Z 36 │ ); 2026-10-24T00:19:01.8292551Z ╰──── 2026-10-24T00:19:01.8292655Z  help: Remove this ternary operator 2026-10-24T00:19:01.8292665Z 2026-10-24T00:19:01.8292904Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T00:19:01.8293048Z ╭─[apps/mobile/src/state/use-composer-drafts.ts:1022:15] 2026-10-24T00:19:01.8293126Z 1021 │ instanceId, 2026-10-24T00:19:01.8293280Z 1022 │ { ...(persisted.modelOptionMemory[instanceId] ?? {}), ...models }, 2026-10-24T00:19:01.8293432Z ·  ────────────────────────────────────────────────── 2026-10-24T00:19:01.8293497Z 1023 │ ]), 2026-10-24T00:19:01.8293559Z ╰──── 2026-10-24T00:19:01.8293843Z  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-24T00:19:01.8293846Z 2026-10-24T00:19:01.8294106Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T00:19:01.8294281Z ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:215:7] 2026-10-24T00:19:01.8294344Z 214 │ } 2026-10-24T00:19:01.8294420Z 215 │ }, [wrappedRender]); 2026-10-24T00:19:01.8294511Z ·  ──────┬────── 2026-10-24T00:19:01.8294670Z · ╰── Unnecessary dependency `wrappedRender` 2026-10-24T00:19:01.8294731Z 216 │ 2026-10-24T00:19:01.8294786Z ╰──── 2026-10-24T00:19:01.8295096Z  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-24T00:19:01.8295429Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8295440Z 2026-10-24T00:19:01.8295700Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T00:19:01.8295874Z ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:817:35] 2026-10-24T00:19:01.8295938Z 816 │ > 2026-10-24T00:19:01.8296062Z 817 │ 2026-10-24T00:19:01.8296186Z ·  ──────────────────── 2026-10-24T00:19:01.8296292Z 818 │ 2026-10-24T00:19:01.8297496Z 832 │ 2026-10-24T00:19:01.8297629Z ·  ──────────────────── 2026-10-24T00:19:01.8297738Z 833 │ 2026-10-24T00:19:01.8297795Z ╰──── 2026-10-24T00:19:01.8298027Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T00:19:01.8298180Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T00:19:01.8298185Z 2026-10-24T00:19:01.8298461Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T00:19:01.8298632Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:444:5] 2026-10-24T00:19:01.8298702Z 434 │ : null; 2026-10-24T00:19:01.8298771Z 435 │ useEffect(() => { 2026-10-24T00:19:01.8298850Z ·  ────┬──── 2026-10-24T00:19:01.8298991Z · ╰── This is the containing effect 2026-10-24T00:19:01.8299055Z 436 │ if ( 2026-10-24T00:19:01.8299138Z 437 │ props.active === false || 2026-10-24T00:19:01.8299222Z 438 │ activeDraftKey !== null || 2026-10-24T00:19:01.8299312Z 439 │ editingPendingTask !== null || 2026-10-24T00:19:01.8299396Z 440 │ selectedProject === null 2026-10-24T00:19:01.8299461Z 441 │ ) { 2026-10-24T00:19:01.8299530Z 442 │ return; 2026-10-24T00:19:01.8299593Z 443 │ } 2026-10-24T00:19:01.8299663Z 444 │ setActiveDraftKey( 2026-10-24T00:19:01.8299753Z ·  ────────┬──────── 2026-10-24T00:19:01.8299937Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T00:19:01.8300015Z 445 │ createNewTaskDraft({ 2026-10-24T00:19:01.8300071Z ╰──── 2026-10-24T00:19:01.8300717Z  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-24T00:19:01.8301130Z  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-24T00:19:01.8301173Z 2026-10-24T00:19:01.8301433Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T00:19:01.8301612Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:1244:36] 2026-10-24T00:19:01.8301726Z 1243 │ 2026-10-24T00:19:01.8301934Z 1244 │ {props.children} 2026-10-24T00:19:01.8302055Z ·  ───────────── 2026-10-24T00:19:01.8302139Z 1245 │ 2026-10-24T00:19:01.8302193Z ╰──── 2026-10-24T00:19:01.8302437Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T00:19:01.8302587Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T00:19:01.8302590Z 2026-10-24T00:19:01.8302864Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T00:19:01.8303012Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:68:5] 2026-10-24T00:19:01.8303122Z 66 │ const { id: attachmentId, fileUri } = attachment; 2026-10-24T00:19:01.8303199Z 67 │ useEffect(() => { 2026-10-24T00:19:01.8303278Z ·  ────┬──── 2026-10-24T00:19:01.8303416Z · ╰── This is the containing effect 2026-10-24T00:19:01.8303486Z 68 │ setUri(null); 2026-10-24T00:19:01.8303569Z ·  ───┬── 2026-10-24T00:19:01.8303752Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T00:19:01.8303820Z 69 │ setError(null); 2026-10-24T00:19:01.8303877Z ╰──── 2026-10-24T00:19:01.8304539Z  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-24T00:19:01.8304885Z  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-24T00:19:01.8304887Z 2026-10-24T00:19:01.8305110Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T00:19:01.8305254Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:91:7] 2026-10-24T00:19:01.8305314Z 90 │ }; 2026-10-24T00:19:01.8305394Z 91 │ }, [attachmentId, fileUri]); 2026-10-24T00:19:01.8305523Z ·  ──────┬───── ───┬─── 2026-10-24T00:19:01.8305716Z · │ ╰── Unnecessary dependency `fileUri` 2026-10-24T00:19:01.8305876Z · ╰── Unnecessary dependency `attachmentId` 2026-10-24T00:19:01.8306019Z 92 │ const mimeType = videoMimeType(attachment) ?? attachment.mimeType; 2026-10-24T00:19:01.8306082Z ╰──── 2026-10-24T00:19:01.8306456Z  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-24T00:19:01.8306825Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8306828Z 2026-10-24T00:19:01.8307057Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T00:19:01.8307207Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:213:34] 2026-10-24T00:19:01.8307281Z 212 │ useEffect(() => { 2026-10-24T00:19:01.8307403Z 213 │ if (!isFocused && hasSource) props.onRequestClose(); 2026-10-24T00:19:01.8307515Z ·  ──┬── 2026-10-24T00:19:01.8307677Z · ╰── Missing dependency `props` 2026-10-24T00:19:01.8307799Z 214 │ }, [isFocused, hasSource, props.onRequestClose]); 2026-10-24T00:19:01.8307920Z ·  ──────────┬───────── 2026-10-24T00:19:01.8308161Z · ╰── Overly precise dependency `props.onRequestClose`, use `props` instead 2026-10-24T00:19:01.8308240Z 215 │ const { source } = props; 2026-10-24T00:19:01.8308299Z ╰──── 2026-10-24T00:19:01.8308747Z  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-24T00:19:01.8309081Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8309084Z 2026-10-24T00:19:01.8309293Z ⚠ eslint(require-yield): This generator function does not have `yield` 2026-10-24T00:19:01.8309453Z ╭─[packages/provider-acp/src/server/mcpOverAcpBridge.ts:81:78] 2026-10-24T00:19:01.8309513Z  80 │ 2026-10-24T00:19:01.8309804Z  81 │ ╭─▶ export const makeAcpMcpOverAcpBridge = Effect.fn("AcpMcpOverAcpBridge.make")(function* ( 2026-10-24T00:19:01.8309937Z  82 │ │ options: AcpMcpOverAcpBridgeOptions, 2026-10-24T00:19:01.8310079Z  83 │ │ ): Effect.fn.Return { 2026-10-24T00:19:01.8310261Z  84 │ │ const fetchImplementation = options.fetchImplementation ?? fetch; 2026-10-24T00:19:01.8310405Z  85 │ │ const connections = new Map(); 2026-10-24T00:19:01.8310488Z  86 │ │ 2026-10-24T00:19:01.8310724Z  87 │ │ const connectionFor = (connectionId: string): Effect.Effect => 2026-10-24T00:19:01.8310834Z  88 │ │ Effect.suspend(() => { 2026-10-24T00:19:01.8310982Z  89 │ │ const connection = connections.get(connectionId); 2026-10-24T00:19:01.8311100Z  90 │ │ return connection === undefined 2026-10-24T00:19:01.8311328Z  91 │ │ ? Effect.fail(new AcpMcpOverAcpError(`Unknown MCP-over-ACP connection "${connectionId}".`)) 2026-10-24T00:19:01.8311448Z  92 │ │ : Effect.succeed(connection); 2026-10-24T00:19:01.8311534Z  93 │ │ }); 2026-10-24T00:19:01.8311607Z  94 │ │ 2026-10-24T00:19:01.8311766Z  95 │ │ const send = ( 2026-10-24T00:19:01.8311918Z  96 │ │ connection: Connection, 2026-10-24T00:19:01.8312021Z  97 │ │ message: unknown, 2026-10-24T00:19:01.8312191Z  98 │ │ ): Effect.Effect, AcpMcpOverAcpError> => 2026-10-24T00:19:01.8312318Z  99 │ │ connection.mutex.withPermits(1)( 2026-10-24T00:19:01.8312436Z 100 │ │ Effect.gen(function* () { 2026-10-24T00:19:01.8312570Z 101 │ │ const body = JSON.stringify(message); 2026-10-24T00:19:01.8312721Z 102 │ │ if (Buffer.byteLength(body) > MAX_MESSAGE_BYTES) { 2026-10-24T00:19:01.8312950Z 103 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("MCP-over-ACP message exceeds 8 MiB.")); 2026-10-24T00:19:01.8313043Z 104 │ │ } 2026-10-24T00:19:01.8313189Z 105 │ │ const response = yield* Effect.tryPromise({ 2026-10-24T00:19:01.8313293Z 106 │ │ try: (signal) => 2026-10-24T00:19:01.8313435Z 107 │ │ fetchImplementation(options.endpoint, { 2026-10-24T00:19:01.8313551Z 108 │ │ method: "POST", 2026-10-24T00:19:01.8313651Z 109 │ │ signal, 2026-10-24T00:19:01.8313756Z 110 │ │ headers: { 2026-10-24T00:19:01.8313940Z 111 │ │ "content-type": "application/json", 2026-10-24T00:19:01.8314101Z 112 │ │ accept: "application/json, text/event-stream", 2026-10-24T00:19:01.8314251Z 113 │ │ authorization: options.authorization, 2026-10-24T00:19:01.8314386Z 114 │ │ ...(connection.sessionId === null 2026-10-24T00:19:01.8314490Z 115 │ │ ? {} 2026-10-24T00:19:01.8314648Z 116 │ │ : { "mcp-session-id": connection.sessionId }), 2026-10-24T00:19:01.8314790Z 117 │ │ ...(connection.protocolVersion === null 2026-10-24T00:19:01.8314890Z 118 │ │ ? {} 2026-10-24T00:19:01.8315072Z 119 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-24T00:19:01.8315169Z 120 │ │ }, 2026-10-24T00:19:01.8315268Z 121 │ │ body, 2026-10-24T00:19:01.8315359Z 122 │ │ }), 2026-10-24T00:19:01.8315477Z 123 │ │ catch: bridgeError, 2026-10-24T00:19:01.8315571Z 124 │ │ }); 2026-10-24T00:19:01.8315799Z 125 │ │ connection.sessionId = response.headers.get("mcp-session-id") ?? connection.sessionId; 2026-10-24T00:19:01.8315909Z 126 │ │ if (!response.ok) { 2026-10-24T00:19:01.8316022Z 127 │ │ yield* Effect.promise( 2026-10-24T00:19:01.8316220Z 128 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-24T00:19:01.8316308Z 129 │ │ ); 2026-10-24T00:19:01.8316429Z 130 │ │ return yield* Effect.fail( 2026-10-24T00:19:01.8316710Z 131 │ │ new AcpMcpOverAcpError(`T3 Code MCP endpoint responded with HTTP ${response.status}.`), 2026-10-24T00:19:01.8316854Z 132 │ │ ); 2026-10-24T00:19:01.8316941Z 133 │ │ } 2026-10-24T00:19:01.8317165Z 134 │ │ const payloads = [...(yield* Stream.runCollect(responsePayloads(response, bridgeError)))]; 2026-10-24T00:19:01.8317291Z 135 │ │ for (const payload of payloads) { 2026-10-24T00:19:01.8317523Z 136 │ │ connection.protocolVersion = protocolVersionOf(payload) ?? connection.protocolVersion; 2026-10-24T00:19:01.8317607Z 137 │ │ } 2026-10-24T00:19:01.8317717Z 138 │ │ return payloads; 2026-10-24T00:19:01.8317846Z 139 │ │ }).pipe(Effect.mapError(bridgeError)), 2026-10-24T00:19:01.8317929Z 140 │ │ ); 2026-10-24T00:19:01.8318011Z 141 │ │ 2026-10-24T00:19:01.8318202Z 142 │ │ const disconnect = Effect.fn("mcpOverAcpBridge.disconnect")(function* ( 2026-10-24T00:19:01.8318334Z 143 │ │ request: AcpSchema.DisconnectMcpRequest, 2026-10-24T00:19:01.8318534Z 144 │ │ ): Effect.fn.Return { 2026-10-24T00:19:01.8318710Z 145 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T00:19:01.8318844Z 146 │ │ connections.delete(request.connectionId); 2026-10-24T00:19:01.8318972Z 147 │ │ const sessionId = connection.sessionId; 2026-10-24T00:19:01.8319087Z 148 │ │ if (sessionId !== null) { 2026-10-24T00:19:01.8319234Z 149 │ │ const response = yield* Effect.tryPromise({ 2026-10-24T00:19:01.8319346Z 150 │ │ try: (signal) => 2026-10-24T00:19:01.8319486Z 151 │ │ fetchImplementation(options.endpoint, { 2026-10-24T00:19:01.8319595Z 152 │ │ method: "DELETE", 2026-10-24T00:19:01.8319693Z 153 │ │ signal, 2026-10-24T00:19:01.8319796Z 154 │ │ headers: { 2026-10-24T00:19:01.8319934Z 155 │ │ authorization: options.authorization, 2026-10-24T00:19:01.8320061Z 156 │ │ "mcp-session-id": sessionId, 2026-10-24T00:19:01.8320205Z 157 │ │ ...(connection.protocolVersion === null 2026-10-24T00:19:01.8320305Z 158 │ │ ? {} 2026-10-24T00:19:01.8320488Z 159 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-24T00:19:01.8320579Z 160 │ │ }, 2026-10-24T00:19:01.8320669Z 161 │ │ }), 2026-10-24T00:19:01.8320780Z 162 │ │ catch: bridgeError, 2026-10-24T00:19:01.8320862Z 163 │ │ }); 2026-10-24T00:19:01.8321007Z 164 │ │ if (!response.ok && response.status !== 404) { 2026-10-24T00:19:01.8321129Z 165 │ │ return yield* Effect.fail( 2026-10-24T00:19:01.8321249Z 166 │ │ new AcpMcpOverAcpError( 2026-10-24T00:19:01.8321448Z 167 │ │ `T3 Code MCP endpoint rejected disconnect with HTTP ${response.status}.`, 2026-10-24T00:19:01.8321533Z 168 │ │ ), 2026-10-24T00:19:01.8321678Z 169 │ │ ); 2026-10-24T00:19:01.8321803Z 170 │ │ } 2026-10-24T00:19:01.8321917Z 171 │ │ yield* Effect.promise( 2026-10-24T00:19:01.8322105Z 172 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-24T00:19:01.8322190Z 173 │ │ ); 2026-10-24T00:19:01.8322273Z 174 │ │ } 2026-10-24T00:19:01.8322365Z 175 │ │ return {}; 2026-10-24T00:19:01.8322441Z 176 │ │ }); 2026-10-24T00:19:01.8322518Z 177 │ │ 2026-10-24T00:19:01.8322603Z 178 │ │ return { 2026-10-24T00:19:01.8322783Z 179 │ │ connect: Effect.fn("mcpOverAcpBridge.connect")(function* (request) { 2026-10-24T00:19:01.8322921Z 180 │ │ if (request.serverId !== "t3-code") { 2026-10-24T00:19:01.8323042Z 181 │ │ return yield* Effect.fail( 2026-10-24T00:19:01.8323243Z 182 │ │ new AcpMcpOverAcpError(`Unknown ACP MCP server "${request.serverId}".`), 2026-10-24T00:19:01.8323328Z 183 │ │ ); 2026-10-24T00:19:01.8323406Z 184 │ │ } 2026-10-24T00:19:01.8323544Z 185 │ │ if (connections.size >= MAX_CONNECTIONS) { 2026-10-24T00:19:01.8323771Z 186 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("Too many MCP-over-ACP connections.")); 2026-10-24T00:19:01.8323854Z 187 │ │ } 2026-10-24T00:19:01.8324043Z 188 │ │ const connectionId = yield* options.allocateConnectionId; 2026-10-24T00:19:01.8324175Z 189 │ │ connections.set(connectionId, { 2026-10-24T00:19:01.8324307Z 190 │ │ mutex: yield* Semaphore.make(1), 2026-10-24T00:19:01.8324414Z 191 │ │ sessionId: null, 2026-10-24T00:19:01.8324525Z 192 │ │ protocolVersion: null, 2026-10-24T00:19:01.8324635Z 193 │ │ nextRequestId: 0, 2026-10-24T00:19:01.8324726Z 194 │ │ }); 2026-10-24T00:19:01.8324841Z 195 │ │ return { connectionId }; 2026-10-24T00:19:01.8324920Z 196 │ │ }), 2026-10-24T00:19:01.8325106Z 197 │ │ message: Effect.fn("mcpOverAcpBridge.message")(function* (request) { 2026-10-24T00:19:01.8325282Z 198 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T00:19:01.8325421Z 199 │ │ const id = ++connection.nextRequestId; 2026-10-24T00:19:01.8325557Z 200 │ │ const payloads = yield* send(connection, { 2026-10-24T00:19:01.8325664Z 201 │ │ jsonrpc: "2.0", 2026-10-24T00:19:01.8325753Z 202 │ │ id, 2026-10-24T00:19:01.8325876Z 203 │ │ method: request.method, 2026-10-24T00:19:01.8326048Z 204 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-24T00:19:01.8326133Z 205 │ │ }); 2026-10-24T00:19:01.8326336Z 206 │ │ const response = payloads.find((payload) => asEnvelope(payload)?.id === id); 2026-10-24T00:19:01.8326467Z 207 │ │ const envelope = asEnvelope(response); 2026-10-24T00:19:01.8326637Z 208 │ │ if (envelope === null) { 2026-10-24T00:19:01.8326798Z 209 │ │ return yield* Effect.fail( 2026-10-24T00:19:01.8327000Z 210 │ │ new AcpMcpOverAcpError("MCP server did not return a matching response."), 2026-10-24T00:19:01.8327086Z 211 │ │ ); 2026-10-24T00:19:01.8327163Z 212 │ │ } 2026-10-24T00:19:01.8327291Z 213 │ │ if (envelope.error !== undefined) { 2026-10-24T00:19:01.8327503Z 214 │ │ return yield* Effect.fail(new AcpMcpOverAcpError(errorMessage(envelope.error))); 2026-10-24T00:19:01.8327586Z 215 │ │ } 2026-10-24T00:19:01.8327766Z 216 │ │ return (envelope.result ?? null) as AcpSchema.MessageMcpResponse; 2026-10-24T00:19:01.8327853Z 217 │ │ }), 2026-10-24T00:19:01.8328063Z 218 │ │ notification: Effect.fn("mcpOverAcpBridge.notification")(function* (request) { 2026-10-24T00:19:01.8328235Z 219 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T00:19:01.8328348Z 220 │ │ yield* send(connection, { 2026-10-24T00:19:01.8328449Z 221 │ │ jsonrpc: "2.0", 2026-10-24T00:19:01.8328559Z 222 │ │ method: request.method, 2026-10-24T00:19:01.8328730Z 223 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-24T00:19:01.8328815Z 224 │ │ }); 2026-10-24T00:19:01.8328892Z 225 │ │ }), 2026-10-24T00:19:01.8328986Z 226 │ │ disconnect, 2026-10-24T00:19:01.8329109Z 227 │ │ dispose: Effect.suspend(() => 2026-10-24T00:19:01.8329216Z 228 │ │ Effect.forEach( 2026-10-24T00:19:01.8329327Z 229 │ │ [...connections.keys()], 2026-10-24T00:19:01.8329509Z 230 │ │ (connectionId) => disconnect({ connectionId }).pipe(Effect.ignore), 2026-10-24T00:19:01.8329618Z 231 │ │ { discard: true }, 2026-10-24T00:19:01.8329703Z 232 │ │ ), 2026-10-24T00:19:01.8329782Z 233 │ │ ), 2026-10-24T00:19:01.8329865Z 234 │ │ }; 2026-10-24T00:19:01.8330005Z 235 │ ╰─▶ }); 2026-10-24T00:19:01.8330066Z ╰──── 2026-10-24T00:19:01.8330395Z  help: Add a `yield` expression inside the generator body, or convert it to a regular function if iteration behavior is not needed. 2026-10-24T00:19:01.8330446Z 2026-10-24T00:19:01.8330728Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T00:19:01.8330878Z ╭─[apps/mobile/src/components/ProjectFavicon.tsx:159:5] 2026-10-24T00:19:01.8331079Z 154 │ const [activeFaviconRequest, setActiveFaviconRequest] = useState(null); 2026-10-24T00:19:01.8331153Z 155 │ useLayoutEffect(() => { 2026-10-24T00:19:01.8331241Z ·  ───────┬─────── 2026-10-24T00:19:01.8331388Z · ╰── This is the containing effect 2026-10-24T00:19:01.8331484Z 156 │ if (faviconRequest === null) return; 2026-10-24T00:19:01.8331601Z 157 │ 2026-10-24T00:19:01.8331752Z 158 │ const endRequest = beginProjectFaviconRequest(faviconRequest); 2026-10-24T00:19:01.8331867Z 159 │ setActiveFaviconRequest(faviconRequest); 2026-10-24T00:19:01.8331972Z ·  ───────────┬─────────── 2026-10-24T00:19:01.8332156Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T00:19:01.8332230Z 160 │ return endRequest; 2026-10-24T00:19:01.8332292Z ╰──── 2026-10-24T00:19:01.8332932Z  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-24T00:19:01.8333286Z  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-24T00:19:01.8333292Z 2026-10-24T00:19:01.8333566Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T00:19:01.8333730Z ╭─[apps/mobile/src/components/VideoPreviewModal.ios.tsx:63:55] 2026-10-24T00:19:01.8333794Z 61 │ }, []); 2026-10-24T00:19:01.8333867Z 62 │ useEffect(() => { 2026-10-24T00:19:01.8333982Z ·  ────┬──── 2026-10-24T00:19:01.8334124Z · ╰── This is the containing effect 2026-10-24T00:19:01.8334289Z 63 │ if (playbackUrl === null && resolvedUrl !== null) setPlaybackUrl(resolvedUrl); 2026-10-24T00:19:01.8334424Z ·  ───────┬────── 2026-10-24T00:19:01.8334648Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T00:19:01.8334738Z 64 │ }, [playbackUrl, resolvedUrl]); 2026-10-24T00:19:01.8334795Z ╰──── 2026-10-24T00:19:01.8335434Z  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-24T00:19:01.8335784Z  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-24T00:19:01.8335787Z 2026-10-24T00:19:01.8336003Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T00:19:01.8336243Z ╭─[apps/mobile/src/components/ComposerEditor.tsx:82:6] 2026-10-24T00:19:01.8336351Z 81 │ }, 2026-10-24T00:19:01.8336419Z 82 │ [draftKey], 2026-10-24T00:19:01.8336494Z ·  ────┬─── 2026-10-24T00:19:01.8336644Z · ╰── Unnecessary dependency `draftKey` 2026-10-24T00:19:01.8336706Z 83 │ ); 2026-10-24T00:19:01.8336763Z ╰──── 2026-10-24T00:19:01.8337074Z  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-24T00:19:01.8337410Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8337413Z 2026-10-24T00:19:01.8337646Z ⚠ eslint(no-unused-vars): Function 'summarizePayload' is declared but never used. 2026-10-24T00:19:01.8337799Z ╭─[packages/provider-acp/src/server/nativeLogging.ts:22:10] 2026-10-24T00:19:01.8337855Z 21 │ 2026-10-24T00:19:01.8338028Z 22 │ function summarizePayload(payload: unknown): Readonly> { 2026-10-24T00:19:01.8338123Z ·  ────────┬─────── 2026-10-24T00:19:01.8338285Z · ╰── 'summarizePayload' is declared here 2026-10-24T00:19:01.8338399Z 23 │ if (payload === null) return { valueType: "null" }; 2026-10-24T00:19:01.8338452Z ╰──── 2026-10-24T00:19:01.8338566Z  help: Consider removing this declaration. 2026-10-24T00:19:01.8338569Z 2026-10-24T00:19:01.8338782Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T00:19:01.8338950Z ╭─[apps/mobile/src/components/ComposerContextSheet.tsx:267:25] 2026-10-24T00:19:01.8339068Z 266 │ {record.elements?.map((element, index) => ( 2026-10-24T00:19:01.8339248Z 267 │ 2026-10-24T00:19:01.8339418Z ·  ─────────────────────────────────────────────────────── 2026-10-24T00:19:01.8339503Z 268 │ { 2026-10-24T00:19:01.8351904Z ╰──── 2026-10-24T00:19:01.8352206Z  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-24T00:19:01.8352604Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T00:19:01.8352645Z 2026-10-24T00:19:01.8352910Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T00:19:01.8353078Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:290:50] 2026-10-24T00:19:01.8353145Z 289 │ return ( 2026-10-24T00:19:01.8353287Z 290 │ 2026-10-24T00:19:01.8353417Z ·  ───────────── 2026-10-24T00:19:01.8353493Z 291 │ {props.children} 2026-10-24T00:19:01.8353547Z ╰──── 2026-10-24T00:19:01.8353784Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T00:19:01.8353968Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T00:19:01.8353973Z 2026-10-24T00:19:01.8354230Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T00:19:01.8354398Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:654:44] 2026-10-24T00:19:01.8354460Z 653 │ return ( 2026-10-24T00:19:01.8354588Z 654 │ 2026-10-24T00:19:01.8354715Z ·  ───────────── 2026-10-24T00:19:01.8354792Z 655 │ {props.children} 2026-10-24T00:19:01.8354845Z ╰──── 2026-10-24T00:19:01.8355078Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T00:19:01.8355228Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T00:19:01.8355233Z 2026-10-24T00:19:01.8355484Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T00:19:01.8355652Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:1462:55] 2026-10-24T00:19:01.8355720Z 1461 │ return ( 2026-10-24T00:19:01.8355892Z 1462 │ 2026-10-24T00:19:01.8356035Z ·  ──────────────────── 2026-10-24T00:19:01.8356140Z 1463 │ 2026-10-24T00:19:01.8358315Z 152 │ {props.children(open)} 2026-10-24T00:19:01.8358413Z ·  ──┬─ 2026-10-24T00:19:01.8358585Z · ╰── Cannot access ref value during render 2026-10-24T00:19:01.8358659Z 153 │ 2026-10-24T00:19:01.8358716Z ╰──── 2026-10-24T00:19:01.8359219Z  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-24T00:19:01.8359529Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T00:19:01.8359536Z 2026-10-24T00:19:01.8359744Z ⚠ react(memo-dependencies): Found missing/extra memoization dependencies 2026-10-24T00:19:01.8359908Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:140:9] 2026-10-24T00:19:01.8359999Z 139 │ if (action.id !== undefined) { 2026-10-24T00:19:01.8360085Z 140 │ props.onPressAction?.({ 2026-10-24T00:19:01.8360160Z ·  ──┬── 2026-10-24T00:19:01.8360302Z · ╰── Missing dependency `props` 2026-10-24T00:19:01.8360403Z 141 │ nativeEvent: { event: action.id }, 2026-10-24T00:19:01.8360567Z 142 │ } as Parameters>[0]); 2026-10-24T00:19:01.8360632Z 143 │ } 2026-10-24T00:19:01.8360694Z 144 │ }, 2026-10-24T00:19:01.8360783Z 145 │ [close, props.onPressAction], 2026-10-24T00:19:01.8360887Z ·  ─────────┬───────── 2026-10-24T00:19:01.8361118Z · ╰── Overly precise dependency `props.onPressAction`, use `props` instead 2026-10-24T00:19:01.8361181Z 146 │ ); 2026-10-24T00:19:01.8361237Z ╰──── 2026-10-24T00:19:01.8361757Z  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-24T00:19:01.8362152Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8362196Z 2026-10-24T00:19:01.8362379Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T00:19:01.8362553Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:697:76] 2026-10-24T00:19:01.8362748Z 696 │ const [snoozeGateClock, setSnoozeGateClock] = useState(() => ({ thread, now: Date.now() })); 2026-10-24T00:19:01.8362930Z 697 │ if (snoozeGateClock.thread !== thread) setSnoozeGateClock({ thread, now: Date.now() }); 2026-10-24T00:19:01.8363075Z ·  ─────┬──── 2026-10-24T00:19:01.8363278Z · ╰── Cannot call impure function 2026-10-24T00:19:01.8363427Z 698 │ const snoozeGateNow = new Date(snoozeGateClock.now).toISOString(); 2026-10-24T00:19:01.8363485Z ╰──── 2026-10-24T00:19:01.8363788Z  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-24T00:19:01.8364291Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T00:19:01.8364293Z 2026-10-24T00:19:01.8364479Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T00:19:01.8364650Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:718:71] 2026-10-24T00:19:01.8364734Z 717 │ const snoozePresets = useMemo( 2026-10-24T00:19:01.8364930Z 718 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-24T00:19:01.8365076Z ·  ─────┬──── 2026-10-24T00:19:01.8365270Z · ╰── Cannot call impure function 2026-10-24T00:19:01.8365398Z 719 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-24T00:19:01.8365454Z ╰──── 2026-10-24T00:19:01.8365752Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T00:19:01.8366068Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T00:19:01.8366071Z 2026-10-24T00:19:01.8366274Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T00:19:01.8366442Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:719:6] 2026-10-24T00:19:01.8366631Z 718 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-24T00:19:01.8366759Z 719 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-24T00:19:01.8366861Z ·  ────────────┬─────────── 2026-10-24T00:19:01.8367052Z · ╰── Unnecessary dependency `props.snoozePresetMinute` 2026-10-24T00:19:01.8367111Z 720 │ ); 2026-10-24T00:19:01.8367168Z ╰──── 2026-10-24T00:19:01.8367566Z  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-24T00:19:01.8367943Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8367946Z 2026-10-24T00:19:01.8368137Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T00:19:01.8368303Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:765:7] 2026-10-24T00:19:01.8368378Z 764 │ thread.pinnedAt, 2026-10-24T00:19:01.8368447Z 765 │ variant, 2026-10-24T00:19:01.8368523Z ·  ───┬─── 2026-10-24T00:19:01.8368670Z · ╰── Unnecessary dependency `variant` 2026-10-24T00:19:01.8368732Z 766 │ ], 2026-10-24T00:19:01.8368790Z ╰──── 2026-10-24T00:19:01.8369127Z  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-24T00:19:01.8369461Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8369464Z 2026-10-24T00:19:01.8369676Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T00:19:01.8369848Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:1215:21] 2026-10-24T00:19:01.8369995Z 1214 │ {providerDrivers.slice(0, -1).map((driver, index) => ( 2026-10-24T00:19:01.8370138Z 1215 │ 2026-10-24T00:19:01.8370265Z ·  ────────────────────────── 2026-10-24T00:19:01.8370390Z 1216 │ 2026-10-24T00:19:01.8370451Z ╰──── 2026-10-24T00:19:01.8370606Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T00:19:01.8370608Z 2026-10-24T00:19:01.8370851Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T00:19:01.8371000Z ╭─[apps/web/src/lib/composerContextReferences.ts:90:40] 2026-10-24T00:19:01.8371081Z 89 │ let cursor = prompt.length; 2026-10-24T00:19:01.8371196Z 90 │ for (const occurrence of occurrences.reverse()) { 2026-10-24T00:19:01.8415781Z ·  ─────── 2026-10-24T00:19:01.8416042Z 91 │ let { start, end } = occurrence; 2026-10-24T00:19:01.8416096Z ╰──── 2026-10-24T00:19:01.8416399Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T00:19:01.8416412Z 2026-10-24T00:19:01.8416590Z ⚠ react(refs): Cannot access refs during render 2026-10-24T00:19:01.8416756Z ╭─[apps/mobile/src/features/home/thread-swipe-actions.tsx:494:27] 2026-10-24T00:19:01.8416818Z 493 │ > 2026-10-24T00:19:01.8416905Z 494 │ {props.children(close)} 2026-10-24T00:19:01.8417002Z ·  ──┬── 2026-10-24T00:19:01.8417168Z · ╰── Cannot access ref value during render 2026-10-24T00:19:01.8417246Z 495 │ 2026-10-24T00:19:01.8417326Z ╰──── 2026-10-24T00:19:01.8418026Z  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-24T00:19:01.8418408Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T00:19:01.8418411Z 2026-10-24T00:19:01.8418676Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T00:19:01.8418807Z ╭─[apps/mobile/src/state/use-vcs-action-state.ts:86:5] 2026-10-24T00:19:01.8418920Z 83 │ const [nowMs, setNowMs] = useState(() => Date.now()); 2026-10-24T00:19:01.8418989Z 84 │ useEffect(() => { 2026-10-24T00:19:01.8419065Z ·  ────┬──── 2026-10-24T00:19:01.8419204Z · ╰── This is the containing effect 2026-10-24T00:19:01.8419299Z 85 │ if (!actionState.isRunning) return; 2026-10-24T00:19:01.8419370Z 86 │ setNowMs(Date.now()); 2026-10-24T00:19:01.8419443Z ·  ────┬─── 2026-10-24T00:19:01.8419609Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T00:19:01.8419738Z 87 │ const interval = setInterval(() => setNowMs(Date.now()), 1000); 2026-10-24T00:19:01.8419791Z ╰──── 2026-10-24T00:19:01.8420391Z  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-24T00:19:01.8420722Z  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-24T00:19:01.8420727Z 2026-10-24T00:19:01.8420896Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T00:19:01.8421023Z ╭─[apps/server/src/processRunner.test.ts:266:14] 2026-10-24T00:19:01.8421078Z 265 │ 2026-10-24T00:19:01.8421186Z 266 │ for (const {} of ["timeout", "success"] as const) { 2026-10-24T00:19:01.8421258Z ·  ── 2026-10-24T00:19:01.8421314Z 267 │ } 2026-10-24T00:19:01.8421368Z ╰──── 2026-10-24T00:19:01.8421599Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T00:19:01.8421602Z 2026-10-24T00:19:01.8421809Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T00:19:01.8421957Z ╭─[apps/mobile/src/state/use-thread-outbox-drain.ts:1315:5] 2026-10-24T00:19:01.8422041Z 1314 │ queuedMessagesByThreadKey, 2026-10-24T00:19:01.8422107Z 1315 │ retryTick, 2026-10-24T00:19:01.8422180Z ·  ────┬──── 2026-10-24T00:19:01.8422325Z · ╰── Unnecessary dependency `retryTick` 2026-10-24T00:19:01.8422401Z 1316 │ restoreQueuedMessage, 2026-10-24T00:19:01.8422455Z ╰──── 2026-10-24T00:19:01.8422747Z  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-24T00:19:01.8423118Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8423159Z 2026-10-24T00:19:01.8423387Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-24T00:19:01.8423533Z ╭─[packages/client-runtime/src/operations/projects.ts:228:51] 2026-10-24T00:19:01.8423597Z 227 │ ): string { 2026-10-24T00:19:01.8423750Z 228 │ const folderName = workspaceRoot.split(/[\\/]/).filter(Boolean).at(-1) ?? ""; 2026-10-24T00:19:01.8423865Z ·  ────── 2026-10-24T00:19:01.8424024Z 229 │ return target.owner ? `${target.owner}/${folderName}` : folderName; 2026-10-24T00:19:01.8424077Z ╰──── 2026-10-24T00:19:01.8424255Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T00:19:01.8424258Z 2026-10-24T00:19:01.8424524Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T00:19:01.8424706Z ╭─[apps/mobile/src/features/threads/thread-inspector-content-stack.tsx:60:5] 2026-10-24T00:19:01.8424760Z 58 │ 2026-10-24T00:19:01.8424824Z 59 │ useEffect(() => { 2026-10-24T00:19:01.8424897Z ·  ────┬──── 2026-10-24T00:19:01.8425027Z · ╰── This is the containing effect 2026-10-24T00:19:01.8425110Z 60 │ setMountedModes((current) => { 2026-10-24T00:19:01.8425189Z ·  ───────┬─────── 2026-10-24T00:19:01.8425359Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T00:19:01.8425443Z 61 │ if (current.has(props.mode)) { 2026-10-24T00:19:01.8425496Z ╰──── 2026-10-24T00:19:01.8426099Z  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-24T00:19:01.8426422Z  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-24T00:19:01.8426425Z 2026-10-24T00:19:01.8426630Z ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed 2026-10-24T00:19:01.8426740Z ╭─[packages/contracts/src/rpc.ts:297:8] 2026-10-24T00:19:01.8426808Z 296 │ } from "./device.ts"; 2026-10-24T00:19:01.8426899Z 297 │ import {} from "./previewAutomation.ts"; 2026-10-24T00:19:01.8426975Z ·  ── 2026-10-24T00:19:01.8427039Z 298 │ import { 2026-10-24T00:19:01.8427092Z ╰──── 2026-10-24T00:19:01.8427172Z  help: Remove empty braces 2026-10-24T00:19:01.8427175Z 2026-10-24T00:19:01.8427383Z ⚠ eslint(no-unused-vars): Function 'nonEmptyString' is declared but never used. 2026-10-24T00:19:01.8427531Z ╭─[packages/client-runtime/src/work-log/presentation.ts:234:10] 2026-10-24T00:19:01.8427587Z 233 │ 2026-10-24T00:19:01.8427703Z 234 │ function nonEmptyString(value: unknown): string | null { 2026-10-24T00:19:01.8427791Z ·  ───────┬────── 2026-10-24T00:19:01.8427939Z · ╰── 'nonEmptyString' is declared here 2026-10-24T00:19:01.8428080Z 235 │ return typeof value === "string" && value.trim().length > 0 ? value : null; 2026-10-24T00:19:01.8428188Z ╰──── 2026-10-24T00:19:01.8428332Z  help: Consider removing this declaration. 2026-10-24T00:19:01.8428334Z 2026-10-24T00:19:01.8428491Z ⚠ react(immutability): This value cannot be modified 2026-10-24T00:19:01.8428649Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-24T00:19:01.8428701Z  86 │ 2026-10-24T00:19:01.8428798Z  87 │ const cardCoverage = props.cardCoverage; 2026-10-24T00:19:01.8428880Z ·  ──────┬───── 2026-10-24T00:19:01.8429025Z · ╰── `cardCoverage` originates here 2026-10-24T00:19:01.8429104Z  88 │ const barHeightRef = useRef(0); 2026-10-24T00:19:01.8429187Z  89 │ const cardHeightRef = useRef(0); 2026-10-24T00:19:01.8429274Z  90 │ const cardHeight = useSharedValue(0); 2026-10-24T00:19:01.8429374Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-24T00:19:01.8429442Z  92 │ if (!cardCoverage) { 2026-10-24T00:19:01.8429507Z  93 │ return; 2026-10-24T00:19:01.8429563Z  94 │ } 2026-10-24T00:19:01.8429718Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T00:19:01.8429803Z  96 │ if (coverage === cardCoverage.value) { 2026-10-24T00:19:01.8429864Z  97 │ return; 2026-10-24T00:19:01.8429919Z  98 │ } 2026-10-24T00:19:01.8429997Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T00:19:01.8430080Z 100 │ cardCoverage.value = coverage; 2026-10-24T00:19:01.8430161Z ·  ──────┬───── 2026-10-24T00:19:01.8430306Z · ╰── `cardCoverage` cannot be modified 2026-10-24T00:19:01.8430364Z 101 │ return; 2026-10-24T00:19:01.8430418Z ╰──── 2026-10-24T00:19:01.8430722Z  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-24T00:19:01.8431029Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T00:19:01.8431031Z 2026-10-24T00:19:01.8431189Z ⚠ react(immutability): This value cannot be modified 2026-10-24T00:19:01.8431344Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7] 2026-10-24T00:19:01.8431425Z  89 │ const cardHeightRef = useRef(0); 2026-10-24T00:19:01.8431511Z  90 │ const cardHeight = useSharedValue(0); 2026-10-24T00:19:01.8431590Z ·  ─────┬──── 2026-10-24T00:19:01.8431774Z · ╰── `cardHeight` originates here 2026-10-24T00:19:01.8431908Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-24T00:19:01.8431977Z  92 │ if (!cardCoverage) { 2026-10-24T00:19:01.8432038Z  93 │ return; 2026-10-24T00:19:01.8432090Z  94 │ } 2026-10-24T00:19:01.8432237Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T00:19:01.8432327Z  96 │ if (coverage === cardCoverage.value) { 2026-10-24T00:19:01.8432387Z  97 │ return; 2026-10-24T00:19:01.8432440Z  98 │ } 2026-10-24T00:19:01.8432523Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T00:19:01.8432606Z 100 │ cardCoverage.value = coverage; 2026-10-24T00:19:01.8432662Z 101 │ return; 2026-10-24T00:19:01.8432719Z 102 │ } 2026-10-24T00:19:01.8432820Z 103 │ cardCoverage.value = withTiming(coverage, { 2026-10-24T00:19:01.8432921Z 104 │ duration: USER_INPUT_TOGGLE_DURATION_MS, 2026-10-24T00:19:01.8433005Z 105 │ easing: Easing.out(Easing.cubic), 2026-10-24T00:19:01.8433064Z 106 │ }); 2026-10-24T00:19:01.8433131Z 107 │ }, [cardCoverage]); 2026-10-24T00:19:01.8433215Z 108 │ const handleBarLayout = useCallback( 2026-10-24T00:19:01.8433294Z 109 │ (event: LayoutChangeEvent) => { 2026-10-24T00:19:01.8433423Z 110 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T00:19:01.8433493Z 111 │ notifyCoverage(); 2026-10-24T00:19:01.8433550Z 112 │ }, 2026-10-24T00:19:01.8433614Z 113 │ [notifyCoverage], 2026-10-24T00:19:01.8433670Z 114 │ ); 2026-10-24T00:19:01.8433756Z 115 │ const handleCardLayout = useCallback( 2026-10-24T00:19:01.8433835Z 116 │ (event: LayoutChangeEvent) => { 2026-10-24T00:19:01.8433989Z 117 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T00:19:01.8434106Z 118 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-24T00:19:01.8434183Z ·  ─────┬──── 2026-10-24T00:19:01.8434324Z · ╰── `cardHeight` cannot be modified 2026-10-24T00:19:01.8434390Z 119 │ notifyCoverage(); 2026-10-24T00:19:01.8434444Z ╰──── 2026-10-24T00:19:01.8434710Z  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-24T00:19:01.8435013Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T00:19:01.8435016Z 2026-10-24T00:19:01.8435215Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T00:19:01.8435378Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-24T00:19:01.8435468Z  90 │ const cardHeight = useSharedValue(0); 2026-10-24T00:19:01.8435561Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-24T00:19:01.8435665Z ·  ───┬─── 2026-10-24T00:19:01.8435909Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-24T00:19:01.8435980Z  92 │ if (!cardCoverage) { 2026-10-24T00:19:01.8436040Z  93 │ return; 2026-10-24T00:19:01.8436094Z  94 │ } 2026-10-24T00:19:01.8436246Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T00:19:01.8436337Z  96 │ if (coverage === cardCoverage.value) { 2026-10-24T00:19:01.8436454Z  97 │ return; 2026-10-24T00:19:01.8436543Z  98 │ } 2026-10-24T00:19:01.8436625Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T00:19:01.8436707Z 100 │ cardCoverage.value = coverage; 2026-10-24T00:19:01.8436788Z ·  ──────┬───── 2026-10-24T00:19:01.8436920Z · ╰── This modifies `cardCoverage` 2026-10-24T00:19:01.8436981Z 101 │ return; 2026-10-24T00:19:01.8437035Z ╰──── 2026-10-24T00:19:01.8437376Z  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-24T00:19:01.8437678Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T00:19:01.8437680Z 2026-10-24T00:19:01.8437883Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T00:19:01.8438041Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-24T00:19:01.8438124Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T00:19:01.8438207Z 100 │ cardCoverage.value = coverage; 2026-10-24T00:19:01.8438287Z ·  ──────┬───── 2026-10-24T00:19:01.8438419Z · ╰── This modifies `cardCoverage` 2026-10-24T00:19:01.8438479Z 101 │ return; 2026-10-24T00:19:01.8438531Z 102 │ } 2026-10-24T00:19:01.8438632Z 103 │ cardCoverage.value = withTiming(coverage, { 2026-10-24T00:19:01.8438730Z 104 │ duration: USER_INPUT_TOGGLE_DURATION_MS, 2026-10-24T00:19:01.8438816Z 105 │ easing: Easing.out(Easing.cubic), 2026-10-24T00:19:01.8438876Z 106 │ }); 2026-10-24T00:19:01.8438946Z 107 │ }, [cardCoverage]); 2026-10-24T00:19:01.8439031Z 108 │ const handleBarLayout = useCallback( 2026-10-24T00:19:01.8439111Z 109 │ (event: LayoutChangeEvent) => { 2026-10-24T00:19:01.8439217Z ·  ───────────────┬─────────────── 2026-10-24T00:19:01.8439443Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-24T00:19:01.8439567Z 110 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T00:19:01.8439620Z ╰──── 2026-10-24T00:19:01.8439955Z  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-24T00:19:01.8440265Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T00:19:01.8440270Z 2026-10-24T00:19:01.8440470Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T00:19:01.8440627Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7] 2026-10-24T00:19:01.8440717Z 115 │ const handleCardLayout = useCallback( 2026-10-24T00:19:01.8440796Z 116 │ (event: LayoutChangeEvent) => { 2026-10-24T00:19:01.8440902Z ·  ───────────────┬─────────────── 2026-10-24T00:19:01.8441122Z · ╰── This function may (indirectly) reassign or modify `cardHeight` after render 2026-10-24T00:19:01.8441249Z 117 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T00:19:01.8441433Z 118 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-24T00:19:01.8441555Z ·  ─────┬──── 2026-10-24T00:19:01.8441690Z · ╰── This modifies `cardHeight` 2026-10-24T00:19:01.8441761Z 119 │ notifyCoverage(); 2026-10-24T00:19:01.8441811Z ╰──── 2026-10-24T00:19:01.8442151Z  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-24T00:19:01.8442455Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T00:19:01.8442457Z 2026-10-24T00:19:01.8442704Z ⚠ eslint(no-unused-vars): Function 'normalizeTerminalContextSelection' is declared but never used. 2026-10-24T00:19:01.8442825Z ╭─[apps/web/src/lib/terminalContext.ts:56:10] 2026-10-24T00:19:01.8442883Z 55 │ 2026-10-24T00:19:01.8442983Z 56 │ function normalizeTerminalContextSelection( 2026-10-24T00:19:01.8443097Z ·  ────────────────┬──────────────── 2026-10-24T00:19:01.8443289Z · ╰── 'normalizeTerminalContextSelection' is declared here 2026-10-24T00:19:01.8443375Z 57 │ selection: TerminalContextSelection, 2026-10-24T00:19:01.8443431Z ╰──── 2026-10-24T00:19:01.8443539Z  help: Consider removing this declaration. 2026-10-24T00:19:01.8443542Z 2026-10-24T00:19:01.8443760Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T00:19:01.8443940Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:773:7] 2026-10-24T00:19:01.8444061Z 772 │ if (settingsSheetPresentation.isActive) { 2026-10-24T00:19:01.8444193Z 773 │ settingsRoutePresentation.present(settingsRouteSession); 2026-10-24T00:19:01.8444291Z ·  ────────────┬──────────── 2026-10-24T00:19:01.8444462Z · ╰── Missing dependency `settingsRoutePresentation` 2026-10-24T00:19:01.8444520Z 774 │ } 2026-10-24T00:19:01.8444726Z 775 │ }, [settingsRoutePresentation.present, settingsRouteSession, settingsSheetPresentation.isActive]); 2026-10-24T00:19:01.8444837Z ·  ────────────────┬──────────────── 2026-10-24T00:19:01.8445120Z · ╰── Overly precise dependency `settingsRoutePresentation.present`, use `settingsRoutePresentation` instead 2026-10-24T00:19:01.8445175Z 776 │ 2026-10-24T00:19:01.8445230Z ╰──── 2026-10-24T00:19:01.8445659Z  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-24T00:19:01.8445971Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8445978Z 2026-10-24T00:19:01.8446135Z ⚠ react(immutability): This value cannot be modified 2026-10-24T00:19:01.8446280Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:391:5] 2026-10-24T00:19:01.8446441Z 387 │ typeof props.style.borderRadius === "number" ? props.style.borderRadius : 0; 2026-10-24T00:19:01.8446578Z 388 │ const animatedBorderRadius = useSharedValue(targetBorderRadius); 2026-10-24T00:19:01.8446720Z ·  ──────────┬───────── 2026-10-24T00:19:01.8446913Z · ╰── `animatedBorderRadius` originates here 2026-10-24T00:19:01.8447073Z 389 │ const shouldAnimate = props.animateLayout !== false && Platform.OS !== "android"; 2026-10-24T00:19:01.8447146Z 390 │ useLayoutEffect(() => { 2026-10-24T00:19:01.8447246Z 391 │ animatedBorderRadius.value = shouldAnimate 2026-10-24T00:19:01.8447337Z ·  ──────────┬───────── 2026-10-24T00:19:01.8447496Z · ╰── `animatedBorderRadius` cannot be modified 2026-10-24T00:19:01.8447587Z 392 │ ? withTiming(targetBorderRadius, { 2026-10-24T00:19:01.8447637Z ╰──── 2026-10-24T00:19:01.8447911Z  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-24T00:19:01.8448223Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T00:19:01.8448226Z 2026-10-24T00:19:01.8448701Z ⚠ 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-24T00:19:01.8448840Z ╭─[packages/client-runtime/src/rpc/client.test.ts:131:9] 2026-10-24T00:19:01.8448900Z 130 │ ) { 2026-10-24T00:19:01.8449114Z 131 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T00:19:01.8449251Z 132 │ │ if (subscriptions.length >= count) { 2026-10-24T00:19:01.8449348Z 133 │ │ return; 2026-10-24T00:19:01.8449428Z 134 │ │ } 2026-10-24T00:19:01.8449539Z 135 │ │ yield* Effect.yieldNow; 2026-10-24T00:19:01.8449678Z 136 │ ╰─▶ } 2026-10-24T00:19:01.8449848Z 137 │ return yield* Effect.die(new Error(`Expected ${count} durable subscriptions.`)); 2026-10-24T00:19:01.8449900Z ╰──── 2026-10-24T00:19:01.8449903Z 2026-10-24T00:19:01.8450386Z ⚠ 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-24T00:19:01.8450583Z ╭─[packages/client-runtime/src/rpc/client.test.ts:252:7] 2026-10-24T00:19:01.8450787Z 251 │ yield* SubscriptionRef.set(activeSession, Option.some(session(firstClient))); 2026-10-24T00:19:01.8451053Z 252 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 1; attempt += 1) { 2026-10-24T00:19:01.8451165Z 253 │ │ yield* Effect.yieldNow; 2026-10-24T00:19:01.8451305Z 254 │ ╰─▶ } 2026-10-24T00:19:01.8451437Z 255 │ yield* SubscriptionRef.set(activeSession, Option.none()); 2026-10-24T00:19:01.8451581Z ╰──── 2026-10-24T00:19:01.8451584Z 2026-10-24T00:19:01.8452063Z ⚠ 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-24T00:19:01.8452204Z ╭─[packages/client-runtime/src/rpc/client.test.ts:258:7] 2026-10-24T00:19:01.8452267Z 257 │ 2026-10-24T00:19:01.8452526Z 258 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-24T00:19:01.8452635Z 259 │ │ yield* Effect.yieldNow; 2026-10-24T00:19:01.8452772Z 260 │ ╰─▶ } 2026-10-24T00:19:01.8452884Z 261 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-24T00:19:01.8452939Z ╰──── 2026-10-24T00:19:01.8452941Z 2026-10-24T00:19:01.8453420Z ⚠ 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-24T00:19:01.8453557Z ╭─[packages/client-runtime/src/rpc/client.test.ts:322:7] 2026-10-24T00:19:01.8453625Z 321 │ ); 2026-10-24T00:19:01.8453890Z 322 │ ╭─▶ for (let attempt = 0; attempt < 100 && observedFailures.length < 1; attempt += 1) { 2026-10-24T00:19:01.8454043Z 323 │ │ yield* Effect.yieldNow; 2026-10-24T00:19:01.8454177Z 324 │ ╰─▶ } 2026-10-24T00:19:01.8454242Z 325 │ 2026-10-24T00:19:01.8454299Z ╰──── 2026-10-24T00:19:01.8454301Z 2026-10-24T00:19:01.8454775Z ⚠ 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-24T00:19:01.8454914Z ╭─[packages/client-runtime/src/rpc/client.test.ts:330:7] 2026-10-24T00:19:01.8455081Z 329 │ yield* SubscriptionRef.set(activeSession, Option.some(session(secondClient))); 2026-10-24T00:19:01.8455339Z 330 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-24T00:19:01.8455447Z 331 │ │ yield* Effect.yieldNow; 2026-10-24T00:19:01.8455587Z 332 │ ╰─▶ } 2026-10-24T00:19:01.8455692Z 333 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-24T00:19:01.8455747Z ╰──── 2026-10-24T00:19:01.8455749Z 2026-10-24T00:19:01.8456218Z ⚠ 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-24T00:19:01.8456387Z ╭─[packages/contracts/src/auth.test.ts:17:12] 2026-10-24T00:19:01.8456547Z 16 │ it("decodes legacy review credentials without offering them in new grants", () => { 2026-10-24T00:19:01.8456727Z 17 │ expect(Schema.decodeUnknownSync(AuthEnvironmentScopes)(["review:write"])).toEqual([ 2026-10-24T00:19:01.8456838Z ·  ──────────────────────── 2026-10-24T00:19:01.8456909Z 18 │ "review:write", 2026-10-24T00:19:01.8456960Z ╰──── 2026-10-24T00:19:01.8456966Z 2026-10-24T00:19:01.8457336Z ⚠ 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-24T00:19:01.8457459Z ╭─[packages/contracts/src/auth.test.ts:20:18] 2026-10-24T00:19:01.8457523Z 19 │ ]); 2026-10-24T00:19:01.8457693Z 20 │ expect(() => Schema.decodeUnknownSync(AuthGrantScopes)(["review:write"])).toThrow(); 2026-10-24T00:19:01.8457805Z ·  ──────────────────────── 2026-10-24T00:19:01.8457941Z 21 │ expect(AuthStandardClientScopes).not.toContain("review:write"); 2026-10-24T00:19:01.8458000Z ╰──── 2026-10-24T00:19:01.8458002Z 2026-10-24T00:19:01.8458374Z ⚠ 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-24T00:19:01.8458488Z ╭─[packages/contracts/src/auth.test.ts:58:21] 2026-10-24T00:19:01.8458670Z 57 │ it("ignores unknown response permissions without falling back to broader scopes", () => { 2026-10-24T00:19:01.8458804Z 58 │ const session = Schema.decodeUnknownSync(AuthSessionState)({ 2026-10-24T00:19:01.8458915Z ·  ──────────────────────── 2026-10-24T00:19:01.8458985Z 59 │ authenticated: true, 2026-10-24T00:19:01.8459041Z ╰──── 2026-10-24T00:19:01.8459043Z 2026-10-24T00:19:01.8459523Z ⚠ 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-24T00:19:01.8459672Z ╭─[packages/client-runtime/src/rpc/session.test.ts:226:3] 2026-10-24T00:19:01.8459734Z 225 │ ) { 2026-10-24T00:19:01.8459949Z 226 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T00:19:01.8460075Z 227 │ │ const socket = sockets[index]; 2026-10-24T00:19:01.8460175Z 228 │ │ if (socket) { 2026-10-24T00:19:01.8460275Z 229 │ │ return socket; 2026-10-24T00:19:01.8460353Z 230 │ │ } 2026-10-24T00:19:01.8460463Z 231 │ │ yield* Effect.yieldNow; 2026-10-24T00:19:01.8460599Z 232 │ ╰─▶ } 2026-10-24T00:19:01.8460785Z 233 │ return yield* Effect.die(new Error("Expected the RPC protocol to create a websocket.")); 2026-10-24T00:19:01.8460839Z ╰──── 2026-10-24T00:19:01.8460841Z 2026-10-24T00:19:01.8461379Z ⚠ 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-24T00:19:01.8461556Z ╭─[packages/client-runtime/src/rpc/session.test.ts:240:3] 2026-10-24T00:19:01.8461616Z 239 │ ) { 2026-10-24T00:19:01.8461827Z 240 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T00:19:01.8462057Z 241 │ │ const request = socket.sent.map((message) => decodeJson(message)).filter(isRpcRequest)[index]; 2026-10-24T00:19:01.8462155Z 242 │ │ if (request) { 2026-10-24T00:19:01.8462257Z 243 │ │ return request; 2026-10-24T00:19:01.8462340Z 244 │ │ } 2026-10-24T00:19:01.8462447Z 245 │ │ yield* Effect.yieldNow; 2026-10-24T00:19:01.8462586Z 246 │ ╰─▶ } 2026-10-24T00:19:01.8462767Z 247 │ return yield* Effect.die(new Error("Expected the RPC protocol to send a request.")); 2026-10-24T00:19:01.8462823Z ╰──── 2026-10-24T00:19:01.8462825Z 2026-10-24T00:19:01.8463099Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T00:19:01.8463273Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5] 2026-10-24T00:19:01.8463342Z 259 │ .join("|"); 2026-10-24T00:19:01.8463414Z 260 │ useEffect(() => { 2026-10-24T00:19:01.8463488Z ·  ────┬──── 2026-10-24T00:19:01.8463627Z · ╰── This is the containing effect 2026-10-24T00:19:01.8463693Z 261 │ stop(); 2026-10-24T00:19:01.8463767Z ·  ──┬─ 2026-10-24T00:19:01.8463968Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T00:19:01.8464046Z 262 │ }, [orderVersion]); 2026-10-24T00:19:01.8464106Z ╰──── 2026-10-24T00:19:01.8464749Z  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-24T00:19:01.8465090Z  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-24T00:19:01.8465096Z 2026-10-24T00:19:01.8465324Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T00:19:01.8465500Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5] 2026-10-24T00:19:01.8465574Z 260 │ useEffect(() => { 2026-10-24T00:19:01.8465640Z 261 │ stop(); 2026-10-24T00:19:01.8465712Z ·  ──┬─ 2026-10-24T00:19:01.8465845Z · ╰── Missing dependency `stop` 2026-10-24T00:19:01.8465915Z 262 │ }, [orderVersion]); 2026-10-24T00:19:01.8465998Z ·  ──────┬───── 2026-10-24T00:19:01.8466158Z · ╰── Unnecessary dependency `orderVersion` 2026-10-24T00:19:01.8466223Z 263 │ useEffect( 2026-10-24T00:19:01.8466280Z ╰──── 2026-10-24T00:19:01.8466779Z  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-24T00:19:01.8467139Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8467142Z 2026-10-24T00:19:01.8467297Z ⚠ react(refs): Cannot access refs during render 2026-10-24T00:19:01.8467465Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:96:9] 2026-10-24T00:19:01.8467550Z 95 │ const latest = useRef(props); 2026-10-24T00:19:01.8467623Z 96 │ latest.current = props; 2026-10-24T00:19:01.8467741Z ·  ───┬──────┬─── 2026-10-24T00:19:01.8467933Z · │ ╰── Cannot update ref value during render 2026-10-24T00:19:01.8468069Z · ╰── This value is a ref 2026-10-24T00:19:01.8468144Z 97 │ const gesture = useMemo( 2026-10-24T00:19:01.8468201Z ╰──── 2026-10-24T00:19:01.8468702Z  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-24T00:19:01.8469012Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T00:19:01.8469015Z 2026-10-24T00:19:01.8469170Z ⚠ react(refs): Cannot access refs during render 2026-10-24T00:19:01.8469337Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:104:18] 2026-10-24T00:19:01.8469408Z 103 │ .runOnJS(true) 2026-10-24T00:19:01.8469522Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T00:19:01.8469654Z ·  ───────────────┬────────────── 2026-10-24T00:19:01.8469866Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T00:19:01.8470013Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T00:19:01.8470071Z ╰──── 2026-10-24T00:19:01.8470565Z  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-24T00:19:01.8470877Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T00:19:01.8470887Z 2026-10-24T00:19:01.8471039Z ⚠ react(refs): Cannot access refs during render 2026-10-24T00:19:01.8471211Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:105:19] 2026-10-24T00:19:01.8471318Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T00:19:01.8471459Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T00:19:01.8471619Z ·  ──────────────────────────┬───────────────────────── 2026-10-24T00:19:01.8471844Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T00:19:01.8471981Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T00:19:01.8472038Z ╰──── 2026-10-24T00:19:01.8472585Z  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-24T00:19:01.8472931Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T00:19:01.8472933Z 2026-10-24T00:19:01.8473091Z ⚠ react(refs): Cannot access refs during render 2026-10-24T00:19:01.8473261Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:106:16] 2026-10-24T00:19:01.8473401Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T00:19:01.8473529Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T00:19:01.8473687Z ·  ──────────────────────────┬───────────────────────── 2026-10-24T00:19:01.8473929Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T00:19:01.8474068Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T00:19:01.8474121Z ╰──── 2026-10-24T00:19:01.8474614Z  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-24T00:19:01.8474924Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T00:19:01.8474927Z 2026-10-24T00:19:01.8475084Z ⚠ react(refs): Cannot access refs during render 2026-10-24T00:19:01.8475256Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:107:21] 2026-10-24T00:19:01.8475384Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T00:19:01.8475517Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T00:19:01.8475664Z ·  ───────────────────────┬────────────────────── 2026-10-24T00:19:01.8475881Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T00:19:01.8475953Z 108 │ [props.disabled], 2026-10-24T00:19:01.8476009Z ╰──── 2026-10-24T00:19:01.8476548Z  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-24T00:19:01.8476886Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T00:19:01.8476889Z 2026-10-24T00:19:01.8477043Z ⚠ react(refs): Cannot access refs during render 2026-10-24T00:19:01.8477209Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:249:9] 2026-10-24T00:19:01.8477331Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-24T00:19:01.8477445Z 249 │ latest.current = { rows, planners, moveThread }; 2026-10-24T00:19:01.8477557Z ·  ───┬──────┬─── 2026-10-24T00:19:01.8477750Z · │ ╰── Cannot update ref value during render 2026-10-24T00:19:01.8477877Z · ╰── This value is a ref 2026-10-24T00:19:01.8477938Z 250 │ 2026-10-24T00:19:01.8477994Z ╰──── 2026-10-24T00:19:01.8478481Z  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-24T00:19:01.8478790Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T00:19:01.8478792Z 2026-10-24T00:19:01.8478946Z ⚠ react(refs): Cannot access refs during render 2026-10-24T00:19:01.8479124Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:247:22] 2026-10-24T00:19:01.8479252Z 246 │ const [preview, setPreview] = useState(null); 2026-10-24T00:19:01.8479373Z 247 │ const translateY = useRef(new Animated.Value(0)).current; 2026-10-24T00:19:01.8479510Z ·  ──────────────────┬────────────────── 2026-10-24T00:19:01.8479690Z · ╰── Cannot access ref value during render 2026-10-24T00:19:01.8479809Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-24T00:19:01.8479863Z ╰──── 2026-10-24T00:19:01.8480359Z  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-24T00:19:01.8480673Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T00:19:01.8480679Z 2026-10-24T00:19:01.8480862Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T00:19:01.8481033Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:324:16] 2026-10-24T00:19:01.8481103Z 323 │ update(0); 2026-10-24T00:19:01.8481192Z 324 │ let last = performance.now(); 2026-10-24T00:19:01.8481300Z ·  ────────┬──────── 2026-10-24T00:19:01.8481455Z · ╰── Cannot call impure function 2026-10-24T00:19:01.8481528Z 325 │ const tick = () => { 2026-10-24T00:19:01.8481584Z ╰──── 2026-10-24T00:19:01.8481956Z  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-24T00:19:01.8482304Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T00:19:01.8482306Z 2026-10-24T00:19:01.8482508Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T00:19:01.8482681Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:99:15] 2026-10-24T00:19:01.8482750Z  98 │ () => 2026-10-24T00:19:01.8482823Z  99 │ Gesture.Pan() 2026-10-24T00:19:01.8482903Z ·  ─┬─ 2026-10-24T00:19:01.8483043Z · ╰── `Pan` may be a component 2026-10-24T00:19:01.8483137Z 100 │ .enabled(!props.disabled) 2026-10-24T00:19:01.8483195Z ╰──── 2026-10-24T00:19:01.8483486Z  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-24T00:19:01.8484000Z  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-24T00:19:01.8484003Z 2026-10-24T00:19:01.8484209Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T00:19:01.8484381Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:108:5] 2026-10-24T00:19:01.8484456Z 103 │ .runOnJS(true) 2026-10-24T00:19:01.8484562Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T00:19:01.8484664Z ·  ───┬── 2026-10-24T00:19:01.8485134Z · ╰── 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-24T00:19:01.8485278Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T00:19:01.8485411Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T00:19:01.8485539Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T00:19:01.8485613Z 108 │ [props.disabled], 2026-10-24T00:19:01.8485704Z ·  ────────┬─────── 2026-10-24T00:19:01.8485912Z · ╰── This dependency list is missing values used by the callback 2026-10-24T00:19:01.8485973Z 109 │ ); 2026-10-24T00:19:01.8486028Z ╰──── 2026-10-24T00:19:01.8486246Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T00:19:01.8486579Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8486582Z 2026-10-24T00:19:01.8486856Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T00:19:01.8487018Z ╭─[apps/mobile/src/features/threads/use-worktree-setup.ts:30:40] 2026-10-24T00:19:01.8487191Z 28 │ const snapshot = resolveWorktreeSetupSnapshot(input.threadId, query.data, live); 2026-10-24T00:19:01.8487263Z 29 │ useEffect(() => { 2026-10-24T00:19:01.8487387Z ·  ────┬──── 2026-10-24T00:19:01.8487572Z · ╰── This is the containing effect 2026-10-24T00:19:01.8487710Z 30 │ if (snapshot && snapshot !== live) setHeld({ key, snapshot }); 2026-10-24T00:19:01.8487824Z ·  ───┬─── 2026-10-24T00:19:01.8488028Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T00:19:01.8488108Z 31 │ }, [key, live, snapshot]); 2026-10-24T00:19:01.8488166Z ╰──── 2026-10-24T00:19:01.8488815Z  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-24T00:19:01.8489161Z  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-24T00:19:01.8489163Z 2026-10-24T00:19:01.8489320Z ⚠ react(refs): Cannot access refs during render 2026-10-24T00:19:01.8489447Z ╭─[apps/mobile/src/components/ui/Menu.tsx:54:36] 2026-10-24T00:19:01.8489639Z 53 │ const child = children as ReactElement>; 2026-10-24T00:19:01.8489827Z 54 │ ╭─▶ children = cloneElement(child, { 2026-10-24T00:19:01.8489938Z 55 │ │ onTouchStart: (event) => { 2026-10-24T00:19:01.8490116Z 56 │ │ // Reset for a new touch, not onPressIn, which also fires when a 2026-10-24T00:19:01.8490289Z 57 │ │ // finger moves out of the row and back during the same gesture. 2026-10-24T00:19:01.8490428Z 58 │ │ menuPress.current.isPreparing = false; 2026-10-24T00:19:01.8490607Z 59 │ │ menuPress.current.suppressPress = menuPress.current.isOpen; 2026-10-24T00:19:01.8490725Z 60 │ │ pendingPress.current = null; 2026-10-24T00:19:01.8490855Z 61 │ │ child.props.onTouchStart?.(event); 2026-10-24T00:19:01.8490939Z 62 │ │ }, 2026-10-24T00:19:01.8491046Z 63 │ │ onPress: (event) => { 2026-10-24T00:19:01.8491225Z 64 │ │ // Accessibility clicks have no touch identifier and must not inherit 2026-10-24T00:19:01.8491380Z 65 │ │ // cancellation from a previous physical gesture. 2026-10-24T00:19:01.8491616Z 66 │ │ const isTouch = typeof event.nativeEvent.identifier === "number"; 2026-10-24T00:19:01.8491820Z 67 │ │ if (isTouch ? menuPress.current.suppressPress : menuPress.current.isOpen) { 2026-10-24T00:19:01.8491913Z 68 │ │ return; 2026-10-24T00:19:01.8491997Z 69 │ │ } 2026-10-24T00:19:01.8492145Z 70 │ │ if (isTouch && menuPress.current.isPreparing) { 2026-10-24T00:19:01.8492327Z 71 │ │ // A release can arrive between native menu preparation and display. 2026-10-24T00:19:01.8492502Z 72 │ │ // Let UIKit's display/cancel callback decide this press's outcome. 2026-10-24T00:19:01.8492708Z 73 │ │ event.persist(); 2026-10-24T00:19:01.8492923Z 74 │ │ pendingPress.current = () => child.props.onPress?.(event); 2026-10-24T00:19:01.8493018Z 75 │ │ return; 2026-10-24T00:19:01.8493099Z 76 │ │ } 2026-10-24T00:19:01.8493223Z 77 │ │ child.props.onPress?.(event); 2026-10-24T00:19:01.8493305Z 78 │ │ }, 2026-10-24T00:19:01.8493449Z 79 │ ├─▶ }); 2026-10-24T00:19:01.8493699Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T00:19:01.8493813Z 80 │ menuProps.onMenuInteractionStart = () => { 2026-10-24T00:19:01.8493871Z ╰──── 2026-10-24T00:19:01.8494409Z  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-24T00:19:01.8494728Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T00:19:01.8494731Z 2026-10-24T00:19:01.8495228Z ⚠ 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-24T00:19:01.8495421Z ╭─[apps/mobile/src/features/agent-awareness/remoteRegistration.test.ts:223:5] 2026-10-24T00:19:01.8495501Z 222 │ let idlePasses = 0; 2026-10-24T00:19:01.8495659Z 223 │ ╭─▶ for (;;) { 2026-10-24T00:19:01.8495808Z 224 │ │ yield* Effect.promise(() => Promise.resolve()); 2026-10-24T00:19:01.8495961Z 225 │ │ const pending = backgroundRuntime.pending.shift(); 2026-10-24T00:19:01.8496064Z 226 │ │ if (!pending) { 2026-10-24T00:19:01.8496169Z 227 │ │ idlePasses++; 2026-10-24T00:19:01.8496283Z 228 │ │ if (idlePasses >= 3) { 2026-10-24T00:19:01.8496376Z 229 │ │ return; 2026-10-24T00:19:01.8496461Z 230 │ │ } 2026-10-24T00:19:01.8496558Z 231 │ │ continue; 2026-10-24T00:19:01.8496640Z 232 │ │ } 2026-10-24T00:19:01.8496745Z 233 │ │ idlePasses = 0; 2026-10-24T00:19:01.8496875Z 234 │ │ const exit = yield* Effect.exit( 2026-10-24T00:19:01.8497103Z 235 │ │ pending.operation as Effect.Effect, 2026-10-24T00:19:01.8497185Z 236 │ │ ); 2026-10-24T00:19:01.8497298Z 237 │ │ yield* Effect.sync(() => { 2026-10-24T00:19:01.8497410Z 238 │ │ pending.resolve(exit); 2026-10-24T00:19:01.8497494Z 239 │ │ }); 2026-10-24T00:19:01.8497636Z 240 │ ╰─▶ } 2026-10-24T00:19:01.8497696Z 241 │ }, 2026-10-24T00:19:01.8497756Z ╰──── 2026-10-24T00:19:01.8497758Z 2026-10-24T00:19:01.8498305Z ⚠ 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-24T00:19:01.8498478Z ╭─[packages/contracts/src/baseSchemas.test.ts:39:9] 2026-10-24T00:19:01.8498549Z 38 │ JSON.stringify( 2026-10-24T00:19:01.8498679Z 39 │ Schema.encodeUnknownSync(Schema.toCodecJson(Named))([ 2026-10-24T00:19:01.8498785Z ·  ──────────────────────── 2026-10-24T00:19:01.8498857Z 40 │ { name: "a" }, 2026-10-24T00:19:01.8498911Z ╰──── 2026-10-24T00:19:01.8498913Z 2026-10-24T00:19:01.8499410Z ⚠ 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-24T00:19:01.8499560Z ╭─[apps/server/src/project/ProjectService.test.ts:94:3] 2026-10-24T00:19:01.8499620Z 93 │ ) { 2026-10-24T00:19:01.8499829Z 94 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T00:19:01.8500012Z 95 │ │ const project = Option.getOrThrow(yield* service.getById(projectId)); 2026-10-24T00:19:01.8500141Z 96 │ │ if (predicate(project)) return project; 2026-10-24T00:19:01.8500249Z 97 │ │ yield* Effect.yieldNow; 2026-10-24T00:19:01.8500382Z 98 │ ╰─▶ } 2026-10-24T00:19:01.8500537Z 99 │ return yield* Effect.die(`Project ${projectId} was not enriched in time.`); 2026-10-24T00:19:01.8500595Z ╰──── 2026-10-24T00:19:01.8500597Z 2026-10-24T00:19:01.8501093Z ⚠ 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-24T00:19:01.8501265Z ╭─[apps/server/src/project/ProjectEnrichmentService.test.ts:28:3] 2026-10-24T00:19:01.8501322Z 27 │ ) { 2026-10-24T00:19:01.8501539Z 28 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T00:19:01.8501690Z 29 │ │ const available = yield* service.peek(workspaceRoot); 2026-10-24T00:19:01.8501825Z 30 │ │ if (predicate(available)) return available; 2026-10-24T00:19:01.8501929Z 31 │ │ yield* Effect.yieldNow; 2026-10-24T00:19:01.8502112Z 32 │ ╰─▶ } 2026-10-24T00:19:01.8502334Z 33 │ return yield* Effect.die(`Project metadata for ${workspaceRoot} was not resolved in time.`); 2026-10-24T00:19:01.8502390Z ╰──── 2026-10-24T00:19:01.8502392Z 2026-10-24T00:19:01.8502875Z ⚠ 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-24T00:19:01.8503016Z ╭─[packages/contracts/src/composerContext.test.ts:181:18] 2026-10-24T00:19:01.8503160Z 180 │ it("sends a message without the records the wire cannot carry", () => { 2026-10-24T00:19:01.8503353Z 181 │ const wire = Schema.encodeUnknownSync(Schema.toCodecJson(OrchestrationMessageContext))({ 2026-10-24T00:19:01.8503477Z ·  ──────────────────────── 2026-10-24T00:19:01.8503547Z 182 │ version: 1, 2026-10-24T00:19:01.8503606Z ╰──── 2026-10-24T00:19:01.8503608Z 2026-10-24T00:19:01.8503853Z ⚠ eslint(no-unused-vars): Function 'resolveThreadWorkspaceCwd' is declared but never used. 2026-10-24T00:19:01.8504008Z ╭─[apps/server/src/checkpointing/Utils.ts:12:10] 2026-10-24T00:19:01.8504062Z 11 │ 2026-10-24T00:19:01.8504169Z 12 │ function resolveThreadWorkspaceCwd(input: { 2026-10-24T00:19:01.8504278Z ·  ────────────┬──────────── 2026-10-24T00:19:01.8504458Z · ╰── 'resolveThreadWorkspaceCwd' is declared here 2026-10-24T00:19:01.8504529Z 13 │ readonly thread: { 2026-10-24T00:19:01.8504586Z ╰──── 2026-10-24T00:19:01.8504697Z  help: Consider removing this declaration. 2026-10-24T00:19:01.8504707Z 2026-10-24T00:19:01.8504988Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T00:19:01.8505129Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:60:5] 2026-10-24T00:19:01.8505187Z 57 │ 2026-10-24T00:19:01.8505260Z 58 │ useEffect(() => { 2026-10-24T00:19:01.8505338Z ·  ────┬──── 2026-10-24T00:19:01.8505473Z · ╰── This is the containing effect 2026-10-24T00:19:01.8505577Z 59 │ const controller = new AbortController(); 2026-10-24T00:19:01.8505656Z 60 │ setLoadState("pending"); 2026-10-24T00:19:01.8505737Z ·  ──────┬───── 2026-10-24T00:19:01.8505913Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T00:19:01.8506088Z 61 │ // A renewed signature is used on Retry, not as a reason to reset the native player. 2026-10-24T00:19:01.8506149Z ╰──── 2026-10-24T00:19:01.8506788Z  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-24T00:19:01.8507131Z  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-24T00:19:01.8507134Z 2026-10-24T00:19:01.8507351Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T00:19:01.8507551Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:71:7] 2026-10-24T00:19:01.8507678Z 70 │ return () => controller.abort(); 2026-10-24T00:19:01.8507781Z 71 │ }, [player, props.playRequested, attempt]); 2026-10-24T00:19:01.8507964Z ·  ───┬── ─────────┬───────── ───┬─── 2026-10-24T00:19:01.8508208Z · │ │ ╰── Unnecessary dependency `attempt` 2026-10-24T00:19:01.8508425Z · │ ╰── Unnecessary dependency `props.playRequested` 2026-10-24T00:19:01.8508573Z · ╰── Unnecessary dependency `player_0` 2026-10-24T00:19:01.8508629Z 72 │ 2026-10-24T00:19:01.8508681Z ╰──── 2026-10-24T00:19:01.8509000Z  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-24T00:19:01.8509334Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8509337Z 2026-10-24T00:19:01.8509612Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T00:19:01.8509785Z ╭─[apps/server/src/orchestration-v2/ThreadPullRequestService.ts:413:7] 2026-10-24T00:19:01.8509846Z 412 │ 2026-10-24T00:19:01.8509982Z 413 │ const layer = Layer.effect(ThreadPullRequestServiceV2, make); 2026-10-24T00:19:01.8510059Z ·  ──┬── 2026-10-24T00:19:01.8510190Z · ╰── 'layer' is declared here 2026-10-24T00:19:01.8510252Z ╰──── 2026-10-24T00:19:01.8510371Z  help: Consider removing this declaration. 2026-10-24T00:19:01.8510374Z 2026-10-24T00:19:01.8510572Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T00:19:01.8510753Z ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:555:70] 2026-10-24T00:19:01.8510845Z 554 │ assert.deepStrictEqual( 2026-10-24T00:19:01.8511020Z 555 │ (yield* Ref.get(fixture.syncCommands)).map(({ commandId: _, ...rest }) => rest), 2026-10-24T00:19:01.8511147Z ·  ┬ 2026-10-24T00:19:01.8511318Z · ╰── '_' is declared here 2026-10-24T00:19:01.8511382Z 556 │ [ 2026-10-24T00:19:01.8511444Z ╰──── 2026-10-24T00:19:01.8511556Z  help: Consider removing this parameter. 2026-10-24T00:19:01.8511559Z 2026-10-24T00:19:01.8511755Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T00:19:01.8511937Z ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:1155:70] 2026-10-24T00:19:01.8512029Z 1154 │ assert.deepStrictEqual( 2026-10-24T00:19:01.8512204Z 1155 │ (yield* Ref.get(fixture.linkCommands)).map(({ commandId: _, ...rest }) => rest), 2026-10-24T00:19:01.8512334Z ·  ┬ 2026-10-24T00:19:01.8512503Z · ╰── '_' is declared here 2026-10-24T00:19:01.8512571Z 1156 │ [ 2026-10-24T00:19:01.8512693Z ╰──── 2026-10-24T00:19:01.8512832Z  help: Consider removing this parameter. 2026-10-24T00:19:01.8512835Z 2026-10-24T00:19:01.8513023Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T00:19:01.8513139Z ╭─[packages/shared/src/qrCode.ts:458:44] 2026-10-24T00:19:01.8513209Z 457 │ ): Array { 2026-10-24T00:19:01.8513321Z 458 │ let result: Array = divisor.map((_) => 0); 2026-10-24T00:19:01.8513425Z ·  ┬ 2026-10-24T00:19:01.8513581Z · ╰── '_' is declared here 2026-10-24T00:19:01.8513657Z 459 │ for (const b of data) { 2026-10-24T00:19:01.8513713Z ╰──── 2026-10-24T00:19:01.8513816Z  help: Consider removing this parameter. 2026-10-24T00:19:01.8513824Z 2026-10-24T00:19:01.8514054Z ⚠ eslint(no-unused-vars): Identifier 'Fiber' is imported but never used. 2026-10-24T00:19:01.8514163Z ╭─[apps/server/src/ws.ts:10:13] 2026-10-24T00:19:01.8514258Z  9 │ import * as Effect from "effect/Effect"; 2026-10-24T00:19:01.8514346Z 10 │ import * as Fiber from "effect/Fiber"; 2026-10-24T00:19:01.8514427Z ·  ──┬── 2026-10-24T00:19:01.8514566Z · ╰── 'Fiber' is imported here 2026-10-24T00:19:01.8514675Z 11 │ import * as FileSystem from "effect/FileSystem"; 2026-10-24T00:19:01.8514727Z ╰──── 2026-10-24T00:19:01.8514833Z  help: Consider removing this import. 2026-10-24T00:19:01.8514836Z 2026-10-24T00:19:01.8515051Z ⚠ eslint(no-unused-vars): Identifier 'Schedule' is imported but never used. 2026-10-24T00:19:01.8515152Z ╭─[apps/server/src/ws.ts:17:13] 2026-10-24T00:19:01.8515235Z 16 │ import * as Ref from "effect/Ref"; 2026-10-24T00:19:01.8515335Z 17 │ import * as Schedule from "effect/Schedule"; 2026-10-24T00:19:01.8515419Z ·  ────┬─── 2026-10-24T00:19:01.8515563Z · ╰── 'Schedule' is imported here 2026-10-24T00:19:01.8515652Z 18 │ import * as Schema from "effect/Schema"; 2026-10-24T00:19:01.8515708Z ╰──── 2026-10-24T00:19:01.8515811Z  help: Consider removing this import. 2026-10-24T00:19:01.8515814Z 2026-10-24T00:19:01.8516130Z ⚠ eslint(no-unused-vars): Variable 'projectSetupScriptRunner' is declared but never used. Unused variables should start with a '_'. 2026-10-24T00:19:01.8516244Z ╭─[apps/server/src/ws.ts:1285:13] 2026-10-24T00:19:01.8516410Z 1284 │ const usageLimitSources = yield* UsageLimitSources.UsageLimitSources; 2026-10-24T00:19:01.8516623Z 1285 │ const projectSetupScriptRunner = yield* ProjectSetupScriptRunner.ProjectSetupScriptRunner; 2026-10-24T00:19:01.8516738Z ·  ────────────┬─────────── 2026-10-24T00:19:01.8516919Z · ╰── 'projectSetupScriptRunner' is declared here 2026-10-24T00:19:01.8517095Z 1286 │ const worktreeSetupTracker = yield* WorktreeSetupTracker.WorktreeSetupTracker; 2026-10-24T00:19:01.8517153Z ╰──── 2026-10-24T00:19:01.8517532Z  help: Consider removing this declaration. 2026-10-24T00:19:01.8517535Z 2026-10-24T00:19:01.8517744Z ⚠ eslint(no-unused-vars): Identifier 'identity' is imported but never used. 2026-10-24T00:19:01.8517913Z ╭─[apps/server/src/auth/http.ts:28:10] 2026-10-24T00:19:01.8518040Z 27 │ import * as Schema from "effect/Schema"; 2026-10-24T00:19:01.8518141Z 28 │ import { identity } from "effect/Function"; 2026-10-24T00:19:01.8518227Z ·  ────┬─── 2026-10-24T00:19:01.8518364Z · ╰── 'identity' is imported here 2026-10-24T00:19:01.8518455Z 29 │ import * as Layer from "effect/Layer"; 2026-10-24T00:19:01.8518514Z ╰──── 2026-10-24T00:19:01.8518617Z  help: Consider removing this import. 2026-10-24T00:19:01.8518620Z 2026-10-24T00:19:01.8518890Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T00:19:01.8519051Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:57:5] 2026-10-24T00:19:01.8519108Z 55 │ 2026-10-24T00:19:01.8519185Z 56 │ useEffect(() => { 2026-10-24T00:19:01.8519267Z ·  ────┬──── 2026-10-24T00:19:01.8519408Z · ╰── This is the containing effect 2026-10-24T00:19:01.8519482Z 57 │ setDecodedSize(null); 2026-10-24T00:19:01.8519567Z ·  ───────┬────── 2026-10-24T00:19:01.8519741Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T00:19:01.8519816Z 58 │ }, [props.sourceKey]); 2026-10-24T00:19:01.8519873Z ╰──── 2026-10-24T00:19:01.8520506Z  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-24T00:19:01.8520852Z  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-24T00:19:01.8520857Z 2026-10-24T00:19:01.8521123Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T00:19:01.8521283Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:61:5] 2026-10-24T00:19:01.8521339Z 59 │ 2026-10-24T00:19:01.8521409Z 60 │ useEffect(() => { 2026-10-24T00:19:01.8521480Z ·  ────┬──── 2026-10-24T00:19:01.8521614Z · ╰── This is the containing effect 2026-10-24T00:19:01.8521688Z 61 │ setFailedUri(null); 2026-10-24T00:19:01.8521770Z ·  ──────┬───── 2026-10-24T00:19:01.8521947Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T00:19:01.8522020Z 62 │ }, [props.uri]); 2026-10-24T00:19:01.8522076Z ╰──── 2026-10-24T00:19:01.8522698Z  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-24T00:19:01.8523035Z  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-24T00:19:01.8523038Z 2026-10-24T00:19:01.8523264Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-24T00:19:01.8523481Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:7:10] 2026-10-24T00:19:01.8523648Z 6 │ import { parse, SvgAst, type JsxAST } from "react-native-svg"; 2026-10-24T00:19:01.8523834Z 7 │ import { ActivityIndicator, Pressable, StyleSheet, View, type ViewStyle } from "react-native"; 2026-10-24T00:19:01.8523952Z ·  ────────┬──────── 2026-10-24T00:19:01.8524111Z · ╰── 'ActivityIndicator' is imported here 2026-10-24T00:19:01.8524167Z 8 │ 2026-10-24T00:19:01.8524222Z ╰──── 2026-10-24T00:19:01.8524324Z  help: Consider removing this import. 2026-10-24T00:19:01.8524327Z 2026-10-24T00:19:01.8524538Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T00:19:01.8524703Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:58:7] 2026-10-24T00:19:01.8524780Z 57 │ setDecodedSize(null); 2026-10-24T00:19:01.8524851Z 58 │ }, [props.sourceKey]); 2026-10-24T00:19:01.8524940Z ·  ───────┬─────── 2026-10-24T00:19:01.8525106Z · ╰── Unnecessary dependency `props.sourceKey` 2026-10-24T00:19:01.8525163Z 59 │ 2026-10-24T00:19:01.8525216Z ╰──── 2026-10-24T00:19:01.8525531Z  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-24T00:19:01.8525860Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8525862Z 2026-10-24T00:19:01.8526081Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T00:19:01.8526250Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:62:7] 2026-10-24T00:19:01.8526323Z 61 │ setFailedUri(null); 2026-10-24T00:19:01.8526395Z 62 │ }, [props.uri]); 2026-10-24T00:19:01.8526476Z ·  ────┬──── 2026-10-24T00:19:01.8526626Z · ╰── Unnecessary dependency `props.uri` 2026-10-24T00:19:01.8526679Z 63 │ 2026-10-24T00:19:01.8526735Z ╰──── 2026-10-24T00:19:01.8527042Z  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-24T00:19:01.8527367Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8527428Z 2026-10-24T00:19:01.8527658Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-24T00:19:01.8527794Z ╭─[packages/client-runtime/src/state/shell.ts:189:5] 2026-10-24T00:19:01.8527916Z 186 │ let waiting = yield* Ref.get(awaitingCompletion); 2026-10-24T00:19:01.8527988Z 187 │ let next = initial; 2026-10-24T00:19:01.8528061Z ·  ──┬─ 2026-10-24T00:19:01.8528194Z · ╰── From this accumulator 2026-10-24T00:19:01.8528283Z 188 │ let receivedSnapshot = false; 2026-10-24T00:19:01.8528366Z 189 │ for (const item of items) { 2026-10-24T00:19:01.8528438Z ·  ─┬─ 2026-10-24T00:19:01.8528553Z · ╰── For this loop 2026-10-24T00:19:01.8528657Z 190 │ if (item.kind === "synchronized") { 2026-10-24T00:19:01.8528733Z 191 │ waiting = false; 2026-10-24T00:19:01.8528829Z 192 │ if (Option.isSome(next.snapshot)) { 2026-10-24T00:19:01.8528956Z 193 │ next = { ...next, status: "live", error: Option.none() }; 2026-10-24T00:19:01.8529050Z ·  ───┬─── 2026-10-24T00:19:01.8529187Z · ╰── From this spread 2026-10-24T00:19:01.8529249Z 194 │ } 2026-10-24T00:19:01.8529310Z ╰──── 2026-10-24T00:19:01.8529474Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-24T00:19:01.8529643Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T00:19:01.8529646Z 2026-10-24T00:19:01.8530039Z ⚠ 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-24T00:19:01.8530178Z ╭─[apps/server/src/auth/RpcAuthorization.ts:237:17] 2026-10-24T00:19:01.8530321Z 236 │ const requiredScopesForSettingsUpdate = (payload: unknown) => { 2026-10-24T00:19:01.8530461Z 237 │ const input = Schema.decodeUnknownSync(SettingsUpdate)(payload); 2026-10-24T00:19:01.8530576Z ·  ──────────────────────── 2026-10-24T00:19:01.8530723Z 238 │ const scopes = requiredScopesForServerSettingsPatch(input.patch); 2026-10-24T00:19:01.8530779Z ╰──── 2026-10-24T00:19:01.8530782Z 2026-10-24T00:19:01.8531164Z ⚠ 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-24T00:19:01.8531302Z ╭─[apps/server/src/auth/RpcAuthorization.ts:256:26] 2026-10-24T00:19:01.8531409Z 255 │ if (method === WS_METHODS.assetsCreateUrl) { 2026-10-24T00:19:01.8531645Z 256 │ const { resource } = Schema.decodeUnknownSync(AssetCreateUrlInput)(payload); 2026-10-24T00:19:01.8531766Z ·  ──────────────────────── 2026-10-24T00:19:01.8531837Z 257 │ return [ 2026-10-24T00:19:01.8531889Z ╰──── 2026-10-24T00:19:01.8531892Z 2026-10-24T00:19:01.8532178Z ⚠ eslint(no-unused-vars): Variable 'claudeCaps' is declared but never used. Unused variables should start with a '_'. 2026-10-24T00:19:01.8532296Z ╭─[packages/shared/src/model.test.ts:36:7] 2026-10-24T00:19:01.8532353Z 35 │ 2026-10-24T00:19:01.8532488Z 36 │ const claudeCaps: ModelCapabilities = createModelCapabilities({ 2026-10-24T00:19:01.8532672Z ·  ─────┬──── 2026-10-24T00:19:01.8532863Z · ╰── 'claudeCaps' is declared here 2026-10-24T00:19:01.8532937Z 37 │ optionDescriptors: [ 2026-10-24T00:19:01.8532993Z ╰──── 2026-10-24T00:19:01.8533105Z  help: Consider removing this declaration. 2026-10-24T00:19:01.8533108Z 2026-10-24T00:19:01.8533382Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T00:19:01.8533554Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:285:5] 2026-10-24T00:19:01.8533676Z 283 │ const [snoozeWakeTick, bumpSnoozeWakeTick] = useState(0); 2026-10-24T00:19:01.8533752Z 284 │ useEffect(() => { 2026-10-24T00:19:01.8533829Z ·  ────┬──── 2026-10-24T00:19:01.8533999Z · ╰── This is the containing effect 2026-10-24T00:19:01.8534091Z 285 │ setNow(new Date().toISOString()); 2026-10-24T00:19:01.8534175Z ·  ───┬── 2026-10-24T00:19:01.8534352Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T00:19:01.8534498Z 286 │ const id = setInterval(() => setNow(new Date().toISOString()), 60_000); 2026-10-24T00:19:01.8534551Z ╰──── 2026-10-24T00:19:01.8535179Z  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-24T00:19:01.8535522Z  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-24T00:19:01.8535528Z 2026-10-24T00:19:01.8535743Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T00:19:01.8535921Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:365:25] 2026-10-24T00:19:01.8536059Z 364 │ // range) the boundary string is identical and the chain would die. 2026-10-24T00:19:01.8536158Z 365 │ }, [nextSnoozeWakeAt, snoozeWakeTick]); 2026-10-24T00:19:01.8536269Z ·  ───────┬────── 2026-10-24T00:19:01.8536443Z · ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T00:19:01.8536560Z 366 │ const listItems = ((): readonly SidebarListItem[] => { 2026-10-24T00:19:01.8536623Z ╰──── 2026-10-24T00:19:01.8536939Z  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-24T00:19:01.8537270Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8537273Z 2026-10-24T00:19:01.8537452Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T00:19:01.8537620Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:356:53] 2026-10-24T00:19:01.8537717Z 355 │ if (Number.isNaN(wakeAtMs)) return; 2026-10-24T00:19:01.8537884Z 356 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647); 2026-10-24T00:19:01.8538014Z ·  ─────┬──── 2026-10-24T00:19:01.8538253Z · ╰── Cannot call impure function 2026-10-24T00:19:01.8538383Z 357 │ const id = setTimeout(() => { 2026-10-24T00:19:01.8538442Z ╰──── 2026-10-24T00:19:01.8538741Z  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-24T00:19:01.8539048Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T00:19:01.8539056Z 2026-10-24T00:19:01.8539330Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T00:19:01.8539491Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:361:7] 2026-10-24T00:19:01.8539645Z 355 │ }, [cancelledIncomingShareId, navigation, props.incomingShareId]); 2026-10-24T00:19:01.8539719Z 356 │ useEffect(() => { 2026-10-24T00:19:01.8539794Z ·  ────┬──── 2026-10-24T00:19:01.8539930Z · ╰── This is the containing effect 2026-10-24T00:19:01.8540028Z 357 │ if (!isReturningToProjectPicker) { 2026-10-24T00:19:01.8540095Z 358 │ return; 2026-10-24T00:19:01.8540152Z 359 │ } 2026-10-24T00:19:01.8540260Z 360 │ if (requestedInitialProjectAvailable) { 2026-10-24T00:19:01.8540361Z 361 │ setIsReturningToProjectPicker(false); 2026-10-24T00:19:01.8540471Z ·  ──────────────┬────────────── 2026-10-24T00:19:01.8540656Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T00:19:01.8540731Z 362 │ return; 2026-10-24T00:19:01.8540791Z ╰──── 2026-10-24T00:19:01.8541416Z  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-24T00:19:01.8541752Z  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-24T00:19:01.8541755Z 2026-10-24T00:19:01.8542026Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T00:19:01.8542184Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:504:9] 2026-10-24T00:19:01.8542246Z 447 │ 2026-10-24T00:19:01.8542318Z 448 │ useEffect(() => { 2026-10-24T00:19:01.8542394Z ·  ────┬──── 2026-10-24T00:19:01.8542530Z · ╰── This is the containing effect 2026-10-24T00:19:01.8542639Z 449 │ if (props.pendingTaskId || props.draftId) { 2026-10-24T00:19:01.8542702Z 450 │ return; 2026-10-24T00:19:01.8542763Z 451 │ } 2026-10-24T00:19:01.8542917Z 452 │ if (lastInitialProjectRefRef.current !== props.initialProjectRef) { 2026-10-24T00:19:01.8543058Z 453 │ lastInitialProjectRefRef.current = props.initialProjectRef; 2026-10-24T00:19:01.8543168Z 454 │ appliedInitialProjectKeyRef.current = null; 2026-10-24T00:19:01.8543228Z 455 │ } 2026-10-24T00:19:01.8543377Z 456 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-24T00:19:01.8543580Z 457 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-24T00:19:01.8543729Z 458 │ if (initialEnvironmentId && initialProjectId) { 2026-10-24T00:19:01.8543807Z 459 │ const directProject = 2026-10-24T00:19:01.8543883Z 460 │ projects.find( 2026-10-24T00:19:01.8544001Z 461 │ (project) => 2026-10-24T00:19:01.8544190Z 462 │ project.environmentId === initialEnvironmentId && project.id === initialProjectId, 2026-10-24T00:19:01.8544260Z 463 │ ) ?? null; 2026-10-24T00:19:01.8544317Z 464 │ 2026-10-24T00:19:01.8544393Z 465 │ if (directProject) { 2026-10-24T00:19:01.8544538Z 466 │ // Apply the route's project once. Re-applying on every change would 2026-10-24T00:19:01.8544684Z 467 │ // instantly revert environment/project switches made in the picker. 2026-10-24T00:19:01.8544862Z 468 │ const directProjectKey = `${directProject.environmentId}:${directProject.id}`; 2026-10-24T00:19:01.8545015Z 469 │ if (appliedInitialProjectKeyRef.current === directProjectKey) { 2026-10-24T00:19:01.8545080Z 470 │ return; 2026-10-24T00:19:01.8545142Z 471 │ } 2026-10-24T00:19:01.8545247Z 472 │ if (props.initialProjectRef?.branch) { 2026-10-24T00:19:01.8545314Z 473 │ if ( 2026-10-24T00:19:01.8545464Z 474 │ selectedProject?.environmentId !== directProject.environmentId || 2026-10-24T00:19:01.8545573Z 475 │ selectedProject.id !== directProject.id 2026-10-24T00:19:01.8545639Z 476 │ ) { 2026-10-24T00:19:01.8545728Z 477 │ setProject(directProject); 2026-10-24T00:19:01.8545793Z 478 │ return; 2026-10-24T00:19:01.8545857Z 479 │ } 2026-10-24T00:19:01.8545949Z 480 │ if (!flow.draftKey) return; 2026-10-24T00:19:01.8546104Z 481 │ // The route completes checkout before mounting this composer. Local 2026-10-24T00:19:01.8546257Z 482 │ // mode reuses an existing worktree; worktree mode would create another. 2026-10-24T00:19:01.8546380Z 483 │ updateComposerDraftSettings(flow.draftKey, { 2026-10-24T00:19:01.8546466Z 484 │ workspaceSelection: { 2026-10-24T00:19:01.8546541Z 485 │ mode: "local", 2026-10-24T00:19:01.8546653Z 486 │ branch: props.initialProjectRef.branch, 2026-10-24T00:19:01.8546798Z 487 │ worktreePath: props.initialProjectRef.worktreePath ?? null, 2026-10-24T00:19:01.8546886Z 488 │ startFromOrigin: false, 2026-10-24T00:19:01.8546953Z 489 │ }, 2026-10-24T00:19:01.8547016Z 490 │ }); 2026-10-24T00:19:01.8547079Z 491 │ } 2026-10-24T00:19:01.8547215Z 492 │ appliedInitialProjectKeyRef.current = directProjectKey; 2026-10-24T00:19:01.8547280Z 493 │ if ( 2026-10-24T00:19:01.8547435Z 494 │ selectedProject?.environmentId === directProject.environmentId && 2026-10-24T00:19:01.8547542Z 495 │ selectedProject.id === directProject.id 2026-10-24T00:19:01.8547607Z 496 │ ) { 2026-10-24T00:19:01.8547672Z 497 │ return; 2026-10-24T00:19:01.8547737Z 498 │ } 2026-10-24T00:19:01.8547829Z 499 │ setProject(directProject); 2026-10-24T00:19:01.8547898Z 500 │ return; 2026-10-24T00:19:01.8547956Z 501 │ } 2026-10-24T00:19:01.8548014Z 502 │ 2026-10-24T00:19:01.8548098Z 503 │ if (projects.length > 0) { 2026-10-24T00:19:01.8548203Z 504 │ setIsReturningToProjectPicker(true); 2026-10-24T00:19:01.8548318Z ·  ──────────────┬────────────── 2026-10-24T00:19:01.8548585Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T00:19:01.8548684Z 505 │ } 2026-10-24T00:19:01.8548741Z ╰──── 2026-10-24T00:19:01.8549368Z  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-24T00:19:01.8549709Z  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-24T00:19:01.8549712Z 2026-10-24T00:19:01.8549984Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T00:19:01.8550148Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:604:5] 2026-10-24T00:19:01.8550207Z 545 │ 2026-10-24T00:19:01.8550274Z 546 │ useEffect(() => { 2026-10-24T00:19:01.8550354Z ·  ────┬──── 2026-10-24T00:19:01.8550491Z · ╰── This is the containing effect 2026-10-24T00:19:01.8550598Z 547 │ const shareId = props.incomingShareId; 2026-10-24T00:19:01.8550684Z 548 │ const draftKey = flow.draftKey; 2026-10-24T00:19:01.8550795Z 549 │ const destinationProject = selectedProject; 2026-10-24T00:19:01.8550944Z 550 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-24T00:19:01.8551083Z 551 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-24T00:19:01.8551177Z 552 │ const selectedProjectMatchesRoute = 2026-10-24T00:19:01.8551261Z 553 │ !initialEnvironmentId || 2026-10-24T00:19:01.8551344Z 554 │ !initialProjectId || 2026-10-24T00:19:01.8551489Z 555 │ (destinationProject?.environmentId === initialEnvironmentId && 2026-10-24T00:19:01.8551599Z 556 │ destinationProject.id === initialProjectId); 2026-10-24T00:19:01.8551710Z 557 │ if ( 2026-10-24T00:19:01.8551910Z 558 │ !shareId || 2026-10-24T00:19:01.8552002Z 559 │ !draftKey || 2026-10-24T00:19:01.8552116Z 560 │ !destinationProject || 2026-10-24T00:19:01.8552247Z 561 │ !selectedProjectMatchesRoute || 2026-10-24T00:19:01.8552373Z 562 │ cancelledIncomingShareId === shareId 2026-10-24T00:19:01.8552467Z 563 │ ) { 2026-10-24T00:19:01.8552580Z 564 │ return; 2026-10-24T00:19:01.8552667Z 565 │ } 2026-10-24T00:19:01.8552781Z 566 │ const importKey = `${shareId}:${draftKey}`; 2026-10-24T00:19:01.8552861Z 567 │ if ( 2026-10-24T00:19:01.8553035Z 568 │ startedShareImportKeyRef.current === importKey || 2026-10-24T00:19:01.8553183Z 569 │ cancellingShareImportKeyRef.current === importKey 2026-10-24T00:19:01.8553257Z 570 │ ) { 2026-10-24T00:19:01.8553356Z 571 │ return; 2026-10-24T00:19:01.8553460Z 572 │ } 2026-10-24T00:19:01.8553565Z 573 │ 2026-10-24T00:19:01.8553655Z 574 │ if (!incomingShare) { 2026-10-24T00:19:01.8553919Z 575 │ if (isIncomingShareUnavailable && alertedUnavailableIncomingShareIdRef.current !== shareId) { 2026-10-24T00:19:01.8554079Z 576 │ alertedUnavailableIncomingShareIdRef.current = shareId; 2026-10-24T00:19:01.8554205Z 577 │ Dialog.alert( 2026-10-24T00:19:01.8554309Z 578 │ "Shared content unavailable", 2026-10-24T00:19:01.8554522Z 579 │ "The shared content is no longer in the inbox. You can continue editing this task draft.", 2026-10-24T00:19:01.8554681Z 580 │ ); 2026-10-24T00:19:01.8554818Z 581 │ } 2026-10-24T00:19:01.8554901Z 582 │ return; 2026-10-24T00:19:01.8554998Z 583 │ } 2026-10-24T00:19:01.8555088Z 584 │ 2026-10-24T00:19:01.8555174Z 585 │ if ( 2026-10-24T00:19:01.8555370Z 586 │ incomingShare.attachments.some((attachment) => attachment.type === "file") && 2026-10-24T00:19:01.8555520Z 587 │ selectedEnvironmentServerConfig === null 2026-10-24T00:19:01.8555611Z 588 │ ) { 2026-10-24T00:19:01.8555713Z 589 │ return; 2026-10-24T00:19:01.8555775Z 590 │ } 2026-10-24T00:19:01.8555888Z 591 │ 2026-10-24T00:19:01.8556061Z 592 │ if (alertedUnavailableIncomingShareIdRef.current === shareId) { 2026-10-24T00:19:01.8556223Z 593 │ alertedUnavailableIncomingShareIdRef.current = null; 2026-10-24T00:19:01.8556292Z 594 │ } 2026-10-24T00:19:01.8556450Z 595 │ startedShareImportKeyRef.current = importKey; 2026-10-24T00:19:01.8556561Z 596 │ const draftBackup = 2026-10-24T00:19:01.8556788Z 597 │ shareImportDraftBackupRef.current.get(importKey) ?? getComposerDraftSnapshot(draftKey); 2026-10-24T00:19:01.8556950Z 598 │ shareImportDraftBackupRef.current.set(importKey, draftBackup); 2026-10-24T00:19:01.8557070Z 599 │ const importToken = Symbol(importKey); 2026-10-24T00:19:01.8557202Z 600 │ let didReserveShare = false; 2026-10-24T00:19:01.8557317Z 601 │ let didConsumeShare = false; 2026-10-24T00:19:01.8557418Z 602 │ let needsDraftRestore = false; 2026-10-24T00:19:01.8557563Z 603 │ activeShareImportTokenRef.current = importToken; 2026-10-24T00:19:01.8557684Z 604 │ setImportingShareKey(importKey); 2026-10-24T00:19:01.8557813Z ·  ──────────┬───────── 2026-10-24T00:19:01.8558027Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T00:19:01.8558132Z 605 │ void (async () => { 2026-10-24T00:19:01.8558215Z ╰──── 2026-10-24T00:19:01.8558905Z  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-24T00:19:01.8559283Z  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-24T00:19:01.8559286Z 2026-10-24T00:19:01.8559520Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T00:19:01.8559782Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:524:5] 2026-10-24T00:19:01.8559939Z 523 │ props.initialProjectRef, 2026-10-24T00:19:01.8560056Z 524 │ props.incomingShareId, 2026-10-24T00:19:01.8560164Z ·  ──────────┬────────── 2026-10-24T00:19:01.8560371Z · ╰── Unnecessary dependency `props.incomingShareId` 2026-10-24T00:19:01.8560468Z 525 │ props.pendingTaskId, 2026-10-24T00:19:01.8560585Z ╰──── 2026-10-24T00:19:01.8560907Z  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-24T00:19:01.8561273Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8561276Z 2026-10-24T00:19:01.8561565Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T00:19:01.8561777Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:543:5] 2026-10-24T00:19:01.8561938Z 542 │ loadedBranchesProjectKeyRef.current = projectKey; 2026-10-24T00:19:01.8562022Z 543 │ flow.loadBranches(); 2026-10-24T00:19:01.8562124Z ·  ──┬─ 2026-10-24T00:19:01.8562280Z · ╰── Missing dependency `flow` 2026-10-24T00:19:01.8562434Z 544 │ }, [flow.loadBranches, selectedProject]); 2026-10-24T00:19:01.8562537Z ·  ────────┬──────── 2026-10-24T00:19:01.8562782Z · ╰── Overly precise dependency `flow.loadBranches`, use `flow` instead 2026-10-24T00:19:01.8562877Z 545 │ 2026-10-24T00:19:01.8562979Z ╰──── 2026-10-24T00:19:01.8563451Z  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-24T00:19:01.8563817Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8563820Z 2026-10-24T00:19:01.8564099Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T00:19:01.8564278Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:766:5] 2026-10-24T00:19:01.8564403Z 765 │ flow.draftKey, 2026-10-24T00:19:01.8564499Z 766 │ hasImportedIncomingShare, 2026-10-24T00:19:01.8564633Z ·  ────────────┬─────────── 2026-10-24T00:19:01.8564858Z · ╰── Unnecessary dependency `hasImportedIncomingShare` 2026-10-24T00:19:01.8564962Z 767 │ incomingShare, 2026-10-24T00:19:01.8565074Z 768 │ isIncomingShareInboxLoading, 2026-10-24T00:19:01.8565220Z ·  ─────────────┬───────────── 2026-10-24T00:19:01.8565451Z · ╰── Unnecessary dependency `isIncomingShareInboxLoading` 2026-10-24T00:19:01.8565561Z 769 │ isIncomingShareUnavailable, 2026-10-24T00:19:01.8565671Z 770 │ props.incomingShareId, 2026-10-24T00:19:01.8565816Z 771 │ props.initialProjectRef?.environmentId, 2026-10-24T00:19:01.8565945Z 772 │ props.initialProjectRef?.projectId, 2026-10-24T00:19:01.8566049Z 773 │ releaseShareReservation, 2026-10-24T00:19:01.8566122Z 774 │ reserveShare, 2026-10-24T00:19:01.8566330Z 775 │ selectedEnvironmentServerConfig, 2026-10-24T00:19:01.8566470Z 776 │ selectedProject, 2026-10-24T00:19:01.8566577Z 777 │ shareImportAttempt, 2026-10-24T00:19:01.8566682Z ·  ─────────┬──────── 2026-10-24T00:19:01.8566906Z · ╰── Unnecessary dependency `shareImportAttempt` 2026-10-24T00:19:01.8567011Z 778 │ ]); 2026-10-24T00:19:01.8567101Z ╰──── 2026-10-24T00:19:01.8567421Z  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-24T00:19:01.8567791Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8567795Z 2026-10-24T00:19:01.8568076Z ⚠ eslint(no-unused-vars): Type 'EnvironmentId' is imported but never used. 2026-10-24T00:19:01.8568256Z ╭─[packages/client-runtime/src/state/sharedSettings.ts:2:3] 2026-10-24T00:19:01.8568354Z 1 │ import type { 2026-10-24T00:19:01.8568434Z 2 │ EnvironmentId, 2026-10-24T00:19:01.8568560Z ·  ──────┬────── 2026-10-24T00:19:01.8568746Z · ╰── 'EnvironmentId' is imported here 2026-10-24T00:19:01.8568866Z 3 │ ExecutionEnvironmentCapabilities, 2026-10-24T00:19:01.8568932Z ╰──── 2026-10-24T00:19:01.8569056Z  help: Consider removing this import. 2026-10-24T00:19:01.8569059Z 2026-10-24T00:19:01.8569328Z ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed 2026-10-24T00:19:01.8569543Z ╭─[apps/server/src/sourceControl/SourceControlProviderRegistry.ts:15:13] 2026-10-24T00:19:01.8569637Z 14 │ } from "@t3tools/contracts"; 2026-10-24T00:19:01.8569761Z 15 │ import type {} from "@t3tools/contracts"; 2026-10-24T00:19:01.8569874Z ·  ── 2026-10-24T00:19:01.8570104Z 16 │ import { detectSourceControlProviderFromRemoteUrl } from "@t3tools/shared/sourceControl"; 2026-10-24T00:19:01.8570172Z ╰──── 2026-10-24T00:19:01.8570290Z  help: Remove empty braces 2026-10-24T00:19:01.8570293Z 2026-10-24T00:19:01.8570589Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T00:19:01.8570785Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2139:5] 2026-10-24T00:19:01.8570872Z 2137 │ ); 2026-10-24T00:19:01.8570955Z 2138 │ useEffect(() => { 2026-10-24T00:19:01.8571072Z ·  ────┬──── 2026-10-24T00:19:01.8571264Z · ╰── This is the containing effect 2026-10-24T00:19:01.8571383Z 2139 │ setExpandedVideo(null); 2026-10-24T00:19:01.8571481Z ·  ────────┬─────── 2026-10-24T00:19:01.8571746Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T00:19:01.8571845Z 2140 │ setExpandedFile(null); 2026-10-24T00:19:01.8571950Z ╰──── 2026-10-24T00:19:01.8572586Z  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-24T00:19:01.8573058Z  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-24T00:19:01.8573108Z 2026-10-24T00:19:01.8573374Z ⚠ eslint(no-unused-vars): Identifier 'isMarkdownFileLinkLabel' is imported but never used. 2026-10-24T00:19:01.8573548Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:66:10] 2026-10-24T00:19:01.8573731Z 65 │ import { resolveAssetUrl } from "@t3tools/client-runtime/state/assets"; 2026-10-24T00:19:01.8573885Z 66 │ import { isMarkdownFileLinkLabel } from "@t3tools/shared/markdownLinks"; 2026-10-24T00:19:01.8574040Z ·  ───────────┬─────────── 2026-10-24T00:19:01.8574238Z · ╰── 'isMarkdownFileLinkLabel' is imported here 2026-10-24T00:19:01.8574453Z 67 │ import { formatAttachmentSize } from "@t3tools/client-runtime/state/attachments"; 2026-10-24T00:19:01.8574527Z ╰──── 2026-10-24T00:19:01.8574659Z  help: Consider removing this import. 2026-10-24T00:19:01.8574662Z 2026-10-24T00:19:01.8574906Z ⚠ eslint(no-unused-vars): Identifier 'createContext' is imported but never used. 2026-10-24T00:19:01.8575077Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:92:3] 2026-10-24T00:19:01.8575176Z 91 │ import { 2026-10-24T00:19:01.8575258Z 92 │ createContext, 2026-10-24T00:19:01.8575367Z ·  ──────┬────── 2026-10-24T00:19:01.8575527Z · ╰── 'createContext' is imported here 2026-10-24T00:19:01.8575640Z 93 │ memo, 2026-10-24T00:19:01.8575705Z ╰──── 2026-10-24T00:19:01.8575832Z  help: Consider removing this import. 2026-10-24T00:19:01.8575835Z 2026-10-24T00:19:01.8576089Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-24T00:19:01.8576271Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:108:3] 2026-10-24T00:19:01.8576359Z 107 │ import { 2026-10-24T00:19:01.8576459Z 108 │ ActivityIndicator, 2026-10-24T00:19:01.8576572Z ·  ────────┬──────── 2026-10-24T00:19:01.8576741Z · ╰── 'ActivityIndicator' is imported here 2026-10-24T00:19:01.8576840Z 109 │ Image, 2026-10-24T00:19:01.8576930Z ╰──── 2026-10-24T00:19:01.8577058Z  help: Consider removing this import. 2026-10-24T00:19:01.8577060Z 2026-10-24T00:19:01.8577294Z ⚠ eslint(no-unused-vars): Identifier 'ScrollView' is imported but never used. 2026-10-24T00:19:01.8577445Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:115:3] 2026-10-24T00:19:01.8577565Z 114 │ Pressable, 2026-10-24T00:19:01.8577657Z 115 │ ScrollView, 2026-10-24T00:19:01.8577760Z ·  ─────┬──── 2026-10-24T00:19:01.8577908Z · ╰── 'ScrollView' is imported here 2026-10-24T00:19:01.8578029Z 116 │ StyleSheet, 2026-10-24T00:19:01.8578117Z ╰──── 2026-10-24T00:19:01.8578247Z  help: Consider removing this import. 2026-10-24T00:19:01.8578250Z 2026-10-24T00:19:01.8578465Z ⚠ eslint(no-unused-vars): Identifier 'NativeText' is imported but never used. 2026-10-24T00:19:01.8578629Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:117:11] 2026-10-24T00:19:01.8578745Z 116 │ StyleSheet, 2026-10-24T00:19:01.8578844Z 117 │ Text as NativeText, 2026-10-24T00:19:01.8579012Z ·  ─────┬──── 2026-10-24T00:19:01.8579226Z · ╰── 'NativeText' is imported here 2026-10-24T00:19:01.8579335Z 118 │ type ColorValue, 2026-10-24T00:19:01.8579423Z ╰──── 2026-10-24T00:19:01.8579540Z  help: Consider removing this import. 2026-10-24T00:19:01.8579542Z 2026-10-24T00:19:01.8579793Z ⚠ eslint(no-unused-vars): Identifier 'tryOpenExternalUrl' is imported but never used. 2026-10-24T00:19:01.8579949Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:140:10] 2026-10-24T00:19:01.8580144Z 139 │ import { copyTextWithHaptic } from "../../lib/copyTextWithHaptic"; 2026-10-24T00:19:01.8580308Z 140 │ import { tryOpenExternalUrl } from "../../lib/openExternalUrl"; 2026-10-24T00:19:01.8580416Z ·  ─────────┬──────── 2026-10-24T00:19:01.8580612Z · ╰── 'tryOpenExternalUrl' is imported here 2026-10-24T00:19:01.8580805Z 141 │ import { downloadAndShareAttachment } from "../../lib/attachmentDownload"; 2026-10-24T00:19:01.8580898Z ╰──── 2026-10-24T00:19:01.8581008Z  help: Consider removing this import. 2026-10-24T00:19:01.8581011Z 2026-10-24T00:19:01.8581265Z ⚠ eslint(no-unused-vars): Identifier 'faviconUrlForOrigin' is imported but never used. 2026-10-24T00:19:01.8581424Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:143:10] 2026-10-24T00:19:01.8581613Z 142 │ import { hasWideMarkdownBlock } from "../../lib/wideMarkdownBlocks"; 2026-10-24T00:19:01.8581757Z 143 │ import { faviconUrlForOrigin } from "@t3tools/shared/favicon"; 2026-10-24T00:19:01.8581880Z ·  ─────────┬───────── 2026-10-24T00:19:01.8582071Z · ╰── 'faviconUrlForOrigin' is imported here 2026-10-24T00:19:01.8582169Z 144 │ import { 2026-10-24T00:19:01.8582245Z ╰──── 2026-10-24T00:19:01.8582371Z  help: Consider removing this import. 2026-10-24T00:19:01.8582374Z 2026-10-24T00:19:01.8582618Z ⚠ eslint(no-unused-vars): Identifier 'MediaVideoPlayer' is imported but never used. 2026-10-24T00:19:01.8582774Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:157:10] 2026-10-24T00:19:01.8582977Z 156 │ import { VideoAttachmentTile } from "../../components/VideoAttachmentTile"; 2026-10-24T00:19:01.8583129Z 157 │ import { MediaVideoPlayer } from "../../components/MediaVideoPlayer"; 2026-10-24T00:19:01.8583251Z ·  ────────┬─────── 2026-10-24T00:19:01.8583432Z · ╰── 'MediaVideoPlayer' is imported here 2026-10-24T00:19:01.8583664Z 158 │ import { resolveMarkdownMediaPreview } from "../../lib/markdownMedia"; 2026-10-24T00:19:01.8583772Z ╰──── 2026-10-24T00:19:01.8583923Z  help: Consider removing this import. 2026-10-24T00:19:01.8583926Z 2026-10-24T00:19:01.8584185Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoPreviewUri' is imported but never used. 2026-10-24T00:19:01.8584347Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:161:3] 2026-10-24T00:19:01.8584469Z 160 │ attachmentVideoPreviewSource, 2026-10-24T00:19:01.8584579Z 161 │ mediaVideoPreviewUri, 2026-10-24T00:19:01.8584698Z ·  ──────────┬───────── 2026-10-24T00:19:01.8584889Z · ╰── 'mediaVideoPreviewUri' is imported here 2026-10-24T00:19:01.8584968Z 162 │ mediaVideoThumbnailKey, 2026-10-24T00:19:01.8585082Z ╰──── 2026-10-24T00:19:01.8585212Z  help: Consider removing this import. 2026-10-24T00:19:01.8585219Z 2026-10-24T00:19:01.8585482Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoThumbnailKey' is imported but never used. 2026-10-24T00:19:01.8585630Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:162:3] 2026-10-24T00:19:01.8585739Z 161 │ mediaVideoPreviewUri, 2026-10-24T00:19:01.8585852Z 162 │ mediaVideoThumbnailKey, 2026-10-24T00:19:01.8585979Z ·  ───────────┬────────── 2026-10-24T00:19:01.8586171Z · ╰── 'mediaVideoThumbnailKey' is imported here 2026-10-24T00:19:01.8586259Z 163 │ type MediaVideoPreviewSource, 2026-10-24T00:19:01.8586366Z ╰──── 2026-10-24T00:19:01.8586493Z  help: Consider removing this import. 2026-10-24T00:19:01.8586496Z 2026-10-24T00:19:01.8586754Z ⚠ eslint(no-unused-vars): Type 'MediaVideoPreviewSource' is imported but never used. 2026-10-24T00:19:01.8586904Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:163:8] 2026-10-24T00:19:01.8587014Z 162 │ mediaVideoThumbnailKey, 2026-10-24T00:19:01.8587136Z 163 │ type MediaVideoPreviewSource, 2026-10-24T00:19:01.8587273Z ·  ───────────┬─────────── 2026-10-24T00:19:01.8587453Z · ╰── 'MediaVideoPreviewSource' is imported here 2026-10-24T00:19:01.8587564Z 164 │ } from "../../lib/videoPreviewSource"; 2026-10-24T00:19:01.8587665Z ╰──── 2026-10-24T00:19:01.8587793Z  help: Consider removing this import. 2026-10-24T00:19:01.8587796Z 2026-10-24T00:19:01.8588015Z ⚠ eslint(no-unused-vars): Type 'ReviewDiffTheme' is imported but never used. 2026-10-24T00:19:01.8588186Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:171:15] 2026-10-24T00:19:01.8588401Z 170 │ import { parseReviewCommentMessageSegments } from "../review/reviewCommentSelection"; 2026-10-24T00:19:01.8588589Z 171 │ import type { ReviewDiffTheme } from "../review/shikiReviewHighlighter"; 2026-10-24T00:19:01.8588695Z ·  ───────┬─────── 2026-10-24T00:19:01.8588877Z · ╰── 'ReviewDiffTheme' is imported here 2026-10-24T00:19:01.8588962Z 172 │ import { 2026-10-24T00:19:01.8589062Z ╰──── 2026-10-24T00:19:01.8589176Z  help: Consider removing this import. 2026-10-24T00:19:01.8589197Z 2026-10-24T00:19:01.8589446Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownFontSizes' is imported but never used. 2026-10-24T00:19:01.8589667Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:186:3] 2026-10-24T00:19:01.8589817Z 185 │ import { 2026-10-24T00:19:01.8589938Z 186 │ resolveMarkdownFontSizes, 2026-10-24T00:19:01.8590044Z ·  ────────────┬─────────── 2026-10-24T00:19:01.8590245Z · ╰── 'resolveMarkdownFontSizes' is imported here 2026-10-24T00:19:01.8590350Z 187 │ resolveNativeMarkdownTypography, 2026-10-24T00:19:01.8597551Z ╰──── 2026-10-24T00:19:01.8597694Z  help: Consider removing this import. 2026-10-24T00:19:01.8597697Z 2026-10-24T00:19:01.8597945Z ⚠ eslint(no-unused-vars): Identifier 'markdownLinkIconSource' is imported but never used. 2026-10-24T00:19:01.8598083Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:191:10] 2026-10-24T00:19:01.8598234Z 190 │ import { PierreEntryIcon } from "../../components/PierreEntryIcon"; 2026-10-24T00:19:01.8598385Z 191 │ import { markdownLinkIconSource } from "../../lib/markdownLinkIcons"; 2026-10-24T00:19:01.8598487Z ·  ───────────┬────────── 2026-10-24T00:19:01.8598658Z · ╰── 'markdownLinkIconSource' is imported here 2026-10-24T00:19:01.8598723Z 192 │ import { 2026-10-24T00:19:01.8598777Z ╰──── 2026-10-24T00:19:01.8598879Z  help: Consider removing this import. 2026-10-24T00:19:01.8598882Z 2026-10-24T00:19:01.8599149Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownInlineCodePresentation' is imported but never used. 2026-10-24T00:19:01.8599291Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:194:3] 2026-10-24T00:19:01.8599377Z 193 │ normalizeNativeMarkdownUrl, 2026-10-24T00:19:01.8599483Z 194 │ resolveMarkdownInlineCodePresentation, 2026-10-24T00:19:01.8599600Z ·  ──────────────────┬────────────────── 2026-10-24T00:19:01.8599804Z · ╰── 'resolveMarkdownInlineCodePresentation' is imported here 2026-10-24T00:19:01.8599884Z 195 │ resolveMarkdownLinkIcon, 2026-10-24T00:19:01.8599937Z ╰──── 2026-10-24T00:19:01.8600033Z  help: Consider removing this import. 2026-10-24T00:19:01.8600035Z 2026-10-24T00:19:01.8600269Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownLinkIcon' is imported but never used. 2026-10-24T00:19:01.8600406Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:195:3] 2026-10-24T00:19:01.8600507Z 194 │ resolveMarkdownInlineCodePresentation, 2026-10-24T00:19:01.8600582Z 195 │ resolveMarkdownLinkIcon, 2026-10-24T00:19:01.8600682Z ·  ───────────┬─────────── 2026-10-24T00:19:01.8600846Z · ╰── 'resolveMarkdownLinkIcon' is imported here 2026-10-24T00:19:01.8600940Z 196 │ resolveMarkdownLinkPresentation, 2026-10-24T00:19:01.8600991Z ╰──── 2026-10-24T00:19:01.8601089Z  help: Consider removing this import. 2026-10-24T00:19:01.8601091Z 2026-10-24T00:19:01.8601321Z ⚠ eslint(no-unused-vars): Identifier 'useMarkdownCodeHighlight' is imported but never used. 2026-10-24T00:19:01.8601458Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:234:10] 2026-10-24T00:19:01.8601566Z 233 │ import { ThreadMcpApp } from "./McpAppWebView"; 2026-10-24T00:19:01.8601710Z 234 │ import { useMarkdownCodeHighlight } from "./markdownCodeHighlightState"; 2026-10-24T00:19:01.8601813Z ·  ────────────┬─────────── 2026-10-24T00:19:01.8602097Z · ╰── 'useMarkdownCodeHighlight' is imported here 2026-10-24T00:19:01.8602206Z 235 │ import { 2026-10-24T00:19:01.8602258Z ╰──── 2026-10-24T00:19:01.8602356Z  help: Consider removing this import. 2026-10-24T00:19:01.8602359Z 2026-10-24T00:19:01.8602573Z ⚠ eslint(no-unused-vars): Identifier 'useAssetUrlState' is imported but never used. 2026-10-24T00:19:01.8602712Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:238:3] 2026-10-24T00:19:01.8602777Z 237 │ useAssetUrl, 2026-10-24T00:19:01.8602847Z 238 │ useAssetUrlState, 2026-10-24T00:19:01.8602930Z ·  ────────┬─────── 2026-10-24T00:19:01.8603076Z · ╰── 'useAssetUrlState' is imported here 2026-10-24T00:19:01.8603149Z 239 │ useRefreshAssetUrl, 2026-10-24T00:19:01.8603205Z ╰──── 2026-10-24T00:19:01.8603302Z  help: Consider removing this import. 2026-10-24T00:19:01.8603304Z 2026-10-24T00:19:01.8603511Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T00:19:01.8603647Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2141:7] 2026-10-24T00:19:01.8603724Z 2140 │ setExpandedFile(null); 2026-10-24T00:19:01.8603886Z 2141 │ }, [props.environmentId, props.threadId, props.contentPresentation.kind]); 2026-10-24T00:19:01.8604147Z ·  ─────────┬───────── ───────┬────── ───────────────┬────────────── 2026-10-24T00:19:01.8604450Z · │ │ ╰── Unnecessary dependency `props.contentPresentation.kind` 2026-10-24T00:19:01.8604659Z · │ ╰── Unnecessary dependency `props.threadId` 2026-10-24T00:19:01.8604827Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-24T00:19:01.8604972Z 2142 │ const horizontalPadding = props.layoutVariant === "split" ? 20 : 16; 2026-10-24T00:19:01.8605029Z ╰──── 2026-10-24T00:19:01.8605330Z  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-24T00:19:01.8605652Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8605656Z 2026-10-24T00:19:01.8605864Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T00:19:01.8606006Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2609:7] 2026-10-24T00:19:01.8606104Z 2608 │ reportHeaderMaterialVisibility(false); 2026-10-24T00:19:01.8606225Z 2609 │ }, [feedThreadKey, reportHeaderMaterialVisibility]); 2026-10-24T00:19:01.8606308Z ·  ──────┬────── 2026-10-24T00:19:01.8606465Z · ╰── Unnecessary dependency `feedThreadKey` 2026-10-24T00:19:01.8606519Z 2610 │ 2026-10-24T00:19:01.8606574Z ╰──── 2026-10-24T00:19:01.8606867Z  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-24T00:19:01.8607234Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8607275Z 2026-10-24T00:19:01.8607481Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T00:19:01.8607616Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2625:7] 2026-10-24T00:19:01.8607674Z 2624 │ } 2026-10-24T00:19:01.8607814Z 2625 │ }, [listMountKey, props.contentInsetEndAdjustment, listRef]); 2026-10-24T00:19:01.8607896Z ·  ──────┬───── 2026-10-24T00:19:01.8608044Z · ╰── Unnecessary dependency `listMountKey` 2026-10-24T00:19:01.8608102Z 2626 │ 2026-10-24T00:19:01.8608157Z ╰──── 2026-10-24T00:19:01.8608457Z  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-24T00:19:01.8608767Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8608770Z 2026-10-24T00:19:01.8608973Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T00:19:01.8609109Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2782:7] 2026-10-24T00:19:01.8609168Z 2781 │ } 2026-10-24T00:19:01.8609352Z 2782 │ }, [expandedTurnIds, expandedWorkGroups, expandedWorkRows, settleDisclosureAfterLayout]); 2026-10-24T00:19:01.8609564Z ·  ───────┬─────── ─────────┬──────── ────────┬─────── 2026-10-24T00:19:01.8609826Z · │ │ ╰── Unnecessary dependency `expandedWorkRows` 2026-10-24T00:19:01.8610039Z · │ ╰── Unnecessary dependency `expandedWorkGroups` 2026-10-24T00:19:01.8610192Z · ╰── Unnecessary dependency `expandedTurnIds` 2026-10-24T00:19:01.8610244Z 2783 │ 2026-10-24T00:19:01.8610298Z ╰──── 2026-10-24T00:19:01.8610593Z  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-24T00:19:01.8610910Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8610913Z 2026-10-24T00:19:01.8611148Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T00:19:01.8611461Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:613:9] 2026-10-24T00:19:01.8611600Z 612 │ }; 2026-10-24T00:19:01.8611722Z 613 │ }, [props.environmentId, attachment.id, httpBaseUrl]), 2026-10-24T00:19:01.8611915Z ·  ─────────┬───────── ──────┬────── ─────┬───── 2026-10-24T00:19:01.8612153Z · │ │ ╰── Unnecessary dependency `httpBaseUrl` 2026-10-24T00:19:01.8612350Z · │ ╰── Unnecessary dependency `attachment.id` 2026-10-24T00:19:01.8612524Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-24T00:19:01.8612587Z 614 │ ); 2026-10-24T00:19:01.8612638Z ╰──── 2026-10-24T00:19:01.8612950Z  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-24T00:19:01.8613256Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8613258Z 2026-10-24T00:19:01.8613479Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T00:19:01.8613601Z ╭─[packages/shared/src/serverSettings.ts:346:9] 2026-10-24T00:19:01.8613703Z 345 │ const entry: ProjectSettingsOverrides = { 2026-10-24T00:19:01.8613841Z 346 │ ...(entries.get(projectId) ?? currentEntries[projectId] ?? {}), 2026-10-24T00:19:01.8614049Z ·  ────────────────────────────────────────────────────────────── 2026-10-24T00:19:01.8614110Z 347 │ }; 2026-10-24T00:19:01.8614160Z ╰──── 2026-10-24T00:19:01.8614430Z  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-24T00:19:01.8614433Z 2026-10-24T00:19:01.8614659Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in Array.prototype.reduce() 2026-10-24T00:19:01.8614781Z ╭─[packages/shared/src/serverSettings.ts:448:24] 2026-10-24T00:19:01.8614846Z 447 │ const favorites = 2026-10-24T00:19:01.8614958Z 448 │ setModelFavorites?.reduce((current, change) => { 2026-10-24T00:19:01.8615055Z ·  ───┬── 2026-10-24T00:19:01.8615185Z · ╰── For this reduce 2026-10-24T00:19:01.8615265Z 449 │ const exists = current.some( 2026-10-24T00:19:01.8615438Z 450 │ (favorite) => favorite.provider === change.provider && favorite.model === change.model, 2026-10-24T00:19:01.8615499Z 451 │ ); 2026-10-24T00:19:01.8615574Z 452 │ return change.favorite 2026-10-24T00:19:01.8615635Z 453 │ ? exists 2026-10-24T00:19:01.8615701Z 454 │ ? current 2026-10-24T00:19:01.8615834Z 455 │ : [...current, { provider: change.provider, model: change.model }] 2026-10-24T00:19:01.8615920Z ·  ─────┬──── 2026-10-24T00:19:01.8616038Z · ╰── From this spread 2026-10-24T00:19:01.8616110Z 456 │ : current.filter( 2026-10-24T00:19:01.8616261Z ╰──── 2026-10-24T00:19:01.8616519Z  help: Consider using `Object.assign()` or `Array.prototype.push()` to mutate the accumulator instead. 2026-10-24T00:19:01.8616673Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T00:19:01.8616676Z 2026-10-24T00:19:01.8616867Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-24T00:19:01.8616990Z ╭─[packages/shared/src/serverSettings.ts:466:3] 2026-10-24T00:19:01.8617054Z 464 │ null; 2026-10-24T00:19:01.8617166Z 465 │ let nextModelPreferences = initialModelPreferences; 2026-10-24T00:19:01.8617257Z ·  ──────────┬───────── 2026-10-24T00:19:01.8617390Z · ╰── From this accumulator 2026-10-24T00:19:01.8617496Z 466 │ for (const change of setModelsHidden ?? []) { 2026-10-24T00:19:01.8617564Z ·  ─┬─ 2026-10-24T00:19:01.8617674Z · ╰── For this loop 2026-10-24T00:19:01.8617811Z 467 │ const preferences = nextModelPreferences?.[change.provider] ?? { 2026-10-24T00:19:01.8617880Z 468 │ hiddenModels: [], 2026-10-24T00:19:01.8617945Z 469 │ modelOrder: [], 2026-10-24T00:19:01.8618005Z 470 │ }; 2026-10-24T00:19:01.8618183Z 471 │ const hiddenModels = preferences.hiddenModels.filter((model) => model !== change.model); 2026-10-24T00:19:01.8618294Z 472 │ if (change.hidden) hiddenModels.push(change.model); 2026-10-24T00:19:01.8618370Z 473 │ nextModelPreferences = { 2026-10-24T00:19:01.8618447Z 474 │ ...nextModelPreferences, 2026-10-24T00:19:01.8618543Z ·  ───────────┬─────────── 2026-10-24T00:19:01.8618675Z · ╰── From this spread 2026-10-24T00:19:01.8618788Z 475 │ [change.provider]: { ...preferences, hiddenModels }, 2026-10-24T00:19:01.8618844Z ╰──── 2026-10-24T00:19:01.8619000Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-24T00:19:01.8619155Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T00:19:01.8619158Z 2026-10-24T00:19:01.8619385Z ⚠ eslint(no-unused-vars): Function 'assertUserMessagesExclude' is declared but never used. 2026-10-24T00:19:01.8619554Z ╭─[apps/server/src/orchestration-v2/testkit/fixtures/shared.ts:1398:10] 2026-10-24T00:19:01.8619613Z 1397 │ 2026-10-24T00:19:01.8619708Z 1398 │ function assertUserMessagesExclude( 2026-10-24T00:19:01.8619812Z ·  ────────────┬──────────── 2026-10-24T00:19:01.8619987Z · ╰── 'assertUserMessagesExclude' is declared here 2026-10-24T00:19:01.8620101Z 1399 │ projection: OrchestrationV2ThreadProjection, 2026-10-24T00:19:01.8620155Z ╰──── 2026-10-24T00:19:01.8620259Z  help: Consider removing this declaration. 2026-10-24T00:19:01.8620261Z 2026-10-24T00:19:01.8620720Z ⚠ 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-24T00:19:01.8620849Z ╭─[apps/server/src/serverSettings.test.ts:1741:32] 2026-10-24T00:19:01.8621024Z 1740 │ const model = createModelSelection(ProviderInstanceId.make("codex"), "gpt-5.5"); 2026-10-24T00:19:01.8621267Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-24T00:19:01.8621413Z ·  ─────────────────── 2026-10-24T00:19:01.8621527Z 1742 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-24T00:19:01.8621583Z ╰──── 2026-10-24T00:19:01.8621586Z 2026-10-24T00:19:01.8622040Z ⚠ 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-24T00:19:01.8622161Z ╭─[apps/server/src/serverSettings.test.ts:1742:34] 2026-10-24T00:19:01.8622348Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-24T00:19:01.8622460Z 1742 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-24T00:19:01.8622584Z ·  ─────────────────── 2026-10-24T00:19:01.8622707Z 1743 │ Schema.fromJsonString(Schema.Array(ProjectScript)), 2026-10-24T00:19:01.8622761Z ╰──── 2026-10-24T00:19:01.8622763Z 2026-10-24T00:19:01.8623237Z ⚠ 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-24T00:19:01.8623390Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:169:7] 2026-10-24T00:19:01.8623456Z 168 │ }); 2026-10-24T00:19:01.8623658Z 169 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T00:19:01.8623863Z 170 │ │ if ((yield* SubscriptionRef.get(shellState)).status === "synchronizing") break; 2026-10-24T00:19:01.8624001Z 171 │ │ yield* Effect.yieldNow; 2026-10-24T00:19:01.8624135Z 172 │ ╰─▶ } 2026-10-24T00:19:01.8624189Z 173 │ 2026-10-24T00:19:01.8624244Z ╰──── 2026-10-24T00:19:01.8624247Z 2026-10-24T00:19:01.8624710Z ⚠ 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-24T00:19:01.8624859Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:178:7] 2026-10-24T00:19:01.8624971Z 177 │ yield* Deferred.succeed(releaseSave, undefined); 2026-10-24T00:19:01.8625170Z 178 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T00:19:01.8625309Z 179 │ │ if ((yield* Ref.get(saved)).length > 0) break; 2026-10-24T00:19:01.8625417Z 180 │ │ yield* Effect.yieldNow; 2026-10-24T00:19:01.8625553Z 181 │ ╰─▶ } 2026-10-24T00:19:01.8625607Z 182 │ 2026-10-24T00:19:01.8625666Z ╰──── 2026-10-24T00:19:01.8625668Z 2026-10-24T00:19:01.8626128Z ⚠ 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-24T00:19:01.8626276Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:307:7] 2026-10-24T00:19:01.8626481Z 306 │ yield* Deferred.succeed(releaseUnenrichedSave, undefined); 2026-10-24T00:19:01.8626722Z 307 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T00:19:01.8626845Z 308 │ │ const values = yield* Ref.get(saved); 2026-10-24T00:19:01.8627042Z 309 │ │ if (values.length > 0 && values.at(-1)?.projects[0]?.repositoryIdentity != null) { 2026-10-24T00:19:01.8627132Z 310 │ │ break; 2026-10-24T00:19:01.8627211Z 311 │ │ } 2026-10-24T00:19:01.8627318Z 312 │ │ yield* Effect.yieldNow; 2026-10-24T00:19:01.8627452Z 313 │ ╰─▶ } 2026-10-24T00:19:01.8627508Z 314 │ 2026-10-24T00:19:01.8627561Z ╰──── 2026-10-24T00:19:01.8627564Z 2026-10-24T00:19:01.8627833Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T00:19:01.8628012Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:215:7] 2026-10-24T00:19:01.8628071Z 211 │ }; 2026-10-24T00:19:01.8628137Z 212 │ useEffect(() => { 2026-10-24T00:19:01.8628211Z ·  ────┬──── 2026-10-24T00:19:01.8628343Z · ╰── This is the containing effect 2026-10-24T00:19:01.8628518Z 213 │ const inserted = ownerKey ? readComposerDraftSelection(ownerKey, draftMessage) : null; 2026-10-24T00:19:01.8628584Z 214 │ if (inserted) { 2026-10-24T00:19:01.8628664Z 215 │ setSelection((current) => 2026-10-24T00:19:01.8628745Z ·  ──────┬───── 2026-10-24T00:19:01.8628924Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T00:19:01.8629095Z 216 │ current.start === inserted.start && current.end === inserted.end ? current : inserted, 2026-10-24T00:19:01.8629149Z ╰──── 2026-10-24T00:19:01.8629760Z  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-24T00:19:01.8630091Z  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-24T00:19:01.8630096Z 2026-10-24T00:19:01.8630414Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T00:19:01.8630615Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:296:7] 2026-10-24T00:19:01.8630699Z 284 │ }, [hasWorkspaceSnapshot]); 2026-10-24T00:19:01.8630767Z 285 │ useEffect(() => { 2026-10-24T00:19:01.8630843Z ·  ────┬──── 2026-10-24T00:19:01.8630975Z · ╰── This is the containing effect 2026-10-24T00:19:01.8631130Z 286 │ if (!environmentId || !projectCwd || !selectedProviderInstanceId) return; 2026-10-24T00:19:01.8631285Z 287 │ const key = `${environmentId}:${selectedProviderInstanceId}:${projectCwd}`; 2026-10-24T00:19:01.8631360Z 288 │ const now = Date.now(); 2026-10-24T00:19:01.8631474Z 289 │ const lastRequest = workspaceRefreshKeyRef.current; 2026-10-24T00:19:01.8631537Z 290 │ if ( 2026-10-24T00:19:01.8631623Z 291 │ lastRequest?.key === key && 2026-10-24T00:19:01.8631771Z 292 │ now - lastRequest.requestedAt < PROVIDER_WORKSPACE_SNAPSHOT_TTL_MS 2026-10-24T00:19:01.8631826Z 293 │ ) 2026-10-24T00:19:01.8631890Z 294 │ return; 2026-10-24T00:19:01.8632071Z 295 │ if (hasCurrentProviderWorkspaceSnapshot(selectedProviderStatus, projectCwd, now)) { 2026-10-24T00:19:01.8632161Z 296 │ setWorkspaceRefreshRetry(null); 2026-10-24T00:19:01.8632261Z ·  ────────────┬─────────── 2026-10-24T00:19:01.8632442Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T00:19:01.8632507Z 297 │ return; 2026-10-24T00:19:01.8632558Z ╰──── 2026-10-24T00:19:01.8633184Z  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-24T00:19:01.8633520Z  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-24T00:19:01.8633522Z 2026-10-24T00:19:01.8633730Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T00:19:01.8633909Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:326:5] 2026-10-24T00:19:01.8633965Z 325 │ }, [ 2026-10-24T00:19:01.8634051Z 326 │ draftMessage, 2026-10-24T00:19:01.8634132Z ·  ──────┬───── 2026-10-24T00:19:01.8634288Z · ╰── Unnecessary dependency `draftMessage` 2026-10-24T00:19:01.8634356Z 327 │ environmentId, 2026-10-24T00:19:01.8634411Z ╰──── 2026-10-24T00:19:01.8634711Z  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-24T00:19:01.8635028Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8635030Z 2026-10-24T00:19:01.8635228Z ⚠ eslint(no-unused-vars): Identifier 'Arr' is imported but never used. 2026-10-24T00:19:01.8635362Z ╭─[packages/client-runtime/src/state/threadSort.ts:4:13] 2026-10-24T00:19:01.8635483Z 3 │ import type { EnvironmentThreadShell } from "./models.ts"; 2026-10-24T00:19:01.8635624Z 4 │ import * as Arr from "effect/Array"; 2026-10-24T00:19:01.8635744Z ·  ─┬─ 2026-10-24T00:19:01.8635871Z · ╰── 'Arr' is imported here 2026-10-24T00:19:01.8635960Z 5 │ import * as Order from "effect/Order"; 2026-10-24T00:19:01.8636015Z ╰──── 2026-10-24T00:19:01.8636121Z  help: Consider removing this import. 2026-10-24T00:19:01.8636123Z 2026-10-24T00:19:01.8636322Z ⚠ eslint(no-unused-vars): Identifier 'Order' is imported but never used. 2026-10-24T00:19:01.8636458Z ╭─[packages/client-runtime/src/state/threadSort.ts:5:13] 2026-10-24T00:19:01.8636544Z 4 │ import * as Arr from "effect/Array"; 2026-10-24T00:19:01.8636630Z 5 │ import * as Order from "effect/Order"; 2026-10-24T00:19:01.8636706Z ·  ──┬── 2026-10-24T00:19:01.8636848Z · ╰── 'Order' is imported here 2026-10-24T00:19:01.8636907Z 6 │ 2026-10-24T00:19:01.8636962Z ╰──── 2026-10-24T00:19:01.8637059Z  help: Consider removing this import. 2026-10-24T00:19:01.8637062Z 2026-10-24T00:19:01.8637281Z ⚠ eslint(no-unused-vars): Function 'describeSchedule' is declared but never used. 2026-10-24T00:19:01.8637416Z ╭─[apps/server/src/scheduledTasks/Schedule.ts:79:10] 2026-10-24T00:19:01.8637473Z 78 │ 2026-10-24T00:19:01.8637614Z 79 │ function describeSchedule(schedule: ScheduledTaskSchedule): string { 2026-10-24T00:19:01.8637706Z ·  ────────┬─────── 2026-10-24T00:19:01.8637859Z · ╰── 'describeSchedule' is declared here 2026-10-24T00:19:01.8637971Z 80 │ if (schedule.type === "webhook") return "On webhook"; 2026-10-24T00:19:01.8638023Z ╰──── 2026-10-24T00:19:01.8638140Z  help: Consider removing this declaration. 2026-10-24T00:19:01.8638145Z 2026-10-24T00:19:01.8638354Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T00:19:01.8638488Z ╭─[packages/client-runtime/src/state/filesystem.ts:3:8] 2026-10-24T00:19:01.8638563Z 2 │ AuthFilesystemReadScope, 2026-10-24T00:19:01.8638635Z 3 │ type AuthSessionState, 2026-10-24T00:19:01.8638723Z ·  ────────┬─────── 2026-10-24T00:19:01.8638875Z · ╰── 'AuthSessionState' is imported here 2026-10-24T00:19:01.8638953Z 4 │ type FilesystemBrowseEntry, 2026-10-24T00:19:01.8639009Z ╰──── 2026-10-24T00:19:01.8639116Z  help: Consider removing this import. 2026-10-24T00:19:01.8639118Z 2026-10-24T00:19:01.8639392Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T00:19:01.8639561Z ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:40:5] 2026-10-24T00:19:01.8639677Z 37 │ const [initialized, setInitialized] = useState(false); 2026-10-24T00:19:01.8639752Z 38 │ useLayoutEffect(() => { 2026-10-24T00:19:01.8639835Z ·  ───────┬─────── 2026-10-24T00:19:01.8639969Z · ╰── This is the containing effect 2026-10-24T00:19:01.8640037Z 39 │ reset(); 2026-10-24T00:19:01.8640111Z 40 │ setInitialized(true); 2026-10-24T00:19:01.8640194Z ·  ───────┬────── 2026-10-24T00:19:01.8640371Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T00:19:01.8640503Z 41 │ }, [reset]); 2026-10-24T00:19:01.8640595Z ╰──── 2026-10-24T00:19:01.8641234Z  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-24T00:19:01.8641574Z  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-24T00:19:01.8641577Z 2026-10-24T00:19:01.8641848Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T00:19:01.8642020Z ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:93:5] 2026-10-24T00:19:01.8642082Z 88 │ 2026-10-24T00:19:01.8642155Z 89 │ useEffect(() => { 2026-10-24T00:19:01.8642229Z ·  ────┬──── 2026-10-24T00:19:01.8642370Z · ╰── This is the containing effect 2026-10-24T00:19:01.8642538Z 90 │ if (!needsPreparation || !initialProjectRef.branch || waitingForProject) return; 2026-10-24T00:19:01.8642648Z 91 │ const branchName = initialProjectRef.branch; 2026-10-24T00:19:01.8642717Z 92 │ let active = true; 2026-10-24T00:19:01.8642820Z 93 │ setPendingCheckouts((count) => count + 1); 2026-10-24T00:19:01.8642911Z ·  ─────────┬───────── 2026-10-24T00:19:01.8643094Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T00:19:01.8643252Z 94 │ // Serialize replacements: ignoring a stale result cannot undo its Git mutation. 2026-10-24T00:19:01.8643317Z ╰──── 2026-10-24T00:19:01.8643960Z  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-24T00:19:01.8644330Z  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-24T00:19:01.8644333Z 2026-10-24T00:19:01.8644822Z ⚠ 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-24T00:19:01.8645019Z ╭─[apps/server/src/scheduledTasks/ScheduledTaskService.webhook.test.ts:521:13] 2026-10-24T00:19:01.8645100Z 520 │ })).delivery; 2026-10-24T00:19:01.8645310Z 521 │ ╭─▶ while (delivery.outcome === "accepted") { 2026-10-24T00:19:01.8645434Z 522 │ │ yield* Effect.yieldNow; 2026-10-24T00:19:01.8645590Z 523 │ │ delivery = (yield* service.getWebhookDelivery({ 2026-10-24T00:19:01.8645694Z 524 │ │ id: task.id, 2026-10-24T00:19:01.8645820Z 525 │ │ deliveryId: deliveryId!, 2026-10-24T00:19:01.8645925Z 526 │ │ })).delivery; 2026-10-24T00:19:01.8646071Z 527 │ ╰─▶ } 2026-10-24T00:19:01.8646248Z 528 │ assert.equal(delivery.outcome, "dispatch_failed"); 2026-10-24T00:19:01.8646344Z ╰──── 2026-10-24T00:19:01.8646347Z 2026-10-24T00:19:01.8646565Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T00:19:01.8646705Z ╭─[packages/client-runtime/src/state/usageAccess.ts:3:8] 2026-10-24T00:19:01.8646780Z 2 │ AuthDiagnosticsReadScope, 2026-10-24T00:19:01.8646858Z 3 │ type AuthSessionState, 2026-10-24T00:19:01.8646949Z ·  ────────┬─────── 2026-10-24T00:19:01.8647105Z · ╰── 'AuthSessionState' is imported here 2026-10-24T00:19:01.8647176Z 4 │ sessionGrantsScope, 2026-10-24T00:19:01.8647234Z ╰──── 2026-10-24T00:19:01.8647338Z  help: Consider removing this import. 2026-10-24T00:19:01.8647341Z 2026-10-24T00:19:01.8647829Z ⚠ 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-24T00:19:01.8647965Z ╭─[apps/server/src/usage/UsageService.test.ts:2383:7] 2026-10-24T00:19:01.8648068Z 2382 │ let orphanedAt: number | undefined; 2026-10-24T00:19:01.8648314Z 2383 │ ╭─▶ for (let interruptAt = 1; interruptAt <= 31; interruptAt += 1) { 2026-10-24T00:19:01.8648445Z 2384 │ │ const tasks: Array<() => void> = []; 2026-10-24T00:19:01.8648604Z 2385 │ │ const dispatcher: Scheduler.SchedulerDispatcher = { 2026-10-24T00:19:01.8648748Z 2386 │ │ scheduleTask: (task) => tasks.push(task), 2026-10-24T00:19:01.8648859Z 2387 │ │ flush: () => { 2026-10-24T00:19:01.8648992Z 2388 │ │ let task: (() => void) | undefined; 2026-10-24T00:19:01.8649151Z 2389 │ │ while ((task = tasks.shift()) !== undefined) task(); 2026-10-24T00:19:01.8649236Z 2390 │ │ }, 2026-10-24T00:19:01.8649325Z 2391 │ │ }; 2026-10-24T00:19:01.8649402Z 2392 │ │ 2026-10-24T00:19:01.8649573Z 2393 │ │ let requestFiber: Fiber.Fiber | undefined; 2026-10-24T00:19:01.8649683Z 2394 │ │ let requestChecks = 0; 2026-10-24T00:19:01.8649821Z 2395 │ │ const scheduler: Scheduler.Scheduler = { 2026-10-24T00:19:01.8649945Z 2396 │ │ executionMode: "async", 2026-10-24T00:19:01.8650078Z 2397 │ │ makeDispatcher: () => dispatcher, 2026-10-24T00:19:01.8650196Z 2398 │ │ shouldYield: (fiber) => { 2026-10-24T00:19:01.8650342Z 2399 │ │ if (fiber !== requestFiber) return false; 2026-10-24T00:19:01.8650458Z 2400 │ │ requestChecks += 1; 2026-10-24T00:19:01.8650619Z 2401 │ │ if (requestChecks !== interruptAt) return false; 2026-10-24T00:19:01.8650741Z 2402 │ │ fiber.interruptUnsafe(); 2026-10-24T00:19:01.8650850Z 2403 │ │ return true; 2026-10-24T00:19:01.8650939Z 2404 │ │ }, 2026-10-24T00:19:01.8651030Z 2405 │ │ }; 2026-10-24T00:19:01.8651162Z 2406 │ │ 2026-10-24T00:19:01.8651339Z 2407 │ │ const input: UsageSummaryInput = { 2026-10-24T00:19:01.8651441Z 2408 │ │ ...WINDOW, 2026-10-24T00:19:01.8651658Z 2409 │ │ sinceDay: UsageDay.make("2026-09-01"), 2026-10-24T00:19:01.8651868Z 2410 │ │ untilDay: UsageDay.make(`2026-08-${String(interruptAt).padStart(2, "0")}`), 2026-10-24T00:19:01.8651957Z 2411 │ │ }; 2026-10-24T00:19:01.8652083Z 2412 │ │ const first = yield* service 2026-10-24T00:19:01.8652200Z 2413 │ │ .readSummary(input) 2026-10-24T00:19:01.8652293Z 2414 │ │ .pipe( 2026-10-24T00:19:01.8652401Z 2415 │ │ Effect.exit, 2026-10-24T00:19:01.8652580Z 2416 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-24T00:19:01.8652696Z 2417 │ │ Effect.forkChild, 2026-10-24T00:19:01.8652781Z 2418 │ │ ); 2026-10-24T00:19:01.8652892Z 2419 │ │ requestFiber = first; 2026-10-24T00:19:01.8653007Z 2420 │ │ yield* Effect.yieldNow; 2026-10-24T00:19:01.8653119Z 2421 │ │ dispatcher.flush(); 2026-10-24T00:19:01.8653192Z 2422 │ │ 2026-10-24T00:19:01.8653358Z 2423 │ │ const second = yield* service.readSummary(input).pipe( 2026-10-24T00:19:01.8653465Z 2424 │ │ Effect.match({ 2026-10-24T00:19:01.8653606Z 2425 │ │ onFailure: (error) => error.reason, 2026-10-24T00:19:01.8653743Z 2426 │ │ onSuccess: () => "success" as const, 2026-10-24T00:19:01.8653835Z 2427 │ │ }), 2026-10-24T00:19:01.8654026Z 2428 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-24T00:19:01.8654135Z 2429 │ │ Effect.forkChild, 2026-10-24T00:19:01.8654219Z 2430 │ │ ); 2026-10-24T00:19:01.8654332Z 2431 │ │ yield* Effect.yieldNow; 2026-10-24T00:19:01.8654445Z 2432 │ │ dispatcher.flush(); 2026-10-24T00:19:01.8654585Z 2433 │ │ const secondExit = second.pollUnsafe(); 2026-10-24T00:19:01.8654709Z 2434 │ │ if (secondExit === undefined) { 2026-10-24T00:19:01.8654931Z 2435 │ │ second.interruptUnsafe(); 2026-10-24T00:19:01.8655108Z 2436 │ │ orphanedAt = interruptAt; 2026-10-24T00:19:01.8655206Z 2437 │ │ break; 2026-10-24T00:19:01.8655290Z 2438 │ │ } 2026-10-24T00:19:01.8655420Z 2439 │ │ if (Exit.isFailure(secondExit)) { 2026-10-24T00:19:01.8655593Z 2440 │ │ assert.fail("the matching request fiber was interrupted"); 2026-10-24T00:19:01.8655682Z 2441 │ │ } 2026-10-24T00:19:01.8655842Z 2442 │ │ assert.strictEqual(secondExit.value, "invalidWindow"); 2026-10-24T00:19:01.8655987Z 2443 │ ╰─▶ } 2026-10-24T00:19:01.8656049Z 2444 │ 2026-10-24T00:19:01.8656106Z ╰──── 2026-10-24T00:19:01.8656116Z 2026-10-24T00:19:01.8656408Z ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'. 2026-10-24T00:19:01.8656536Z ╭─[apps/server/src/usage/UsageService.ts:169:7] 2026-10-24T00:19:01.8656598Z 168 │ 2026-10-24T00:19:01.8656684Z 169 │ const layerTest = Layer.succeed( 2026-10-24T00:19:01.8656767Z ·  ────┬──── 2026-10-24T00:19:01.8656908Z · ╰── 'layerTest' is declared here 2026-10-24T00:19:01.8656981Z 170 │ UsageService, 2026-10-24T00:19:01.8657040Z ╰──── 2026-10-24T00:19:01.8657149Z  help: Consider removing this declaration. 2026-10-24T00:19:01.8657155Z 2026-10-24T00:19:01.8657435Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T00:19:01.8657600Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:512:5] 2026-10-24T00:19:01.8657665Z 510 │ }, []); 2026-10-24T00:19:01.8657738Z 511 │ useEffect(() => { 2026-10-24T00:19:01.8657812Z ·  ────┬──── 2026-10-24T00:19:01.8657955Z · ╰── This is the containing effect 2026-10-24T00:19:01.8658046Z 512 │ setKeyboardStateSuspect(false); 2026-10-24T00:19:01.8658145Z ·  ───────────┬─────────── 2026-10-24T00:19:01.8658327Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T00:19:01.8658436Z 513 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-24T00:19:01.8658493Z ╰──── 2026-10-24T00:19:01.8659145Z  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-24T00:19:01.8659491Z  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-24T00:19:01.8659498Z 2026-10-24T00:19:01.8659770Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T00:19:01.8659937Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:872:7] 2026-10-24T00:19:01.8660107Z 869 │ const [lastKnownKeyboardHeight, setLastKnownKeyboardHeight] = useState(0); 2026-10-24T00:19:01.8660236Z 870 │ useEffect(() => { 2026-10-24T00:19:01.8660351Z ·  ────┬──── 2026-10-24T00:19:01.8660494Z · ╰── This is the containing effect 2026-10-24T00:19:01.8660665Z 871 │ if (liveKeyboardHeight > 0 && liveKeyboardHeight !== lastKnownKeyboardHeight) { 2026-10-24T00:19:01.8660789Z 872 │ setLastKnownKeyboardHeight(liveKeyboardHeight); 2026-10-24T00:19:01.8660892Z ·  ─────────────┬──────────── 2026-10-24T00:19:01.8661084Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T00:19:01.8661147Z 873 │ } 2026-10-24T00:19:01.8661202Z ╰──── 2026-10-24T00:19:01.8661842Z  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-24T00:19:01.8662193Z  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-24T00:19:01.8662196Z 2026-10-24T00:19:01.8662471Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T00:19:01.8662642Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1119:5] 2026-10-24T00:19:01.8662703Z 1117 │ 2026-10-24T00:19:01.8662775Z 1118 │ useEffect(() => { 2026-10-24T00:19:01.8662861Z ·  ────┬──── 2026-10-24T00:19:01.8663003Z · ╰── This is the containing effect 2026-10-24T00:19:01.8663095Z 1119 │ setAnchorMessageId(null); 2026-10-24T00:19:01.8663191Z ·  ─────────┬──────── 2026-10-24T00:19:01.8663378Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T00:19:01.8663469Z 1120 │ setSubmittedMessageId(null); 2026-10-24T00:19:01.8663528Z ╰──── 2026-10-24T00:19:01.8664197Z  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-24T00:19:01.8664541Z  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-24T00:19:01.8664543Z 2026-10-24T00:19:01.8664767Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T00:19:01.8664934Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:513:7] 2026-10-24T00:19:01.8665026Z 512 │ setKeyboardStateSuspect(false); 2026-10-24T00:19:01.8665131Z 513 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-24T00:19:01.8665287Z ·  ────────┬──────── ─────────┬──────── 2026-10-24T00:19:01.8665512Z · │ ╰── Unnecessary dependency `liveKeyboardHeight` 2026-10-24T00:19:01.8665682Z · ╰── Unnecessary dependency `isKeyboardVisible` 2026-10-24T00:19:01.8665816Z 514 │ const handleOwnedInputFocusChange = (focused: boolean) => { 2026-10-24T00:19:01.8665930Z ╰──── 2026-10-24T00:19:01.8666282Z  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-24T00:19:01.8666614Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8666617Z 2026-10-24T00:19:01.8666829Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T00:19:01.8666997Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1067:7] 2026-10-24T00:19:01.8667092Z 1066 │ userInputInsetProgress.set(1); 2026-10-24T00:19:01.8667270Z 1067 │ }, [activeUserInputRequestId, userInputCardProgress, userInputInsetProgress]); 2026-10-24T00:19:01.8667382Z ·  ────────────┬─────────── 2026-10-24T00:19:01.8667573Z · ╰── Unnecessary dependency `activeUserInputRequestId` 2026-10-24T00:19:01.8667690Z 1068 │ const showContent = props.showContent ?? true; 2026-10-24T00:19:01.8667748Z ╰──── 2026-10-24T00:19:01.8668062Z  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-24T00:19:01.8668396Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8668399Z 2026-10-24T00:19:01.8668616Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T00:19:01.8668786Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1125:15] 2026-10-24T00:19:01.8668866Z 1124 │ freeze.set(false); 2026-10-24T00:19:01.8668952Z 1125 │ }, [freeze, selectedThreadKey]); 2026-10-24T00:19:01.8669056Z ·  ────────┬──────── 2026-10-24T00:19:01.8669234Z · ╰── Unnecessary dependency `selectedThreadKey` 2026-10-24T00:19:01.8669296Z 1126 │ 2026-10-24T00:19:01.8669350Z ╰──── 2026-10-24T00:19:01.8669660Z  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-24T00:19:01.8669987Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8669990Z 2026-10-24T00:19:01.8670165Z ⚠ react(immutability): This value cannot be modified 2026-10-24T00:19:01.8670330Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:955:5] 2026-10-24T00:19:01.8670446Z 950 │ const composerPopoverHeight = useSharedValue(0); 2026-10-24T00:19:01.8670561Z 951 │ const floatingControlCoverage = useSharedValue( 2026-10-24T00:19:01.8670664Z ·  ───────────┬─────────── 2026-10-24T00:19:01.8670839Z · ╰── `floatingControlCoverage` originates here 2026-10-24T00:19:01.8670971Z 952 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-24T00:19:01.8671033Z 953 │ ); 2026-10-24T00:19:01.8671106Z 954 │ useEffect(() => { 2026-10-24T00:19:01.8671216Z 955 │ floatingControlCoverage.value = withTiming( 2026-10-24T00:19:01.8671313Z ·  ───────────┬─────────── 2026-10-24T00:19:01.8671550Z · ╰── `floatingControlCoverage` cannot be modified 2026-10-24T00:19:01.8671727Z 956 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-24T00:19:01.8671783Z ╰──── 2026-10-24T00:19:01.8672065Z  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-24T00:19:01.8672390Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T00:19:01.8672393Z 2026-10-24T00:19:01.8672562Z ⚠ react(immutability): This value cannot be modified 2026-10-24T00:19:01.8672726Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:973:7] 2026-10-24T00:19:01.8672926Z 963 │ const userInputCoverageApplies = Platform.OS === "ios" && activeUserInputRequestId !== null; 2026-10-24T00:19:01.8673061Z 964 │ const combinedContentInsetEndAdjustment = useSharedValue( 2026-10-24T00:19:01.8673185Z ·  ────────────────┬──────────────── 2026-10-24T00:19:01.8673384Z · ╰── `combinedContentInsetEndAdjustment` originates here 2026-10-24T00:19:01.8673523Z 965 │ Math.max(0, estimatedOverlayHeight - nativeInsetOvercount), 2026-10-24T00:19:01.8673580Z 966 │ ); 2026-10-24T00:19:01.8673657Z 967 │ useAnimatedReaction( 2026-10-24T00:19:01.8673722Z 968 │ () => 2026-10-24T00:19:01.8673820Z 969 │ contentInsetEndAdjustment.value + 2026-10-24T00:19:01.8673930Z 970 │ floatingControlCoverage.value + 2026-10-24T00:19:01.8674185Z 971 │ (userInputCoverageApplies ? userInputInsetProgress.value * userInputCardCoverage.value : 0), 2026-10-24T00:19:01.8674259Z 972 │ (value) => { 2026-10-24T00:19:01.8674377Z 973 │ combinedContentInsetEndAdjustment.value = value; 2026-10-24T00:19:01.8674495Z ·  ────────────────┬──────────────── 2026-10-24T00:19:01.8674699Z · ╰── `combinedContentInsetEndAdjustment` cannot be modified 2026-10-24T00:19:01.8674760Z 974 │ }, 2026-10-24T00:19:01.8674815Z ╰──── 2026-10-24T00:19:01.8675097Z  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-24T00:19:01.8675422Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T00:19:01.8675425Z 2026-10-24T00:19:01.8675992Z ⚠ 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-24T00:19:01.8676195Z ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1228:7] 2026-10-24T00:19:01.8676294Z 1227 │ yield* harness.replaceSession; 2026-10-24T00:19:01.8676525Z 1228 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T00:19:01.8676691Z 1229 │ │ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) { 2026-10-24T00:19:01.8676786Z 1230 │ │ break; 2026-10-24T00:19:01.8676872Z 1231 │ │ } 2026-10-24T00:19:01.8676992Z 1232 │ │ yield* Effect.yieldNow; 2026-10-24T00:19:01.8677145Z 1233 │ ╰─▶ } 2026-10-24T00:19:01.8677226Z 1234 │ yield* Queue.offer( 2026-10-24T00:19:01.8677280Z ╰──── 2026-10-24T00:19:01.8677287Z 2026-10-24T00:19:01.8677779Z ⚠ 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-24T00:19:01.8677945Z ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1337:7] 2026-10-24T00:19:01.8678043Z 1336 │ yield* harness.replaceSession; 2026-10-24T00:19:01.8678263Z 1337 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T00:19:01.8678438Z 1338 │ │ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) break; 2026-10-24T00:19:01.8678556Z 1339 │ │ yield* Effect.yieldNow; 2026-10-24T00:19:01.8678702Z 1340 │ ╰─▶ } 2026-10-24T00:19:01.8678843Z 1341 │ expect(yield* Ref.get(harness.subscriptionCount)).toBe(2); 2026-10-24T00:19:01.8678899Z ╰──── 2026-10-24T00:19:01.8678901Z 2026-10-24T00:19:01.8679103Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T00:19:01.8679269Z ╭─[apps/mobile/src/features/threads/ThreadQueueControl.tsx:602:27] 2026-10-24T00:19:01.8679452Z 601 │ const onEnd = useEffectEvent((y: number, success: boolean) => props.onEnd(y, success)); 2026-10-24T00:19:01.8679538Z 602 │ const gesture = Gesture.Pan() 2026-10-24T00:19:01.8679635Z ·  ─┬─ 2026-10-24T00:19:01.8679789Z · ╰── `Pan` may be a component 2026-10-24T00:19:01.8679871Z 603 │ .enabled(!props.disabled) 2026-10-24T00:19:01.8679928Z ╰──── 2026-10-24T00:19:01.8680222Z  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-24T00:19:01.8680696Z  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-24T00:19:01.8680699Z 2026-10-24T00:19:01.8681074Z ⚠ eslint(no-unused-vars): Variable 'revokeActiveMcpThread' is declared but never used. Unused variables should start with a '_'. 2026-10-24T00:19:01.8681246Z ╭─[apps/server/src/mcp/McpSessionRegistry.ts:218:7] 2026-10-24T00:19:01.8681302Z 217 │ 2026-10-24T00:19:01.8681462Z 218 │ const revokeActiveMcpThread = (threadId: ThreadId): Effect.Effect => 2026-10-24T00:19:01.8681559Z ·  ──────────┬────────── 2026-10-24T00:19:01.8681725Z · ╰── 'revokeActiveMcpThread' is declared here 2026-10-24T00:19:01.8681926Z 219 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeThread(threadId) : Effect.void; 2026-10-24T00:19:01.8681982Z ╰──── 2026-10-24T00:19:01.8682095Z  help: Consider removing this declaration. 2026-10-24T00:19:01.8682098Z 2026-10-24T00:19:01.8682440Z ⚠ eslint(no-unused-vars): Variable 'revokeAllActiveMcpCredentials' is declared but never used. Unused variables should start with a '_'. 2026-10-24T00:19:01.8682604Z ╭─[apps/server/src/mcp/McpSessionRegistry.ts:221:7] 2026-10-24T00:19:01.8682659Z 220 │ 2026-10-24T00:19:01.8682802Z 221 │ const revokeAllActiveMcpCredentials = (): Effect.Effect => 2026-10-24T00:19:01.8682912Z ·  ──────────────┬────────────── 2026-10-24T00:19:01.8683102Z · ╰── 'revokeAllActiveMcpCredentials' is declared here 2026-10-24T00:19:01.8683272Z 222 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeAll : Effect.void; 2026-10-24T00:19:01.8683333Z ╰──── 2026-10-24T00:19:01.8683445Z  help: Consider removing this declaration. 2026-10-24T00:19:01.8683449Z 2026-10-24T00:19:01.8683618Z ⚠ react(immutability): This value cannot be modified 2026-10-24T00:19:01.8683795Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:111:5] 2026-10-24T00:19:01.8683860Z 107 │ ); 2026-10-24T00:19:01.8684054Z 108 │ const separationProgress = useSharedValue(props.showScrollToEnd ? 1 : 0); 2026-10-24T00:19:01.8684154Z ·  ─────────┬──────── 2026-10-24T00:19:01.8684312Z · ╰── `separationProgress` originates here 2026-10-24T00:19:01.8684370Z 109 │ 2026-10-24T00:19:01.8684451Z 110 │ useEffect(() => { 2026-10-24T00:19:01.8684636Z 111 │ separationProgress.value = withTiming(props.showScrollToEnd ? 1 : 0, CONTROL_TIMING); 2026-10-24T00:19:01.8684725Z ·  ─────────┬──────── 2026-10-24T00:19:01.8684890Z · ╰── `separationProgress` cannot be modified 2026-10-24T00:19:01.8685008Z 112 │ }, [props.showScrollToEnd, separationProgress]); 2026-10-24T00:19:01.8685075Z ╰──── 2026-10-24T00:19:01.8685357Z  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-24T00:19:01.8685687Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T00:19:01.8685691Z 2026-10-24T00:19:01.8685862Z ⚠ react(immutability): This value cannot be modified 2026-10-24T00:19:01.8686037Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5] 2026-10-24T00:19:01.8686158Z 128 │ // and repeatedly retargets the animation as it grows. 2026-10-24T00:19:01.8686279Z 129 │ const capsuleWidth = useSharedValue(null); 2026-10-24T00:19:01.8686368Z ·  ──────┬───── 2026-10-24T00:19:01.8686584Z · ╰── `capsuleWidth` originates here 2026-10-24T00:19:01.8686748Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T00:19:01.8686871Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T00:19:01.8686985Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T00:19:01.8687092Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T00:19:01.8687160Z 134 │ return; 2026-10-24T00:19:01.8687217Z 135 │ } 2026-10-24T00:19:01.8687331Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T00:19:01.8687423Z 137 │ measuredWidthRef.current = width; 2026-10-24T00:19:01.8687572Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T00:19:01.8687656Z ·  ──────┬───── 2026-10-24T00:19:01.8687817Z · ╰── `capsuleWidth` cannot be modified 2026-10-24T00:19:01.8687881Z 139 │ }; 2026-10-24T00:19:01.8687936Z ╰──── 2026-10-24T00:19:01.8688217Z  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-24T00:19:01.8688540Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T00:19:01.8688543Z 2026-10-24T00:19:01.8688712Z ⚠ react(immutability): This value cannot be modified 2026-10-24T00:19:01.8688887Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7] 2026-10-24T00:19:01.8689003Z 128 │ // and repeatedly retargets the animation as it grows. 2026-10-24T00:19:01.8689134Z 129 │ const capsuleWidth = useSharedValue(null); 2026-10-24T00:19:01.8689223Z ·  ──────┬───── 2026-10-24T00:19:01.8689370Z · ╰── `capsuleWidth` originates here 2026-10-24T00:19:01.8689486Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T00:19:01.8689609Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T00:19:01.8689723Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T00:19:01.8689829Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T00:19:01.8689893Z 134 │ return; 2026-10-24T00:19:01.8689954Z 135 │ } 2026-10-24T00:19:01.8690067Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T00:19:01.8690162Z 137 │ measuredWidthRef.current = width; 2026-10-24T00:19:01.8690316Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T00:19:01.8690382Z 139 │ }; 2026-10-24T00:19:01.8690485Z 140 │ const hasStatus = props.status !== null; 2026-10-24T00:19:01.8690630Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-24T00:19:01.8690700Z 142 │ useEffect(() => { 2026-10-24T00:19:01.8690775Z 143 │ if (!hasStatus) { 2026-10-24T00:19:01.8690869Z 144 │ measuredWidthRef.current = null; 2026-10-24T00:19:01.8690955Z 145 │ capsuleWidth.value = null; 2026-10-24T00:19:01.8691035Z ·  ──────┬───── 2026-10-24T00:19:01.8691187Z · ╰── `capsuleWidth` cannot be modified 2026-10-24T00:19:01.8691248Z 146 │ } 2026-10-24T00:19:01.8691302Z ╰──── 2026-10-24T00:19:01.8691943Z  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-24T00:19:01.8692486Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T00:19:01.8692489Z 2026-10-24T00:19:01.8692706Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T00:19:01.8692882Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7] 2026-10-24T00:19:01.8693026Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-24T00:19:01.8693100Z 142 │ useEffect(() => { 2026-10-24T00:19:01.8693187Z ·  ───┬─── 2026-10-24T00:19:01.8693423Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-24T00:19:01.8693499Z 143 │ if (!hasStatus) { 2026-10-24T00:19:01.8693603Z 144 │ measuredWidthRef.current = null; 2026-10-24T00:19:01.8693693Z 145 │ capsuleWidth.value = null; 2026-10-24T00:19:01.8693777Z ·  ──────┬───── 2026-10-24T00:19:01.8693940Z · ╰── This modifies `capsuleWidth` 2026-10-24T00:19:01.8694002Z 146 │ } 2026-10-24T00:19:01.8694061Z ╰──── 2026-10-24T00:19:01.8694540Z  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-24T00:19:01.8695070Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T00:19:01.8695080Z 2026-10-24T00:19:01.8695441Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T00:19:01.8695732Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5] 2026-10-24T00:19:01.8695920Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T00:19:01.8696120Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T00:19:01.8696332Z ·  ───────────────┬─────────────── 2026-10-24T00:19:01.8696753Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-24T00:19:01.8696941Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T00:19:01.8697104Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T00:19:01.8697205Z 134 │ return; 2026-10-24T00:19:01.8697318Z 135 │ } 2026-10-24T00:19:01.8697509Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T00:19:01.8697662Z 137 │ measuredWidthRef.current = width; 2026-10-24T00:19:01.8697906Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T00:19:01.8698059Z ·  ──────┬───── 2026-10-24T00:19:01.8698305Z · ╰── This modifies `capsuleWidth` 2026-10-24T00:19:01.8698409Z 139 │ }; 2026-10-24T00:19:01.8698497Z ╰──── 2026-10-24T00:19:01.8699107Z  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-24T00:19:01.8699890Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T00:19:01.8699985Z 2026-10-24T00:19:01.8700322Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T00:19:01.8700564Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:121:27] 2026-10-24T00:19:01.8700876Z 120 │ const scope = makeScope(options.capabilities ?? new Set(["preview", "worktree"])); 2026-10-24T00:19:01.8701034Z 121 │ const dispatch = vi.fn((_: unknown) => 2026-10-24T00:19:01.8701187Z ·  ┬ 2026-10-24T00:19:01.8701420Z · ╰── '_' is declared here 2026-10-24T00:19:01.8701611Z 122 │ (options.dispatchGate ?? Effect.void).pipe( 2026-10-24T00:19:01.8701708Z ╰──── 2026-10-24T00:19:01.8701892Z  help: Consider removing this parameter. 2026-10-24T00:19:01.8701904Z 2026-10-24T00:19:01.8702233Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T00:19:01.8702388Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:134:39] 2026-10-24T00:19:01.8702450Z 133 │ ); 2026-10-24T00:19:01.8702570Z 134 │ const listLocalBranchNames = vi.fn((_: string) => 2026-10-24T00:19:01.8702675Z ·  ┬ 2026-10-24T00:19:01.8702823Z · ╰── '_' is declared here 2026-10-24T00:19:01.8702905Z 135 │ Effect.succeed( 2026-10-24T00:19:01.8702964Z ╰──── 2026-10-24T00:19:01.8703069Z  help: Consider removing this parameter. 2026-10-24T00:19:01.8703076Z 2026-10-24T00:19:01.8703271Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T00:19:01.8703428Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:178:31] 2026-10-24T00:19:01.8703492Z 177 │ }); 2026-10-24T00:19:01.8703602Z 178 │ const sendToThread = vi.fn((_: unknown) => { 2026-10-24T00:19:01.8703696Z ·  ┬ 2026-10-24T00:19:01.8703841Z · ╰── '_' is declared here 2026-10-24T00:19:01.8704024Z 179 │ switch (options.continuation ?? "queued") { 2026-10-24T00:19:01.8704095Z ╰──── 2026-10-24T00:19:01.8704203Z  help: Consider removing this parameter. 2026-10-24T00:19:01.8704206Z 2026-10-24T00:19:01.8704410Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T00:19:01.8704557Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:203:33] 2026-10-24T00:19:01.8704627Z 202 │ ); 2026-10-24T00:19:01.8704737Z 203 │ const removeWorktree = vi.fn((_: unknown) => 2026-10-24T00:19:01.8704837Z ·  ┬ 2026-10-24T00:19:01.8704986Z · ╰── '_' is declared here 2026-10-24T00:19:01.8705080Z 204 │ options.removeWorktreeFails 2026-10-24T00:19:01.8705134Z ╰──── 2026-10-24T00:19:01.8705244Z  help: Consider removing this parameter. 2026-10-24T00:19:01.8705246Z 2026-10-24T00:19:01.8705445Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T00:19:01.8705596Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:208:36] 2026-10-24T00:19:01.8705654Z 207 │ ); 2026-10-24T00:19:01.8705775Z 208 │ const deleteLocalBranch = vi.fn((_: unknown) => 2026-10-24T00:19:01.8705962Z ·  ┬ 2026-10-24T00:19:01.8706169Z · ╰── '_' is declared here 2026-10-24T00:19:01.8706262Z 209 │ options.deleteLocalBranchFails 2026-10-24T00:19:01.8706327Z ╰──── 2026-10-24T00:19:01.8706441Z  help: Consider removing this parameter. 2026-10-24T00:19:01.8706444Z 2026-10-24T00:19:01.8706643Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T00:19:01.8706784Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:213:42] 2026-10-24T00:19:01.8706845Z 212 │ ); 2026-10-24T00:19:01.8706970Z 213 │ const fetchWorktreeBaseCommit = vi.fn((_: unknown) => 2026-10-24T00:19:01.8707077Z ·  ┬ 2026-10-24T00:19:01.8707230Z · ╰── '_' is declared here 2026-10-24T00:19:01.8707328Z 214 │ options.fetchWorktreeBaseFails 2026-10-24T00:19:01.8707385Z ╰──── 2026-10-24T00:19:01.8707491Z  help: Consider removing this parameter. 2026-10-24T00:19:01.8707493Z 2026-10-24T00:19:01.8707686Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T00:19:01.8707830Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:254:30] 2026-10-24T00:19:01.8707890Z 253 │ ); 2026-10-24T00:19:01.8707990Z 254 │ const localStatus = vi.fn((_: unknown) => 2026-10-24T00:19:01.8708082Z ·  ┬ 2026-10-24T00:19:01.8708224Z · ╰── '_' is declared here 2026-10-24T00:19:01.8708304Z 255 │ Effect.succeed({ 2026-10-24T00:19:01.8708364Z ╰──── 2026-10-24T00:19:01.8708466Z  help: Consider removing this parameter. 2026-10-24T00:19:01.8708469Z 2026-10-24T00:19:01.8708662Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T00:19:01.8708807Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:264:32] 2026-10-24T00:19:01.8708871Z 263 │ ); 2026-10-24T00:19:01.8709029Z 264 │ const refreshStatus = vi.fn((_: string) => Effect.die("refreshStatus stub")); 2026-10-24T00:19:01.8709127Z ·  ┬ 2026-10-24T00:19:01.8709270Z · ╰── '_' is declared here 2026-10-24T00:19:01.8709425Z 265 │ const runForThread = vi.fn((input: { readonly worktreePath: string }) => { 2026-10-24T00:19:01.8709478Z ╰──── 2026-10-24T00:19:01.8709643Z  help: Consider removing this parameter. 2026-10-24T00:19:01.8709685Z 2026-10-24T00:19:01.8709851Z ⚠ eslint(no-new): Do not use 'new' for side effects. 2026-10-24T00:19:01.8709987Z ╭─[apps/server/src/mcp/McpToolAccess.test.ts:168:3] 2026-10-24T00:19:01.8710104Z 167 │ // @ts-expect-error a declaration constructed directly 2026-10-24T00:19:01.8710208Z 168 │ new McpToolAccess.Declaration(unchecked); 2026-10-24T00:19:01.8710312Z ·  ───────────────────────────── 2026-10-24T00:19:01.8710448Z 169 │ // @ts-expect-error a handlers layer built outside McpToolAccess 2026-10-24T00:19:01.8710499Z ╰──── 2026-10-24T00:19:01.8710667Z  help: Assign the result of 'new' to a variable or compare it to a reference. 2026-10-24T00:19:01.8710672Z 2026-10-24T00:19:01.8710893Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable. 2026-10-24T00:19:01.8711033Z ╭─[apps/web/src/contextMenuFallback.test.ts:38:9] 2026-10-24T00:19:01.8711107Z 37 │ get isConnected() { 2026-10-24T00:19:01.8711203Z 38 │ let current: FakeElement | null = this; 2026-10-24T00:19:01.8711282Z ·  ─────── 2026-10-24T00:19:01.8711359Z 39 │ while (current?.parent) { 2026-10-24T00:19:01.8711412Z ╰──── 2026-10-24T00:19:01.8711699Z  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-24T00:19:01.8711701Z 2026-10-24T00:19:01.8711978Z ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'. 2026-10-24T00:19:01.8712125Z ╭─[apps/server/src/telemetry/AnalyticsService.ts:340:7] 2026-10-24T00:19:01.8712186Z 339 │ 2026-10-24T00:19:01.8712291Z 340 │ const layerTest = AnalyticsService.layerTest; 2026-10-24T00:19:01.8712377Z ·  ────┬──── 2026-10-24T00:19:01.8712522Z · ╰── 'layerTest' is declared here 2026-10-24T00:19:01.8712578Z ╰──── 2026-10-24T00:19:01.8712687Z  help: Consider removing this declaration. 2026-10-24T00:19:01.8712690Z 2026-10-24T00:19:01.8712854Z ⚠ react(immutability): This value cannot be modified 2026-10-24T00:19:01.8713031Z ╭─[apps/mobile/src/features/voice-input/GlobalVoiceInputControl.tsx:68:5] 2026-10-24T00:19:01.8713140Z 65 │ const [expanded, setExpanded] = useState(false); 2026-10-24T00:19:01.8713226Z 66 │ const progress = useSharedValue(0); 2026-10-24T00:19:01.8713312Z ·  ────┬─── 2026-10-24T00:19:01.8713453Z · ╰── `progress` originates here 2026-10-24T00:19:01.8713526Z 67 │ useEffect(() => { 2026-10-24T00:19:01.8713655Z 68 │ progress.value = withTiming(expanded ? 1 : 0, MORPH_TIMING); 2026-10-24T00:19:01.8713729Z ·  ────┬─── 2026-10-24T00:19:01.8713869Z · ╰── `progress` cannot be modified 2026-10-24T00:19:01.8714017Z 69 │ }, [expanded, progress]); 2026-10-24T00:19:01.8714071Z ╰──── 2026-10-24T00:19:01.8714347Z  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-24T00:19:01.8714669Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T00:19:01.8714734Z 2026-10-24T00:19:01.8714929Z ⚠ react(refs): Cannot access refs during render 2026-10-24T00:19:01.8715093Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:122:38] 2026-10-24T00:19:01.8715258Z 121 │ const audioLevelsRef = useRef(Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-24T00:19:01.8715388Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-24T00:19:01.8715521Z ·  ───────────┬────────── 2026-10-24T00:19:01.8715705Z · ╰── Cannot access ref value during render 2026-10-24T00:19:01.8715830Z 123 │ const sessionRef = useRef(null); 2026-10-24T00:19:01.8715886Z ╰──── 2026-10-24T00:19:01.8716382Z  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-24T00:19:01.8716690Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T00:19:01.8716693Z 2026-10-24T00:19:01.8716838Z ⚠ react(refs): Cannot access refs during render 2026-10-24T00:19:01.8717003Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:8] 2026-10-24T00:19:01.8717060Z 125 │ 2026-10-24T00:19:01.8717174Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T00:19:01.8717266Z ·  ─────────┬──────── 2026-10-24T00:19:01.8717426Z · ╰── Cannot access ref value during render 2026-10-24T00:19:01.8717538Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T00:19:01.8717593Z ╰──── 2026-10-24T00:19:01.8718079Z  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-24T00:19:01.8718378Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T00:19:01.8718381Z 2026-10-24T00:19:01.8718532Z ⚠ react(refs): Cannot access refs during render 2026-10-24T00:19:01.8718697Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:7] 2026-10-24T00:19:01.8718758Z 125 │ 2026-10-24T00:19:01.8718871Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T00:19:01.8718966Z ·  ─────────┬───────── 2026-10-24T00:19:01.8719121Z · ╰── Cannot access ref value during render 2026-10-24T00:19:01.8719228Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T00:19:01.8719279Z ╰──── 2026-10-24T00:19:01.8719763Z  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-24T00:19:01.8720068Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T00:19:01.8720127Z 2026-10-24T00:19:01.8720313Z ⚠ react(refs): Cannot access refs during render 2026-10-24T00:19:01.8720480Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:31] 2026-10-24T00:19:01.8720534Z 125 │ 2026-10-24T00:19:01.8720649Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T00:19:01.8720771Z ·  ─────────┬───────── 2026-10-24T00:19:01.8720946Z · ╰── Cannot access ref value during render 2026-10-24T00:19:01.8721049Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T00:19:01.8721105Z ╰──── 2026-10-24T00:19:01.8721592Z  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-24T00:19:01.8721894Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T00:19:01.8721897Z 2026-10-24T00:19:01.8722046Z ⚠ react(refs): Cannot access refs during render 2026-10-24T00:19:01.8722209Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:30] 2026-10-24T00:19:01.8722270Z 125 │ 2026-10-24T00:19:01.8722385Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T00:19:01.8722503Z ·  ──────────┬───────── 2026-10-24T00:19:01.8722674Z · ╰── Cannot access ref value during render 2026-10-24T00:19:01.8722786Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T00:19:01.8722845Z ╰──── 2026-10-24T00:19:01.8723324Z  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-24T00:19:01.8723622Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T00:19:01.8723628Z 2026-10-24T00:19:01.8723776Z ⚠ react(refs): Cannot access refs during render 2026-10-24T00:19:01.8723983Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:127:46] 2026-10-24T00:19:01.8724099Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T00:19:01.8724308Z 127 │ ╭─▶ const recorder = createLazyVoiceRecorder({ 2026-10-24T00:19:01.8724490Z 128 │ │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-24T00:19:01.8724625Z 129 │ │ onStatus: (status: RecordingStatus) => { 2026-10-24T00:19:01.8724790Z 130 │ │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-24T00:19:01.8724920Z 131 │ │ isFinished: status.isFinished, 2026-10-24T00:19:01.8725102Z 132 │ │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-24T00:19:01.8725211Z 133 │ │ error: status.error, 2026-10-24T00:19:01.8725316Z 134 │ │ url: status.url, 2026-10-24T00:19:01.8725467Z 135 │ │ }); 2026-10-24T00:19:01.8725587Z 136 │ │ }, 2026-10-24T00:19:01.8725796Z 137 │ │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-24T00:19:01.8725912Z 138 │ │ selectInput: (inputs) => { 2026-10-24T00:19:01.8726076Z 139 │ │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-24T00:19:01.8726229Z 140 │ │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-24T00:19:01.8726405Z 141 │ │ const known = microphoneOrder(preferences.value.microphones); 2026-10-24T00:19:01.8726551Z 142 │ │ const order = rememberMicrophones(known, inputs); 2026-10-24T00:19:01.8726665Z 143 │ │ if (order !== known) { 2026-10-24T00:19:01.8726816Z 144 │ │ registry.set(updateMobilePreferencesAtom, { 2026-10-24T00:19:01.8726935Z 145 │ │ transform: (current) => ({ 2026-10-24T00:19:01.8727152Z 146 │ │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-24T00:19:01.8727246Z 147 │ │ }), 2026-10-24T00:19:01.8727333Z 148 │ │ }); 2026-10-24T00:19:01.8727413Z 149 │ │ } 2026-10-24T00:19:01.8727562Z 150 │ │ return preferredMicrophoneInput(inputs, order); 2026-10-24T00:19:01.8727646Z 151 │ │ }, 2026-10-24T00:19:01.8727785Z 152 │ ├─▶ }); 2026-10-24T00:19:01.8728038Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T00:19:01.8728132Z 153 │ recorderRef.current = recorder; 2026-10-24T00:19:01.8728190Z ╰──── 2026-10-24T00:19:01.8728674Z  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-24T00:19:01.8728976Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T00:19:01.8728984Z 2026-10-24T00:19:01.8729132Z ⚠ react(refs): Cannot access refs during render 2026-10-24T00:19:01.8729303Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:153:16] 2026-10-24T00:19:01.8729372Z 152 │ }); 2026-10-24T00:19:01.8729461Z 153 │ recorderRef.current = recorder; 2026-10-24T00:19:01.8729578Z ·  ─────┬─────────┬─── 2026-10-24T00:19:01.8729784Z · │ ╰── Cannot update ref value during render 2026-10-24T00:19:01.8729909Z · ╰── This value is a ref 2026-10-24T00:19:01.8730018Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T00:19:01.8730072Z ╰──── 2026-10-24T00:19:01.8730558Z  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-24T00:19:01.8730926Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T00:19:01.8730966Z 2026-10-24T00:19:01.8731118Z ⚠ react(refs): Cannot access refs during render 2026-10-24T00:19:01.8731282Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:48] 2026-10-24T00:19:01.8731377Z 153 │ recorderRef.current = recorder; 2026-10-24T00:19:01.8731676Z 154 │ ╭─▶ sessionRef.current = new VoiceInputSession({ 2026-10-24T00:19:01.8731769Z 155 │ │ recorder, 2026-10-24T00:19:01.8731908Z 156 │ │ getTranscriber: getLocalVoiceTranscriber, 2026-10-24T00:19:01.8732037Z 157 │ │ requestPermission: async () => { 2026-10-24T00:19:01.8732220Z 158 │ │ const permission = await requestRecordingPermissionsAsync(); 2026-10-24T00:19:01.8732424Z 159 │ │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-24T00:19:01.8732510Z 160 │ │ }, 2026-10-24T00:19:01.8732659Z 161 │ │ configureRecording: configureVoiceRecordingAudio, 2026-10-24T00:19:01.8732804Z 162 │ │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-24T00:19:01.8732949Z 163 │ │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-24T00:19:01.8733071Z 164 │ │ onStateChange: (nextState) => 2026-10-24T00:19:01.8733166Z 165 │ │ setState({ 2026-10-24T00:19:01.8733283Z 166 │ │ state: nextState, 2026-10-24T00:19:01.8733433Z 167 │ │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-24T00:19:01.8733570Z 168 │ │ label: sessionRef.current?.label ?? null, 2026-10-24T00:19:01.8733654Z 169 │ │ }), 2026-10-24T00:19:01.8733793Z 170 │ ├─▶ }); 2026-10-24T00:19:01.8734037Z · ╰──── Cannot access ref value during render 2026-10-24T00:19:01.8734106Z 171 │ } 2026-10-24T00:19:01.8734159Z ╰──── 2026-10-24T00:19:01.8734658Z  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-24T00:19:01.8734974Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T00:19:01.8734977Z 2026-10-24T00:19:01.8735133Z ⚠ react(refs): Cannot access refs during render 2026-10-24T00:19:01.8735304Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:15] 2026-10-24T00:19:01.8735390Z 153 │ recorderRef.current = recorder; 2026-10-24T00:19:01.8735501Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T00:19:01.8735622Z ·  ─────┬────────┬─── 2026-10-24T00:19:01.8735815Z · │ ╰── Cannot update ref value during render 2026-10-24T00:19:01.8736045Z · ╰── This value is a ref 2026-10-24T00:19:01.8736168Z 155 │ recorder, 2026-10-24T00:19:01.8736224Z ╰──── 2026-10-24T00:19:01.8736710Z  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-24T00:19:01.8737013Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T00:19:01.8737021Z 2026-10-24T00:19:01.8737174Z ⚠ react(refs): Cannot access refs during render 2026-10-24T00:19:01.8737343Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:7] 2026-10-24T00:19:01.8737443Z 184 │ return () => subscription.remove(); 2026-10-24T00:19:01.8737517Z 185 │ }, [controller]); 2026-10-24T00:19:01.8737598Z ·  ─────┬──── 2026-10-24T00:19:01.8737756Z · ╰── Cannot access ref value during render 2026-10-24T00:19:01.8737813Z 186 │ 2026-10-24T00:19:01.8737870Z ╰──── 2026-10-24T00:19:01.8738352Z  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-24T00:19:01.8738656Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T00:19:01.8738660Z 2026-10-24T00:19:01.8738817Z ⚠ react(refs): Cannot access refs during render 2026-10-24T00:19:01.8738989Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:6] 2026-10-24T00:19:01.8739083Z 184 │ return () => subscription.remove(); 2026-10-24T00:19:01.8739155Z 185 │ }, [controller]); 2026-10-24T00:19:01.8739238Z ·  ──────┬───── 2026-10-24T00:19:01.8739393Z · ╰── Cannot access ref value during render 2026-10-24T00:19:01.8739447Z 186 │ 2026-10-24T00:19:01.8739506Z ╰──── 2026-10-24T00:19:01.8739993Z  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-24T00:19:01.8740356Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T00:19:01.8740411Z 2026-10-24T00:19:01.8740565Z ⚠ react(refs): Cannot access refs during render 2026-10-24T00:19:01.8740733Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:6] 2026-10-24T00:19:01.8740795Z 191 │ }, 2026-10-24T00:19:01.8740875Z 192 │ [controller, recorder], 2026-10-24T00:19:01.8740959Z ·  ─────┬──── 2026-10-24T00:19:01.8741110Z · ╰── Cannot access ref value during render 2026-10-24T00:19:01.8741173Z 193 │ ); 2026-10-24T00:19:01.8741231Z ╰──── 2026-10-24T00:19:01.8741732Z  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-24T00:19:01.8742043Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T00:19:01.8742051Z 2026-10-24T00:19:01.8742199Z ⚠ react(refs): Cannot access refs during render 2026-10-24T00:19:01.8742367Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:175:20] 2026-10-24T00:19:01.8742468Z 174 │ const controller = session.controller; 2026-10-24T00:19:01.8742564Z 175 │ const recorder = recorderRef.current; 2026-10-24T00:19:01.8742673Z ·  ─────────┬───────── 2026-10-24T00:19:01.8742844Z · ╰── Cannot access ref value during render 2026-10-24T00:19:01.8742907Z 176 │ 2026-10-24T00:19:01.8742968Z ╰──── 2026-10-24T00:19:01.8743458Z  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-24T00:19:01.8743769Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T00:19:01.8743772Z 2026-10-24T00:19:01.8743956Z ⚠ react(refs): Cannot access refs during render 2026-10-24T00:19:01.8744127Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:5] 2026-10-24T00:19:01.8744192Z 191 │ }, 2026-10-24T00:19:01.8744272Z 192 │ [controller, recorder], 2026-10-24T00:19:01.8744373Z ·  ───────────┬────────── 2026-10-24T00:19:01.8744534Z · ╰── Cannot access ref value during render 2026-10-24T00:19:01.8744592Z 193 │ ); 2026-10-24T00:19:01.8744650Z ╰──── 2026-10-24T00:19:01.8745142Z  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-24T00:19:01.8745450Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T00:19:01.8745453Z 2026-10-24T00:19:01.8745607Z ⚠ react(refs): Cannot access refs during render 2026-10-24T00:19:01.8745833Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:20] 2026-10-24T00:19:01.8745982Z 245 │ return () => clearInterval(intervalId); 2026-10-24T00:19:01.8746103Z 246 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-24T00:19:01.8746200Z ·  ─────┬──── 2026-10-24T00:19:01.8746363Z · ╰── Cannot access ref value during render 2026-10-24T00:19:01.8746422Z 247 │ 2026-10-24T00:19:01.8746480Z ╰──── 2026-10-24T00:19:01.8746973Z  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-24T00:19:01.8747284Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T00:19:01.8747293Z 2026-10-24T00:19:01.8747443Z ⚠ react(refs): Cannot access refs during render 2026-10-24T00:19:01.8747611Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:6] 2026-10-24T00:19:01.8747709Z 245 │ return () => clearInterval(intervalId); 2026-10-24T00:19:01.8747829Z 246 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-24T00:19:01.8747967Z ·  ────────────────────────┬─────────────────────── 2026-10-24T00:19:01.8748144Z · ╰── Cannot access ref value during render 2026-10-24T00:19:01.8748202Z 247 │ 2026-10-24T00:19:01.8748259Z ╰──── 2026-10-24T00:19:01.8748756Z  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-24T00:19:01.8749069Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T00:19:01.8749071Z 2026-10-24T00:19:01.8749227Z ⚠ react(refs): Cannot access refs during render 2026-10-24T00:19:01.8749395Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:261:5] 2026-10-24T00:19:01.8749468Z 260 │ setOwnerFocused, 2026-10-24T00:19:01.8749533Z 261 │ session, 2026-10-24T00:19:01.8749611Z ·  ───┬─── 2026-10-24T00:19:01.8749759Z · ╰── Cannot access ref value during render 2026-10-24T00:19:01.8749827Z 262 │ stop, 2026-10-24T00:19:01.8749890Z ╰──── 2026-10-24T00:19:01.8750384Z  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-24T00:19:01.8750696Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T00:19:01.8750699Z 2026-10-24T00:19:01.8750855Z ⚠ react(refs): Cannot access refs during render 2026-10-24T00:19:01.8751024Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:251:10] 2026-10-24T00:19:01.8751091Z 250 │ 2026-10-24T00:19:01.8751310Z 251 │ ╭─▶ return { 2026-10-24T00:19:01.8751589Z 252 │ │ isAvailable: getLocalVoiceTranscriber() !== null || getNativeShowcaseScene() !== null, 2026-10-24T00:19:01.8751675Z 253 │ │ state, 2026-10-24T00:19:01.8751776Z 254 │ │ audioLevels, 2026-10-24T00:19:01.8751880Z 255 │ │ elapsedSeconds, 2026-10-24T00:19:01.8752021Z 256 │ │ isBusy: voiceInputBlocksSubmission(state), 2026-10-24T00:19:01.8752111Z 257 │ │ ownerKey, 2026-10-24T00:19:01.8752198Z 258 │ │ label, 2026-10-24T00:19:01.8752299Z 259 │ │ focusedOwners, 2026-10-24T00:19:01.8752402Z 260 │ │ setOwnerFocused, 2026-10-24T00:19:01.8752487Z 261 │ │ session, 2026-10-24T00:19:01.8752579Z 262 │ │ stop, 2026-10-24T00:19:01.8752672Z 263 │ │ cancel, 2026-10-24T00:19:01.8752814Z 264 │ ├─▶ }; 2026-10-24T00:19:01.8753026Z · ╰──── Cannot access ref value during render 2026-10-24T00:19:01.8753088Z 265 │ } 2026-10-24T00:19:01.8753146Z ╰──── 2026-10-24T00:19:01.8753645Z  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-24T00:19:01.8753997Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T00:19:01.8754006Z 2026-10-24T00:19:01.8754184Z ⚠ react(immutability): This value cannot be modified 2026-10-24T00:19:01.8754359Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7] 2026-10-24T00:19:01.8754534Z 121 │ const audioLevelsRef = useRef(Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-24T00:19:01.8754668Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-24T00:19:01.8754752Z ·  ─────┬───── 2026-10-24T00:19:01.8754904Z · ╰── `audioLevels` originates here 2026-10-24T00:19:01.8755034Z 123 │ const sessionRef = useRef(null); 2026-10-24T00:19:01.8755193Z 124 │ const recorderRef = useRef | null>(null); 2026-10-24T00:19:01.8755249Z 125 │ 2026-10-24T00:19:01.8755373Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T00:19:01.8755487Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T00:19:01.8755635Z 128 │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-24T00:19:01.8755737Z 129 │ onStatus: (status: RecordingStatus) => { 2026-10-24T00:19:01.8755872Z 130 │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-24T00:19:01.8755970Z 131 │ isFinished: status.isFinished, 2026-10-24T00:19:01.8756127Z 132 │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-24T00:19:01.8756206Z 133 │ error: status.error, 2026-10-24T00:19:01.8756284Z 134 │ url: status.url, 2026-10-24T00:19:01.8756352Z 135 │ }); 2026-10-24T00:19:01.8756418Z 136 │ }, 2026-10-24T00:19:01.8756669Z 137 │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-24T00:19:01.8756798Z 138 │ selectInput: (inputs) => { 2026-10-24T00:19:01.8756934Z 139 │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-24T00:19:01.8757059Z 140 │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-24T00:19:01.8757201Z 141 │ const known = microphoneOrder(preferences.value.microphones); 2026-10-24T00:19:01.8757319Z 142 │ const order = rememberMicrophones(known, inputs); 2026-10-24T00:19:01.8757401Z 143 │ if (order !== known) { 2026-10-24T00:19:01.8757529Z 144 │ registry.set(updateMobilePreferencesAtom, { 2026-10-24T00:19:01.8757620Z 145 │ transform: (current) => ({ 2026-10-24T00:19:01.8757810Z 146 │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-24T00:19:01.8757880Z 147 │ }), 2026-10-24T00:19:01.8757954Z 148 │ }); 2026-10-24T00:19:01.8758017Z 149 │ } 2026-10-24T00:19:01.8758139Z 150 │ return preferredMicrophoneInput(inputs, order); 2026-10-24T00:19:01.8758202Z 151 │ }, 2026-10-24T00:19:01.8758260Z 152 │ }); 2026-10-24T00:19:01.8758352Z 153 │ recorderRef.current = recorder; 2026-10-24T00:19:01.8758463Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T00:19:01.8758531Z 155 │ recorder, 2026-10-24T00:19:01.8758638Z 156 │ getTranscriber: getLocalVoiceTranscriber, 2026-10-24T00:19:01.8758733Z 157 │ requestPermission: async () => { 2026-10-24T00:19:01.8758875Z 158 │ const permission = await requestRecordingPermissionsAsync(); 2026-10-24T00:19:01.8759044Z 159 │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-24T00:19:01.8759106Z 160 │ }, 2026-10-24T00:19:01.8759234Z 161 │ configureRecording: configureVoiceRecordingAudio, 2026-10-24T00:19:01.8759353Z 162 │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-24T00:19:01.8759468Z 163 │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-24T00:19:01.8759554Z 164 │ onStateChange: (nextState) => 2026-10-24T00:19:01.8759627Z 165 │ setState({ 2026-10-24T00:19:01.8759706Z 166 │ state: nextState, 2026-10-24T00:19:01.8759823Z 167 │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-24T00:19:01.8759928Z 168 │ label: sessionRef.current?.label ?? null, 2026-10-24T00:19:01.8759994Z 169 │ }), 2026-10-24T00:19:01.8760056Z 170 │ }); 2026-10-24T00:19:01.8760118Z 171 │ } 2026-10-24T00:19:01.8760173Z 172 │ 2026-10-24T00:19:01.8760268Z 173 │ const session = sessionRef.current; 2026-10-24T00:19:01.8760374Z 174 │ const controller = session.controller; 2026-10-24T00:19:01.8760470Z 175 │ const recorder = recorderRef.current; 2026-10-24T00:19:01.8760529Z 176 │ 2026-10-24T00:19:01.8760605Z 177 │ useEffect(() => { 2026-10-24T00:19:01.8760768Z 178 │ const subscription = AppState.addEventListener("change", (nextState) => { 2026-10-24T00:19:01.8760923Z 179 │ // iOS reports `inactive` while its permission dialog is open. Only the 2026-10-24T00:19:01.8761071Z 180 │ // real background state cancels preparation; recorder status handles 2026-10-24T00:19:01.8761184Z 181 │ // calls and route interruptions during capture. 2026-10-24T00:19:01.8761331Z 182 │ if (nextState === "background") controller.appMovedToBackground(); 2026-10-24T00:19:01.8761392Z 183 │ }); 2026-10-24T00:19:01.8761484Z 184 │ return () => subscription.remove(); 2026-10-24T00:19:01.8761557Z 185 │ }, [controller]); 2026-10-24T00:19:01.8761686Z 186 │ 2026-10-24T00:19:01.8761788Z 187 │ useEffect( 2026-10-24T00:19:01.8761859Z 188 │ () => () => { 2026-10-24T00:19:01.8761939Z 189 │ controller.dispose(); 2026-10-24T00:19:01.8762018Z 190 │ recorder.release(); 2026-10-24T00:19:01.8762077Z 191 │ }, 2026-10-24T00:19:01.8762156Z 192 │ [controller, recorder], 2026-10-24T00:19:01.8762216Z 193 │ ); 2026-10-24T00:19:01.8762275Z 194 │ 2026-10-24T00:19:01.8762343Z 195 │ useEffect(() => { 2026-10-24T00:19:01.8762447Z 196 │ if (state.phase !== "recording") return; 2026-10-24T00:19:01.8762505Z 197 │ 2026-10-24T00:19:01.8762665Z 198 │ const tag = `voice-input:${keepAwakeId}:${++keepAwakeSessionRef.current}`; 2026-10-24T00:19:01.8762777Z 199 │ const activation = activateKeepAwakeAsync(tag); 2026-10-24T00:19:01.8762867Z 200 │ void activation.catch(() => {}); 2026-10-24T00:19:01.8762947Z 201 │ return () => { 2026-10-24T00:19:01.8763113Z 202 │ // Release after activation settles, even if the recording ends immediately. 2026-10-24T00:19:01.8763260Z 203 │ void activation.then(() => deactivateKeepAwake(tag)).catch(() => {}); 2026-10-24T00:19:01.8763322Z 204 │ }; 2026-10-24T00:19:01.8763411Z 205 │ }, [keepAwakeId, state.phase]); 2026-10-24T00:19:01.8763466Z 206 │ 2026-10-24T00:19:01.8763538Z 207 │ useEffect(() => { 2026-10-24T00:19:01.8763687Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-24T00:19:01.8763747Z 209 │ 2026-10-24T00:19:01.8763876Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-24T00:19:01.8764085Z 211 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-24T00:19:01.8764203Z 212 │ audioLevels.value = audioLevelsRef.current; 2026-10-24T00:19:01.8764292Z ·  ─────┬───── 2026-10-24T00:19:01.8764444Z · ╰── `audioLevels` cannot be modified 2026-10-24T00:19:01.8764506Z 213 │ } 2026-10-24T00:19:01.8764564Z ╰──── 2026-10-24T00:19:01.8764852Z  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-24T00:19:01.8765184Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T00:19:01.8765190Z 2026-10-24T00:19:01.8765406Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T00:19:01.8765581Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7] 2026-10-24T00:19:01.8765646Z 206 │ 2026-10-24T00:19:01.8765722Z 207 │ useEffect(() => { 2026-10-24T00:19:01.8765807Z ·  ───┬─── 2026-10-24T00:19:01.8766049Z · ╰── This function may (indirectly) reassign or modify `audioLevels` after render 2026-10-24T00:19:01.8766198Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-24T00:19:01.8766258Z 209 │ 2026-10-24T00:19:01.8766386Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-24T00:19:01.8766552Z 211 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-24T00:19:01.8766666Z 212 │ audioLevels.value = audioLevelsRef.current; 2026-10-24T00:19:01.8766751Z ·  ─────┬───── 2026-10-24T00:19:01.8766962Z · ╰── This modifies `audioLevels` 2026-10-24T00:19:01.8767078Z 213 │ } 2026-10-24T00:19:01.8767135Z ╰──── 2026-10-24T00:19:01.8767504Z  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-24T00:19:01.8767835Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T00:19:01.8767838Z 2026-10-24T00:19:01.8767997Z ⚠ react(refs): Cannot access refs during render 2026-10-24T00:19:01.8768178Z ╭─[apps/mobile/src/features/voice-input/useVoiceInputController.ts:27:14] 2026-10-24T00:19:01.8768271Z 26 │ const latestInput = useRef(input); 2026-10-24T00:19:01.8768352Z 27 │ latestInput.current = input; 2026-10-24T00:19:01.8768478Z ·  ─────┬─────────┬─── 2026-10-24T00:19:01.8768684Z · │ ╰── Cannot update ref value during render 2026-10-24T00:19:01.8768810Z · ╰── This value is a ref 2026-10-24T00:19:01.8768892Z 28 │ const mounted = useRef(true); 2026-10-24T00:19:01.8768946Z ╰──── 2026-10-24T00:19:01.8769450Z  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-24T00:19:01.8769762Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T00:19:01.8769765Z 2026-10-24T00:19:01.8769941Z ⚠ react(immutability): This value cannot be modified 2026-10-24T00:19:01.8770124Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:93:5] 2026-10-24T00:19:01.8770185Z 90 │ }) { 2026-10-24T00:19:01.8770310Z 91 │ const rotation = useSharedValue(props.hidden ? 1 : 0); 2026-10-24T00:19:01.8770392Z ·  ────┬─── 2026-10-24T00:19:01.8770531Z · ╰── `rotation` originates here 2026-10-24T00:19:01.8770611Z 92 │ useLayoutEffect(() => { 2026-10-24T00:19:01.8770767Z 93 │ rotation.value = withTiming(props.hidden ? 1 : 0, TOOLBAR_FLIP_TIMING); 2026-10-24T00:19:01.8770846Z ·  ────┬─── 2026-10-24T00:19:01.8770986Z · ╰── `rotation` cannot be modified 2026-10-24T00:19:01.8771128Z 94 │ }, [props.hidden, rotation]); 2026-10-24T00:19:01.8771235Z ╰──── 2026-10-24T00:19:01.8771574Z  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-24T00:19:01.8771900Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T00:19:01.8771907Z 2026-10-24T00:19:01.8772074Z ⚠ react(immutability): This value cannot be modified 2026-10-24T00:19:01.8772259Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:269:5] 2026-10-24T00:19:01.8775121Z 266 │ const variant = props.variant ?? "plain"; 2026-10-24T00:19:01.8775291Z 267 │ const loadingVisibility = useSharedValue(props.loading ? 1 : 0); 2026-10-24T00:19:01.8775394Z ·  ────────┬──────── 2026-10-24T00:19:01.8775566Z · ╰── `loadingVisibility` originates here 2026-10-24T00:19:01.8775645Z 268 │ useLayoutEffect(() => { 2026-10-24T00:19:01.8775818Z 269 │ loadingVisibility.value = withTiming(props.loading ? 1 : 0, DICTATION_TIMING); 2026-10-24T00:19:01.8775907Z ·  ────────┬──────── 2026-10-24T00:19:01.8776069Z · ╰── `loadingVisibility` cannot be modified 2026-10-24T00:19:01.8776170Z 270 │ }, [loadingVisibility, props.loading]); 2026-10-24T00:19:01.8776226Z ╰──── 2026-10-24T00:19:01.8776507Z  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-24T00:19:01.8776848Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T00:19:01.8776855Z 2026-10-24T00:19:01.8777025Z ⚠ react(immutability): This value cannot be modified 2026-10-24T00:19:01.8777211Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:328:5] 2026-10-24T00:19:01.8777269Z 325 │ }) { 2026-10-24T00:19:01.8777443Z 326 │ const recordingVisibility = useSharedValue(props.phase === "recording" ? 1 : 0); 2026-10-24T00:19:01.8777541Z ·  ─────────┬───────── 2026-10-24T00:19:01.8777706Z · ╰── `recordingVisibility` originates here 2026-10-24T00:19:01.8777779Z 327 │ useLayoutEffect(() => { 2026-10-24T00:19:01.8777984Z 328 │ recordingVisibility.value = withTiming(props.phase === "recording" ? 1 : 0, DICTATION_TIMING); 2026-10-24T00:19:01.8778087Z ·  ─────────┬───────── 2026-10-24T00:19:01.8778257Z · ╰── `recordingVisibility` cannot be modified 2026-10-24T00:19:01.8778355Z 329 │ }, [props.phase, recordingVisibility]); 2026-10-24T00:19:01.8778415Z ╰──── 2026-10-24T00:19:01.8778696Z  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-24T00:19:01.8779026Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T00:19:01.8779029Z 2026-10-24T00:19:01.8779188Z ⚠ react(refs): Cannot access refs during render 2026-10-24T00:19:01.8779315Z ╭─[apps/mobile/src/native/StackHeader.tsx:185:9] 2026-10-24T00:19:01.8779640Z 184 │ "options", 2026-10-24T00:19:01.8779798Z 185 │ latestOptionFunctionsRef.current, 2026-10-24T00:19:01.8779920Z ·  ────────────────┬─────────────── 2026-10-24T00:19:01.8780129Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T00:19:01.8780237Z 186 │ optionFunctionWrappersRef.current, 2026-10-24T00:19:01.8780298Z ╰──── 2026-10-24T00:19:01.8780797Z  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-24T00:19:01.8781115Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T00:19:01.8781123Z 2026-10-24T00:19:01.8781277Z ⚠ react(refs): Cannot access refs during render 2026-10-24T00:19:01.8781406Z ╭─[apps/mobile/src/native/StackHeader.tsx:186:9] 2026-10-24T00:19:01.8781504Z 185 │ latestOptionFunctionsRef.current, 2026-10-24T00:19:01.8781606Z 186 │ optionFunctionWrappersRef.current, 2026-10-24T00:19:01.8781721Z ·  ────────────────┬──────────────── 2026-10-24T00:19:01.8781924Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T00:19:01.8782023Z 187 │ ) as NativeStackNavigationOptions) 2026-10-24T00:19:01.8782080Z ╰──── 2026-10-24T00:19:01.8782571Z  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-24T00:19:01.8782883Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T00:19:01.8782885Z 2026-10-24T00:19:01.8783104Z ⚠ typescript(no-extraneous-class): Unexpected class with only a constructor. 2026-10-24T00:19:01.8783240Z ╭─[apps/desktop/src/preview/Manager.test.ts:158:18] 2026-10-24T00:19:01.8783348Z 157 │ BrowserWindow: browserWindowConstructor, 2026-10-24T00:19:01.8783521Z 158 │ ╭─▶ ClipboardItem: class { 2026-10-24T00:19:01.8783663Z 159 │ │ constructor(data: Record) { 2026-10-24T00:19:01.8783796Z 160 │ │ clipboardItemConstructor(data); 2026-10-24T00:19:01.8783881Z 161 │ │ } 2026-10-24T00:19:01.8784051Z 162 │ ╰─▶ }, 2026-10-24T00:19:01.8784125Z 163 │ clipboard: { 2026-10-24T00:19:01.8784180Z ╰──── 2026-10-24T00:19:01.8784358Z  help: Try replacing this class with a standalone function or deleting it entirely 2026-10-24T00:19:01.8784361Z 2026-10-24T00:19:01.8784633Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T00:19:01.8784782Z ╭─[apps/mobile/src/features/files/FileTreeBrowser.tsx:155:5] 2026-10-24T00:19:01.8784839Z 150 │ 2026-10-24T00:19:01.8784914Z 151 │ useEffect(() => { 2026-10-24T00:19:01.8784990Z ·  ────┬──── 2026-10-24T00:19:01.8785199Z · ╰── This is the containing effect 2026-10-24T00:19:01.8785330Z 152 │ if (!controlledSelectedPath) { 2026-10-24T00:19:01.8785399Z 153 │ return; 2026-10-24T00:19:01.8785456Z 154 │ } 2026-10-24T00:19:01.8785548Z 155 │ setExpandedPaths((current) => { 2026-10-24T00:19:01.8785636Z ·  ────────┬─────── 2026-10-24T00:19:01.8785816Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T00:19:01.8785946Z 156 │ const ancestors = ancestorPaths(controlledSelectedPath); 2026-10-24T00:19:01.8786004Z ╰──── 2026-10-24T00:19:01.8786641Z  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-24T00:19:01.8786988Z  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-24T00:19:01.8786991Z 2026-10-24T00:19:01.8787206Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T00:19:01.8787362Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:257:7] 2026-10-24T00:19:01.8787469Z 256 │ return () => cancelAnimationFrame(frame); 2026-10-24T00:19:01.8787558Z 257 │ }, [props.path, targetIndex]); 2026-10-24T00:19:01.8787644Z ·  ─────┬──── 2026-10-24T00:19:01.8787799Z · ╰── Unnecessary dependency `props.path` 2026-10-24T00:19:01.8787862Z 258 │ 2026-10-24T00:19:01.8787921Z ╰──── 2026-10-24T00:19:01.8788231Z  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-24T00:19:01.8788559Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8788562Z 2026-10-24T00:19:01.8788770Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T00:19:01.8788928Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:293:23] 2026-10-24T00:19:01.8789009Z 292 │ 2026-10-24T00:19:01.8790172Z ·  ─────────── 2026-10-24T00:19:01.8790246Z 310 │ {body} 2026-10-24T00:19:01.8790303Z ╰──── 2026-10-24T00:19:01.8790515Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T00:19:01.8790550Z 2026-10-24T00:19:01.8790766Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T00:19:01.8790912Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:231:6] 2026-10-24T00:19:01.8791084Z 227 │ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents( 2026-10-24T00:19:01.8791180Z 228 │ nativeEventSnapshotsRef.current, 2026-10-24T00:19:01.8791278Z ·  ───────────┬─────────── 2026-10-24T00:19:01.8791774Z · ╰── 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-24T00:19:01.8791859Z 229 │ mostRecentEventCount, 2026-10-24T00:19:01.8791922Z 230 │ ); 2026-10-24T00:19:01.8792051Z 231 │ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]); 2026-10-24T00:19:01.8792198Z ·  ──────────────────────────┬────────────────────────── 2026-10-24T00:19:01.8792410Z · ╰── This dependency list is missing values used by the callback 2026-10-24T00:19:01.8792500Z 232 │ const assumedValue = props.value; 2026-10-24T00:19:01.8792553Z ╰──── 2026-10-24T00:19:01.8792731Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T00:19:01.8793059Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8793062Z 2026-10-24T00:19:01.8793298Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T00:19:01.8793446Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:239:7] 2026-10-24T00:19:01.8793600Z 238 │ nativeEventSnapshotsRef.current = assumeComposerControlledState( 2026-10-24T00:19:01.8793696Z 239 │ nativeEventSnapshotsRef.current, 2026-10-24T00:19:01.8793795Z ·  ───────────┬─────────── 2026-10-24T00:19:01.8794309Z · ╰── 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-24T00:19:01.8794386Z 240 │ controlledEventCount, 2026-10-24T00:19:01.8794457Z 241 │ assumedValue, 2026-10-24T00:19:01.8794518Z 242 │ ); 2026-10-24T00:19:01.8794742Z 243 │ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]); 2026-10-24T00:19:01.8794917Z ·  ───────────┬────────── 2026-10-24T00:19:01.8795139Z · ╰── Unnecessary dependency `controlledDocumentJson` 2026-10-24T00:19:01.8795235Z 244 │ const acceptNativeEvent = useCallback( 2026-10-24T00:19:01.8795291Z ╰──── 2026-10-24T00:19:01.8795730Z  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-24T00:19:01.8796063Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8796068Z 2026-10-24T00:19:01.8796224Z ⚠ react(refs): Cannot access refs during render 2026-10-24T00:19:01.8796370Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:29] 2026-10-24T00:19:01.8796505Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T00:19:01.8796621Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T00:19:01.8796745Z ·  ─────────────┬──────────── 2026-10-24T00:19:01.8796922Z · ╰── Cannot access ref value during render 2026-10-24T00:19:01.8796984Z 165 │ }); 2026-10-24T00:19:01.8797037Z ╰──── 2026-10-24T00:19:01.8797529Z  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-24T00:19:01.8797835Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T00:19:01.8797837Z 2026-10-24T00:19:01.8797991Z ⚠ react(refs): Cannot access refs during render 2026-10-24T00:19:01.8798134Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:29] 2026-10-24T00:19:01.8798260Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T00:19:01.8798379Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T00:19:01.8798503Z ·  ─────────────┬──────────── 2026-10-24T00:19:01.8798725Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T00:19:01.8798785Z 165 │ }); 2026-10-24T00:19:01.8798842Z ╰──── 2026-10-24T00:19:01.8799324Z  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-24T00:19:01.8799631Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T00:19:01.8799634Z 2026-10-24T00:19:01.8799783Z ⚠ react(refs): Cannot access refs during render 2026-10-24T00:19:01.8800013Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:166:23] 2026-10-24T00:19:01.8800117Z 165 │ }); 2026-10-24T00:19:01.8800215Z 166 │ confirmedTokensRef.current = tokens; 2026-10-24T00:19:01.8800344Z ·  ─────────┬────────────┬─── 2026-10-24T00:19:01.8800544Z · │ ╰── Cannot update ref value during render 2026-10-24T00:19:01.8800670Z · ╰── This value is a ref 2026-10-24T00:19:01.8800751Z 167 │ return JSON.stringify( 2026-10-24T00:19:01.8800807Z ╰──── 2026-10-24T00:19:01.8801294Z  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-24T00:19:01.8801611Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T00:19:01.8801616Z 2026-10-24T00:19:01.8801770Z ⚠ react(refs): Cannot access refs during render 2026-10-24T00:19:01.8801914Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:208:5] 2026-10-24T00:19:01.8801988Z 207 │ mostRecentEventCount, 2026-10-24T00:19:01.8802083Z 208 │ nativeEventSnapshotsRef.current, 2026-10-24T00:19:01.8802197Z ·  ───────────────┬─────────────── 2026-10-24T00:19:01.8802397Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T00:19:01.8802455Z 209 │ ); 2026-10-24T00:19:01.8802513Z ╰──── 2026-10-24T00:19:01.8803007Z  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-24T00:19:01.8803317Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T00:19:01.8803320Z 2026-10-24T00:19:01.8803473Z ⚠ react(refs): Cannot access refs during render 2026-10-24T00:19:01.8803615Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:214:5] 2026-10-24T00:19:01.8803692Z 213 │ mostRecentEventCount, 2026-10-24T00:19:01.8803789Z 214 │ nativeEventSnapshotsRef.current, 2026-10-24T00:19:01.8803922Z ·  ───────────────┬─────────────── 2026-10-24T00:19:01.8804122Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T00:19:01.8804185Z 215 │ ); 2026-10-24T00:19:01.8804242Z ╰──── 2026-10-24T00:19:01.8804730Z  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-24T00:19:01.8805030Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T00:19:01.8805037Z 2026-10-24T00:19:01.8805234Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T00:19:01.8805379Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:199:6] 2026-10-24T00:19:01.8805569Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T00:19:01.8805730Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T00:19:01.8805845Z ·  ─────────┬──────── 2026-10-24T00:19:01.8806343Z · ╰── 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-24T00:19:01.8806405Z 165 │ }); 2026-10-24T00:19:01.8806507Z 166 │ confirmedTokensRef.current = tokens; 2026-10-24T00:19:01.8806580Z 167 │ return JSON.stringify( 2026-10-24T00:19:01.8806757Z 168 │ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => { 2026-10-24T00:19:01.8806831Z 169 │ const record = 2026-10-24T00:19:01.8806926Z 170 │ token.type === "context" 2026-10-24T00:19:01.8807102Z 171 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-24T00:19:01.8807176Z 172 │ : undefined; 2026-10-24T00:19:01.8807295Z 173 │ const presentation = contextChipPresentation( 2026-10-24T00:19:01.8807413Z 174 │ token.type === "context" ? token.kind : token.type, 2026-10-24T00:19:01.8807481Z 175 │ record, 2026-10-24T00:19:01.8807548Z 176 │ ); 2026-10-24T00:19:01.8807639Z 177 │ const icon = contextChipIcon( 2026-10-24T00:19:01.8807712Z 178 │ presentation, 2026-10-24T00:19:01.8807861Z 179 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-24T00:19:01.8807928Z 180 │ ); 2026-10-24T00:19:01.8807996Z 181 │ return { 2026-10-24T00:19:01.8808079Z 182 │ type: token.type, 2026-10-24T00:19:01.8808158Z 183 │ source: token.source, 2026-10-24T00:19:01.8808238Z 184 │ start: token.start, 2026-10-24T00:19:01.8808315Z 185 │ end: token.end, 2026-10-24T00:19:01.8808473Z 186 │ accent: contextChipAccent(presentation.accent, theme, chipTextColor), 2026-10-24T00:19:01.8808538Z 187 │ label: 2026-10-24T00:19:01.8808626Z 188 │ token.type === "skill" 2026-10-24T00:19:01.8808740Z 189 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-24T00:19:01.8808829Z 190 │ : token.type === "context" 2026-10-24T00:19:01.8809078Z 191 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-24T00:19:01.8809169Z 192 │ : basename(token.value), 2026-10-24T00:19:01.8809328Z 193 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-24T00:19:01.8809432Z 194 │ iconUri: contextChipIconUri(icon), 2026-10-24T00:19:01.8809523Z 195 │ tintsIcon: icon.kind === "chip", 2026-10-24T00:19:01.8809588Z 196 │ }; 2026-10-24T00:19:01.8809652Z 197 │ }), 2026-10-24T00:19:01.8809714Z 198 │ ); 2026-10-24T00:19:01.8809858Z 199 │ }, [props.value, props.context, skillLabels, theme, chipTextColor]); 2026-10-24T00:19:01.8810022Z ·  ───────────────────────────────┬─────────────────────────────── 2026-10-24T00:19:01.8810240Z · ╰── This dependency list is missing values used by the callback 2026-10-24T00:19:01.8810389Z 200 │ // Every render resolves against the snapshot history, so a render whose 2026-10-24T00:19:01.8810443Z ╰──── 2026-10-24T00:19:01.8810730Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T00:19:01.8811105Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8811108Z 2026-10-24T00:19:01.8811314Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T00:19:01.8811459Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:261:5] 2026-10-24T00:19:01.8811673Z 253 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-24T00:19:01.8811784Z 254 │ nativeEventSnapshotsRef.current.push({ 2026-10-24T00:19:01.8811884Z ·  ───────────┬─────────── 2026-10-24T00:19:01.8812376Z · ╰── 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-24T00:19:01.8812478Z 255 │ eventCount: acknowledgedEventCount, 2026-10-24T00:19:01.8812548Z 256 │ value, 2026-10-24T00:19:01.8812636Z 257 │ selection: nextSelection, 2026-10-24T00:19:01.8812699Z 258 │ }); 2026-10-24T00:19:01.8812787Z 259 │ return acknowledgedEventCount; 2026-10-24T00:19:01.8812848Z 260 │ }, 2026-10-24T00:19:01.8812909Z 261 │ [], 2026-10-24T00:19:01.8812979Z ·  ─┬ 2026-10-24T00:19:01.8813174Z · ╰── This dependency list is missing values used by the callback 2026-10-24T00:19:01.8813235Z 262 │ ); 2026-10-24T00:19:01.8813291Z ╰──── 2026-10-24T00:19:01.8813512Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T00:19:01.8813849Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8813852Z 2026-10-24T00:19:01.8814106Z ⚠ eslint(no-unused-vars): Identifier 'Image' is imported but never used. 2026-10-24T00:19:01.8814262Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:17:10] 2026-10-24T00:19:01.8814408Z 16 │ import type { NativeSyntheticEvent, ViewProps } from "react-native"; 2026-10-24T00:19:01.8814529Z 17 │ import { Image, Platform, StyleSheet } from "react-native"; 2026-10-24T00:19:01.8814610Z ·  ──┬── 2026-10-24T00:19:01.8814753Z · ╰── 'Image' is imported here 2026-10-24T00:19:01.8814814Z 18 │ 2026-10-24T00:19:01.8814867Z ╰──── 2026-10-24T00:19:01.8814975Z  help: Consider removing this import. 2026-10-24T00:19:01.8814977Z 2026-10-24T00:19:01.8815195Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T00:19:01.8815347Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:229:6] 2026-10-24T00:19:01.8815520Z 225 │ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents( 2026-10-24T00:19:01.8815619Z 226 │ nativeEventSnapshotsRef.current, 2026-10-24T00:19:01.8815719Z ·  ───────────┬─────────── 2026-10-24T00:19:01.8816309Z · ╰── 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-24T00:19:01.8816441Z 227 │ mostRecentEventCount, 2026-10-24T00:19:01.8816504Z 228 │ ); 2026-10-24T00:19:01.8816637Z 229 │ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]); 2026-10-24T00:19:01.8816783Z ·  ──────────────────────────┬────────────────────────── 2026-10-24T00:19:01.8816994Z · ╰── This dependency list is missing values used by the callback 2026-10-24T00:19:01.8817086Z 230 │ const assumedValue = props.value; 2026-10-24T00:19:01.8817144Z ╰──── 2026-10-24T00:19:01.8817327Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T00:19:01.8817661Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8817670Z 2026-10-24T00:19:01.8817899Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T00:19:01.8818050Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:237:7] 2026-10-24T00:19:01.8818207Z 236 │ nativeEventSnapshotsRef.current = assumeComposerControlledState( 2026-10-24T00:19:01.8818302Z 237 │ nativeEventSnapshotsRef.current, 2026-10-24T00:19:01.8818398Z ·  ───────────┬─────────── 2026-10-24T00:19:01.8818888Z · ╰── 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-24T00:19:01.8818971Z 238 │ controlledEventCount, 2026-10-24T00:19:01.8819048Z 239 │ assumedValue, 2026-10-24T00:19:01.8819106Z 240 │ ); 2026-10-24T00:19:01.8819276Z 241 │ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]); 2026-10-24T00:19:01.8819424Z ·  ───────────┬────────── 2026-10-24T00:19:01.8819648Z · ╰── Unnecessary dependency `controlledDocumentJson` 2026-10-24T00:19:01.8819742Z 242 │ const acceptNativeEvent = useCallback( 2026-10-24T00:19:01.8819800Z ╰──── 2026-10-24T00:19:01.8820244Z  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-24T00:19:01.8820644Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8820787Z 2026-10-24T00:19:01.8820952Z ⚠ react(refs): Cannot access refs during render 2026-10-24T00:19:01.8821105Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29] 2026-10-24T00:19:01.8821239Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T00:19:01.8821360Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T00:19:01.8821487Z ·  ─────────────┬──────────── 2026-10-24T00:19:01.8821665Z · ╰── Cannot access ref value during render 2026-10-24T00:19:01.8821729Z 163 │ }); 2026-10-24T00:19:01.8821793Z ╰──── 2026-10-24T00:19:01.8822292Z  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-24T00:19:01.8822607Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T00:19:01.8822610Z 2026-10-24T00:19:01.8822764Z ⚠ react(refs): Cannot access refs during render 2026-10-24T00:19:01.8822920Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29] 2026-10-24T00:19:01.8823053Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T00:19:01.8823176Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T00:19:01.8823302Z ·  ─────────────┬──────────── 2026-10-24T00:19:01.8823524Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T00:19:01.8823586Z 163 │ }); 2026-10-24T00:19:01.8823644Z ╰──── 2026-10-24T00:19:01.8824176Z  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-24T00:19:01.8824487Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T00:19:01.8824489Z 2026-10-24T00:19:01.8824648Z ⚠ react(refs): Cannot access refs during render 2026-10-24T00:19:01.8824806Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:164:23] 2026-10-24T00:19:01.8824867Z 163 │ }); 2026-10-24T00:19:01.8824963Z 164 │ confirmedTokensRef.current = tokens; 2026-10-24T00:19:01.8825096Z ·  ─────────┬────────────┬─── 2026-10-24T00:19:01.8825298Z · │ ╰── Cannot update ref value during render 2026-10-24T00:19:01.8825425Z · ╰── This value is a ref 2026-10-24T00:19:01.8825500Z 165 │ return JSON.stringify( 2026-10-24T00:19:01.8825557Z ╰──── 2026-10-24T00:19:01.8826110Z  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-24T00:19:01.8826460Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T00:19:01.8826464Z 2026-10-24T00:19:01.8826617Z ⚠ react(refs): Cannot access refs during render 2026-10-24T00:19:01.8826771Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:206:5] 2026-10-24T00:19:01.8826851Z 205 │ mostRecentEventCount, 2026-10-24T00:19:01.8826952Z 206 │ nativeEventSnapshotsRef.current, 2026-10-24T00:19:01.8827067Z ·  ───────────────┬─────────────── 2026-10-24T00:19:01.8827266Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T00:19:01.8827333Z 207 │ ); 2026-10-24T00:19:01.8827395Z ╰──── 2026-10-24T00:19:01.8827885Z  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-24T00:19:01.8828193Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T00:19:01.8828195Z 2026-10-24T00:19:01.8828351Z ⚠ react(refs): Cannot access refs during render 2026-10-24T00:19:01.8828502Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:212:5] 2026-10-24T00:19:01.8828580Z 211 │ mostRecentEventCount, 2026-10-24T00:19:01.8828672Z 212 │ nativeEventSnapshotsRef.current, 2026-10-24T00:19:01.8828792Z ·  ───────────────┬─────────────── 2026-10-24T00:19:01.8828997Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T00:19:01.8829057Z 213 │ ); 2026-10-24T00:19:01.8829111Z ╰──── 2026-10-24T00:19:01.8829603Z  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-24T00:19:01.8829912Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T00:19:01.8829915Z 2026-10-24T00:19:01.8830121Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T00:19:01.8830281Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:197:6] 2026-10-24T00:19:01.8830409Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T00:19:01.8830531Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T00:19:01.8830651Z ·  ─────────┬──────── 2026-10-24T00:19:01.8831152Z · ╰── 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-24T00:19:01.8831214Z 163 │ }); 2026-10-24T00:19:01.8831311Z 164 │ confirmedTokensRef.current = tokens; 2026-10-24T00:19:01.8831387Z 165 │ return JSON.stringify( 2026-10-24T00:19:01.8831629Z 166 │ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => { 2026-10-24T00:19:01.8831750Z 167 │ const record = 2026-10-24T00:19:01.8831835Z 168 │ token.type === "context" 2026-10-24T00:19:01.8832013Z 169 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-24T00:19:01.8832087Z 170 │ : undefined; 2026-10-24T00:19:01.8832208Z 171 │ const presentation = contextChipPresentation( 2026-10-24T00:19:01.8832325Z 172 │ token.type === "context" ? token.kind : token.type, 2026-10-24T00:19:01.8832396Z 173 │ record, 2026-10-24T00:19:01.8832460Z 174 │ ); 2026-10-24T00:19:01.8832551Z 175 │ const icon = contextChipIcon( 2026-10-24T00:19:01.8832626Z 176 │ presentation, 2026-10-24T00:19:01.8832785Z 177 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-24T00:19:01.8832853Z 178 │ ); 2026-10-24T00:19:01.8832917Z 179 │ return { 2026-10-24T00:19:01.8832996Z 180 │ type: token.type, 2026-10-24T00:19:01.8833078Z 181 │ source: token.source, 2026-10-24T00:19:01.8833157Z 182 │ start: token.start, 2026-10-24T00:19:01.8833226Z 183 │ end: token.end, 2026-10-24T00:19:01.8833388Z 184 │ accent: contextChipAccent(presentation.accent, theme, chipTextColor), 2026-10-24T00:19:01.8833456Z 185 │ label: 2026-10-24T00:19:01.8833543Z 186 │ token.type === "skill" 2026-10-24T00:19:01.8833655Z 187 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-24T00:19:01.8833747Z 188 │ : token.type === "context" 2026-10-24T00:19:01.8834026Z 189 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-24T00:19:01.8834122Z 190 │ : basename(token.value), 2026-10-24T00:19:01.8834280Z 191 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-24T00:19:01.8834384Z 192 │ iconUri: contextChipIconUri(icon), 2026-10-24T00:19:01.8834481Z 193 │ tintsIcon: icon.kind === "chip", 2026-10-24T00:19:01.8834547Z 194 │ }; 2026-10-24T00:19:01.8834606Z 195 │ }), 2026-10-24T00:19:01.8834669Z 196 │ ); 2026-10-24T00:19:01.8834814Z 197 │ }, [props.value, props.context, skillLabels, theme, chipTextColor]); 2026-10-24T00:19:01.8834981Z ·  ───────────────────────────────┬─────────────────────────────── 2026-10-24T00:19:01.8835199Z · ╰── This dependency list is missing values used by the callback 2026-10-24T00:19:01.8835407Z 198 │ // Every render resolves against the snapshot history, so a render whose 2026-10-24T00:19:01.8835515Z ╰──── 2026-10-24T00:19:01.8835737Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T00:19:01.8836070Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8836076Z 2026-10-24T00:19:01.8836274Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T00:19:01.8836428Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:259:5] 2026-10-24T00:19:01.8836567Z 251 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-24T00:19:01.8836678Z 252 │ nativeEventSnapshotsRef.current.push({ 2026-10-24T00:19:01.8836780Z ·  ───────────┬─────────── 2026-10-24T00:19:01.8837278Z · ╰── 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-24T00:19:01.8837378Z 253 │ eventCount: acknowledgedEventCount, 2026-10-24T00:19:01.8837448Z 254 │ value, 2026-10-24T00:19:01.8837531Z 255 │ selection: nextSelection, 2026-10-24T00:19:01.8837595Z 256 │ }); 2026-10-24T00:19:01.8837686Z 257 │ return acknowledgedEventCount; 2026-10-24T00:19:01.8837748Z 258 │ }, 2026-10-24T00:19:01.8837806Z 259 │ [], 2026-10-24T00:19:01.8837880Z ·  ─┬ 2026-10-24T00:19:01.8838082Z · ╰── This dependency list is missing values used by the callback 2026-10-24T00:19:01.8838144Z 260 │ ); 2026-10-24T00:19:01.8838198Z ╰──── 2026-10-24T00:19:01.8838421Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T00:19:01.8838755Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T00:19:01.8838758Z 2026-10-24T00:19:01.8838975Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T00:19:01.8839150Z ╭─[apps/web/src/components/settings/ProviderSettingsPanel.logic.ts:4:8] 2026-10-24T00:19:01.8839233Z 3 │ AuthProvidersManageScope, 2026-10-24T00:19:01.8839311Z 4 │ type AuthSessionState, 2026-10-24T00:19:01.8839408Z ·  ────────┬─────── 2026-10-24T00:19:01.8839566Z · ╰── 'AuthSessionState' is imported here 2026-10-24T00:19:01.8839642Z 5 │ type EnvironmentId, 2026-10-24T00:19:01.8839701Z ╰──── 2026-10-24T00:19:01.8839809Z  help: Consider removing this import. 2026-10-24T00:19:01.8839812Z 2026-10-24T00:19:01.8840099Z ⚠ unicorn(prefer-add-event-listener): Prefer `addEventListener()` over their `on`-function counterparts. 2026-10-24T00:19:01.8840256Z ╭─[apps/web/src/components/device/deviceHubApi.test.ts:12:14] 2026-10-24T00:19:01.8840423Z 11 │ addEventListener(_type: string, listener: (event: { data: string }) => void) { 2026-10-24T00:19:01.8840513Z 12 │ this.onmessage = listener; 2026-10-24T00:19:01.8840597Z ·  ───────── 2026-10-24T00:19:01.8840658Z 13 │ } 2026-10-24T00:19:01.8840780Z ╰──── 2026-10-24T00:19:01.8841167Z  help: `addEventListener()` can register multiple handlers and accepts options such as `{ once: true }`; assigning to `on` replaces any previously registered handler. 2026-10-24T00:19:01.8841170Z 2026-10-24T00:19:01.8841388Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable. 2026-10-24T00:19:01.8841537Z ╭─[apps/web/src/components/device/deviceHubApi.test.ts:16:9] 2026-10-24T00:19:01.8841610Z 15 │ constructor() { 2026-10-24T00:19:01.8841683Z 16 │ source = this; 2026-10-24T00:19:01.8841760Z ·  ────── 2026-10-24T00:19:01.8841817Z 17 │ } 2026-10-24T00:19:01.8841875Z ╰──── 2026-10-24T00:19:01.8842171Z  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-24T00:19:01.8842175Z 2026-10-24T00:19:01.8842355Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T00:19:01.8842502Z ╭─[apps/web/src/components/CustomSnoozeDialog.tsx:140:58] 2026-10-24T00:19:01.8842647Z 139 │ {...(weekStartsOn === undefined ? {} : { weekStartsOn })} 2026-10-24T00:19:01.8842807Z 140 │ disabled={{ before: new Date(new Date().setHours(0, 0, 0, 0)) }} 2026-10-24T00:19:01.8842939Z ·  ─────┬──── 2026-10-24T00:19:01.8843118Z · ╰── Cannot call impure function 2026-10-24T00:19:01.8843223Z 141 │ onSelect={(selected) => { 2026-10-24T00:19:01.8843279Z ╰──── 2026-10-24T00:19:01.8843586Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T00:19:01.8843923Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T00:19:01.8843931Z 2026-10-24T00:19:01.8844238Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T00:19:01.8844407Z ╭─[apps/web/src/components/settings/SettingInheritance.tsx:163:24] 2026-10-24T00:19:01.8844470Z 162 │ keys, 2026-10-24T00:19:01.8844548Z 163 │ overridingProjects = [], 2026-10-24T00:19:01.8844637Z ·  ── 2026-10-24T00:19:01.8844710Z 164 │ onClearOverrides, 2026-10-24T00:19:01.8844771Z ╰──── 2026-10-24T00:19:01.8845115Z  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-24T00:19:01.8845117Z 2026-10-24T00:19:01.8845411Z ⚠ eslint(no-unused-vars): Variable 'useDragRegion' is declared but never used. Unused variables should start with a '_'. 2026-10-24T00:19:01.8845569Z ╭─[apps/web/src/components/preview/PreviewPanelShell.tsx:61:9] 2026-10-24T00:19:01.8845627Z 60 │ ) { 2026-10-24T00:19:01.8845807Z 61 │ const useDragRegion = isElectron && props.mode !== "sheet" && props.mode !== "embedded"; 2026-10-24T00:19:01.8845894Z ·  ──────┬────── 2026-10-24T00:19:01.8846045Z · ╰── 'useDragRegion' is declared here 2026-10-24T00:19:01.8846205Z 62 │ const isInline = props.mode === "inline"; 2026-10-24T00:19:01.8846312Z ╰──── 2026-10-24T00:19:01.8846423Z  help: Consider removing this declaration. 2026-10-24T00:19:01.8846426Z 2026-10-24T00:19:01.8846518Z Found 0 errors and 362 warnings in 5405 files (5.9s, 8 threads) 2026-10-24T00:19:01.9350082Z Post job cleanup. 2026-10-24T00:19:02.0009572Z Cache hit occurred on the primary key electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309, not saving cache. 2026-10-24T00:19:02.0085276Z Post job cleanup. 2026-10-24T00:19:02.0863727Z ##[start-action display=Cache full pnpm store;id=__f7aef9e6-9734-4381-baa3-b2b48ecf9f11.__actions_cache] 2026-10-24T00:19:02.1237207Z Post job cleanup. 2026-10-24T00:19:02.1966314Z Cache hit occurred on the primary key pnpm-full-v1-Linux-X64-3cb0b4d7cff93dc8fe33f2ea73cac71ca25a36270fcb648b9b4a9320151012ef, not saving cache. 2026-10-24T00:19:02.2010318Z ##[end-action id=__f7aef9e6-9734-4381-baa3-b2b48ecf9f11.__actions_cache;outcome=success;conclusion=success;duration_ms=114] 2026-10-24T00:19:02.2012305Z ##[start-action display=Cache Vite+;id=__f7aef9e6-9734-4381-baa3-b2b48ecf9f11.vp_cache] 2026-10-24T00:19:02.2044696Z Post job cleanup. 2026-10-24T00:19:02.2757927Z Cache hit occurred on the primary key vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0, not saving cache. 2026-10-24T00:19:02.2796185Z ##[end-action id=__f7aef9e6-9734-4381-baa3-b2b48ecf9f11.vp_cache;outcome=success;conclusion=success;duration_ms=78] 2026-10-24T00:19:02.2836225Z Post job cleanup. 2026-10-24T00:19:02.3326877Z [command]/usr/local/bin/git version 2026-10-24T00:19:02.3359426Z git version 2.55.0 2026-10-24T00:19:02.3388260Z Temporarily overriding HOME='/home/runner/_work/_temp/a9e0696f-b0f8-4e3f-b8d1-3b87a4a40989' before making global git config changes 2026-10-24T00:19:02.3388713Z Adding repository directory to the temporary git global config as a safe directory 2026-10-24T00:19:02.3393198Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code 2026-10-24T00:19:02.3420738Z Removing SSH command configuration 2026-10-24T00:19:02.3425828Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand 2026-10-24T00:19:02.3452287Z [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-24T00:19:02.3588261Z fatal: No url found for submodule path '.repos/alchemy-effect/submodules/distilled' in .gitmodules 2026-10-24T00:19:02.3616123Z ##[warning]The process '/usr/local/bin/git' failed with exit code 128 2026-10-24T00:19:02.3671753Z A job completed hook has been configured by the self-hosted runner administrator 2026-10-24T00:19:02.3699494Z ##[group]Run '/job_completed.sh' 2026-10-24T00:19:02.3712705Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T00:19:02.3712881Z env: 2026-10-24T00:19:02.3713000Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 160 2026-10-24T00:19:02.3713170Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 480 2026-10-24T00:19:02.3713316Z BLACKSMITH_CHECK_RUN_ID: 120722315357 2026-10-24T00:19:02.3713460Z BLACKSMITH_JOB_DISPLAY_NAME: Lint 2026-10-24T00:19:02.3713599Z GITHUB_ACTIONS_CACHE_MODE: write 2026-10-24T00:19:02.3713735Z ##[endgroup] 2026-10-24T00:19:02.3803477Z Docker container cache not activated, skipping hash computation. 2026-10-24T00:19:02.4125620Z No active SSH sessions detected. Proceeding with shutdown immediately. 2026-10-24T00:19:02.4179026Z Cleaning up orphan processes