2026-10-24T02:54:34.4228125Z Current runner version: '2.338.1' 2026-10-24T02:54:34.4231326Z Runner name: 'blacksmith-8vcpu-ubuntu-2404-ja6lm2ev2uv2bh3k' 2026-10-24T02:54:34.4232157Z Runner group name: 'blacksmith scale sets - blacksmith-8vcpu-ubuntu-2404' 2026-10-24T02:54:34.4232819Z Machine name: 'ip-172-31-73-130' 2026-10-24T02:54:34.4234600Z ##[group]GITHUB_TOKEN Permissions 2026-10-24T02:54:34.4235935Z Contents: read 2026-10-24T02:54:34.4236320Z Metadata: read 2026-10-24T02:54:34.4236758Z ##[endgroup] 2026-10-24T02:54:34.4238294Z Secret source: Actions 2026-10-24T02:54:34.4238927Z Cache mode: write 2026-10-24T02:54:34.4239506Z Prepare workflow directory 2026-10-24T02:54:34.4409463Z Prepare all required actions 2026-10-24T02:54:34.4434665Z Getting action download info 2026-10-24T02:54:34.5486310Z Download action repository 'actions/checkout@v6' (SHA:d23441a48e516b6c34aea4fa41551a30e30af803) 2026-10-24T02:54:34.5840156Z Download action repository 'actions/cache@v6' (SHA:55cc8345863c7cc4c66a329aec7e433d2d1c52a9) 2026-10-24T02:54:34.6839033Z Setting BLACKSMITH_ACTIONS_RESULTS_URL to https://results-receiver.actions.githubusercontent.com/ 2026-10-24T02:54:34.6875384Z Complete job name: Lint 2026-10-24T02:54:34.7236540Z A job started hook has been configured by the self-hosted runner administrator 2026-10-24T02:54:34.7310653Z ##[group]Run '/setup.sh' 2026-10-24T02:54:34.7321455Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T02:54:34.7321876Z env: 2026-10-24T02:54:34.7322088Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 168 2026-10-24T02:54:34.7322375Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 372 2026-10-24T02:54:34.7322656Z BLACKSMITH_CHECK_RUN_ID: 120759370161 2026-10-24T02:54:34.7322928Z BLACKSMITH_JOB_DISPLAY_NAME: Lint 2026-10-24T02:54:34.7323193Z GITHUB_ACTIONS_CACHE_MODE: write 2026-10-24T02:54:34.7323444Z ##[endgroup] 2026-10-24T02:54:34.7534101Z Logging daemon started (blacksmithd for logs) 2026-10-24T02:54:34.7615900Z Results daemon started (blacksmithd for results) 2026-10-24T02:54:34.7737367Z Background adoption and SSH setup started (PID: 3172) 2026-10-24T02:54:34.7739674Z 2026-10-24T02:54:34.7739787Z ---------------------------------------- 2026-10-24T02:54:34.7740413Z View this job: https://app.blacksmith.sh/pingdotgg/runs/40056119225/jobs/120759370161 2026-10-24T02:54:34.7740818Z SSH Access (using your GitHub SSH key): 2026-10-24T02:54:34.7741250Z ssh -p 64000 runner@blacksmith-8vcpu-ubuntu-2404-ja6lm2ev2uv2bh3k.vm.blacksmith.sh 2026-10-24T02:54:34.7741555Z 2026-10-24T02:54:34.7741662Z No GitHub SSH key? Add one at: 2026-10-24T02:54:34.7742142Z https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account 2026-10-24T02:54:34.7742537Z 2026-10-24T02:54:34.7742638Z ---------------------------------------- 2026-10-24T02:54:34.7742808Z 2026-10-24T02:54:34.7742945Z VM ID: blacksmith-8vcpu-ubuntu-2404-ja6lm2ev2uv2bh3k 2026-10-24T02:54:34.7743259Z Host: production-152.236.30.159-x8664 2026-10-24T02:54:34.7743523Z Host Agent PID: 3988684 2026-10-24T02:54:34.7743765Z Host Agent Git SHA: 1637818df 2026-10-24T02:54:34.7744018Z Host CPU Manufacturer: AuthenticAMD 2026-10-24T02:54:34.7744292Z Blacksmith Host Generation: gen 2 2026-10-24T02:54:34.7744577Z Petname: production-flexible-python-35e9aa4e 2026-10-24T02:54:34.7744862Z Region: us-east 2026-10-24T02:54:34.7745090Z Rootfs Version: ubuntu24-full-x64-081926 2026-10-24T02:54:34.7749629Z OS Version: Ubuntu 24.04.4 LTS 2026-10-24T02:54:34.7749892Z 2026-10-24T02:54:34.7750011Z Enabling Blacksmith transparent cache 2026-10-24T02:54:34.8007883Z ##[group]Run actions/checkout@v6 2026-10-24T02:54:34.8008176Z with: 2026-10-24T02:54:34.8008506Z sparse-checkout: /* !/.repos/ !/apps/mobile/modules/t3-terminal/Vendor/**/*.a 2026-10-24T02:54:34.8008896Z sparse-checkout-cone-mode: false 2026-10-24T02:54:34.8009165Z repository: pingdotgg/t3code 2026-10-24T02:54:34.8010893Z token: *** 2026-10-24T02:54:34.8011100Z ssh-strict: true 2026-10-24T02:54:34.8011307Z ssh-user: git 2026-10-24T02:54:34.8011523Z persist-credentials: true 2026-10-24T02:54:34.8011961Z clean: true 2026-10-24T02:54:34.8012166Z fetch-depth: 1 2026-10-24T02:54:34.8012378Z fetch-tags: false 2026-10-24T02:54:34.8012594Z show-progress: true 2026-10-24T02:54:34.8012812Z lfs: false 2026-10-24T02:54:34.8013010Z submodules: false 2026-10-24T02:54:34.8013230Z set-safe-directory: true 2026-10-24T02:54:34.8013475Z allow-unsafe-pr-checkout: false 2026-10-24T02:54:34.8013726Z env: 2026-10-24T02:54:34.8013954Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 168 2026-10-24T02:54:34.8014235Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 372 2026-10-24T02:54:34.8014508Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T02:54:34.8014761Z ##[endgroup] 2026-10-24T02:54:34.8924471Z Syncing repository: pingdotgg/t3code 2026-10-24T02:54:34.8925567Z ##[group]Getting Git version info 2026-10-24T02:54:34.8925961Z Working directory is '/home/runner/_work/t3code/t3code' 2026-10-24T02:54:34.8926479Z [command]/usr/local/bin/git version 2026-10-24T02:54:34.8979760Z git version 2.55.0 2026-10-24T02:54:34.8990740Z ##[endgroup] 2026-10-24T02:54:34.8997155Z Temporarily overriding HOME='/home/runner/_work/_temp/c5e098f9-c802-4ad3-8ce6-46116c14e8f6' before making global git config changes 2026-10-24T02:54:34.8997803Z Adding repository directory to the temporary git global config as a safe directory 2026-10-24T02:54:34.9000151Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code 2026-10-24T02:54:34.9032911Z Deleting the contents of '/home/runner/_work/t3code/t3code' 2026-10-24T02:54:34.9034432Z ##[group]Determining repository object format 2026-10-24T02:54:34.9035359Z ##[endgroup] 2026-10-24T02:54:34.9035733Z ##[group]Initializing the repository 2026-10-24T02:54:34.9037646Z [command]/usr/local/bin/git init /home/runner/_work/t3code/t3code 2026-10-24T02:54:34.9072623Z hint: Using 'master' as the name for the initial branch. This default branch name 2026-10-24T02:54:34.9073102Z hint: will change to "main" in Git 3.0. To configure the initial branch name 2026-10-24T02:54:34.9073562Z hint: to use in all of your new repositories, which will suppress this warning, 2026-10-24T02:54:34.9073919Z hint: call: 2026-10-24T02:54:34.9074120Z hint: 2026-10-24T02:54:34.9074385Z hint: git config --global init.defaultBranch 2026-10-24T02:54:34.9074688Z hint: 2026-10-24T02:54:34.9074971Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and 2026-10-24T02:54:34.9075415Z hint: 'development'. The just-created branch can be renamed via this command: 2026-10-24T02:54:34.9075807Z hint: 2026-10-24T02:54:34.9076254Z hint: git branch -m 2026-10-24T02:54:34.9076530Z hint: 2026-10-24T02:54:34.9076845Z hint: Disable this message with "git config set advice.defaultBranchName false" 2026-10-24T02:54:34.9077317Z Initialized empty Git repository in /home/runner/_work/t3code/t3code/.git/ 2026-10-24T02:54:34.9078138Z [command]/usr/local/bin/git remote add origin https://github.com/pingdotgg/t3code 2026-10-24T02:54:34.9100294Z ##[endgroup] 2026-10-24T02:54:34.9100681Z ##[group]Disabling automatic garbage collection 2026-10-24T02:54:34.9102433Z [command]/usr/local/bin/git config --local gc.auto 0 2026-10-24T02:54:34.9121593Z ##[endgroup] 2026-10-24T02:54:34.9121929Z ##[group]Setting up auth 2026-10-24T02:54:34.9122195Z Removing SSH command configuration 2026-10-24T02:54:34.9125727Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand 2026-10-24T02:54:34.9146335Z [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-24T02:54:34.9273497Z Removing HTTP extra header 2026-10-24T02:54:34.9276372Z [command]/usr/local/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader 2026-10-24T02:54:34.9297797Z [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-24T02:54:34.9393025Z Removing includeIf entries pointing to credentials config files 2026-10-24T02:54:34.9395285Z [command]/usr/local/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir: 2026-10-24T02:54:34.9420303Z [command]/usr/local/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url 2026-10-24T02:54:34.9526824Z [command]/usr/local/bin/git config --file /home/runner/_work/_temp/git-credentials-d6a51d7f-b288-4da6-b5a7-cbbecf2c8701.config http.https://github.com/.extraheader AUTHORIZATION: basic *** 2026-10-24T02:54:34.9585014Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git.path /home/runner/_work/_temp/git-credentials-d6a51d7f-b288-4da6-b5a7-cbbecf2c8701.config 2026-10-24T02:54:34.9605982Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git/worktrees/*.path /home/runner/_work/_temp/git-credentials-d6a51d7f-b288-4da6-b5a7-cbbecf2c8701.config 2026-10-24T02:54:34.9627353Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git.path /github/runner_temp/git-credentials-d6a51d7f-b288-4da6-b5a7-cbbecf2c8701.config 2026-10-24T02:54:34.9650131Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git/worktrees/*.path /github/runner_temp/git-credentials-d6a51d7f-b288-4da6-b5a7-cbbecf2c8701.config 2026-10-24T02:54:34.9670077Z ##[endgroup] 2026-10-24T02:54:34.9670517Z ##[group]Fetching the repository 2026-10-24T02:54:34.9674198Z [command]/usr/local/bin/git -c protocol.version=2 fetch --no-tags --prune --no-recurse-submodules --filter=blob:none --depth=1 origin +25557c11259c58b5d6d2a3710f4388c96db83d4a:refs/remotes/pull/24314/merge 2026-10-24T02:54:35.2407056Z From https://github.com/pingdotgg/t3code 2026-10-24T02:54:35.2407965Z * [new ref] 25557c11259c58b5d6d2a3710f4388c96db83d4a -> pull/24314/merge 2026-10-24T02:54:35.2432016Z ##[endgroup] 2026-10-24T02:54:35.2432746Z ##[group]Determining the checkout info 2026-10-24T02:54:35.2433525Z ##[endgroup] 2026-10-24T02:54:35.2434172Z ##[group]Setting up sparse checkout 2026-10-24T02:54:35.2435820Z [command]/usr/local/bin/git config core.sparseCheckout true 2026-10-24T02:54:35.2459967Z [command]/usr/local/bin/git rev-parse --git-path info/sparse-checkout 2026-10-24T02:54:35.2475916Z .git/info/sparse-checkout 2026-10-24T02:54:35.2479959Z ##[endgroup] 2026-10-24T02:54:35.2480696Z ##[group]Checking out the ref 2026-10-24T02:54:35.2482512Z [command]/usr/local/bin/git checkout --progress --force refs/remotes/pull/24314/merge 2026-10-24T02:54:41.7542519Z Updating files: 0% (1/6319) 2026-10-24T02:54:41.7570714Z Updating files: 1% (64/6319) 2026-10-24T02:54:41.7588804Z Updating files: 2% (127/6319) 2026-10-24T02:54:41.7606547Z Updating files: 3% (190/6319) 2026-10-24T02:54:41.7628459Z Updating files: 4% (253/6319) 2026-10-24T02:54:41.7658012Z Updating files: 5% (316/6319) 2026-10-24T02:54:41.7678651Z Updating files: 6% (380/6319) 2026-10-24T02:54:41.7733744Z Updating files: 7% (443/6319) 2026-10-24T02:54:41.7762609Z Updating files: 8% (506/6319) 2026-10-24T02:54:41.7786517Z Updating files: 9% (569/6319) 2026-10-24T02:54:41.8075761Z Updating files: 10% (632/6319) 2026-10-24T02:54:41.8091059Z Updating files: 11% (696/6319) 2026-10-24T02:54:41.8101482Z Updating files: 12% (759/6319) 2026-10-24T02:54:41.8114976Z Updating files: 13% (822/6319) 2026-10-24T02:54:41.8130839Z Updating files: 14% (885/6319) 2026-10-24T02:54:41.8148289Z Updating files: 15% (948/6319) 2026-10-24T02:54:41.8166382Z Updating files: 16% (1012/6319) 2026-10-24T02:54:41.8180698Z Updating files: 17% (1075/6319) 2026-10-24T02:54:41.8199081Z Updating files: 18% (1138/6319) 2026-10-24T02:54:41.8213559Z Updating files: 19% (1201/6319) 2026-10-24T02:54:41.8235221Z Updating files: 20% (1264/6319) 2026-10-24T02:54:41.8252792Z Updating files: 21% (1327/6319) 2026-10-24T02:54:41.8271674Z Updating files: 22% (1391/6319) 2026-10-24T02:54:41.8284848Z Updating files: 23% (1454/6319) 2026-10-24T02:54:41.8297687Z Updating files: 24% (1517/6319) 2026-10-24T02:54:41.8313582Z Updating files: 25% (1580/6319) 2026-10-24T02:54:41.8327063Z Updating files: 26% (1643/6319) 2026-10-24T02:54:41.8339922Z Updating files: 27% (1707/6319) 2026-10-24T02:54:41.8358789Z Updating files: 28% (1770/6319) 2026-10-24T02:54:41.8390400Z Updating files: 29% (1833/6319) 2026-10-24T02:54:41.8410307Z Updating files: 30% (1896/6319) 2026-10-24T02:54:41.8433800Z Updating files: 31% (1959/6319) 2026-10-24T02:54:41.8463685Z Updating files: 32% (2023/6319) 2026-10-24T02:54:41.8495100Z Updating files: 33% (2086/6319) 2026-10-24T02:54:41.8560907Z Updating files: 34% (2149/6319) 2026-10-24T02:54:41.8620065Z Updating files: 35% (2212/6319) 2026-10-24T02:54:41.8655204Z Updating files: 36% (2275/6319) 2026-10-24T02:54:41.8688733Z Updating files: 37% (2339/6319) 2026-10-24T02:54:41.8732577Z Updating files: 38% (2402/6319) 2026-10-24T02:54:41.8757824Z Updating files: 39% (2465/6319) 2026-10-24T02:54:41.8788589Z Updating files: 40% (2528/6319) 2026-10-24T02:54:41.8819043Z Updating files: 41% (2591/6319) 2026-10-24T02:54:41.8835049Z Updating files: 42% (2654/6319) 2026-10-24T02:54:41.8845846Z Updating files: 43% (2718/6319) 2026-10-24T02:54:41.8865647Z Updating files: 44% (2781/6319) 2026-10-24T02:54:41.8893563Z Updating files: 45% (2844/6319) 2026-10-24T02:54:41.8918808Z Updating files: 46% (2907/6319) 2026-10-24T02:54:41.8945076Z Updating files: 47% (2970/6319) 2026-10-24T02:54:41.8974154Z Updating files: 48% (3034/6319) 2026-10-24T02:54:41.9002686Z Updating files: 49% (3097/6319) 2026-10-24T02:54:41.9040845Z Updating files: 50% (3160/6319) 2026-10-24T02:54:41.9055730Z Updating files: 51% (3223/6319) 2026-10-24T02:54:41.9090918Z Updating files: 52% (3286/6319) 2026-10-24T02:54:41.9115545Z Updating files: 53% (3350/6319) 2026-10-24T02:54:41.9135096Z Updating files: 54% (3413/6319) 2026-10-24T02:54:41.9157957Z Updating files: 55% (3476/6319) 2026-10-24T02:54:41.9175228Z Updating files: 56% (3539/6319) 2026-10-24T02:54:41.9191930Z Updating files: 57% (3602/6319) 2026-10-24T02:54:41.9209447Z Updating files: 58% (3666/6319) 2026-10-24T02:54:41.9564843Z Updating files: 59% (3729/6319) 2026-10-24T02:54:41.9578433Z Updating files: 60% (3792/6319) 2026-10-24T02:54:41.9594675Z Updating files: 61% (3855/6319) 2026-10-24T02:54:41.9612186Z Updating files: 62% (3918/6319) 2026-10-24T02:54:41.9633139Z Updating files: 63% (3981/6319) 2026-10-24T02:54:41.9658795Z Updating files: 64% (4045/6319) 2026-10-24T02:54:41.9679732Z Updating files: 65% (4108/6319) 2026-10-24T02:54:41.9694943Z Updating files: 66% (4171/6319) 2026-10-24T02:54:41.9720371Z Updating files: 67% (4234/6319) 2026-10-24T02:54:41.9732951Z Updating files: 68% (4297/6319) 2026-10-24T02:54:41.9751195Z Updating files: 69% (4361/6319) 2026-10-24T02:54:41.9763741Z Updating files: 70% (4424/6319) 2026-10-24T02:54:41.9779132Z Updating files: 71% (4487/6319) 2026-10-24T02:54:41.9795109Z Updating files: 72% (4550/6319) 2026-10-24T02:54:41.9819052Z Updating files: 73% (4613/6319) 2026-10-24T02:54:42.0070508Z Updating files: 74% (4677/6319) 2026-10-24T02:54:42.0251575Z Updating files: 75% (4740/6319) 2026-10-24T02:54:42.0272975Z Updating files: 76% (4803/6319) 2026-10-24T02:54:42.0292243Z Updating files: 77% (4866/6319) 2026-10-24T02:54:42.0317272Z Updating files: 78% (4929/6319) 2026-10-24T02:54:42.0335220Z Updating files: 79% (4993/6319) 2026-10-24T02:54:42.0351562Z Updating files: 80% (5056/6319) 2026-10-24T02:54:42.0370112Z Updating files: 81% (5119/6319) 2026-10-24T02:54:42.0387551Z Updating files: 82% (5182/6319) 2026-10-24T02:54:42.0404404Z Updating files: 83% (5245/6319) 2026-10-24T02:54:42.0429169Z Updating files: 84% (5308/6319) 2026-10-24T02:54:42.0449372Z Updating files: 85% (5372/6319) 2026-10-24T02:54:42.0470642Z Updating files: 86% (5435/6319) 2026-10-24T02:54:42.0537133Z Updating files: 87% (5498/6319) 2026-10-24T02:54:42.0568848Z Updating files: 88% (5561/6319) 2026-10-24T02:54:42.0585114Z Updating files: 89% (5624/6319) 2026-10-24T02:54:42.0611219Z Updating files: 90% (5688/6319) 2026-10-24T02:54:42.0644264Z Updating files: 91% (5751/6319) 2026-10-24T02:54:42.0658819Z Updating files: 92% (5814/6319) 2026-10-24T02:54:42.0674645Z Updating files: 93% (5877/6319) 2026-10-24T02:54:42.0695073Z Updating files: 94% (5940/6319) 2026-10-24T02:54:42.0717235Z Updating files: 95% (6004/6319) 2026-10-24T02:54:42.0769970Z Updating files: 96% (6067/6319) 2026-10-24T02:54:42.0795284Z Updating files: 97% (6130/6319) 2026-10-24T02:54:42.0840290Z Updating files: 98% (6193/6319) 2026-10-24T02:54:42.0858684Z Updating files: 99% (6256/6319) 2026-10-24T02:54:42.0858957Z Updating files: 100% (6319/6319) 2026-10-24T02:54:42.0859156Z Updating files: 100% (6319/6319), done. 2026-10-24T02:54:42.1006714Z Note: switching to 'refs/remotes/pull/24314/merge'. 2026-10-24T02:54:42.1006965Z 2026-10-24T02:54:42.1007074Z You are in 'detached HEAD' state. You can look around, make experimental 2026-10-24T02:54:42.1007362Z changes and commit them, and you can discard any commits you make in this 2026-10-24T02:54:42.1007603Z state without impacting any branches by switching back to a branch. 2026-10-24T02:54:42.1007746Z 2026-10-24T02:54:42.1007845Z If you want to create a new branch to retain commits you create, you may 2026-10-24T02:54:42.1008082Z do so (now or later) by using -c with the switch command. Example: 2026-10-24T02:54:42.1008215Z 2026-10-24T02:54:42.1008280Z git switch -c 2026-10-24T02:54:42.1008374Z 2026-10-24T02:54:42.1008435Z Or undo this operation with: 2026-10-24T02:54:42.1008521Z 2026-10-24T02:54:42.1008573Z git switch - 2026-10-24T02:54:42.1008651Z 2026-10-24T02:54:42.1008774Z Turn off this advice by setting config variable advice.detachedHead to false 2026-10-24T02:54:42.1008930Z 2026-10-24T02:54:42.1009104Z HEAD is now at 25557c1 Merge a44ddee637e7077b2247488c0b9f1fc167850b73 into 26c3625f484eadd4d5b6ca5a3dd1f8f8bd5533b4 2026-10-24T02:54:42.1018848Z ##[endgroup] 2026-10-24T02:54:42.1050186Z [command]/usr/local/bin/git log -1 --format=%H 2026-10-24T02:54:42.1067897Z 25557c11259c58b5d6d2a3710f4388c96db83d4a 2026-10-24T02:54:42.1139112Z ##[group]Run files="$(git ls-files .github/pr-assets)" 2026-10-24T02:54:42.1139363Z files="$(git ls-files .github/pr-assets)" 2026-10-24T02:54:42.1139543Z if test -n "$files"; then 2026-10-24T02:54:42.1139767Z  printf 'PR evidence must be uploaded to GitHub, not committed:\n%s\n' "$files" >&2 2026-10-24T02:54:42.1139977Z  exit 1 2026-10-24T02:54:42.1140083Z fi 2026-10-24T02:54:42.1152423Z shell: /usr/bin/bash -e {0} 2026-10-24T02:54:42.1152556Z env: 2026-10-24T02:54:42.1152686Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 168 2026-10-24T02:54:42.1152863Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 372 2026-10-24T02:54:42.1153022Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T02:54:42.1153153Z ##[endgroup] 2026-10-24T02:54:42.1296268Z Prepare all required actions 2026-10-24T02:54:42.1296597Z Getting action download info 2026-10-24T02:54:42.2117949Z Download action repository 'voidzero-dev/setup-vp@v1' (SHA:250f29ce396baf5e8f24498e17c0dfdebabc26eb) 2026-10-24T02:54:42.3164661Z ##[group]Run ./.github/actions/setup-ci-deps 2026-10-24T02:54:42.3164818Z env: 2026-10-24T02:54:42.3164935Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 168 2026-10-24T02:54:42.3165093Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 372 2026-10-24T02:54:42.3165235Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T02:54:42.3165368Z ##[endgroup] 2026-10-24T02:54:42.3238091Z ##[start-action display=Resolve Vite+ version;id=__self.vp] 2026-10-24T02:54:42.3251745Z ##[group]Run echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-24T02:54:42.3252183Z echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-24T02:54:42.3252481Z echo "node=$(jq -r '.engines.node' package.json)" >> "$GITHUB_OUTPUT" 2026-10-24T02:54:42.3252721Z echo "pnpm=$(jq -r '.packageManager' package.json)" >> "$GITHUB_OUTPUT" 2026-10-24T02:54:42.3263940Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T02:54:42.3264106Z env: 2026-10-24T02:54:42.3264219Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 168 2026-10-24T02:54:42.3264361Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 372 2026-10-24T02:54:42.3264500Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T02:54:42.3264634Z ##[endgroup] 2026-10-24T02:54:42.3333069Z ##[end-action id=__self.vp;outcome=success;conclusion=success;duration_ms=9] 2026-10-24T02:54:42.3334341Z ##[start-action display=Cache Vite+;id=__self.vp_cache] 2026-10-24T02:54:42.3375580Z ##[group]Run actions/cache@v6 2026-10-24T02:54:42.3375728Z with: 2026-10-24T02:54:42.3375832Z path: ~/.vite-plus 2026-10-24T02:54:42.3375995Z key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T02:54:42.3376191Z enableCrossOsArchive: false 2026-10-24T02:54:42.3376320Z fail-on-cache-miss: false 2026-10-24T02:54:42.3376443Z lookup-only: false 2026-10-24T02:54:42.3376554Z save-always: false 2026-10-24T02:54:42.3376664Z env: 2026-10-24T02:54:42.3376769Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 168 2026-10-24T02:54:42.3376912Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 372 2026-10-24T02:54:42.3377053Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T02:54:42.3377183Z ##[endgroup] 2026-10-24T02:54:42.5673583Z Cache hit for: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T02:54:42.9375208Z Received 170349591 of 170349591 (100.0%), 465.5 MBs/sec 2026-10-24T02:54:42.9375679Z Cache Size: ~162 MB (170349591 B) 2026-10-24T02:54:42.9435035Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/4e256159-f1e1-456b-89c4-ba59811611ff/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T02:54:43.6164298Z Cache restored successfully 2026-10-24T02:54:43.6305857Z Cache restored from key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T02:54:43.6387377Z ##[end-action id=__self.vp_cache;outcome=success;conclusion=success;duration_ms=1305] 2026-10-24T02:54:43.6389662Z ##[start-action display=Use cached Vite+;id=__self.__run] 2026-10-24T02:54:43.6411766Z ##[group]Run echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-24T02:54:43.6412005Z echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-24T02:54:43.6412194Z "$HOME/.vite-plus/bin/vp" env use "26.12.1" 2026-10-24T02:54:43.6427067Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T02:54:43.6427249Z env: 2026-10-24T02:54:43.6427377Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 168 2026-10-24T02:54:43.6427536Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 372 2026-10-24T02:54:43.6427700Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T02:54:43.6427859Z ##[endgroup] 2026-10-24T02:54:43.6468243Z Using Node.js v26.12.1 (resolved from 26.12.1) 2026-10-24T02:54:43.6476962Z ##[end-action id=__self.__run;outcome=success;conclusion=success;duration_ms=8] 2026-10-24T02:54:43.6478268Z ##[start-action display=Setup Vite+;id=__self.__voidzero-dev_setup-vp] 2026-10-24T02:54:43.6483594Z ##[end-action id=__self.__voidzero-dev_setup-vp;outcome=skipped;conclusion=skipped;duration_ms=0] 2026-10-24T02:54:43.6485436Z ##[start-action display=Resolve pnpm store path;id=__self.pnpm_store] 2026-10-24T02:54:43.6512070Z ##[group]Run store_path="$(vp pm cache dir)" 2026-10-24T02:54:43.6512289Z store_path="$(vp pm cache dir)" 2026-10-24T02:54:43.6512453Z echo "path=$store_path" >> "$GITHUB_OUTPUT" 2026-10-24T02:54:43.6527033Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T02:54:43.6527202Z env: 2026-10-24T02:54:43.6527317Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 168 2026-10-24T02:54:43.6527460Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 372 2026-10-24T02:54:43.6527739Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T02:54:43.6527871Z ##[endgroup] 2026-10-24T02:54:43.6663989Z ##[end-action id=__self.pnpm_store;outcome=success;conclusion=success;duration_ms=17] 2026-10-24T02:54:43.6665320Z ##[start-action display=Cache full pnpm store;id=__self.__actions_cache] 2026-10-24T02:54:43.6987120Z ##[group]Run actions/cache@v6 2026-10-24T02:54:43.6987259Z with: 2026-10-24T02:54:43.6987389Z path: /home/runner/.local/share/pnpm/store/v11 2026-10-24T02:54:43.6987666Z key: pnpm-full-v1-Linux-X64-3cb0b4d7cff93dc8fe33f2ea73cac71ca25a36270fcb648b9b4a9320151012ef 2026-10-24T02:54:43.6987935Z restore-keys: pnpm-full-v1-Linux-X64- 2026-10-24T02:54:43.6988093Z enableCrossOsArchive: false 2026-10-24T02:54:43.6988237Z fail-on-cache-miss: false 2026-10-24T02:54:43.6988366Z lookup-only: false 2026-10-24T02:54:43.6988483Z save-always: false 2026-10-24T02:54:43.6988616Z env: 2026-10-24T02:54:43.6988731Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 168 2026-10-24T02:54:43.6988896Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 372 2026-10-24T02:54:43.6989045Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T02:54:43.6989187Z ##[endgroup] 2026-10-24T02:54:43.9292268Z Cache hit for: pnpm-full-v1-Linux-X64-3cb0b4d7cff93dc8fe33f2ea73cac71ca25a36270fcb648b9b4a9320151012ef 2026-10-24T02:54:44.9702971Z Received 671088640 of 995020926 (67.4%), 627.5 MBs/sec 2026-10-24T02:54:45.4056314Z Received 995020926 of 995020926 (100.0%), 652.2 MBs/sec 2026-10-24T02:54:45.4056920Z Cache Size: ~949 MB (995020926 B) 2026-10-24T02:54:45.4087996Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/1f02b066-9fd3-4816-a417-7a696689b808/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T02:54:50.3901021Z Cache restored successfully 2026-10-24T02:54:50.4350454Z Cache restored from key: pnpm-full-v1-Linux-X64-3cb0b4d7cff93dc8fe33f2ea73cac71ca25a36270fcb648b9b4a9320151012ef 2026-10-24T02:54:50.4404390Z ##[end-action id=__self.__actions_cache;outcome=success;conclusion=success;duration_ms=6773] 2026-10-24T02:54:50.4406641Z ##[start-action display=Install dependencies;id=__self.__run_2] 2026-10-24T02:54:50.4418513Z ##[group]Run vp install 2026-10-24T02:54:50.4418693Z vp install 2026-10-24T02:54:50.4430872Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T02:54:50.4431036Z env: 2026-10-24T02:54:50.4431145Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 168 2026-10-24T02:54:50.4431288Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 372 2026-10-24T02:54:50.4431430Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T02:54:50.4431560Z ##[endgroup] 2026-10-24T02:54:50.4747169Z Scope: all 33 workspace projects 2026-10-24T02:54:50.5758061Z ? Verifying lockfile against supply-chain policies (2088 entries)... 2026-10-24T02:54:50.8180407Z Packages are hard linked from the content-addressable store to the virtual store. 2026-10-24T02:54:50.8180741Z Content-addressable store is at: /home/runner/.local/share/pnpm/store/v11 2026-10-24T02:54:50.8180952Z Virtual store is at: node_modules/.pnpm 2026-10-24T02:54:52.7734692Z ✓ Lockfile passes supply-chain policies (2088 entries in 2.2s) 2026-10-24T02:54:52.7734949Z Lockfile is up to date, resolution step is skipped 2026-10-24T02:54:52.7894479Z Packages: +1721 2026-10-24T02:54:52.7894657Z ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2026-10-24T02:54:52.8224853Z Progress: resolved 1721, reused 1718, downloaded 0, added 1721, done 2026-10-24T02:54:53.6881628Z . prepare$ vp config --no-agent 2026-10-24T02:54:53.7742009Z . prepare: Done 2026-10-24T02:54:53.7753912Z 2026-10-24T02:54:53.7754056Z devDependencies: 2026-10-24T02:54:53.7754248Z + @coderabbitai/config 1.1.0 2026-10-24T02:54:53.7754471Z + @shadcn/lint 0.1.5 2026-10-24T02:54:53.7754700Z + @types/node 24.12.4 2026-10-24T02:54:53.7754889Z + knip 6.34.0 2026-10-24T02:54:53.7755087Z + typescript <- @tsc-rs/typescript 0.8.0 2026-10-24T02:54:53.7755314Z + vite-plus 1.3.0 2026-10-24T02:54:53.7755414Z 2026-10-24T02:54:53.7767028Z Done in 3.3s using pnpm v12.14.0 2026-10-24T02:54:53.7917138Z ##[end-action id=__self.__run_2;outcome=success;conclusion=success;duration_ms=3351] 2026-10-24T02:54:53.8376463Z ##[group]Run actions/cache@v6 2026-10-24T02:54:53.8376608Z with: 2026-10-24T02:54:53.8376714Z path: ~/.cache/electron 2026-10-24T02:54:53.8376932Z key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T02:54:53.8377165Z enableCrossOsArchive: false 2026-10-24T02:54:53.8377299Z fail-on-cache-miss: false 2026-10-24T02:54:53.8377426Z lookup-only: false 2026-10-24T02:54:53.8377540Z save-always: false 2026-10-24T02:54:53.8377647Z env: 2026-10-24T02:54:53.8377753Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 168 2026-10-24T02:54:53.8377899Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 372 2026-10-24T02:54:53.8378049Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T02:54:53.8378183Z ##[endgroup] 2026-10-24T02:54:54.0623541Z Cache hit for: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T02:54:54.3470123Z Received 122906203 of 122906203 (100.0%), 435.7 MBs/sec 2026-10-24T02:54:54.3470782Z Cache Size: ~117 MB (122906203 B) 2026-10-24T02:54:54.3490699Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/bb33996c-2c61-4acc-82d6-da8354e95342/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T02:54:54.4092603Z Cache restored successfully 2026-10-24T02:54:54.4512870Z Cache restored from key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T02:54:54.4635594Z ##[group]Run vp run --filter @t3tools/desktop ensure:electron 2026-10-24T02:54:54.4636029Z vp run --filter @t3tools/desktop ensure:electron 2026-10-24T02:54:54.4652389Z shell: /usr/bin/bash -e {0} 2026-10-24T02:54:54.4652535Z env: 2026-10-24T02:54:54.4652821Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 168 2026-10-24T02:54:54.4652977Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 372 2026-10-24T02:54:54.4653124Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T02:54:54.4653264Z ##[endgroup] 2026-10-24T02:54:54.6445772Z ~/apps/desktop$ node scripts/ensure-electron-runtime.mjs ⊘ cache disabled 2026-10-24T02:54:55.1891420Z /home/runner/_work/t3code/t3code/node_modules/.pnpm/electron@44.9.3_supports-color@8.1.1/node_modules/electron/dist/electron 2026-10-24T02:54:55.1907096Z 2026-10-24T02:54:55.1993965Z ##[group]Run vp run knip:check 2026-10-24T02:54:55.1994281Z vp run knip:check 2026-10-24T02:54:55.2007484Z shell: /usr/bin/bash -e {0} 2026-10-24T02:54:55.2007614Z env: 2026-10-24T02:54:55.2007726Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 168 2026-10-24T02:54:55.2007876Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 372 2026-10-24T02:54:55.2008018Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T02:54:55.2008152Z ##[endgroup] 2026-10-24T02:54:55.3414937Z $ knip --include files,dependencies --no-config-hints ⊘ cache disabled 2026-10-24T02:54:58.9283238Z 2026-10-24T02:54:58.9286523Z $ 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-24T02:55:06.9109332Z 2026-10-24T02:55:06.9110406Z --- 2026-10-24T02:55:06.9110736Z vp run: 2/2 successful. (Run `vp run --last-details` for full details) 2026-10-24T02:55:06.9183784Z ##[group]Run vp run --filter @t3tools/source-control-github generate --check 2026-10-24T02:55:06.9184201Z vp run --filter @t3tools/source-control-github generate --check 2026-10-24T02:55:06.9205495Z shell: /usr/bin/bash -e {0} 2026-10-24T02:55:06.9205621Z env: 2026-10-24T02:55:06.9205728Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 168 2026-10-24T02:55:06.9205873Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 372 2026-10-24T02:55:06.9206008Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T02:55:06.9206140Z ##[endgroup] 2026-10-24T02:55:07.0624840Z ~/packages/source-control-github$ graphqlgen --check ⊘ cache disabled 2026-10-24T02:55:07.2433236Z 2026-10-24T02:55:07.2494433Z ##[group]Run vp run --filter t3 generate --check 2026-10-24T02:55:07.2494638Z vp run --filter t3 generate --check 2026-10-24T02:55:07.2506700Z shell: /usr/bin/bash -e {0} 2026-10-24T02:55:07.2506827Z env: 2026-10-24T02:55:07.2506947Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 168 2026-10-24T02:55:07.2507090Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 372 2026-10-24T02:55:07.2507229Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T02:55:07.2507361Z ##[endgroup] 2026-10-24T02:55:07.3906193Z ~/apps/server$ graphqlgen --check ⊘ cache disabled 2026-10-24T02:55:07.5373198Z 2026-10-24T02:55:07.5439559Z ##[group]Run vp check 2026-10-24T02:55:07.5439729Z vp check 2026-10-24T02:55:07.5452473Z shell: /usr/bin/bash -e {0} 2026-10-24T02:55:07.5452596Z env: 2026-10-24T02:55:07.5452702Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 168 2026-10-24T02:55:07.5452850Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 372 2026-10-24T02:55:07.5452987Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T02:55:07.5453124Z ##[endgroup] 2026-10-24T02:55:08.0708865Z pass: All 5676 files are correctly formatted (387ms, 8 threads) 2026-10-24T02:55:13.0441395Z warn: Lint warnings found 2026-10-24T02:55:13.0442986Z ⚠ 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-24T02:55:13.0443679Z ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:566:7] 2026-10-24T02:55:13.0444039Z 565 │ let afterSequence = created[0]!.sequence; 2026-10-24T02:55:13.0444483Z 566 │ ╭─▶ for (let index = 1; index <= 32; index += 1) { 2026-10-24T02:55:13.0444789Z 567 │ │ const nextEvent = { 2026-10-24T02:55:13.0445098Z 568 │ │ id: EventId.make(`event:foundation-stream-race:${index}`), 2026-10-24T02:55:13.0445444Z 569 │ │ type: "thread.metadata-updated" as const, 2026-10-24T02:55:13.0445709Z 570 │ │ threadId, 2026-10-24T02:55:13.0445942Z 571 │ │ providerInstanceId, 2026-10-24T02:55:13.0446195Z 572 │ │ occurredAt: now, 2026-10-24T02:55:13.0446574Z 573 │ │ payload: { ...thread, title: `Race update ${index}` }, 2026-10-24T02:55:13.0446893Z 574 │ │ } satisfies OrchestrationV2DomainEvent; 2026-10-24T02:55:13.0447182Z 575 │ │ const reader = yield* eventSink 2026-10-24T02:55:13.0447452Z 576 │ │ .stream({ threadId, afterSequence }) 2026-10-24T02:55:13.0447750Z 577 │ │ .pipe(Stream.runHead, Effect.forkChild); 2026-10-24T02:55:13.0448031Z 578 │ │ yield* Effect.yieldNow; 2026-10-24T02:55:13.0448343Z 579 │ │ const written = yield* eventSink.write({ events: [nextEvent] }); 2026-10-24T02:55:13.0448663Z 580 │ │ const received = yield* Fiber.join(reader); 2026-10-24T02:55:13.0448976Z 581 │ │ if (Option.isNone(received)) { 2026-10-24T02:55:13.0449335Z 582 │ │ return yield* Effect.die("The event stream ended before delivering the live event."); 2026-10-24T02:55:13.0449638Z 583 │ │ } 2026-10-24T02:55:13.0449921Z 584 │ │ assert.equal(received.value.sequence, written[0]?.sequence); 2026-10-24T02:55:13.0450255Z 585 │ │ assert.equal(received.value.event.id, nextEvent.id); 2026-10-24T02:55:13.0450565Z 586 │ │ afterSequence = received.value.sequence; 2026-10-24T02:55:13.0450860Z 587 │ ╰─▶ } 2026-10-24T02:55:13.0451079Z 588 │ }), 2026-10-24T02:55:13.0451215Z ╰──── 2026-10-24T02:55:13.0451284Z 2026-10-24T02:55:13.0451803Z ⚠ 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-24T02:55:13.0452454Z ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:2327:9] 2026-10-24T02:55:13.0452737Z 2326 │ let settled = false; 2026-10-24T02:55:13.0453020Z 2327 │ ╭─▶ while (!settled) { 2026-10-24T02:55:13.0453497Z 2328 │ │ settled = (yield* outbox.listByCommandId(commandId)).every( 2026-10-24T02:55:13.0453855Z 2329 │ │ (effect) => effect.status === "succeeded", 2026-10-24T02:55:13.0454097Z 2330 │ │ ); 2026-10-24T02:55:13.0454336Z 2331 │ │ if (!settled) yield* Effect.yieldNow; 2026-10-24T02:55:13.0454632Z 2332 │ ╰─▶ } 2026-10-24T02:55:13.0454913Z 2333 │ }).pipe(Effect.provide(layerWorker), Effect.scoped); 2026-10-24T02:55:13.0455109Z ╰──── 2026-10-24T02:55:13.0455171Z 2026-10-24T02:55:13.0455373Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T02:55:13.0455748Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:100:85] 2026-10-24T02:55:13.0456053Z  99 │ const startEditor = startScheduledTaskEditor; 2026-10-24T02:55:13.0456385Z 100 │ const resetEditor = useCallback(() => startEditor(defaultEditor), [defaultEditor, startEditor]); 2026-10-24T02:55:13.0456770Z ·  ─────┬───── 2026-10-24T02:55:13.0457151Z · ╰── Unnecessary dependency `startEditor` 2026-10-24T02:55:13.0457445Z 101 │ const readEditor = useCallback( 2026-10-24T02:55:13.0457608Z ╰──── 2026-10-24T02:55:13.0458022Z  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-24T02:55:13.0458691Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.0459055Z 2026-10-24T02:55:13.0459265Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T02:55:13.0459630Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:121:7] 2026-10-24T02:55:13.0459890Z 120 │ setEditor, 2026-10-24T02:55:13.0460051Z 121 │ startEditor, 2026-10-24T02:55:13.0460235Z ·  ─────┬───── 2026-10-24T02:55:13.0460495Z · ╰── Unnecessary dependency `startEditor` 2026-10-24T02:55:13.0460734Z 122 │ hasChanges, 2026-10-24T02:55:13.0460884Z ╰──── 2026-10-24T02:55:13.0461277Z  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-24T02:55:13.0461920Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.0462240Z 2026-10-24T02:55:13.0462514Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:55:13.0462918Z ╭─[apps/mobile/src/features/files/FileTreeBrowser.tsx:155:5] 2026-10-24T02:55:13.0463136Z 150 │ 2026-10-24T02:55:13.0463267Z 151 │ useEffect(() => { 2026-10-24T02:55:13.0463438Z ·  ────┬──── 2026-10-24T02:55:13.0463666Z · ╰── This is the containing effect 2026-10-24T02:55:13.0463900Z 152 │ if (!controlledSelectedPath) { 2026-10-24T02:55:13.0464078Z 153 │ return; 2026-10-24T02:55:13.0464215Z 154 │ } 2026-10-24T02:55:13.0464450Z 155 │ setExpandedPaths((current) => { 2026-10-24T02:55:13.0464686Z ·  ────────┬─────── 2026-10-24T02:55:13.0464971Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:55:13.0465275Z 156 │ const ancestors = ancestorPaths(controlledSelectedPath); 2026-10-24T02:55:13.0465479Z ╰──── 2026-10-24T02:55:13.0466174Z  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-24T02:55:13.0467104Z  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-24T02:55:13.0467431Z 2026-10-24T02:55:13.0467819Z ⚠ 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-24T02:55:13.0468308Z ╭─[packages/shared/src/otelEnvironment.ts:146:14] 2026-10-24T02:55:13.0468514Z 145 │ name, 2026-10-24T02:55:13.0468750Z 146 │ (raw) => Schema.decodeUnknownOption(OtlpProtocol)(raw.toLowerCase()), 2026-10-24T02:55:13.0469053Z ·  ────────────────────────── 2026-10-24T02:55:13.0469305Z 147 │ `${name} is not http/protobuf or http/json, ${NOT_EXPORTED}`, 2026-10-24T02:55:13.0469503Z ╰──── 2026-10-24T02:55:13.0469564Z 2026-10-24T02:55:13.0469761Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T02:55:13.0470141Z ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:555:70] 2026-10-24T02:55:13.0470417Z 554 │ assert.deepStrictEqual( 2026-10-24T02:55:13.0470696Z 555 │ (yield* Ref.get(fixture.syncCommands)).map(({ commandId: _, ...rest }) => rest), 2026-10-24T02:55:13.0471006Z ·  ┬ 2026-10-24T02:55:13.0471314Z · ╰── '_' is declared here 2026-10-24T02:55:13.0471545Z 556 │ [ 2026-10-24T02:55:13.0472173Z ╰──── 2026-10-24T02:55:13.0472344Z  help: Consider removing this parameter. 2026-10-24T02:55:13.0472467Z 2026-10-24T02:55:13.0472662Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T02:55:13.0473042Z ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:1155:70] 2026-10-24T02:55:13.0473316Z 1154 │ assert.deepStrictEqual( 2026-10-24T02:55:13.0473598Z 1155 │ (yield* Ref.get(fixture.linkCommands)).map(({ commandId: _, ...rest }) => rest), 2026-10-24T02:55:13.0473909Z ·  ┬ 2026-10-24T02:55:13.0474210Z · ╰── '_' is declared here 2026-10-24T02:55:13.0474440Z 1156 │ [ 2026-10-24T02:55:13.0474577Z ╰──── 2026-10-24T02:55:13.0474746Z  help: Consider removing this parameter. 2026-10-24T02:55:13.0474870Z 2026-10-24T02:55:13.0475237Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T02:55:13.0475729Z ╭─[apps/server/src/orchestration-v2/ThreadPullRequestService.ts:413:7] 2026-10-24T02:55:13.0475960Z 412 │ 2026-10-24T02:55:13.0476161Z 413 │ const layer = Layer.effect(ThreadPullRequestServiceV2, make); 2026-10-24T02:55:13.0476384Z ·  ──┬── 2026-10-24T02:55:13.0476609Z · ╰── 'layer' is declared here 2026-10-24T02:55:13.0476799Z ╰──── 2026-10-24T02:55:13.0476971Z  help: Consider removing this declaration. 2026-10-24T02:55:13.0477094Z 2026-10-24T02:55:13.0477270Z ⚠ eslint(no-control-regex): Unexpected control character 2026-10-24T02:55:13.0477648Z ╭─[apps/mobile/src/features/settings/SettingsProviderAccountsRouteScreen.tsx:220:46] 2026-10-24T02:55:13.0478014Z 219 │ 2026-10-24T02:55:13.0478339Z 220 │ {interaction.output.replace(/\x1b\[[0-?]*[ -/]*[@-~]/g, "")} 2026-10-24T02:55:13.0478617Z ·  ──┬─ 2026-10-24T02:55:13.0478971Z · ╰── 'U+001B' is a control character. 2026-10-24T02:55:13.0479206Z 221 │ 2026-10-24T02:55:13.0479350Z ╰──── 2026-10-24T02:55:13.0479658Z  help: Avoid matching control characters in regular expressions. If intentional, disable this rule for the expression. 2026-10-24T02:55:13.0479902Z 2026-10-24T02:55:13.0480199Z ⚠ eslint(no-unused-vars): Variable 'layerUnavailable' is declared but never used. Unused variables should start with a '_'. 2026-10-24T02:55:13.0480638Z ╭─[apps/server/src/orchestration-v2/Orchestrator.ts:12366:7] 2026-10-24T02:55:13.0480861Z 12365 │ 2026-10-24T02:55:13.0481085Z 12366 │ const layerUnavailable: Layer.Layer = Layer.succeed( 2026-10-24T02:55:13.0481341Z ·  ────────┬─────── 2026-10-24T02:55:13.0481604Z · ╰── 'layerUnavailable' is declared here 2026-10-24T02:55:13.0481833Z 12367 │ OrchestratorV2, 2026-10-24T02:55:13.0481983Z ╰──── 2026-10-24T02:55:13.0482155Z  help: Consider removing this declaration. 2026-10-24T02:55:13.0482281Z 2026-10-24T02:55:13.0482476Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T02:55:13.0482813Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:121:27] 2026-10-24T02:55:13.0483149Z 120 │ const scope = makeScope(options.capabilities ?? new Set(["preview", "worktree"])); 2026-10-24T02:55:13.0483579Z 121 │ const dispatch = vi.fn((_: unknown) => 2026-10-24T02:55:13.0483788Z ·  ┬ 2026-10-24T02:55:13.0484033Z · ╰── '_' is declared here 2026-10-24T02:55:13.0484278Z 122 │ (options.dispatchGate ?? Effect.void).pipe( 2026-10-24T02:55:13.0484457Z ╰──── 2026-10-24T02:55:13.0484624Z  help: Consider removing this parameter. 2026-10-24T02:55:13.0484748Z 2026-10-24T02:55:13.0484937Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T02:55:13.0485275Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:134:39] 2026-10-24T02:55:13.0485490Z 133 │ ); 2026-10-24T02:55:13.0485687Z 134 │ const listLocalBranchNames = vi.fn((_: string) => 2026-10-24T02:55:13.0485995Z ·  ┬ 2026-10-24T02:55:13.0486292Z · ╰── '_' is declared here 2026-10-24T02:55:13.0486507Z 135 │ Effect.succeed( 2026-10-24T02:55:13.0486651Z ╰──── 2026-10-24T02:55:13.0486813Z  help: Consider removing this parameter. 2026-10-24T02:55:13.0486937Z 2026-10-24T02:55:13.0487129Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T02:55:13.0487459Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:178:31] 2026-10-24T02:55:13.0487676Z 177 │ }); 2026-10-24T02:55:13.0487848Z 178 │ const sendToThread = vi.fn((_: unknown) => { 2026-10-24T02:55:13.0488062Z ·  ┬ 2026-10-24T02:55:13.0488317Z · ╰── '_' is declared here 2026-10-24T02:55:13.0488568Z 179 │ switch (options.continuation ?? "queued") { 2026-10-24T02:55:13.0488760Z ╰──── 2026-10-24T02:55:13.0488957Z  help: Consider removing this parameter. 2026-10-24T02:55:13.0489079Z 2026-10-24T02:55:13.0489269Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T02:55:13.0489596Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:203:33] 2026-10-24T02:55:13.0489809Z 202 │ ); 2026-10-24T02:55:13.0489978Z 203 │ const removeWorktree = vi.fn((_: unknown) => 2026-10-24T02:55:13.0490196Z ·  ┬ 2026-10-24T02:55:13.0490446Z · ╰── '_' is declared here 2026-10-24T02:55:13.0490675Z 204 │ options.removeWorktreeFails 2026-10-24T02:55:13.0490840Z ╰──── 2026-10-24T02:55:13.0491004Z  help: Consider removing this parameter. 2026-10-24T02:55:13.0491125Z 2026-10-24T02:55:13.0491317Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T02:55:13.0491643Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:208:36] 2026-10-24T02:55:13.0491853Z 207 │ ); 2026-10-24T02:55:13.0492026Z 208 │ const deleteLocalBranch = vi.fn((_: unknown) => 2026-10-24T02:55:13.0492250Z ·  ┬ 2026-10-24T02:55:13.0492502Z · ╰── '_' is declared here 2026-10-24T02:55:13.0492735Z 209 │ options.deleteLocalBranchFails 2026-10-24T02:55:13.0492897Z ╰──── 2026-10-24T02:55:13.0493061Z  help: Consider removing this parameter. 2026-10-24T02:55:13.0493186Z 2026-10-24T02:55:13.0493381Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T02:55:13.0493715Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:213:42] 2026-10-24T02:55:13.0493924Z 212 │ ); 2026-10-24T02:55:13.0494111Z 213 │ const fetchWorktreeBaseCommit = vi.fn((_: unknown) => 2026-10-24T02:55:13.0494351Z ·  ┬ 2026-10-24T02:55:13.0494613Z · ╰── '_' is declared here 2026-10-24T02:55:13.0494850Z 214 │ options.fetchWorktreeBaseFails 2026-10-24T02:55:13.0495013Z ╰──── 2026-10-24T02:55:13.0495179Z  help: Consider removing this parameter. 2026-10-24T02:55:13.0495301Z 2026-10-24T02:55:13.0495558Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T02:55:13.0495918Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:254:30] 2026-10-24T02:55:13.0496149Z 253 │ ); 2026-10-24T02:55:13.0496318Z 254 │ const localStatus = vi.fn((_: unknown) => 2026-10-24T02:55:13.0496531Z ·  ┬ 2026-10-24T02:55:13.0496784Z · ╰── '_' is declared here 2026-10-24T02:55:13.0497002Z 255 │ Effect.succeed({ 2026-10-24T02:55:13.0497149Z ╰──── 2026-10-24T02:55:13.0497314Z  help: Consider removing this parameter. 2026-10-24T02:55:13.0497439Z 2026-10-24T02:55:13.0497633Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T02:55:13.0497967Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:264:32] 2026-10-24T02:55:13.0498182Z 263 │ ); 2026-10-24T02:55:13.0498409Z 264 │ const refreshStatus = vi.fn((_: string) => Effect.die("refreshStatus stub")); 2026-10-24T02:55:13.0498672Z ·  ┬ 2026-10-24T02:55:13.0498964Z · ╰── '_' is declared here 2026-10-24T02:55:13.0499258Z 265 │ const runForThread = vi.fn((input: { readonly worktreePath: string }) => { 2026-10-24T02:55:13.0499483Z ╰──── 2026-10-24T02:55:13.0499650Z  help: Consider removing this parameter. 2026-10-24T02:55:13.0499773Z 2026-10-24T02:55:13.0500083Z ⚠ eslint(no-unused-vars): Variable 'revokeActiveMcpThread' is declared but never used. Unused variables should start with a '_'. 2026-10-24T02:55:13.0500504Z ╭─[apps/server/src/mcp/McpSessionRegistry.ts:218:7] 2026-10-24T02:55:13.0500718Z 217 │ 2026-10-24T02:55:13.0500942Z 218 │ const revokeActiveMcpThread = (threadId: ThreadId): Effect.Effect => 2026-10-24T02:55:13.0501211Z ·  ──────────┬────────── 2026-10-24T02:55:13.0501479Z · ╰── 'revokeActiveMcpThread' is declared here 2026-10-24T02:55:13.0501840Z 219 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeThread(threadId) : Effect.void; 2026-10-24T02:55:13.0502094Z ╰──── 2026-10-24T02:55:13.0545328Z  help: Consider removing this declaration. 2026-10-24T02:55:13.0545484Z 2026-10-24T02:55:13.0545857Z ⚠ eslint(no-unused-vars): Variable 'revokeAllActiveMcpCredentials' is declared but never used. Unused variables should start with a '_'. 2026-10-24T02:55:13.0546354Z ╭─[apps/server/src/mcp/McpSessionRegistry.ts:221:7] 2026-10-24T02:55:13.0546587Z 220 │ 2026-10-24T02:55:13.0546811Z 221 │ const revokeAllActiveMcpCredentials = (): Effect.Effect => 2026-10-24T02:55:13.0547094Z ·  ──────────────┬────────────── 2026-10-24T02:55:13.0547419Z · ╰── 'revokeAllActiveMcpCredentials' is declared here 2026-10-24T02:55:13.0547781Z 222 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeAll : Effect.void; 2026-10-24T02:55:13.0548027Z ╰──── 2026-10-24T02:55:13.0548203Z  help: Consider removing this declaration. 2026-10-24T02:55:13.0548333Z 2026-10-24T02:55:13.0548505Z ⚠ eslint(no-new): Do not use 'new' for side effects. 2026-10-24T02:55:13.0548838Z ╭─[apps/server/src/mcp/McpToolAccess.test.ts:168:3] 2026-10-24T02:55:13.0549105Z 167 │ // @ts-expect-error a declaration constructed directly 2026-10-24T02:55:13.0549502Z 168 │ new McpToolAccess.Declaration(unchecked); 2026-10-24T02:55:13.0549802Z ·  ───────────────────────────── 2026-10-24T02:55:13.0550052Z 169 │ // @ts-expect-error a handlers layer built outside McpToolAccess 2026-10-24T02:55:13.0550256Z ╰──── 2026-10-24T02:55:13.0550489Z  help: Assign the result of 'new' to a variable or compare it to a reference. 2026-10-24T02:55:13.0550668Z 2026-10-24T02:55:13.0550887Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable. 2026-10-24T02:55:13.0551233Z ╭─[apps/web/src/contextMenuFallback.test.ts:38:9] 2026-10-24T02:55:13.0551448Z 37 │ get isConnected() { 2026-10-24T02:55:13.0551734Z 38 │ let current: FakeElement | null = this; 2026-10-24T02:55:13.0551932Z ·  ─────── 2026-10-24T02:55:13.0552115Z 39 │ while (current?.parent) { 2026-10-24T02:55:13.0552273Z ╰──── 2026-10-24T02:55:13.0552626Z  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-24T02:55:13.0552900Z 2026-10-24T02:55:13.0553177Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:55:13.0553624Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:327:7] 2026-10-24T02:55:13.0553865Z 322 │ }; 2026-10-24T02:55:13.0554000Z 323 │ useEffect(() => { 2026-10-24T02:55:13.0554159Z ·  ────┬──── 2026-10-24T02:55:13.0554386Z · ╰── This is the containing effect 2026-10-24T02:55:13.0554632Z 324 │ if (!guidesEnabled && section === "guide") { 2026-10-24T02:55:13.0554859Z 325 │ requestedSection.current = "overview"; 2026-10-24T02:55:13.0555159Z 326 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-24T02:55:13.0555414Z 327 │ setSection("overview"); 2026-10-24T02:55:13.0555593Z ·  ─────┬──── 2026-10-24T02:55:13.0555865Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:55:13.0556097Z 328 │ } 2026-10-24T02:55:13.0556216Z ╰──── 2026-10-24T02:55:13.0556909Z  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-24T02:55:13.0557922Z  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-24T02:55:13.0558292Z 2026-10-24T02:55:13.0558505Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T02:55:13.0558925Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:329:6] 2026-10-24T02:55:13.0559210Z 324 │ if (!guidesEnabled && section === "guide") { 2026-10-24T02:55:13.0559429Z 325 │ requestedSection.current = "overview"; 2026-10-24T02:55:13.0559634Z ·  ────────┬─────── 2026-10-24T02:55:13.0560214Z · ╰── 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-24T02:55:13.0560812Z 326 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-24T02:55:13.0561149Z ·  ─────────┬───────── ──────┬────── 2026-10-24T02:55:13.0561820Z · │ ╰── 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-24T02:55:13.0562741Z · ╰── 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-24T02:55:13.0563248Z 327 │ setSection("overview"); 2026-10-24T02:55:13.0563410Z 328 │ } 2026-10-24T02:55:13.0563578Z 329 │ }, [guidesEnabled, section, insets.top]); 2026-10-24T02:55:13.0563813Z ·  ──────────────────┬───────────────── 2026-10-24T02:55:13.0564143Z · ╰── This dependency list is missing values used by the callback 2026-10-24T02:55:13.0564427Z 330 │ const tabContent = activityContent; 2026-10-24T02:55:13.0564596Z ╰──── 2026-10-24T02:55:13.0564835Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T02:55:13.0565352Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.0565667Z 2026-10-24T02:55:13.0565889Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T02:55:13.0566284Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:864:6] 2026-10-24T02:55:13.0566529Z 847 │ if ( 2026-10-24T02:55:13.0566728Z 848 │ lastSelection.current.path === route.params.path && 2026-10-24T02:55:13.0566952Z ·  ──────┬────── 2026-10-24T02:55:13.0567519Z · ╰── 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-24T02:55:13.0568063Z 849 │ lastSelection.current.id === route.params.fileSelectionId 2026-10-24T02:55:13.0568276Z 850 │ ) 2026-10-24T02:55:13.0568413Z 851 │ return; 2026-10-24T02:55:13.0568776Z 852 │ lastSelection.current = { path: route.params.path, id: route.params.fileSelectionId }; 2026-10-24T02:55:13.0569150Z 853 │ if (route.params.focus) navigation.setParams({ focus: undefined }); 2026-10-24T02:55:13.0569400Z 854 │ setJumpPath(route.params.path); 2026-10-24T02:55:13.0569595Z 855 │ setSelectedRowId(null); 2026-10-24T02:55:13.0569776Z 856 │ jumpStarted.current = false; 2026-10-24T02:55:13.0570043Z 857 │ const file = data.files.find((entry) => entry.path === route.params.path); 2026-10-24T02:55:13.0570308Z 858 │ if (!file || !nativeView.current) return; 2026-10-24T02:55:13.0570529Z ·  ─────┬──── 2026-10-24T02:55:13.0571107Z · ╰── 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-24T02:55:13.0571664Z 859 │ setCollapsedIds((ids) => ids.filter((id) => id !== file.id)); 2026-10-24T02:55:13.0571896Z 860 │ jumpStarted.current = true; 2026-10-24T02:55:13.0572149Z 861 │ void nativeView.current.scrollToFile(file.id, false).catch(() => { 2026-10-24T02:55:13.0572392Z 862 │ jumpStarted.current = false; 2026-10-24T02:55:13.0572564Z 863 │ }); 2026-10-24T02:55:13.0572844Z 864 │ }, [route.params.path, route.params.fileSelectionId, route.params.focus, data.files, navigation]); 2026-10-24T02:55:13.0573295Z ·  ──────────────────────────────────────────────┬────────────────────────────────────────────── 2026-10-24T02:55:13.0573738Z · ╰── This dependency list is missing values used by the callback 2026-10-24T02:55:13.0574081Z 865 │ const appliedFilter = useRef(filter.hideTestFiles); 2026-10-24T02:55:13.0574284Z ╰──── 2026-10-24T02:55:13.0574535Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T02:55:13.0575051Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.0575367Z 2026-10-24T02:55:13.0575579Z ⚠ eslint(no-unused-vars): Identifier 'Fiber' is imported but never used. 2026-10-24T02:55:13.0575885Z ╭─[apps/server/src/ws.ts:10:13] 2026-10-24T02:55:13.0576102Z  9 │ import * as Effect from "effect/Effect"; 2026-10-24T02:55:13.0576306Z 10 │ import * as Fiber from "effect/Fiber"; 2026-10-24T02:55:13.0576497Z ·  ──┬── 2026-10-24T02:55:13.0576743Z · ╰── 'Fiber' is imported here 2026-10-24T02:55:13.0577004Z 11 │ import * as FileSystem from "effect/FileSystem"; 2026-10-24T02:55:13.0577191Z ╰──── 2026-10-24T02:55:13.0577354Z  help: Consider removing this import. 2026-10-24T02:55:13.0577482Z 2026-10-24T02:55:13.0577698Z ⚠ eslint(no-unused-vars): Identifier 'Schedule' is imported but never used. 2026-10-24T02:55:13.0578003Z ╭─[apps/server/src/ws.ts:17:13] 2026-10-24T02:55:13.0578208Z 16 │ import * as Ref from "effect/Ref"; 2026-10-24T02:55:13.0578410Z 17 │ import * as Schedule from "effect/Schedule"; 2026-10-24T02:55:13.0578618Z ·  ────┬─── 2026-10-24T02:55:13.0578904Z · ╰── 'Schedule' is imported here 2026-10-24T02:55:13.0579150Z 18 │ import * as Schema from "effect/Schema"; 2026-10-24T02:55:13.0579319Z ╰──── 2026-10-24T02:55:13.0579550Z  help: Consider removing this import. 2026-10-24T02:55:13.0579721Z 2026-10-24T02:55:13.0580039Z ⚠ eslint(no-unused-vars): Variable 'projectSetupScriptRunner' is declared but never used. Unused variables should start with a '_'. 2026-10-24T02:55:13.0580439Z ╭─[apps/server/src/ws.ts:1285:13] 2026-10-24T02:55:13.0580726Z 1284 │ const usageLimitSources = yield* UsageLimitSources.UsageLimitSources; 2026-10-24T02:55:13.0581112Z 1285 │ const projectSetupScriptRunner = yield* ProjectSetupScriptRunner.ProjectSetupScriptRunner; 2026-10-24T02:55:13.0581448Z ·  ────────────┬─────────── 2026-10-24T02:55:13.0581753Z · ╰── 'projectSetupScriptRunner' is declared here 2026-10-24T02:55:13.0582114Z 1286 │ const worktreeSetupTracker = yield* WorktreeSetupTracker.WorktreeSetupTracker; 2026-10-24T02:55:13.0582364Z ╰──── 2026-10-24T02:55:13.0582542Z  help: Consider removing this declaration. 2026-10-24T02:55:13.0582669Z 2026-10-24T02:55:13.0583142Z ⚠ 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-24T02:55:13.0583706Z ╭─[apps/server/src/serverSettings.test.ts:1741:32] 2026-10-24T02:55:13.0584031Z 1740 │ const model = createModelSelection(ProviderInstanceId.make("codex"), "gpt-5.5"); 2026-10-24T02:55:13.0584419Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-24T02:55:13.0584745Z ·  ─────────────────── 2026-10-24T02:55:13.0585001Z 1742 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-24T02:55:13.0585191Z ╰──── 2026-10-24T02:55:13.0585254Z 2026-10-24T02:55:13.0585725Z ⚠ 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-24T02:55:13.0586280Z ╭─[apps/server/src/serverSettings.test.ts:1742:34] 2026-10-24T02:55:13.0586619Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-24T02:55:13.0586933Z 1742 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-24T02:55:13.0587194Z ·  ─────────────────── 2026-10-24T02:55:13.0587452Z 1743 │ Schema.fromJsonString(Schema.Array(ProjectScript)), 2026-10-24T02:55:13.0587649Z ╰──── 2026-10-24T02:55:13.0587770Z 2026-10-24T02:55:13.0588027Z ⚠ eslint(no-unused-vars): Identifier 'HookForwarder' is imported but never used. 2026-10-24T02:55:13.0588354Z ╭─[infra/relay/src/http/Api.ts:69:13] 2026-10-24T02:55:13.0588628Z 68 │ import * as EnvironmentLinks from "../environments/EnvironmentLinks.ts"; 2026-10-24T02:55:13.0588945Z 69 │ import * as HookForwarder from "../hooks/HookForwarder.ts"; 2026-10-24T02:55:13.0589177Z ·  ──────┬────── 2026-10-24T02:55:13.0589443Z · ╰── 'HookForwarder' is imported here 2026-10-24T02:55:13.0589706Z 70 │ import * as HeldHooks from "../hooks/HeldHooks.ts"; 2026-10-24T02:55:13.0589893Z ╰──── 2026-10-24T02:55:13.0590055Z  help: Consider removing this import. 2026-10-24T02:55:13.0590181Z 2026-10-24T02:55:13.0590461Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T02:55:13.0590861Z ╭─[apps/server/src/serverRuntimeStartup.ts:728:7] 2026-10-24T02:55:13.0591063Z 727 │ 2026-10-24T02:55:13.0591217Z 728 │ const layer = layerWithOptions(); 2026-10-24T02:55:13.0591402Z ·  ──┬── 2026-10-24T02:55:13.0591703Z · ╰── 'layer' is declared here 2026-10-24T02:55:13.0591902Z ╰──── 2026-10-24T02:55:13.0592073Z  help: Consider removing this declaration. 2026-10-24T02:55:13.0592197Z 2026-10-24T02:55:13.0592378Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T02:55:13.0592689Z ╭─[apps/web/src/hooks/useThreadActions.ts:821:56] 2026-10-24T02:55:13.0592945Z 820 │ const resolved = resolveThreadTarget(target); 2026-10-24T02:55:13.0593246Z 821 │ if (resolved && !canSnooze(resolved.thread, { now: new Date().toISOString() })) { 2026-10-24T02:55:13.0593555Z ·  ─────┬──── 2026-10-24T02:55:13.0593873Z · ╰── Cannot call impure function 2026-10-24T02:55:13.0594131Z 822 │ return AsyncResult.failure( 2026-10-24T02:55:13.0594288Z ╰──── 2026-10-24T02:55:13.0594649Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T02:55:13.0595246Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T02:55:13.0595553Z 2026-10-24T02:55:13.0595736Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T02:55:13.0596044Z ╭─[apps/web/src/hooks/useThreadActions.ts:709:46] 2026-10-24T02:55:13.0596256Z 708 │ const wokeAt = resolved 2026-10-24T02:55:13.0596499Z 709 │ ? threadWokeAt(resolved.thread, { now: new Date().toISOString() }) 2026-10-24T02:55:13.0596782Z ·  ─────┬──── 2026-10-24T02:55:13.0597079Z · ╰── Cannot call impure function 2026-10-24T02:55:13.0597316Z 710 │ : null; 2026-10-24T02:55:13.0597450Z ╰──── 2026-10-24T02:55:13.0597800Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T02:55:13.0598466Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T02:55:13.0598841Z 2026-10-24T02:55:13.0599223Z ⚠ 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-24T02:55:13.0599713Z ╭─[apps/server/src/vcs/GitVcsDriverCore.test.ts:1786:34] 2026-10-24T02:55:13.0600018Z 1785 │ const stat = branch.files!.find((file) => file.path === path)!; 2026-10-24T02:55:13.0600332Z 1786 │ const request = yield* Schema.decodeEffect(ReviewDiffPreviewInput)({ 2026-10-24T02:55:13.0600631Z ·  ─────────────────── 2026-10-24T02:55:13.0600833Z 1787 │ cwd, 2026-10-24T02:55:13.0600985Z ╰──── 2026-10-24T02:55:13.0601049Z 2026-10-24T02:55:13.0601300Z ⚠ unicorn(prefer-string-starts-ends-with): Prefer String#startsWith over a regex with a caret. 2026-10-24T02:55:13.0601679Z ╭─[apps/server/src/vcs/GitVcsDriverCore.ts:509:11] 2026-10-24T02:55:13.0601928Z 508 │ GIT_DIAGNOSTIC_LINE_PATTERN.test(line) || 2026-10-24T02:55:13.0602261Z 509 │ (!/^remote:/.test(line) && SSH_TRANSPORT_REFUSAL_PATTERN.test(line)), 2026-10-24T02:55:13.0602512Z ·  ─────────────── 2026-10-24T02:55:13.0602683Z 510 │ ) 2026-10-24T02:55:13.0602808Z ╰──── 2026-10-24T02:55:13.0603033Z  help: Replace `/^remote:/.test(line)` with `line.startsWith('remote:')`. 2026-10-24T02:55:13.0603201Z 2026-10-24T02:55:13.0603359Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:55:13.0603690Z ╭─[apps/mobile/src/features/home/thread-swipe-actions.tsx:494:27] 2026-10-24T02:55:13.0603921Z 493 │ > 2026-10-24T02:55:13.0604082Z 494 │ {props.children(close)} 2026-10-24T02:55:13.0604281Z ·  ──┬── 2026-10-24T02:55:13.0604562Z · ╰── Cannot access ref value during render 2026-10-24T02:55:13.0604815Z 495 │ 2026-10-24T02:55:13.0604972Z ╰──── 2026-10-24T02:55:13.0605531Z  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-24T02:55:13.0606291Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:55:13.0606592Z 2026-10-24T02:55:13.0607087Z ⚠ 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-24T02:55:13.0607698Z ╭─[apps/server/src/project/ProjectEnrichmentService.test.ts:28:3] 2026-10-24T02:55:13.0607932Z 27 │ ) { 2026-10-24T02:55:13.0608221Z 28 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T02:55:13.0608580Z 29 │ │ const available = yield* service.peek(workspaceRoot); 2026-10-24T02:55:13.0608976Z 30 │ │ if (predicate(available)) return available; 2026-10-24T02:55:13.0609265Z 31 │ │ yield* Effect.yieldNow; 2026-10-24T02:55:13.0609514Z 32 │ ╰─▶ } 2026-10-24T02:55:13.0609846Z 33 │ return yield* Effect.die(`Project metadata for ${workspaceRoot} was not resolved in time.`); 2026-10-24T02:55:13.0610097Z ╰──── 2026-10-24T02:55:13.0610159Z 2026-10-24T02:55:13.0610330Z ⚠ react(immutability): This value cannot be modified 2026-10-24T02:55:13.0610662Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-24T02:55:13.0610895Z  86 │ 2026-10-24T02:55:13.0611057Z  87 │ const cardCoverage = props.cardCoverage; 2026-10-24T02:55:13.0611266Z ·  ──────┬───── 2026-10-24T02:55:13.0611522Z · ╰── `cardCoverage` originates here 2026-10-24T02:55:13.0611764Z  88 │ const barHeightRef = useRef(0); 2026-10-24T02:55:13.0611951Z  89 │ const cardHeightRef = useRef(0); 2026-10-24T02:55:13.0612150Z  90 │ const cardHeight = useSharedValue(0); 2026-10-24T02:55:13.0612358Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-24T02:55:13.0612547Z  92 │ if (!cardCoverage) { 2026-10-24T02:55:13.0612710Z  93 │ return; 2026-10-24T02:55:13.0612846Z  94 │ } 2026-10-24T02:55:13.0613079Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T02:55:13.0613341Z  96 │ if (coverage === cardCoverage.value) { 2026-10-24T02:55:13.0613518Z  97 │ return; 2026-10-24T02:55:13.0613652Z  98 │ } 2026-10-24T02:55:13.0613806Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T02:55:13.0613999Z 100 │ cardCoverage.value = coverage; 2026-10-24T02:55:13.0614197Z ·  ──────┬───── 2026-10-24T02:55:13.0614456Z · ╰── `cardCoverage` cannot be modified 2026-10-24T02:55:13.0614670Z 101 │ return; 2026-10-24T02:55:13.0614804Z ╰──── 2026-10-24T02:55:13.0615180Z  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-24T02:55:13.0615805Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:55:13.0616113Z 2026-10-24T02:55:13.0616278Z ⚠ react(immutability): This value cannot be modified 2026-10-24T02:55:13.0616613Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7] 2026-10-24T02:55:13.0616873Z  89 │ const cardHeightRef = useRef(0); 2026-10-24T02:55:13.0617073Z  90 │ const cardHeight = useSharedValue(0); 2026-10-24T02:55:13.0617271Z ·  ─────┬──── 2026-10-24T02:55:13.0617515Z · ╰── `cardHeight` originates here 2026-10-24T02:55:13.0617762Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-24T02:55:13.0617955Z  92 │ if (!cardCoverage) { 2026-10-24T02:55:13.0618110Z  93 │ return; 2026-10-24T02:55:13.0618244Z  94 │ } 2026-10-24T02:55:13.0618471Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T02:55:13.0618730Z  96 │ if (coverage === cardCoverage.value) { 2026-10-24T02:55:13.0618942Z  97 │ return; 2026-10-24T02:55:13.0619076Z  98 │ } 2026-10-24T02:55:13.0619229Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T02:55:13.0619497Z 100 │ cardCoverage.value = coverage; 2026-10-24T02:55:13.0619708Z 101 │ return; 2026-10-24T02:55:13.0619842Z 102 │ } 2026-10-24T02:55:13.0620014Z 103 │ cardCoverage.value = withTiming(coverage, { 2026-10-24T02:55:13.0620241Z 104 │ duration: USER_INPUT_TOGGLE_DURATION_MS, 2026-10-24T02:55:13.0620453Z 105 │ easing: Easing.out(Easing.cubic), 2026-10-24T02:55:13.0620624Z 106 │ }); 2026-10-24T02:55:13.0620763Z 107 │ }, [cardCoverage]); 2026-10-24T02:55:13.0620940Z 108 │ const handleBarLayout = useCallback( 2026-10-24T02:55:13.0621133Z 109 │ (event: LayoutChangeEvent) => { 2026-10-24T02:55:13.0621376Z 110 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T02:55:13.0621594Z 111 │ notifyCoverage(); 2026-10-24T02:55:13.0621747Z 112 │ }, 2026-10-24T02:55:13.0621887Z 113 │ [notifyCoverage], 2026-10-24T02:55:13.0622038Z 114 │ ); 2026-10-24T02:55:13.0622196Z 115 │ const handleCardLayout = useCallback( 2026-10-24T02:55:13.0622391Z 116 │ (event: LayoutChangeEvent) => { 2026-10-24T02:55:13.0622633Z 117 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T02:55:13.0622902Z 118 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-24T02:55:13.0623120Z ·  ─────┬──── 2026-10-24T02:55:13.0623365Z · ╰── `cardHeight` cannot be modified 2026-10-24T02:55:13.0623587Z 119 │ notifyCoverage(); 2026-10-24T02:55:13.0623733Z ╰──── 2026-10-24T02:55:13.0624075Z  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-24T02:55:13.0624677Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:55:13.0624989Z 2026-10-24T02:55:13.0625204Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T02:55:13.0625580Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-24T02:55:13.0625844Z  90 │ const cardHeight = useSharedValue(0); 2026-10-24T02:55:13.0626053Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-24T02:55:13.0626283Z ·  ───┬─── 2026-10-24T02:55:13.0626668Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-24T02:55:13.0626974Z  92 │ if (!cardCoverage) { 2026-10-24T02:55:13.0627134Z  93 │ return; 2026-10-24T02:55:13.0627273Z  94 │ } 2026-10-24T02:55:13.0627509Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T02:55:13.0627769Z  96 │ if (coverage === cardCoverage.value) { 2026-10-24T02:55:13.0627946Z  97 │ return; 2026-10-24T02:55:13.0628080Z  98 │ } 2026-10-24T02:55:13.0628231Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T02:55:13.0628422Z 100 │ cardCoverage.value = coverage; 2026-10-24T02:55:13.0628613Z ·  ──────┬───── 2026-10-24T02:55:13.0628893Z · ╰── This modifies `cardCoverage` 2026-10-24T02:55:13.0629104Z 101 │ return; 2026-10-24T02:55:13.0629239Z ╰──── 2026-10-24T02:55:13.0629727Z  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-24T02:55:13.0630420Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:55:13.0630735Z 2026-10-24T02:55:13.0630946Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T02:55:13.0631315Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-24T02:55:13.0631570Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T02:55:13.0632214Z 100 │ cardCoverage.value = coverage; 2026-10-24T02:55:13.0632402Z ·  ──────┬───── 2026-10-24T02:55:13.0632650Z · ╰── This modifies `cardCoverage` 2026-10-24T02:55:13.0632859Z 101 │ return; 2026-10-24T02:55:13.0632994Z 102 │ } 2026-10-24T02:55:13.0633173Z 103 │ cardCoverage.value = withTiming(coverage, { 2026-10-24T02:55:13.0633403Z 104 │ duration: USER_INPUT_TOGGLE_DURATION_MS, 2026-10-24T02:55:13.0633612Z 105 │ easing: Easing.out(Easing.cubic), 2026-10-24T02:55:13.0633784Z 106 │ }); 2026-10-24T02:55:13.0633923Z 107 │ }, [cardCoverage]); 2026-10-24T02:55:13.0634100Z 108 │ const handleBarLayout = useCallback( 2026-10-24T02:55:13.0634296Z 109 │ (event: LayoutChangeEvent) => { 2026-10-24T02:55:13.0634517Z ·  ───────────────┬─────────────── 2026-10-24T02:55:13.0634881Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-24T02:55:13.0635691Z 110 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T02:55:13.0635895Z ╰──── 2026-10-24T02:55:13.0636321Z  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-24T02:55:13.0636985Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:55:13.0637295Z 2026-10-24T02:55:13.0637503Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T02:55:13.0637878Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7] 2026-10-24T02:55:13.0638140Z 115 │ const handleCardLayout = useCallback( 2026-10-24T02:55:13.0638339Z 116 │ (event: LayoutChangeEvent) => { 2026-10-24T02:55:13.0638558Z ·  ───────────────┬─────────────── 2026-10-24T02:55:13.0638957Z · ╰── This function may (indirectly) reassign or modify `cardHeight` after render 2026-10-24T02:55:13.0639314Z 117 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T02:55:13.0639587Z 118 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-24T02:55:13.0639805Z ·  ─────┬──── 2026-10-24T02:55:13.0640047Z · ╰── This modifies `cardHeight` 2026-10-24T02:55:13.0640265Z 119 │ notifyCoverage(); 2026-10-24T02:55:13.0640415Z ╰──── 2026-10-24T02:55:13.0640826Z  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-24T02:55:13.0641569Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:55:13.0641921Z 2026-10-24T02:55:13.0642138Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:55:13.0642489Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:533:25] 2026-10-24T02:55:13.0642780Z 532 │ // range) the boundary string is identical and the chain would die. 2026-10-24T02:55:13.0643033Z 533 │ }, [nextSnoozeWakeAt, snoozeWakeTick]); 2026-10-24T02:55:13.0643261Z ·  ───────┬────── 2026-10-24T02:55:13.0643561Z · ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T02:55:13.0643882Z 534 │ const v2SearchQuery = props.searchQuery.trim().toLocaleLowerCase(); 2026-10-24T02:55:13.0644098Z ╰──── 2026-10-24T02:55:13.0644479Z  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-24T02:55:13.0645103Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.0645421Z 2026-10-24T02:55:13.0645602Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T02:55:13.0645922Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:524:53] 2026-10-24T02:55:13.0646160Z 523 │ if (Number.isNaN(wakeAtMs)) return; 2026-10-24T02:55:13.0646439Z 524 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647); 2026-10-24T02:55:13.0646744Z ·  ─────┬──── 2026-10-24T02:55:13.0647061Z · ╰── Cannot call impure function 2026-10-24T02:55:13.0647320Z 525 │ const id = setTimeout(() => { 2026-10-24T02:55:13.0647480Z ╰──── 2026-10-24T02:55:13.0647844Z  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-24T02:55:13.0648440Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T02:55:13.0648775Z 2026-10-24T02:55:13.0649277Z ⚠ 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-24T02:55:13.0649929Z ╭─[apps/server/src/project/ProjectService.test.ts:94:3] 2026-10-24T02:55:13.0650174Z 93 │ ) { 2026-10-24T02:55:13.0650461Z 94 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T02:55:13.0650849Z 95 │ │ const project = Option.getOrThrow(yield* service.getById(projectId)); 2026-10-24T02:55:13.0651163Z 96 │ │ if (predicate(project)) return project; 2026-10-24T02:55:13.0651414Z 97 │ │ yield* Effect.yieldNow; 2026-10-24T02:55:13.0651668Z 98 │ ╰─▶ } 2026-10-24T02:55:13.0651972Z 99 │ return yield* Effect.die(`Project ${projectId} was not enriched in time.`); 2026-10-24T02:55:13.0652200Z ╰──── 2026-10-24T02:55:13.0652264Z 2026-10-24T02:55:13.0652495Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T02:55:13.0652882Z ╭─[apps/web/src/components/settings/ProviderSettingsPanel.logic.ts:4:8] 2026-10-24T02:55:13.0653144Z 3 │ AuthProvidersManageScope, 2026-10-24T02:55:13.0653318Z 4 │ type AuthSessionState, 2026-10-24T02:55:13.0653504Z ·  ────────┬─────── 2026-10-24T02:55:13.0653768Z · ╰── 'AuthSessionState' is imported here 2026-10-24T02:55:13.0653999Z 5 │ type EnvironmentId, 2026-10-24T02:55:13.0654144Z ╰──── 2026-10-24T02:55:13.0654306Z  help: Consider removing this import. 2026-10-24T02:55:13.0654433Z 2026-10-24T02:55:13.0654709Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:55:13.0655153Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:215:7] 2026-10-24T02:55:13.0655400Z 211 │ }; 2026-10-24T02:55:13.0655539Z 212 │ useEffect(() => { 2026-10-24T02:55:13.0655709Z ·  ────┬──── 2026-10-24T02:55:13.0655941Z · ╰── This is the containing effect 2026-10-24T02:55:13.0656279Z 213 │ const inserted = ownerKey ? readComposerDraftSelection(ownerKey, draftMessage) : null; 2026-10-24T02:55:13.0656537Z 214 │ if (inserted) { 2026-10-24T02:55:13.0656713Z 215 │ setSelection((current) => 2026-10-24T02:55:13.0656900Z ·  ──────┬───── 2026-10-24T02:55:13.0657187Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:55:13.0657556Z 216 │ current.start === inserted.start && current.end === inserted.end ? current : inserted, 2026-10-24T02:55:13.0657805Z ╰──── 2026-10-24T02:55:13.0658504Z  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-24T02:55:13.0659456Z  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-24T02:55:13.0659784Z 2026-10-24T02:55:13.0660056Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:55:13.0660497Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:296:7] 2026-10-24T02:55:13.0660831Z 284 │ }, [hasWorkspaceSnapshot]); 2026-10-24T02:55:13.0661043Z 285 │ useEffect(() => { 2026-10-24T02:55:13.0661204Z ·  ────┬──── 2026-10-24T02:55:13.0661438Z · ╰── This is the containing effect 2026-10-24T02:55:13.0661741Z 286 │ if (!environmentId || !projectCwd || !selectedProviderInstanceId) return; 2026-10-24T02:55:13.0662063Z 287 │ const key = `${environmentId}:${selectedProviderInstanceId}:${projectCwd}`; 2026-10-24T02:55:13.0662306Z 288 │ const now = Date.now(); 2026-10-24T02:55:13.0662523Z 289 │ const lastRequest = workspaceRefreshKeyRef.current; 2026-10-24T02:55:13.0662729Z 290 │ if ( 2026-10-24T02:55:13.0662886Z 291 │ lastRequest?.key === key && 2026-10-24T02:55:13.0663140Z 292 │ now - lastRequest.requestedAt < PROVIDER_WORKSPACE_SNAPSHOT_TTL_MS 2026-10-24T02:55:13.0663366Z 293 │ ) 2026-10-24T02:55:13.0663506Z 294 │ return; 2026-10-24T02:55:13.0663772Z 295 │ if (hasCurrentProviderWorkspaceSnapshot(selectedProviderStatus, projectCwd, now)) { 2026-10-24T02:55:13.0664058Z 296 │ setWorkspaceRefreshRetry(null); 2026-10-24T02:55:13.0664273Z ·  ────────────┬─────────── 2026-10-24T02:55:13.0664576Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:55:13.0664821Z 297 │ return; 2026-10-24T02:55:13.0664954Z ╰──── 2026-10-24T02:55:13.0665651Z  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-24T02:55:13.0666572Z  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-24T02:55:13.0666897Z 2026-10-24T02:55:13.0667112Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:55:13.0667499Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:326:5] 2026-10-24T02:55:13.0667738Z 325 │ }, [ 2026-10-24T02:55:13.0667882Z 326 │ draftMessage, 2026-10-24T02:55:13.0668052Z ·  ──────┬───── 2026-10-24T02:55:13.0668308Z · ╰── Unnecessary dependency `draftMessage` 2026-10-24T02:55:13.0668538Z 327 │ environmentId, 2026-10-24T02:55:13.0668683Z ╰──── 2026-10-24T02:55:13.0669094Z  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-24T02:55:13.0669720Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.0670035Z 2026-10-24T02:55:13.0670331Z ⚠ eslint(no-unused-vars): Variable 'useDragRegion' is declared but never used. Unused variables should start with a '_'. 2026-10-24T02:55:13.0670760Z ╭─[apps/web/src/components/preview/PreviewPanelShell.tsx:61:9] 2026-10-24T02:55:13.0670988Z 60 │ ) { 2026-10-24T02:55:13.0671233Z 61 │ const useDragRegion = isElectron && props.mode !== "sheet" && props.mode !== "embedded"; 2026-10-24T02:55:13.0671506Z ·  ──────┬────── 2026-10-24T02:55:13.0671899Z · ╰── 'useDragRegion' is declared here 2026-10-24T02:55:13.0672191Z 62 │ const isInline = props.mode === "inline"; 2026-10-24T02:55:13.0672363Z ╰──── 2026-10-24T02:55:13.0672537Z  help: Consider removing this declaration. 2026-10-24T02:55:13.0672666Z 2026-10-24T02:55:13.0672910Z ⚠ eslint(no-unused-vars): Function 'assertUserMessagesExclude' is declared but never used. 2026-10-24T02:55:13.0673318Z ╭─[apps/server/src/orchestration-v2/testkit/fixtures/shared.ts:1398:10] 2026-10-24T02:55:13.0673556Z 1397 │ 2026-10-24T02:55:13.0673721Z 1398 │ function assertUserMessagesExclude( 2026-10-24T02:55:13.0673949Z ·  ────────────┬──────────── 2026-10-24T02:55:13.0674250Z · ╰── 'assertUserMessagesExclude' is declared here 2026-10-24T02:55:13.0674548Z 1399 │ projection: OrchestrationV2ThreadProjection, 2026-10-24T02:55:13.0674738Z ╰──── 2026-10-24T02:55:13.0674910Z  help: Consider removing this declaration. 2026-10-24T02:55:13.0675036Z 2026-10-24T02:55:13.0675239Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T02:55:13.0675621Z ╭─[apps/web/src/components/pullRequest/PullRequestSummaryTab.tsx:814:17] 2026-10-24T02:55:13.0675873Z 813 │
{ 2026-10-24T02:55:13.0678594Z ·  ────┬──── 2026-10-24T02:55:13.0678871Z · ╰── This is the containing effect 2026-10-24T02:55:13.0679087Z 261 │ stop(); 2026-10-24T02:55:13.0679237Z ·  ──┬─ 2026-10-24T02:55:13.0679508Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:55:13.0679757Z 262 │ }, [orderVersion]); 2026-10-24T02:55:13.0679908Z ╰──── 2026-10-24T02:55:13.0680598Z  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-24T02:55:13.0681516Z  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-24T02:55:13.0681841Z 2026-10-24T02:55:13.0682070Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T02:55:13.0682461Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5] 2026-10-24T02:55:13.0682772Z 260 │ useEffect(() => { 2026-10-24T02:55:13.0682963Z 261 │ stop(); 2026-10-24T02:55:13.0683112Z ·  ──┬─ 2026-10-24T02:55:13.0683337Z · ╰── Missing dependency `stop` 2026-10-24T02:55:13.0683549Z 262 │ }, [orderVersion]); 2026-10-24T02:55:13.0683728Z ·  ──────┬───── 2026-10-24T02:55:13.0683985Z · ╰── Unnecessary dependency `orderVersion` 2026-10-24T02:55:13.0684210Z 263 │ useEffect( 2026-10-24T02:55:13.0684347Z ╰──── 2026-10-24T02:55:13.0684854Z  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-24T02:55:13.0685601Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.0685921Z 2026-10-24T02:55:13.0686079Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:55:13.0686409Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:96:9] 2026-10-24T02:55:13.0686667Z 95 │ const latest = useRef(props); 2026-10-24T02:55:13.0686847Z 96 │ latest.current = props; 2026-10-24T02:55:13.0687056Z ·  ───┬──────┬─── 2026-10-24T02:55:13.0687368Z · │ ╰── Cannot update ref value during render 2026-10-24T02:55:13.0687677Z · ╰── This value is a ref 2026-10-24T02:55:13.0687883Z 97 │ const gesture = useMemo( 2026-10-24T02:55:13.0688041Z ╰──── 2026-10-24T02:55:13.0688602Z  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-24T02:55:13.0689389Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:55:13.0689691Z 2026-10-24T02:55:13.0689848Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:55:13.0690182Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:104:18] 2026-10-24T02:55:13.0690430Z 103 │ .runOnJS(true) 2026-10-24T02:55:13.0690628Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T02:55:13.0690888Z ·  ───────────────┬────────────── 2026-10-24T02:55:13.0691231Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T02:55:13.0691587Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T02:55:13.0691799Z ╰──── 2026-10-24T02:55:13.0692350Z  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-24T02:55:13.0693104Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:55:13.0693400Z 2026-10-24T02:55:13.0693623Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:55:13.0693990Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:105:19] 2026-10-24T02:55:13.0694273Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T02:55:13.0694536Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T02:55:13.0694844Z ·  ──────────────────────────┬───────────────────────── 2026-10-24T02:55:13.0695216Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T02:55:13.0695560Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T02:55:13.0695763Z ╰──── 2026-10-24T02:55:13.0696323Z  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-24T02:55:13.0697081Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:55:13.0697378Z 2026-10-24T02:55:13.0697533Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:55:13.0697863Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:106:16] 2026-10-24T02:55:13.0698179Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T02:55:13.0698462Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T02:55:13.0698790Z ·  ──────────────────────────┬───────────────────────── 2026-10-24T02:55:13.0699161Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T02:55:13.0699507Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T02:55:13.0699711Z ╰──── 2026-10-24T02:55:13.0700265Z  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-24T02:55:13.0701017Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:55:13.0701316Z 2026-10-24T02:55:13.0701470Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:55:13.0701862Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:107:21] 2026-10-24T02:55:13.0702199Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T02:55:13.0702478Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T02:55:13.0702781Z ·  ───────────────────────┬────────────────────── 2026-10-24T02:55:13.0703150Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T02:55:13.0703433Z 108 │ [props.disabled], 2026-10-24T02:55:13.0703584Z ╰──── 2026-10-24T02:55:13.0704148Z  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-24T02:55:13.0704909Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:55:13.0705204Z 2026-10-24T02:55:13.0705360Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:55:13.0705690Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:249:9] 2026-10-24T02:55:13.0705986Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-24T02:55:13.0706239Z 249 │ latest.current = { rows, planners, moveThread }; 2026-10-24T02:55:13.0706483Z ·  ───┬──────┬─── 2026-10-24T02:55:13.0706795Z · │ ╰── Cannot update ref value during render 2026-10-24T02:55:13.0707111Z · ╰── This value is a ref 2026-10-24T02:55:13.0707302Z 250 │ 2026-10-24T02:55:13.0707424Z ╰──── 2026-10-24T02:55:13.0707975Z  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-24T02:55:13.0708743Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:55:13.0709069Z 2026-10-24T02:55:13.0709220Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:55:13.0709551Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:247:22] 2026-10-24T02:55:13.0709860Z 246 │ const [preview, setPreview] = useState(null); 2026-10-24T02:55:13.0710135Z 247 │ const translateY = useRef(new Animated.Value(0)).current; 2026-10-24T02:55:13.0710414Z ·  ──────────────────┬────────────────── 2026-10-24T02:55:13.0710730Z · ╰── Cannot access ref value during render 2026-10-24T02:55:13.0711021Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-24T02:55:13.0711215Z ╰──── 2026-10-24T02:55:13.0712947Z  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-24T02:55:13.0713795Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:55:13.0714133Z 2026-10-24T02:55:13.0714311Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T02:55:13.0714664Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:324:16] 2026-10-24T02:55:13.0714909Z 323 │ update(0); 2026-10-24T02:55:13.0715085Z 324 │ let last = performance.now(); 2026-10-24T02:55:13.0715297Z ·  ────────┬──────── 2026-10-24T02:55:13.0715566Z · ╰── Cannot call impure function 2026-10-24T02:55:13.0715790Z 325 │ const tick = () => { 2026-10-24T02:55:13.0715942Z ╰──── 2026-10-24T02:55:13.0716328Z  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-24T02:55:13.0716949Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T02:55:13.0717247Z 2026-10-24T02:55:13.0717449Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T02:55:13.0717820Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:99:15] 2026-10-24T02:55:13.0718063Z  98 │ () => 2026-10-24T02:55:13.0718215Z  99 │ Gesture.Pan() 2026-10-24T02:55:13.0718389Z ·  ─┬─ 2026-10-24T02:55:13.0718627Z · ╰── `Pan` may be a component 2026-10-24T02:55:13.0718899Z 100 │ .enabled(!props.disabled) 2026-10-24T02:55:13.0719060Z ╰──── 2026-10-24T02:55:13.0719419Z  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-24T02:55:13.0720167Z  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-24T02:55:13.0720599Z 2026-10-24T02:55:13.0720800Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T02:55:13.0721165Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:108:5] 2026-10-24T02:55:13.0721414Z 103 │ .runOnJS(true) 2026-10-24T02:55:13.0721610Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T02:55:13.0721829Z ·  ───┬── 2026-10-24T02:55:13.0722405Z · ╰── 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-24T02:55:13.0722961Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T02:55:13.0723246Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T02:55:13.0723532Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T02:55:13.0723751Z 108 │ [props.disabled], 2026-10-24T02:55:13.0723938Z ·  ────────┬─────── 2026-10-24T02:55:13.0724238Z · ╰── This dependency list is missing values used by the callback 2026-10-24T02:55:13.0724493Z 109 │ ); 2026-10-24T02:55:13.0724619Z ╰──── 2026-10-24T02:55:13.0724962Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T02:55:13.0725543Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.0725862Z 2026-10-24T02:55:13.0726163Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T02:55:13.0726606Z ╭─[apps/web/src/components/settings/SettingInheritance.tsx:163:24] 2026-10-24T02:55:13.0726840Z 162 │ keys, 2026-10-24T02:55:13.0726990Z 163 │ overridingProjects = [], 2026-10-24T02:55:13.0727181Z ·  ── 2026-10-24T02:55:13.0727356Z 164 │ onClearOverrides, 2026-10-24T02:55:13.0727503Z ╰──── 2026-10-24T02:55:13.0734160Z  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-24T02:55:13.0734482Z 2026-10-24T02:55:13.0734697Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T02:55:13.0735090Z ╭─[apps/web/src/components/pullRequest/PullRequestChecksPopover.tsx:88:15] 2026-10-24T02:55:13.0735346Z 87 │
  • { 2026-10-24T02:55:13.0743028Z ·  ────┬──── 2026-10-24T02:55:13.0743256Z · ╰── This is the containing effect 2026-10-24T02:55:13.0743467Z 57 │ setDecodedSize(null); 2026-10-24T02:55:13.0743636Z ·  ───────┬────── 2026-10-24T02:55:13.0743899Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:55:13.0744140Z 58 │ }, [props.sourceKey]); 2026-10-24T02:55:13.0744279Z ╰──── 2026-10-24T02:55:13.0744944Z  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-24T02:55:13.0745826Z  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-24T02:55:13.0746137Z 2026-10-24T02:55:13.0746398Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:55:13.0746800Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:61:5] 2026-10-24T02:55:13.0747015Z 59 │ 2026-10-24T02:55:13.0747138Z 60 │ useEffect(() => { 2026-10-24T02:55:13.0747300Z ·  ────┬──── 2026-10-24T02:55:13.0747516Z · ╰── This is the containing effect 2026-10-24T02:55:13.0747725Z 61 │ setFailedUri(null); 2026-10-24T02:55:13.0747894Z ·  ──────┬───── 2026-10-24T02:55:13.0748157Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:55:13.0748389Z 62 │ }, [props.uri]); 2026-10-24T02:55:13.0748528Z ╰──── 2026-10-24T02:55:13.0749208Z  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-24T02:55:13.0750059Z  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-24T02:55:13.0750362Z 2026-10-24T02:55:13.0750642Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-24T02:55:13.0751089Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:7:10] 2026-10-24T02:55:13.0751377Z 6 │ import { parse, SvgAst, type JsxAST } from "react-native-svg"; 2026-10-24T02:55:13.0751837Z 7 │ import { ActivityIndicator, Pressable, StyleSheet, View, type ViewStyle } from "react-native"; 2026-10-24T02:55:13.0752116Z ·  ────────┬──────── 2026-10-24T02:55:13.0752373Z · ╰── 'ActivityIndicator' is imported here 2026-10-24T02:55:13.0752575Z 8 │ 2026-10-24T02:55:13.0752691Z ╰──── 2026-10-24T02:55:13.0752847Z  help: Consider removing this import. 2026-10-24T02:55:13.0752964Z 2026-10-24T02:55:13.0753171Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:55:13.0753530Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:58:7] 2026-10-24T02:55:13.0753763Z 57 │ setDecodedSize(null); 2026-10-24T02:55:13.0753920Z 58 │ }, [props.sourceKey]); 2026-10-24T02:55:13.0754091Z ·  ───────┬─────── 2026-10-24T02:55:13.0754345Z · ╰── Unnecessary dependency `props.sourceKey` 2026-10-24T02:55:13.0754554Z 59 │ 2026-10-24T02:55:13.0754671Z ╰──── 2026-10-24T02:55:13.0755020Z  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-24T02:55:13.0755611Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.0755907Z 2026-10-24T02:55:13.0756110Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:55:13.0756458Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:62:7] 2026-10-24T02:55:13.0756683Z 61 │ setFailedUri(null); 2026-10-24T02:55:13.0756839Z 62 │ }, [props.uri]); 2026-10-24T02:55:13.0756995Z ·  ────┬──── 2026-10-24T02:55:13.0757235Z · ╰── Unnecessary dependency `props.uri` 2026-10-24T02:55:13.0757435Z 63 │ 2026-10-24T02:55:13.0757548Z ╰──── 2026-10-24T02:55:13.0757885Z  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-24T02:55:13.0758465Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.0758817Z 2026-10-24T02:55:13.0759031Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:55:13.0759385Z ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:215:7] 2026-10-24T02:55:13.0759606Z 214 │ } 2026-10-24T02:55:13.0759742Z 215 │ }, [wrappedRender]); 2026-10-24T02:55:13.0759908Z ·  ──────┬────── 2026-10-24T02:55:13.0760151Z · ╰── Unnecessary dependency `wrappedRender` 2026-10-24T02:55:13.0760358Z 216 │ 2026-10-24T02:55:13.0760471Z ╰──── 2026-10-24T02:55:13.0760814Z  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-24T02:55:13.0761504Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.0761885Z 2026-10-24T02:55:13.0762127Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T02:55:13.0762514Z ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:817:35] 2026-10-24T02:55:13.0762739Z 816 │ > 2026-10-24T02:55:13.0762920Z 817 │ 2026-10-24T02:55:13.0763175Z ·  ──────────────────── 2026-10-24T02:55:13.0763393Z 818 │ 2026-10-24T02:55:13.0765417Z 832 │ 2026-10-24T02:55:13.0765679Z ·  ──────────────────── 2026-10-24T02:55:13.0765910Z 833 │ 2026-10-24T02:55:13.0766080Z ╰──── 2026-10-24T02:55:13.0766357Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T02:55:13.0766710Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T02:55:13.0766887Z 2026-10-24T02:55:13.0767143Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:55:13.0767522Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2139:5] 2026-10-24T02:55:13.0767722Z 2137 │ ); 2026-10-24T02:55:13.0767863Z 2138 │ useEffect(() => { 2026-10-24T02:55:13.0768099Z ·  ────┬──── 2026-10-24T02:55:13.0768321Z · ╰── This is the containing effect 2026-10-24T02:55:13.0768530Z 2139 │ setExpandedVideo(null); 2026-10-24T02:55:13.0768709Z ·  ────────┬─────── 2026-10-24T02:55:13.0769027Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:55:13.0769269Z 2140 │ setExpandedFile(null); 2026-10-24T02:55:13.0769416Z ╰──── 2026-10-24T02:55:13.0770061Z  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-24T02:55:13.0770901Z  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-24T02:55:13.0771201Z 2026-10-24T02:55:13.0771486Z ⚠ eslint(no-unused-vars): Identifier 'isMarkdownFileLinkLabel' is imported but never used. 2026-10-24T02:55:13.0771907Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:66:10] 2026-10-24T02:55:13.0772192Z 65 │ import { resolveAssetUrl } from "@t3tools/client-runtime/state/assets"; 2026-10-24T02:55:13.0772478Z 66 │ import { isMarkdownFileLinkLabel } from "@t3tools/shared/markdownLinks"; 2026-10-24T02:55:13.0772731Z ·  ───────────┬─────────── 2026-10-24T02:55:13.0773001Z · ╰── 'isMarkdownFileLinkLabel' is imported here 2026-10-24T02:55:13.0773321Z 67 │ import { formatAttachmentSize } from "@t3tools/client-runtime/state/attachments"; 2026-10-24T02:55:13.0773537Z ╰──── 2026-10-24T02:55:13.0773697Z  help: Consider removing this import. 2026-10-24T02:55:13.0773811Z 2026-10-24T02:55:13.0774025Z ⚠ eslint(no-unused-vars): Identifier 'createContext' is imported but never used. 2026-10-24T02:55:13.0774356Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:92:3] 2026-10-24T02:55:13.0774555Z 91 │ import { 2026-10-24T02:55:13.0774694Z 92 │ createContext, 2026-10-24T02:55:13.0774847Z ·  ──────┬────── 2026-10-24T02:55:13.0775070Z · ╰── 'createContext' is imported here 2026-10-24T02:55:13.0775268Z 93 │ memo, 2026-10-24T02:55:13.0775385Z ╰──── 2026-10-24T02:55:13.0775540Z  help: Consider removing this import. 2026-10-24T02:55:13.0775654Z 2026-10-24T02:55:13.0775864Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-24T02:55:13.0776206Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:108:3] 2026-10-24T02:55:13.0776422Z 107 │ import { 2026-10-24T02:55:13.0776567Z 108 │ ActivityIndicator, 2026-10-24T02:55:13.0776742Z ·  ────────┬──────── 2026-10-24T02:55:13.0776981Z · ╰── 'ActivityIndicator' is imported here 2026-10-24T02:55:13.0777188Z 109 │ Image, 2026-10-24T02:55:13.0777309Z ╰──── 2026-10-24T02:55:13.0777466Z  help: Consider removing this import. 2026-10-24T02:55:13.0777577Z 2026-10-24T02:55:13.0777779Z ⚠ eslint(no-unused-vars): Identifier 'ScrollView' is imported but never used. 2026-10-24T02:55:13.0778109Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:115:3] 2026-10-24T02:55:13.0778315Z 114 │ Pressable, 2026-10-24T02:55:13.0778458Z 115 │ ScrollView, 2026-10-24T02:55:13.0778610Z ·  ─────┬──── 2026-10-24T02:55:13.0778868Z · ╰── 'ScrollView' is imported here 2026-10-24T02:55:13.0779072Z 116 │ StyleSheet, 2026-10-24T02:55:13.0779200Z ╰──── 2026-10-24T02:55:13.0779355Z  help: Consider removing this import. 2026-10-24T02:55:13.0779468Z 2026-10-24T02:55:13.0779664Z ⚠ eslint(no-unused-vars): Identifier 'NativeText' is imported but never used. 2026-10-24T02:55:13.0779989Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:117:11] 2026-10-24T02:55:13.0780196Z 116 │ StyleSheet, 2026-10-24T02:55:13.0780340Z 117 │ Text as NativeText, 2026-10-24T02:55:13.0780505Z ·  ─────┬──── 2026-10-24T02:55:13.0780740Z · ╰── 'NativeText' is imported here 2026-10-24T02:55:13.0780945Z 118 │ type ColorValue, 2026-10-24T02:55:13.0781082Z ╰──── 2026-10-24T02:55:13.0781302Z  help: Consider removing this import. 2026-10-24T02:55:13.0781487Z 2026-10-24T02:55:13.0781699Z ⚠ eslint(no-unused-vars): Identifier 'tryOpenExternalUrl' is imported but never used. 2026-10-24T02:55:13.0782042Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:140:10] 2026-10-24T02:55:13.0782322Z 139 │ import { copyTextWithHaptic } from "../../lib/copyTextWithHaptic"; 2026-10-24T02:55:13.0782601Z 140 │ import { tryOpenExternalUrl } from "../../lib/openExternalUrl"; 2026-10-24T02:55:13.0782832Z ·  ─────────┬──────── 2026-10-24T02:55:13.0783094Z · ╰── 'tryOpenExternalUrl' is imported here 2026-10-24T02:55:13.0783392Z 141 │ import { downloadAndShareAttachment } from "../../lib/attachmentDownload"; 2026-10-24T02:55:13.0783607Z ╰──── 2026-10-24T02:55:13.0783767Z  help: Consider removing this import. 2026-10-24T02:55:13.0783885Z 2026-10-24T02:55:13.0784100Z ⚠ eslint(no-unused-vars): Identifier 'faviconUrlForOrigin' is imported but never used. 2026-10-24T02:55:13.0784442Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:143:10] 2026-10-24T02:55:13.0784725Z 142 │ import { hasWideMarkdownBlock } from "../../lib/wideMarkdownBlocks"; 2026-10-24T02:55:13.0784999Z 143 │ import { faviconUrlForOrigin } from "@t3tools/shared/favicon"; 2026-10-24T02:55:13.0785233Z ·  ─────────┬───────── 2026-10-24T02:55:13.0785489Z · ╰── 'faviconUrlForOrigin' is imported here 2026-10-24T02:55:13.0785703Z 144 │ import { 2026-10-24T02:55:13.0785826Z ╰──── 2026-10-24T02:55:13.0785977Z  help: Consider removing this import. 2026-10-24T02:55:13.0786095Z 2026-10-24T02:55:13.0786313Z ⚠ eslint(no-unused-vars): Identifier 'MediaVideoPlayer' is imported but never used. 2026-10-24T02:55:13.0786653Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:157:10] 2026-10-24T02:55:13.0786947Z 156 │ import { VideoAttachmentTile } from "../../components/VideoAttachmentTile"; 2026-10-24T02:55:13.0787240Z 157 │ import { MediaVideoPlayer } from "../../components/MediaVideoPlayer"; 2026-10-24T02:55:13.0787478Z ·  ────────┬─────── 2026-10-24T02:55:13.0787723Z · ╰── 'MediaVideoPlayer' is imported here 2026-10-24T02:55:13.0788016Z 158 │ import { resolveMarkdownMediaPreview } from "../../lib/markdownMedia"; 2026-10-24T02:55:13.0788222Z ╰──── 2026-10-24T02:55:13.0788378Z  help: Consider removing this import. 2026-10-24T02:55:13.0788489Z 2026-10-24T02:55:13.0788796Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoPreviewUri' is imported but never used. 2026-10-24T02:55:13.0789231Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:161:3] 2026-10-24T02:55:13.0789457Z 160 │ attachmentVideoPreviewSource, 2026-10-24T02:55:13.0789637Z 161 │ mediaVideoPreviewUri, 2026-10-24T02:55:13.0789812Z ·  ──────────┬───────── 2026-10-24T02:55:13.0790064Z · ╰── 'mediaVideoPreviewUri' is imported here 2026-10-24T02:55:13.0790288Z 162 │ mediaVideoThumbnailKey, 2026-10-24T02:55:13.0790431Z ╰──── 2026-10-24T02:55:13.0790586Z  help: Consider removing this import. 2026-10-24T02:55:13.0790700Z 2026-10-24T02:55:13.0790922Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoThumbnailKey' is imported but never used. 2026-10-24T02:55:13.0791279Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:162:3] 2026-10-24T02:55:13.0791492Z 161 │ mediaVideoPreviewUri, 2026-10-24T02:55:13.0791716Z 162 │ mediaVideoThumbnailKey, 2026-10-24T02:55:13.0791942Z ·  ───────────┬────────── 2026-10-24T02:55:13.0792201Z · ╰── 'mediaVideoThumbnailKey' is imported here 2026-10-24T02:55:13.0792436Z 163 │ type MediaVideoPreviewSource, 2026-10-24T02:55:13.0792590Z ╰──── 2026-10-24T02:55:13.0792745Z  help: Consider removing this import. 2026-10-24T02:55:13.0792858Z 2026-10-24T02:55:13.0793071Z ⚠ eslint(no-unused-vars): Type 'MediaVideoPreviewSource' is imported but never used. 2026-10-24T02:55:13.0793407Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:163:8] 2026-10-24T02:55:13.0793628Z 162 │ mediaVideoThumbnailKey, 2026-10-24T02:55:13.0793800Z 163 │ type MediaVideoPreviewSource, 2026-10-24T02:55:13.0793995Z ·  ───────────┬─────────── 2026-10-24T02:55:13.0794264Z · ╰── 'MediaVideoPreviewSource' is imported here 2026-10-24T02:55:13.0794512Z 164 │ } from "../../lib/videoPreviewSource"; 2026-10-24T02:55:13.0794672Z ╰──── 2026-10-24T02:55:13.0794823Z  help: Consider removing this import. 2026-10-24T02:55:13.0794937Z 2026-10-24T02:55:13.0795137Z ⚠ eslint(no-unused-vars): Type 'ReviewDiffTheme' is imported but never used. 2026-10-24T02:55:13.0795461Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:171:15] 2026-10-24T02:55:13.0795782Z 170 │ import { parseReviewCommentMessageSegments } from "../review/reviewCommentSelection"; 2026-10-24T02:55:13.0796108Z 171 │ import type { ReviewDiffTheme } from "../review/shikiReviewHighlighter"; 2026-10-24T02:55:13.0796357Z ·  ───────┬─────── 2026-10-24T02:55:13.0796609Z · ╰── 'ReviewDiffTheme' is imported here 2026-10-24T02:55:13.0796820Z 172 │ import { 2026-10-24T02:55:13.0796943Z ╰──── 2026-10-24T02:55:13.0797098Z  help: Consider removing this import. 2026-10-24T02:55:13.0797210Z 2026-10-24T02:55:13.0797439Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownFontSizes' is imported but never used. 2026-10-24T02:55:13.0797795Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:186:3] 2026-10-24T02:55:13.0797998Z 185 │ import { 2026-10-24T02:55:13.0798138Z 186 │ resolveMarkdownFontSizes, 2026-10-24T02:55:13.0798327Z ·  ────────────┬─────────── 2026-10-24T02:55:13.0798670Z · ╰── 'resolveMarkdownFontSizes' is imported here 2026-10-24T02:55:13.0799028Z 187 │ resolveNativeMarkdownTypography, 2026-10-24T02:55:13.0799187Z ╰──── 2026-10-24T02:55:13.0799341Z  help: Consider removing this import. 2026-10-24T02:55:13.0799455Z 2026-10-24T02:55:13.0799678Z ⚠ eslint(no-unused-vars): Identifier 'markdownLinkIconSource' is imported but never used. 2026-10-24T02:55:13.0800029Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:191:10] 2026-10-24T02:55:13.0800164Z 190 │ import { PierreEntryIcon } from "../../components/PierreEntryIcon"; 2026-10-24T02:55:13.0800305Z 191 │ import { markdownLinkIconSource } from "../../lib/markdownLinkIcons"; 2026-10-24T02:55:13.0800406Z ·  ───────────┬────────── 2026-10-24T02:55:13.0800574Z · ╰── 'markdownLinkIconSource' is imported here 2026-10-24T02:55:13.0800639Z 192 │ import { 2026-10-24T02:55:13.0800691Z ╰──── 2026-10-24T02:55:13.0800787Z  help: Consider removing this import. 2026-10-24T02:55:13.0800790Z 2026-10-24T02:55:13.0801047Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownInlineCodePresentation' is imported but never used. 2026-10-24T02:55:13.0801180Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:194:3] 2026-10-24T02:55:13.0801258Z 193 │ normalizeNativeMarkdownUrl, 2026-10-24T02:55:13.0801356Z 194 │ resolveMarkdownInlineCodePresentation, 2026-10-24T02:55:13.0801472Z ·  ──────────────────┬────────────────── 2026-10-24T02:55:13.0801673Z · ╰── 'resolveMarkdownInlineCodePresentation' is imported here 2026-10-24T02:55:13.0801747Z 195 │ resolveMarkdownLinkIcon, 2026-10-24T02:55:13.0801803Z ╰──── 2026-10-24T02:55:13.0801899Z  help: Consider removing this import. 2026-10-24T02:55:13.0801901Z 2026-10-24T02:55:13.0802123Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownLinkIcon' is imported but never used. 2026-10-24T02:55:13.0802251Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:195:3] 2026-10-24T02:55:13.0802348Z 194 │ resolveMarkdownInlineCodePresentation, 2026-10-24T02:55:13.0802424Z 195 │ resolveMarkdownLinkIcon, 2026-10-24T02:55:13.0802516Z ·  ───────────┬─────────── 2026-10-24T02:55:13.0802671Z · ╰── 'resolveMarkdownLinkIcon' is imported here 2026-10-24T02:55:13.0802759Z 196 │ resolveMarkdownLinkPresentation, 2026-10-24T02:55:13.0802814Z ╰──── 2026-10-24T02:55:13.0802915Z  help: Consider removing this import. 2026-10-24T02:55:13.0802920Z 2026-10-24T02:55:13.0803141Z ⚠ eslint(no-unused-vars): Identifier 'useMarkdownCodeHighlight' is imported but never used. 2026-10-24T02:55:13.0803275Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:234:10] 2026-10-24T02:55:13.0803382Z 233 │ import { ThreadMcpApp } from "./McpAppWebView"; 2026-10-24T02:55:13.0803529Z 234 │ import { useMarkdownCodeHighlight } from "./markdownCodeHighlightState"; 2026-10-24T02:55:13.0803629Z ·  ────────────┬─────────── 2026-10-24T02:55:13.0803798Z · ╰── 'useMarkdownCodeHighlight' is imported here 2026-10-24T02:55:13.0803861Z 235 │ import { 2026-10-24T02:55:13.0803916Z ╰──── 2026-10-24T02:55:13.0804065Z  help: Consider removing this import. 2026-10-24T02:55:13.0804098Z 2026-10-24T02:55:13.0804343Z ⚠ eslint(no-unused-vars): Identifier 'useAssetUrlState' is imported but never used. 2026-10-24T02:55:13.0804475Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:238:3] 2026-10-24T02:55:13.0804544Z 237 │ useAssetUrl, 2026-10-24T02:55:13.0804612Z 238 │ useAssetUrlState, 2026-10-24T02:55:13.0804697Z ·  ────────┬─────── 2026-10-24T02:55:13.0804843Z · ╰── 'useAssetUrlState' is imported here 2026-10-24T02:55:13.0804915Z 239 │ useRefreshAssetUrl, 2026-10-24T02:55:13.0804967Z ╰──── 2026-10-24T02:55:13.0805064Z  help: Consider removing this import. 2026-10-24T02:55:13.0805066Z 2026-10-24T02:55:13.0805271Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:55:13.0805409Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2141:7] 2026-10-24T02:55:13.0805483Z 2140 │ setExpandedFile(null); 2026-10-24T02:55:13.0805643Z 2141 │ }, [props.environmentId, props.threadId, props.contentPresentation.kind]); 2026-10-24T02:55:13.0805870Z ·  ─────────┬───────── ───────┬────── ───────────────┬────────────── 2026-10-24T02:55:13.0806166Z · │ │ ╰── Unnecessary dependency `props.contentPresentation.kind` 2026-10-24T02:55:13.0806367Z · │ ╰── Unnecessary dependency `props.threadId` 2026-10-24T02:55:13.0806539Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-24T02:55:13.0806686Z 2142 │ const horizontalPadding = props.layoutVariant === "split" ? 20 : 16; 2026-10-24T02:55:13.0806742Z ╰──── 2026-10-24T02:55:13.0807038Z  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-24T02:55:13.0807348Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.0807354Z 2026-10-24T02:55:13.0807551Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:55:13.0807687Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2609:7] 2026-10-24T02:55:13.0807790Z 2608 │ reportHeaderMaterialVisibility(false); 2026-10-24T02:55:13.0807910Z 2609 │ }, [feedThreadKey, reportHeaderMaterialVisibility]); 2026-10-24T02:55:13.0807991Z ·  ──────┬────── 2026-10-24T02:55:13.0808143Z · ╰── Unnecessary dependency `feedThreadKey` 2026-10-24T02:55:13.0808202Z 2610 │ 2026-10-24T02:55:13.0808257Z ╰──── 2026-10-24T02:55:13.0808543Z  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-24T02:55:13.0808895Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.0808898Z 2026-10-24T02:55:13.0809098Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:55:13.0809287Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2625:7] 2026-10-24T02:55:13.0809407Z 2624 │ } 2026-10-24T02:55:13.0809543Z 2625 │ }, [listMountKey, props.contentInsetEndAdjustment, listRef]); 2026-10-24T02:55:13.0809626Z ·  ──────┬───── 2026-10-24T02:55:13.0809777Z · ╰── Unnecessary dependency `listMountKey` 2026-10-24T02:55:13.0809831Z 2626 │ 2026-10-24T02:55:13.0809887Z ╰──── 2026-10-24T02:55:13.0810175Z  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-24T02:55:13.0810483Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.0810490Z 2026-10-24T02:55:13.0810690Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:55:13.0810822Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2782:7] 2026-10-24T02:55:13.0810884Z 2781 │ } 2026-10-24T02:55:13.0811069Z 2782 │ }, [expandedTurnIds, expandedWorkGroups, expandedWorkRows, settleDisclosureAfterLayout]); 2026-10-24T02:55:13.0811273Z ·  ───────┬─────── ─────────┬──────── ────────┬─────── 2026-10-24T02:55:13.0811522Z · │ │ ╰── Unnecessary dependency `expandedWorkRows` 2026-10-24T02:55:13.0811734Z · │ ╰── Unnecessary dependency `expandedWorkGroups` 2026-10-24T02:55:13.0811891Z · ╰── Unnecessary dependency `expandedTurnIds` 2026-10-24T02:55:13.0811949Z 2783 │ 2026-10-24T02:55:13.0812000Z ╰──── 2026-10-24T02:55:13.0812290Z  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-24T02:55:13.0812599Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.0812602Z 2026-10-24T02:55:13.0812786Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T02:55:13.0812925Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:613:9] 2026-10-24T02:55:13.0812983Z 612 │ }; 2026-10-24T02:55:13.0813145Z 613 │ }, [props.environmentId, attachment.id, httpBaseUrl]), 2026-10-24T02:55:13.0813400Z ·  ─────────┬───────── ──────┬────── ─────┬───── 2026-10-24T02:55:13.0813641Z · │ │ ╰── Unnecessary dependency `httpBaseUrl` 2026-10-24T02:55:13.0813835Z · │ ╰── Unnecessary dependency `attachment.id` 2026-10-24T02:55:13.0814000Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-24T02:55:13.0814067Z 614 │ ); 2026-10-24T02:55:13.0814122Z ╰──── 2026-10-24T02:55:13.0814437Z  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-24T02:55:13.0814749Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.0814751Z 2026-10-24T02:55:13.0815034Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T02:55:13.0815208Z ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:473:19] 2026-10-24T02:55:13.0815273Z 472 │ onFilters, 2026-10-24T02:55:13.0815342Z 473 │ authorOptions = [], 2026-10-24T02:55:13.0815425Z ·  ── 2026-10-24T02:55:13.0815497Z 474 │ labelOptions = [], 2026-10-24T02:55:13.0815552Z ╰──── 2026-10-24T02:55:13.0815867Z  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-24T02:55:13.0815872Z 2026-10-24T02:55:13.0816153Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T02:55:13.0816324Z ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:474:18] 2026-10-24T02:55:13.0816395Z 473 │ authorOptions = [], 2026-10-24T02:55:13.0816462Z 474 │ labelOptions = [], 2026-10-24T02:55:13.0816543Z ·  ── 2026-10-24T02:55:13.0816612Z 475 │ optionScope, 2026-10-24T02:55:13.0816667Z ╰──── 2026-10-24T02:55:13.0816981Z  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-24T02:55:13.0816990Z 2026-10-24T02:55:13.0817155Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T02:55:13.0817317Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:697:76] 2026-10-24T02:55:13.0817498Z 696 │ const [snoozeGateClock, setSnoozeGateClock] = useState(() => ({ thread, now: Date.now() })); 2026-10-24T02:55:13.0817668Z 697 │ if (snoozeGateClock.thread !== thread) setSnoozeGateClock({ thread, now: Date.now() }); 2026-10-24T02:55:13.0817804Z ·  ─────┬──── 2026-10-24T02:55:13.0817991Z · ╰── Cannot call impure function 2026-10-24T02:55:13.0818179Z 698 │ const snoozeGateNow = new Date(snoozeGateClock.now).toISOString(); 2026-10-24T02:55:13.0818294Z ╰──── 2026-10-24T02:55:13.0818576Z  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-24T02:55:13.0818913Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T02:55:13.0818916Z 2026-10-24T02:55:13.0819083Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T02:55:13.0819241Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:718:71] 2026-10-24T02:55:13.0819324Z 717 │ const snoozePresets = useMemo( 2026-10-24T02:55:13.0819500Z 718 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-24T02:55:13.0819640Z ·  ─────┬──── 2026-10-24T02:55:13.0819822Z · ╰── Cannot call impure function 2026-10-24T02:55:13.0819945Z 719 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-24T02:55:13.0819997Z ╰──── 2026-10-24T02:55:13.0820276Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T02:55:13.0820576Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T02:55:13.0820579Z 2026-10-24T02:55:13.0820770Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T02:55:13.0820939Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:719:6] 2026-10-24T02:55:13.0821119Z 718 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-24T02:55:13.0821242Z 719 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-24T02:55:13.0821338Z ·  ────────────┬─────────── 2026-10-24T02:55:13.0821517Z · ╰── Unnecessary dependency `props.snoozePresetMinute` 2026-10-24T02:55:13.0821573Z 720 │ ); 2026-10-24T02:55:13.0821628Z ╰──── 2026-10-24T02:55:13.0821940Z  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-24T02:55:13.0822253Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.0822258Z 2026-10-24T02:55:13.0822436Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T02:55:13.0822591Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:765:7] 2026-10-24T02:55:13.0822665Z 764 │ thread.pinnedAt, 2026-10-24T02:55:13.0822731Z 765 │ variant, 2026-10-24T02:55:13.0822804Z ·  ───┬─── 2026-10-24T02:55:13.0822943Z · ╰── Unnecessary dependency `variant` 2026-10-24T02:55:13.0823001Z 766 │ ], 2026-10-24T02:55:13.0823054Z ╰──── 2026-10-24T02:55:13.0823411Z  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-24T02:55:13.0823791Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.0823793Z 2026-10-24T02:55:13.0823988Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T02:55:13.0824150Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:1215:21] 2026-10-24T02:55:13.0824286Z 1214 │ {providerDrivers.slice(0, -1).map((driver, index) => ( 2026-10-24T02:55:13.0824421Z 1215 │ 2026-10-24T02:55:13.0824544Z ·  ────────────────────────── 2026-10-24T02:55:13.0824657Z 1216 │ 2026-10-24T02:55:13.0824720Z ╰──── 2026-10-24T02:55:13.0824869Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T02:55:13.0824872Z 2026-10-24T02:55:13.0825338Z ⚠ 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-24T02:55:13.0825465Z ╭─[packages/effect-acp/src/errors.test.ts:129:28] 2026-10-24T02:55:13.0825561Z 128 │ const secret = "acp-summary-secret"; 2026-10-24T02:55:13.0825675Z 129 │ const cause = yield* Schema.decodeUnknownEffect( 2026-10-24T02:55:13.0825793Z ·  ────────────────────────── 2026-10-24T02:55:13.0825864Z 130 │ Schema.Struct({ 2026-10-24T02:55:13.0825921Z ╰──── 2026-10-24T02:55:13.0825924Z 2026-10-24T02:55:13.0826122Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T02:55:13.0826277Z ╭─[apps/mobile/src/features/threads/ThreadQueueControl.tsx:602:27] 2026-10-24T02:55:13.0826450Z 601 │ const onEnd = useEffectEvent((y: number, success: boolean) => props.onEnd(y, success)); 2026-10-24T02:55:13.0826531Z 602 │ const gesture = Gesture.Pan() 2026-10-24T02:55:13.0826619Z ·  ─┬─ 2026-10-24T02:55:13.0826761Z · ╰── `Pan` may be a component 2026-10-24T02:55:13.0826841Z 603 │ .enabled(!props.disabled) 2026-10-24T02:55:13.0826898Z ╰──── 2026-10-24T02:55:13.0827172Z  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-24T02:55:13.0827618Z  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-24T02:55:13.0827623Z 2026-10-24T02:55:13.0827870Z ⚠ eslint(no-unused-vars): Function 'normalizeTerminalContextSelection' is declared but never used. 2026-10-24T02:55:13.0827989Z ╭─[apps/web/src/lib/terminalContext.ts:56:10] 2026-10-24T02:55:13.0828048Z 55 │ 2026-10-24T02:55:13.0828148Z 56 │ function normalizeTerminalContextSelection( 2026-10-24T02:55:13.0828263Z ·  ────────────────┬──────────────── 2026-10-24T02:55:13.0828456Z · ╰── 'normalizeTerminalContextSelection' is declared here 2026-10-24T02:55:13.0828607Z 57 │ selection: TerminalContextSelection, 2026-10-24T02:55:13.0828722Z ╰──── 2026-10-24T02:55:13.0828871Z  help: Consider removing this declaration. 2026-10-24T02:55:13.0828874Z 2026-10-24T02:55:13.0829135Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:55:13.0829288Z ╭─[apps/mobile/src/features/threads/use-worktree-setup.ts:30:40] 2026-10-24T02:55:13.0829452Z 28 │ const snapshot = resolveWorktreeSetupSnapshot(input.threadId, query.data, live); 2026-10-24T02:55:13.0829519Z 29 │ useEffect(() => { 2026-10-24T02:55:13.0829593Z ·  ────┬──── 2026-10-24T02:55:13.0829726Z · ╰── This is the containing effect 2026-10-24T02:55:13.0829853Z 30 │ if (snapshot && snapshot !== live) setHeld({ key, snapshot }); 2026-10-24T02:55:13.0829963Z ·  ───┬─── 2026-10-24T02:55:13.0830155Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:55:13.0830229Z 31 │ }, [key, live, snapshot]); 2026-10-24T02:55:13.0830282Z ╰──── 2026-10-24T02:55:13.0830873Z  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-24T02:55:13.0831196Z  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-24T02:55:13.0831199Z 2026-10-24T02:55:13.0831536Z ⚠ 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-24T02:55:13.0831724Z ╭─[packages/effect-acp/src/schema.test.ts:18:12] 2026-10-24T02:55:13.0831887Z 17 │ const command = { name: "plan", description: "Make a plan", input: { hint: "Task" } }; 2026-10-24T02:55:13.0832009Z 18 │ expect(Schema.is(V1.AvailableCommand)(command)).toBe(true); 2026-10-24T02:55:13.0832090Z ·  ───────── 2026-10-24T02:55:13.0832154Z 19 │ expect( 2026-10-24T02:55:13.0832207Z ╰──── 2026-10-24T02:55:13.0832209Z 2026-10-24T02:55:13.0832533Z ⚠ 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-24T02:55:13.0832658Z ╭─[packages/effect-acp/src/schema.test.ts:20:7] 2026-10-24T02:55:13.0832721Z 19 │ expect( 2026-10-24T02:55:13.0832891Z 20 │ Schema.is(V2.AvailableCommand)({ ...command, input: { type: "text", hint: "Task" } }), 2026-10-24T02:55:13.0832964Z ·  ───────── 2026-10-24T02:55:13.0833031Z 21 │ ).toBe(true); 2026-10-24T02:55:13.0833086Z ╰──── 2026-10-24T02:55:13.0833089Z 2026-10-24T02:55:13.0833545Z ⚠ 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-24T02:55:13.0833673Z ╭─[packages/effect-acp/src/protocol.test.ts:500:31] 2026-10-24T02:55:13.0833727Z 499 │ 2026-10-24T02:55:13.0833913Z 500 │ const response = yield* Schema.decodeUnknownEffect( 2026-10-24T02:55:13.0834109Z ·  ────────────────────────── 2026-10-24T02:55:13.0834222Z 501 │ Schema.fromJsonString(JsonRpcErrorResponse), 2026-10-24T02:55:13.0834273Z ╰──── 2026-10-24T02:55:13.0834276Z 2026-10-24T02:55:13.0834645Z ⚠ 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-24T02:55:13.0834763Z ╭─[packages/effect-acp/src/client.ts:1269:11] 2026-10-24T02:55:13.0834914Z 1268 │ extNotificationHandlers.set(CLIENT_METHODS.mcp_message, (params) => 2026-10-24T02:55:13.0835087Z 1269 │ Schema.decodeUnknownEffect(AcpSchemaV2.MessageMcpNotification)(params).pipe( 2026-10-24T02:55:13.0835194Z ·  ────────────────────────── 2026-10-24T02:55:13.0835348Z 1270 │ Effect.mapError(() => AcpError.AcpRequestError.invalidParams()), 2026-10-24T02:55:13.0835405Z ╰──── 2026-10-24T02:55:13.0835408Z 2026-10-24T02:55:13.0835827Z ⚠ 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-24T02:55:13.0835975Z ╭─[apps/server/src/provider/acp/AntigravityProtocol.ts:263:20] 2026-10-24T02:55:13.0836060Z 262 │ ...(update._meta !== undefined 2026-10-24T02:55:13.0836227Z 263 │ ? { _meta: Schema.is(Schema.Record(Schema.String, Schema.Json))(meta) ? meta : null } 2026-10-24T02:55:13.0836318Z ·  ───────── 2026-10-24T02:55:13.0836380Z 264 │ : {}), 2026-10-24T02:55:13.0836434Z ╰──── 2026-10-24T02:55:13.0836442Z 2026-10-24T02:55:13.0836702Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:55:13.0836854Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:512:5] 2026-10-24T02:55:13.0836915Z 510 │ }, []); 2026-10-24T02:55:13.0836985Z 511 │ useEffect(() => { 2026-10-24T02:55:13.0837058Z ·  ────┬──── 2026-10-24T02:55:13.0837188Z · ╰── This is the containing effect 2026-10-24T02:55:13.0837274Z 512 │ setKeyboardStateSuspect(false); 2026-10-24T02:55:13.0837368Z ·  ───────────┬─────────── 2026-10-24T02:55:13.0837540Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:55:13.0837690Z 513 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-24T02:55:13.0837802Z ╰──── 2026-10-24T02:55:13.0838394Z  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-24T02:55:13.0838714Z  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-24T02:55:13.0838717Z 2026-10-24T02:55:13.0839023Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:55:13.0839177Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:872:7] 2026-10-24T02:55:13.0839334Z 869 │ const [lastKnownKeyboardHeight, setLastKnownKeyboardHeight] = useState(0); 2026-10-24T02:55:13.0839407Z 870 │ useEffect(() => { 2026-10-24T02:55:13.0839483Z ·  ────┬──── 2026-10-24T02:55:13.0839614Z · ╰── This is the containing effect 2026-10-24T02:55:13.0839770Z 871 │ if (liveKeyboardHeight > 0 && liveKeyboardHeight !== lastKnownKeyboardHeight) { 2026-10-24T02:55:13.0839888Z 872 │ setLastKnownKeyboardHeight(liveKeyboardHeight); 2026-10-24T02:55:13.0839988Z ·  ─────────────┬──────────── 2026-10-24T02:55:13.0840165Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:55:13.0840220Z 873 │ } 2026-10-24T02:55:13.0840275Z ╰──── 2026-10-24T02:55:13.0840867Z  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-24T02:55:13.0841187Z  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-24T02:55:13.0841189Z 2026-10-24T02:55:13.0841442Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:55:13.0841594Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1119:5] 2026-10-24T02:55:13.0841653Z 1117 │ 2026-10-24T02:55:13.0841724Z 1118 │ useEffect(() => { 2026-10-24T02:55:13.0841804Z ·  ────┬──── 2026-10-24T02:55:13.0841933Z · ╰── This is the containing effect 2026-10-24T02:55:13.0842013Z 1119 │ setAnchorMessageId(null); 2026-10-24T02:55:13.0842102Z ·  ─────────┬──────── 2026-10-24T02:55:13.0842274Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:55:13.0842355Z 1120 │ setSubmittedMessageId(null); 2026-10-24T02:55:13.0842410Z ╰──── 2026-10-24T02:55:13.0842997Z  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-24T02:55:13.0843362Z  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-24T02:55:13.0843407Z 2026-10-24T02:55:13.0843640Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:55:13.0843789Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:513:7] 2026-10-24T02:55:13.0843877Z 512 │ setKeyboardStateSuspect(false); 2026-10-24T02:55:13.0843980Z 513 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-24T02:55:13.0844122Z ·  ────────┬──────── ─────────┬──────── 2026-10-24T02:55:13.0844328Z · │ ╰── Unnecessary dependency `liveKeyboardHeight` 2026-10-24T02:55:13.0844494Z · ╰── Unnecessary dependency `isKeyboardVisible` 2026-10-24T02:55:13.0844627Z 514 │ const handleOwnedInputFocusChange = (focused: boolean) => { 2026-10-24T02:55:13.0844683Z ╰──── 2026-10-24T02:55:13.0844974Z  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-24T02:55:13.0845284Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.0845286Z 2026-10-24T02:55:13.0845485Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:55:13.0845639Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1067:7] 2026-10-24T02:55:13.0845726Z 1066 │ userInputInsetProgress.set(1); 2026-10-24T02:55:13.0845890Z 1067 │ }, [activeUserInputRequestId, userInputCardProgress, userInputInsetProgress]); 2026-10-24T02:55:13.0845991Z ·  ────────────┬─────────── 2026-10-24T02:55:13.0846173Z · ╰── Unnecessary dependency `activeUserInputRequestId` 2026-10-24T02:55:13.0846282Z 1068 │ const showContent = props.showContent ?? true; 2026-10-24T02:55:13.0846334Z ╰──── 2026-10-24T02:55:13.0846622Z  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-24T02:55:13.0846927Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.0846930Z 2026-10-24T02:55:13.0847133Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:55:13.0847288Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1125:15] 2026-10-24T02:55:13.0847362Z 1124 │ freeze.set(false); 2026-10-24T02:55:13.0847446Z 1125 │ }, [freeze, selectedThreadKey]); 2026-10-24T02:55:13.0847542Z ·  ────────┬──────── 2026-10-24T02:55:13.0847706Z · ╰── Unnecessary dependency `selectedThreadKey` 2026-10-24T02:55:13.0847764Z 1126 │ 2026-10-24T02:55:13.0847820Z ╰──── 2026-10-24T02:55:13.0848106Z  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-24T02:55:13.0848463Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.0848498Z 2026-10-24T02:55:13.0848682Z ⚠ react(immutability): This value cannot be modified 2026-10-24T02:55:13.0848879Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:955:5] 2026-10-24T02:55:13.0848992Z 950 │ const composerPopoverHeight = useSharedValue(0); 2026-10-24T02:55:13.0849099Z 951 │ const floatingControlCoverage = useSharedValue( 2026-10-24T02:55:13.0849196Z ·  ───────────┬─────────── 2026-10-24T02:55:13.0849360Z · ╰── `floatingControlCoverage` originates here 2026-10-24T02:55:13.0849489Z 952 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-24T02:55:13.0849550Z 953 │ ); 2026-10-24T02:55:13.0849617Z 954 │ useEffect(() => { 2026-10-24T02:55:13.0849730Z 955 │ floatingControlCoverage.value = withTiming( 2026-10-24T02:55:13.0849826Z ·  ───────────┬─────────── 2026-10-24T02:55:13.0849988Z · ╰── `floatingControlCoverage` cannot be modified 2026-10-24T02:55:13.0850113Z 956 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-24T02:55:13.0850170Z ╰──── 2026-10-24T02:55:13.0850434Z  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-24T02:55:13.0850735Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:55:13.0850738Z 2026-10-24T02:55:13.0850894Z ⚠ react(immutability): This value cannot be modified 2026-10-24T02:55:13.0851046Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:973:7] 2026-10-24T02:55:13.0851236Z 963 │ const userInputCoverageApplies = Platform.OS === "ios" && activeUserInputRequestId !== null; 2026-10-24T02:55:13.0851360Z 964 │ const combinedContentInsetEndAdjustment = useSharedValue( 2026-10-24T02:55:13.0851471Z ·  ────────────────┬──────────────── 2026-10-24T02:55:13.0851654Z · ╰── `combinedContentInsetEndAdjustment` originates here 2026-10-24T02:55:13.0851786Z 965 │ Math.max(0, estimatedOverlayHeight - nativeInsetOvercount), 2026-10-24T02:55:13.0851845Z 966 │ ); 2026-10-24T02:55:13.0851919Z 967 │ useAnimatedReaction( 2026-10-24T02:55:13.0851979Z 968 │ () => 2026-10-24T02:55:13.0852074Z 969 │ contentInsetEndAdjustment.value + 2026-10-24T02:55:13.0852170Z 970 │ floatingControlCoverage.value + 2026-10-24T02:55:13.0852366Z 971 │ (userInputCoverageApplies ? userInputInsetProgress.value * userInputCardCoverage.value : 0), 2026-10-24T02:55:13.0852430Z 972 │ (value) => { 2026-10-24T02:55:13.0852544Z 973 │ combinedContentInsetEndAdjustment.value = value; 2026-10-24T02:55:13.0852653Z ·  ────────────────┬──────────────── 2026-10-24T02:55:13.0852843Z · ╰── `combinedContentInsetEndAdjustment` cannot be modified 2026-10-24T02:55:13.0852900Z 974 │ }, 2026-10-24T02:55:13.0852961Z ╰──── 2026-10-24T02:55:13.0853223Z  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-24T02:55:13.0853574Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:55:13.0853605Z 2026-10-24T02:55:13.0853895Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:55:13.0854061Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:285:5] 2026-10-24T02:55:13.0854183Z 283 │ const [snoozeWakeTick, bumpSnoozeWakeTick] = useState(0); 2026-10-24T02:55:13.0854251Z 284 │ useEffect(() => { 2026-10-24T02:55:13.0854322Z ·  ────┬──── 2026-10-24T02:55:13.0854456Z · ╰── This is the containing effect 2026-10-24T02:55:13.0854545Z 285 │ setNow(new Date().toISOString()); 2026-10-24T02:55:13.0854619Z ·  ───┬── 2026-10-24T02:55:13.0854786Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:55:13.0854930Z 286 │ const id = setInterval(() => setNow(new Date().toISOString()), 60_000); 2026-10-24T02:55:13.0854985Z ╰──── 2026-10-24T02:55:13.0855573Z  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-24T02:55:13.0855891Z  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-24T02:55:13.0855893Z 2026-10-24T02:55:13.0856090Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:55:13.0856260Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:365:25] 2026-10-24T02:55:13.0856397Z 364 │ // range) the boundary string is identical and the chain would die. 2026-10-24T02:55:13.0856491Z 365 │ }, [nextSnoozeWakeAt, snoozeWakeTick]); 2026-10-24T02:55:13.0856595Z ·  ───────┬────── 2026-10-24T02:55:13.0856762Z · ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T02:55:13.0856877Z 366 │ const listItems = ((): readonly SidebarListItem[] => { 2026-10-24T02:55:13.0856933Z ╰──── 2026-10-24T02:55:13.0857222Z  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-24T02:55:13.0857574Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.0857603Z 2026-10-24T02:55:13.0857803Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T02:55:13.0857968Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:356:53] 2026-10-24T02:55:13.0858057Z 355 │ if (Number.isNaN(wakeAtMs)) return; 2026-10-24T02:55:13.0858211Z 356 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647); 2026-10-24T02:55:13.0858335Z ·  ─────┬──── 2026-10-24T02:55:13.0858501Z · ╰── Cannot call impure function 2026-10-24T02:55:13.0858583Z 357 │ const id = setTimeout(() => { 2026-10-24T02:55:13.0858640Z ╰──── 2026-10-24T02:55:13.0858970Z  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-24T02:55:13.0859262Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T02:55:13.0859265Z 2026-10-24T02:55:13.0859518Z ⚠ eslint(no-unused-vars): Function 'promptResponseHasMissingXAiStopReason' is declared but never used. 2026-10-24T02:55:13.0859672Z ╭─[packages/provider-grok/src/server/xaiAcpExtension.ts:1620:10] 2026-10-24T02:55:13.0859727Z 1619 │ 2026-10-24T02:55:13.0859939Z 1620 │ function promptResponseHasMissingXAiStopReason(response: EffectAcpSchema.PromptResponse): boolean { 2026-10-24T02:55:13.0860063Z ·  ──────────────────┬────────────────── 2026-10-24T02:55:13.0860265Z · ╰── 'promptResponseHasMissingXAiStopReason' is declared here 2026-10-24T02:55:13.0860348Z 1621 │ const meta = response._meta; 2026-10-24T02:55:13.0860407Z ╰──── 2026-10-24T02:55:13.0860516Z  help: Consider removing this declaration. 2026-10-24T02:55:13.0860519Z 2026-10-24T02:55:13.0860774Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T02:55:13.0860903Z ╭─[packages/provider-grok/src/server/adapter.ts:408:7] 2026-10-24T02:55:13.0860961Z 407 │ 2026-10-24T02:55:13.0861033Z 408 │ const layer: Layer.Layer< 2026-10-24T02:55:13.0861105Z ·  ──┬── 2026-10-24T02:55:13.0861236Z · ╰── 'layer' is declared here 2026-10-24T02:55:13.0861334Z 409 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T02:55:13.0861392Z ╰──── 2026-10-24T02:55:13.0861497Z  help: Consider removing this declaration. 2026-10-24T02:55:13.0861499Z 2026-10-24T02:55:13.0861655Z ⚠ react(immutability): This value cannot be modified 2026-10-24T02:55:13.0861804Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:174:5] 2026-10-24T02:55:13.0861950Z 170 │ const expandedAngle = props.collapsedDirection === "right" ? 90 : 180; 2026-10-24T02:55:13.0862090Z 171 │ const rotation = useSharedValue(props.expanded ? expandedAngle : 0); 2026-10-24T02:55:13.0862166Z ·  ────┬─── 2026-10-24T02:55:13.0862299Z · ╰── `rotation` originates here 2026-10-24T02:55:13.0862357Z 172 │ 2026-10-24T02:55:13.0862485Z 173 │ useLayoutEffect(() => { 2026-10-24T02:55:13.0862685Z 174 │ rotation.value = withTiming(props.expanded ? expandedAngle : 0, { 2026-10-24T02:55:13.0862761Z ·  ────┬─── 2026-10-24T02:55:13.0862893Z · ╰── `rotation` cannot be modified 2026-10-24T02:55:13.0862996Z 175 │ duration: THREAD_DISCLOSURE_TRANSITION_MS, 2026-10-24T02:55:13.0863048Z ╰──── 2026-10-24T02:55:13.0863312Z  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-24T02:55:13.0863618Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:55:13.0863621Z 2026-10-24T02:55:13.0863822Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T02:55:13.0863975Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:1246:23] 2026-10-24T02:55:13.0864043Z 1245 │ { 2026-10-24T02:55:13.0865615Z 111 │ separationProgress.value = withTiming(props.showScrollToEnd ? 1 : 0, CONTROL_TIMING); 2026-10-24T02:55:13.0865701Z ·  ─────────┬──────── 2026-10-24T02:55:13.0865850Z · ╰── `separationProgress` cannot be modified 2026-10-24T02:55:13.0865962Z 112 │ }, [props.showScrollToEnd, separationProgress]); 2026-10-24T02:55:13.0866017Z ╰──── 2026-10-24T02:55:13.0866283Z  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-24T02:55:13.0866584Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:55:13.0866587Z 2026-10-24T02:55:13.0866745Z ⚠ react(immutability): This value cannot be modified 2026-10-24T02:55:13.0866908Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5] 2026-10-24T02:55:13.0867023Z 128 │ // and repeatedly retargets the animation as it grows. 2026-10-24T02:55:13.0867141Z 129 │ const capsuleWidth = useSharedValue(null); 2026-10-24T02:55:13.0867222Z ·  ──────┬───── 2026-10-24T02:55:13.0867409Z · ╰── `capsuleWidth` originates here 2026-10-24T02:55:13.0867589Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T02:55:13.0867707Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T02:55:13.0867814Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T02:55:13.0867912Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T02:55:13.0867980Z 134 │ return; 2026-10-24T02:55:13.0868037Z 135 │ } 2026-10-24T02:55:13.0868145Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T02:55:13.0868234Z 137 │ measuredWidthRef.current = width; 2026-10-24T02:55:13.0868381Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T02:55:13.0868456Z ·  ──────┬───── 2026-10-24T02:55:13.0868598Z · ╰── `capsuleWidth` cannot be modified 2026-10-24T02:55:13.0868663Z 139 │ }; 2026-10-24T02:55:13.0868719Z ╰──── 2026-10-24T02:55:13.0869015Z  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-24T02:55:13.0869317Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:55:13.0869319Z 2026-10-24T02:55:13.0869481Z ⚠ react(immutability): This value cannot be modified 2026-10-24T02:55:13.0869644Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7] 2026-10-24T02:55:13.0869758Z 128 │ // and repeatedly retargets the animation as it grows. 2026-10-24T02:55:13.0869871Z 129 │ const capsuleWidth = useSharedValue(null); 2026-10-24T02:55:13.0869959Z ·  ──────┬───── 2026-10-24T02:55:13.0870098Z · ╰── `capsuleWidth` originates here 2026-10-24T02:55:13.0870210Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T02:55:13.0870323Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T02:55:13.0870430Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T02:55:13.0870527Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T02:55:13.0870593Z 134 │ return; 2026-10-24T02:55:13.0870649Z 135 │ } 2026-10-24T02:55:13.0870755Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T02:55:13.0870843Z 137 │ measuredWidthRef.current = width; 2026-10-24T02:55:13.0870987Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T02:55:13.0871040Z 139 │ }; 2026-10-24T02:55:13.0871139Z 140 │ const hasStatus = props.status !== null; 2026-10-24T02:55:13.0871277Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-24T02:55:13.0871346Z 142 │ useEffect(() => { 2026-10-24T02:55:13.0871412Z 143 │ if (!hasStatus) { 2026-10-24T02:55:13.0871502Z 144 │ measuredWidthRef.current = null; 2026-10-24T02:55:13.0871580Z 145 │ capsuleWidth.value = null; 2026-10-24T02:55:13.0871712Z ·  ──────┬───── 2026-10-24T02:55:13.0871857Z · ╰── `capsuleWidth` cannot be modified 2026-10-24T02:55:13.0871916Z 146 │ } 2026-10-24T02:55:13.0871972Z ╰──── 2026-10-24T02:55:13.0872229Z  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-24T02:55:13.0872603Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:55:13.0872652Z 2026-10-24T02:55:13.0872916Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T02:55:13.0873081Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7] 2026-10-24T02:55:13.0873216Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-24T02:55:13.0873280Z 142 │ useEffect(() => { 2026-10-24T02:55:13.0873361Z ·  ───┬─── 2026-10-24T02:55:13.0873587Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-24T02:55:13.0873657Z 143 │ if (!hasStatus) { 2026-10-24T02:55:13.0873749Z 144 │ measuredWidthRef.current = null; 2026-10-24T02:55:13.0873832Z 145 │ capsuleWidth.value = null; 2026-10-24T02:55:13.0873911Z ·  ──────┬───── 2026-10-24T02:55:13.0874048Z · ╰── This modifies `capsuleWidth` 2026-10-24T02:55:13.0874103Z 146 │ } 2026-10-24T02:55:13.0874157Z ╰──── 2026-10-24T02:55:13.0874498Z  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-24T02:55:13.0874799Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:55:13.0874801Z 2026-10-24T02:55:13.0875000Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T02:55:13.0875165Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5] 2026-10-24T02:55:13.0875280Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T02:55:13.0875400Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T02:55:13.0875525Z ·  ───────────────┬─────────────── 2026-10-24T02:55:13.0875760Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-24T02:55:13.0875868Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T02:55:13.0875966Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T02:55:13.0876030Z 134 │ return; 2026-10-24T02:55:13.0876083Z 135 │ } 2026-10-24T02:55:13.0876237Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T02:55:13.0876384Z 137 │ measuredWidthRef.current = width; 2026-10-24T02:55:13.0876529Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T02:55:13.0876605Z ·  ──────┬───── 2026-10-24T02:55:13.0876742Z · ╰── This modifies `capsuleWidth` 2026-10-24T02:55:13.0876800Z 139 │ }; 2026-10-24T02:55:13.0876857Z ╰──── 2026-10-24T02:55:13.0877193Z  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-24T02:55:13.0877494Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:55:13.0877496Z 2026-10-24T02:55:13.0877669Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T02:55:13.0877821Z ╭─[apps/server/src/provider/Drivers/CodexDriver.test.ts:466:14] 2026-10-24T02:55:13.0877874Z 465 │ 2026-10-24T02:55:13.0877983Z 466 │ for (const {} of ["direct", "wrapper"] as const) { 2026-10-24T02:55:13.0878058Z ·  ── 2026-10-24T02:55:13.0878114Z 467 │ } 2026-10-24T02:55:13.0878165Z ╰──── 2026-10-24T02:55:13.0878395Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T02:55:13.0878397Z 2026-10-24T02:55:13.0878653Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:55:13.0878850Z ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:40:5] 2026-10-24T02:55:13.0878965Z 37 │ const [initialized, setInitialized] = useState(false); 2026-10-24T02:55:13.0879037Z 38 │ useLayoutEffect(() => { 2026-10-24T02:55:13.0879118Z ·  ───────┬─────── 2026-10-24T02:55:13.0879251Z · ╰── This is the containing effect 2026-10-24T02:55:13.0879313Z 39 │ reset(); 2026-10-24T02:55:13.0879384Z 40 │ setInitialized(true); 2026-10-24T02:55:13.0879464Z ·  ───────┬────── 2026-10-24T02:55:13.0879633Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:55:13.0879695Z 41 │ }, [reset]); 2026-10-24T02:55:13.0879753Z ╰──── 2026-10-24T02:55:13.0880348Z  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-24T02:55:13.0880671Z  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-24T02:55:13.0880673Z 2026-10-24T02:55:13.0880928Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:55:13.0881085Z ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:93:5] 2026-10-24T02:55:13.0881142Z 88 │ 2026-10-24T02:55:13.0881211Z 89 │ useEffect(() => { 2026-10-24T02:55:13.0881282Z ·  ────┬──── 2026-10-24T02:55:13.0881467Z · ╰── This is the containing effect 2026-10-24T02:55:13.0881695Z 90 │ if (!needsPreparation || !initialProjectRef.branch || waitingForProject) return; 2026-10-24T02:55:13.0881800Z 91 │ const branchName = initialProjectRef.branch; 2026-10-24T02:55:13.0881870Z 92 │ let active = true; 2026-10-24T02:55:13.0881965Z 93 │ setPendingCheckouts((count) => count + 1); 2026-10-24T02:55:13.0882055Z ·  ─────────┬───────── 2026-10-24T02:55:13.0882226Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:55:13.0882382Z 94 │ // Serialize replacements: ignoring a stale result cannot undo its Git mutation. 2026-10-24T02:55:13.0882434Z ╰──── 2026-10-24T02:55:13.0883026Z  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-24T02:55:13.0883347Z  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-24T02:55:13.0883349Z 2026-10-24T02:55:13.0883553Z ⚠ eslint(no-unused-vars): Type 'ThreadRunSummary' is imported but never used. 2026-10-24T02:55:13.0883647Z ╭─[apps/web/src/types.ts:22:3] 2026-10-24T02:55:13.0883718Z 21 │ EnvironmentThreadShell, 2026-10-24T02:55:13.0883786Z 22 │ ThreadRunSummary, 2026-10-24T02:55:13.0883867Z ·  ────────┬─────── 2026-10-24T02:55:13.0884010Z · ╰── 'ThreadRunSummary' is imported here 2026-10-24T02:55:13.0884084Z 23 │ ThreadRuntimeSummary, 2026-10-24T02:55:13.0884141Z ╰──── 2026-10-24T02:55:13.0884242Z  help: Consider removing this import. 2026-10-24T02:55:13.0884244Z 2026-10-24T02:55:13.0884499Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:55:13.0884650Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:361:7] 2026-10-24T02:55:13.0884792Z 355 │ }, [cancelledIncomingShareId, navigation, props.incomingShareId]); 2026-10-24T02:55:13.0884861Z 356 │ useEffect(() => { 2026-10-24T02:55:13.0884933Z ·  ────┬──── 2026-10-24T02:55:13.0885061Z · ╰── This is the containing effect 2026-10-24T02:55:13.0885154Z 357 │ if (!isReturningToProjectPicker) { 2026-10-24T02:55:13.0885223Z 358 │ return; 2026-10-24T02:55:13.0885284Z 359 │ } 2026-10-24T02:55:13.0885380Z 360 │ if (requestedInitialProjectAvailable) { 2026-10-24T02:55:13.0885476Z 361 │ setIsReturningToProjectPicker(false); 2026-10-24T02:55:13.0885585Z ·  ──────────────┬────────────── 2026-10-24T02:55:13.0885761Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:55:13.0885822Z 362 │ return; 2026-10-24T02:55:13.0885878Z ╰──── 2026-10-24T02:55:13.0886465Z  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-24T02:55:13.0886829Z  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-24T02:55:13.0886860Z 2026-10-24T02:55:13.0887148Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:55:13.0887296Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:504:9] 2026-10-24T02:55:13.0887354Z 447 │ 2026-10-24T02:55:13.0887423Z 448 │ useEffect(() => { 2026-10-24T02:55:13.0887497Z ·  ────┬──── 2026-10-24T02:55:13.0887623Z · ╰── This is the containing effect 2026-10-24T02:55:13.0887729Z 449 │ if (props.pendingTaskId || props.draftId) { 2026-10-24T02:55:13.0887792Z 450 │ return; 2026-10-24T02:55:13.0887850Z 451 │ } 2026-10-24T02:55:13.0887996Z 452 │ if (lastInitialProjectRefRef.current !== props.initialProjectRef) { 2026-10-24T02:55:13.0888135Z 453 │ lastInitialProjectRefRef.current = props.initialProjectRef; 2026-10-24T02:55:13.0888243Z 454 │ appliedInitialProjectKeyRef.current = null; 2026-10-24T02:55:13.0888300Z 455 │ } 2026-10-24T02:55:13.0888439Z 456 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-24T02:55:13.0888571Z 457 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-24T02:55:13.0888679Z 458 │ if (initialEnvironmentId && initialProjectId) { 2026-10-24T02:55:13.0888784Z 459 │ const directProject = 2026-10-24T02:55:13.0888864Z 460 │ projects.find( 2026-10-24T02:55:13.0888934Z 461 │ (project) => 2026-10-24T02:55:13.0889111Z 462 │ project.environmentId === initialEnvironmentId && project.id === initialProjectId, 2026-10-24T02:55:13.0889184Z 463 │ ) ?? null; 2026-10-24T02:55:13.0889238Z 464 │ 2026-10-24T02:55:13.0889310Z 465 │ if (directProject) { 2026-10-24T02:55:13.0889449Z 466 │ // Apply the route's project once. Re-applying on every change would 2026-10-24T02:55:13.0889587Z 467 │ // instantly revert environment/project switches made in the picker. 2026-10-24T02:55:13.0889749Z 468 │ const directProjectKey = `${directProject.environmentId}:${directProject.id}`; 2026-10-24T02:55:13.0889888Z 469 │ if (appliedInitialProjectKeyRef.current === directProjectKey) { 2026-10-24T02:55:13.0889955Z 470 │ return; 2026-10-24T02:55:13.0890015Z 471 │ } 2026-10-24T02:55:13.0890112Z 472 │ if (props.initialProjectRef?.branch) { 2026-10-24T02:55:13.0890179Z 473 │ if ( 2026-10-24T02:55:13.0890329Z 474 │ selectedProject?.environmentId !== directProject.environmentId || 2026-10-24T02:55:13.0890432Z 475 │ selectedProject.id !== directProject.id 2026-10-24T02:55:13.0890497Z 476 │ ) { 2026-10-24T02:55:13.0890583Z 477 │ setProject(directProject); 2026-10-24T02:55:13.0890650Z 478 │ return; 2026-10-24T02:55:13.0890710Z 479 │ } 2026-10-24T02:55:13.0890794Z 480 │ if (!flow.draftKey) return; 2026-10-24T02:55:13.0890935Z 481 │ // The route completes checkout before mounting this composer. Local 2026-10-24T02:55:13.0891080Z 482 │ // mode reuses an existing worktree; worktree mode would create another. 2026-10-24T02:55:13.0891188Z 483 │ updateComposerDraftSettings(flow.draftKey, { 2026-10-24T02:55:13.0891270Z 484 │ workspaceSelection: { 2026-10-24T02:55:13.0891343Z 485 │ mode: "local", 2026-10-24T02:55:13.0891501Z 486 │ branch: props.initialProjectRef.branch, 2026-10-24T02:55:13.0891702Z 487 │ worktreePath: props.initialProjectRef.worktreePath ?? null, 2026-10-24T02:55:13.0891788Z 488 │ startFromOrigin: false, 2026-10-24T02:55:13.0891852Z 489 │ }, 2026-10-24T02:55:13.0891915Z 490 │ }); 2026-10-24T02:55:13.0891972Z 491 │ } 2026-10-24T02:55:13.0892103Z 492 │ appliedInitialProjectKeyRef.current = directProjectKey; 2026-10-24T02:55:13.0892164Z 493 │ if ( 2026-10-24T02:55:13.0892306Z 494 │ selectedProject?.environmentId === directProject.environmentId && 2026-10-24T02:55:13.0892403Z 495 │ selectedProject.id === directProject.id 2026-10-24T02:55:13.0892464Z 496 │ ) { 2026-10-24T02:55:13.0892530Z 497 │ return; 2026-10-24T02:55:13.0892590Z 498 │ } 2026-10-24T02:55:13.0892674Z 499 │ setProject(directProject); 2026-10-24T02:55:13.0892742Z 500 │ return; 2026-10-24T02:55:13.0892799Z 501 │ } 2026-10-24T02:55:13.0892852Z 502 │ 2026-10-24T02:55:13.0892933Z 503 │ if (projects.length > 0) { 2026-10-24T02:55:13.0893032Z 504 │ setIsReturningToProjectPicker(true); 2026-10-24T02:55:13.0893143Z ·  ──────────────┬────────────── 2026-10-24T02:55:13.0893324Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:55:13.0893382Z 505 │ } 2026-10-24T02:55:13.0893437Z ╰──── 2026-10-24T02:55:13.0894033Z  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-24T02:55:13.0894358Z  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-24T02:55:13.0894361Z 2026-10-24T02:55:13.0894614Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:55:13.0894767Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:604:5] 2026-10-24T02:55:13.0894825Z 545 │ 2026-10-24T02:55:13.0894894Z 546 │ useEffect(() => { 2026-10-24T02:55:13.0894964Z ·  ────┬──── 2026-10-24T02:55:13.0895095Z · ╰── This is the containing effect 2026-10-24T02:55:13.0895191Z 547 │ const shareId = props.incomingShareId; 2026-10-24T02:55:13.0895279Z 548 │ const draftKey = flow.draftKey; 2026-10-24T02:55:13.0895382Z 549 │ const destinationProject = selectedProject; 2026-10-24T02:55:13.0895528Z 550 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-24T02:55:13.0895657Z 551 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-24T02:55:13.0895749Z 552 │ const selectedProjectMatchesRoute = 2026-10-24T02:55:13.0895824Z 553 │ !initialEnvironmentId || 2026-10-24T02:55:13.0895898Z 554 │ !initialProjectId || 2026-10-24T02:55:13.0896030Z 555 │ (destinationProject?.environmentId === initialEnvironmentId && 2026-10-24T02:55:13.0896137Z 556 │ destinationProject.id === initialProjectId); 2026-10-24T02:55:13.0896195Z 557 │ if ( 2026-10-24T02:55:13.0896264Z 558 │ !shareId || 2026-10-24T02:55:13.0896330Z 559 │ !draftKey || 2026-10-24T02:55:13.0896454Z 560 │ !destinationProject || 2026-10-24T02:55:13.0896610Z 561 │ !selectedProjectMatchesRoute || 2026-10-24T02:55:13.0896703Z 562 │ cancelledIncomingShareId === shareId 2026-10-24T02:55:13.0896762Z 563 │ ) { 2026-10-24T02:55:13.0896825Z 564 │ return; 2026-10-24T02:55:13.0896881Z 565 │ } 2026-10-24T02:55:13.0896979Z 566 │ const importKey = `${shareId}:${draftKey}`; 2026-10-24T02:55:13.0897048Z 567 │ if ( 2026-10-24T02:55:13.0897158Z 568 │ startedShareImportKeyRef.current === importKey || 2026-10-24T02:55:13.0897273Z 569 │ cancellingShareImportKeyRef.current === importKey 2026-10-24T02:55:13.0897334Z 570 │ ) { 2026-10-24T02:55:13.0897400Z 571 │ return; 2026-10-24T02:55:13.0897456Z 572 │ } 2026-10-24T02:55:13.0897515Z 573 │ 2026-10-24T02:55:13.0897587Z 574 │ if (!incomingShare) { 2026-10-24T02:55:13.0936180Z 575 │ if (isIncomingShareUnavailable && alertedUnavailableIncomingShareIdRef.current !== shareId) { 2026-10-24T02:55:13.0936502Z 576 │ alertedUnavailableIncomingShareIdRef.current = shareId; 2026-10-24T02:55:13.0936570Z 577 │ Dialog.alert( 2026-10-24T02:55:13.0936660Z 578 │ "Shared content unavailable", 2026-10-24T02:55:13.0936835Z 579 │ "The shared content is no longer in the inbox. You can continue editing this task draft.", 2026-10-24T02:55:13.0936897Z 580 │ ); 2026-10-24T02:55:13.0936951Z 581 │ } 2026-10-24T02:55:13.0937011Z 582 │ return; 2026-10-24T02:55:13.0937064Z 583 │ } 2026-10-24T02:55:13.0937114Z 584 │ 2026-10-24T02:55:13.0937172Z 585 │ if ( 2026-10-24T02:55:13.0937337Z 586 │ incomingShare.attachments.some((attachment) => attachment.type === "file") && 2026-10-24T02:55:13.0937443Z 587 │ selectedEnvironmentServerConfig === null 2026-10-24T02:55:13.0937498Z 588 │ ) { 2026-10-24T02:55:13.0937556Z 589 │ return; 2026-10-24T02:55:13.0937608Z 590 │ } 2026-10-24T02:55:13.0937657Z 591 │ 2026-10-24T02:55:13.0937791Z 592 │ if (alertedUnavailableIncomingShareIdRef.current === shareId) { 2026-10-24T02:55:13.0937912Z 593 │ alertedUnavailableIncomingShareIdRef.current = null; 2026-10-24T02:55:13.0937965Z 594 │ } 2026-10-24T02:55:13.0938073Z 595 │ startedShareImportKeyRef.current = importKey; 2026-10-24T02:55:13.0938140Z 596 │ const draftBackup = 2026-10-24T02:55:13.0938325Z 597 │ shareImportDraftBackupRef.current.get(importKey) ?? getComposerDraftSnapshot(draftKey); 2026-10-24T02:55:13.0938459Z 598 │ shareImportDraftBackupRef.current.set(importKey, draftBackup); 2026-10-24T02:55:13.0938549Z 599 │ const importToken = Symbol(importKey); 2026-10-24T02:55:13.0938628Z 600 │ let didReserveShare = false; 2026-10-24T02:55:13.0938707Z 601 │ let didConsumeShare = false; 2026-10-24T02:55:13.0938816Z 602 │ let needsDraftRestore = false; 2026-10-24T02:55:13.0938925Z 603 │ activeShareImportTokenRef.current = importToken; 2026-10-24T02:55:13.0939004Z 604 │ setImportingShareKey(importKey); 2026-10-24T02:55:13.0939100Z ·  ──────────┬───────── 2026-10-24T02:55:13.0939287Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:55:13.0939353Z 605 │ void (async () => { 2026-10-24T02:55:13.0939403Z ╰──── 2026-10-24T02:55:13.0940144Z  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-24T02:55:13.0940586Z  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-24T02:55:13.0940592Z 2026-10-24T02:55:13.0940798Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:55:13.0940954Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:524:5] 2026-10-24T02:55:13.0941030Z 523 │ props.initialProjectRef, 2026-10-24T02:55:13.0941102Z 524 │ props.incomingShareId, 2026-10-24T02:55:13.0941191Z ·  ──────────┬────────── 2026-10-24T02:55:13.0941357Z · ╰── Unnecessary dependency `props.incomingShareId` 2026-10-24T02:55:13.0941431Z 525 │ props.pendingTaskId, 2026-10-24T02:55:13.0941487Z ╰──── 2026-10-24T02:55:13.0941778Z  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-24T02:55:13.0942083Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.0942086Z 2026-10-24T02:55:13.0942294Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T02:55:13.0942446Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:543:5] 2026-10-24T02:55:13.0942564Z 542 │ loadedBranchesProjectKeyRef.current = projectKey; 2026-10-24T02:55:13.0942633Z 543 │ flow.loadBranches(); 2026-10-24T02:55:13.0942705Z ·  ──┬─ 2026-10-24T02:55:13.0942832Z · ╰── Missing dependency `flow` 2026-10-24T02:55:13.0942926Z 544 │ }, [flow.loadBranches, selectedProject]); 2026-10-24T02:55:13.0943012Z ·  ────────┬──────── 2026-10-24T02:55:13.0943207Z · ╰── Overly precise dependency `flow.loadBranches`, use `flow` instead 2026-10-24T02:55:13.0943260Z 545 │ 2026-10-24T02:55:13.0943311Z ╰──── 2026-10-24T02:55:13.0943725Z  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-24T02:55:13.0944077Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.0944105Z 2026-10-24T02:55:13.0944340Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:55:13.0944492Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:766:5] 2026-10-24T02:55:13.0944558Z 765 │ flow.draftKey, 2026-10-24T02:55:13.0944636Z 766 │ hasImportedIncomingShare, 2026-10-24T02:55:13.0944725Z ·  ────────────┬─────────── 2026-10-24T02:55:13.0944896Z · ╰── Unnecessary dependency `hasImportedIncomingShare` 2026-10-24T02:55:13.0944961Z 767 │ incomingShare, 2026-10-24T02:55:13.0945043Z 768 │ isIncomingShareInboxLoading, 2026-10-24T02:55:13.0945134Z ·  ─────────────┬───────────── 2026-10-24T02:55:13.0945321Z · ╰── Unnecessary dependency `isIncomingShareInboxLoading` 2026-10-24T02:55:13.0945403Z 769 │ isIncomingShareUnavailable, 2026-10-24T02:55:13.0945474Z 770 │ props.incomingShareId, 2026-10-24T02:55:13.0945565Z 771 │ props.initialProjectRef?.environmentId, 2026-10-24T02:55:13.0945652Z 772 │ props.initialProjectRef?.projectId, 2026-10-24T02:55:13.0945725Z 773 │ releaseShareReservation, 2026-10-24T02:55:13.0945786Z 774 │ reserveShare, 2026-10-24T02:55:13.0945868Z 775 │ selectedEnvironmentServerConfig, 2026-10-24T02:55:13.0945935Z 776 │ selectedProject, 2026-10-24T02:55:13.0946004Z 777 │ shareImportAttempt, 2026-10-24T02:55:13.0946089Z ·  ─────────┬──────── 2026-10-24T02:55:13.0946246Z · ╰── Unnecessary dependency `shareImportAttempt` 2026-10-24T02:55:13.0946300Z 778 │ ]); 2026-10-24T02:55:13.0946355Z ╰──── 2026-10-24T02:55:13.0946642Z  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-24T02:55:13.0946943Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.0946945Z 2026-10-24T02:55:13.0947175Z ⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence. 2026-10-24T02:55:13.0947336Z ╭─[apps/web/src/components/pullRequest/pullRequestList.logic.ts:265:9] 2026-10-24T02:55:13.0947396Z 264 │ ): boolean { 2026-10-24T02:55:13.0947542Z 265 │ const labels = entry.labels.map((label) => label.name.trim().toLowerCase()); 2026-10-24T02:55:13.0947709Z ·  ───────────────────────────────────────────────────────────────────── 2026-10-24T02:55:13.0947852Z 266 │ const holds = (label: string) => labels.includes(label.trim().toLowerCase()); 2026-10-24T02:55:13.0947904Z ╰──── 2026-10-24T02:55:13.0947979Z  help: Switch to `Set` 2026-10-24T02:55:13.0947984Z 2026-10-24T02:55:13.0948156Z ⚠ unicorn(no-new-array): Do not use `new Array(singleArgument)`. 2026-10-24T02:55:13.0948287Z ╭─[apps/web/src/terminal/ghostty/core.ts:194:19] 2026-10-24T02:55:13.0948410Z 193 │ const count = Math.min(CHUNK_SIZE, graphemeLength - start); 2026-10-24T02:55:13.0948500Z 194 │ const codes = new Array(count); 2026-10-24T02:55:13.0948607Z ·  ──────────────────────── 2026-10-24T02:55:13.0948708Z 195 │ for (let index = 0; index < count; index += 1) { 2026-10-24T02:55:13.0948845Z ╰──── 2026-10-24T02:55:13.0949335Z  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-24T02:55:13.0949338Z 2026-10-24T02:55:13.0949539Z ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed 2026-10-24T02:55:13.0949705Z ╭─[apps/server/src/sourceControl/SourceControlProviderRegistry.ts:15:13] 2026-10-24T02:55:13.0949777Z 14 │ } from "@t3tools/contracts"; 2026-10-24T02:55:13.0949867Z 15 │ import type {} from "@t3tools/contracts"; 2026-10-24T02:55:13.0949935Z ·  ── 2026-10-24T02:55:13.0950111Z 16 │ import { detectSourceControlProviderFromRemoteUrl } from "@t3tools/shared/sourceControl"; 2026-10-24T02:55:13.0950168Z ╰──── 2026-10-24T02:55:13.0950251Z  help: Remove empty braces 2026-10-24T02:55:13.0950253Z 2026-10-24T02:55:13.0950580Z ⚠ 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-24T02:55:13.0950723Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:50:18] 2026-10-24T02:55:13.0950880Z 49 │ for (const tool of ["sendMessage", "followupTask", "interruptAgent", "listAgents"]) { 2026-10-24T02:55:13.0951044Z 50 │ assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true); 2026-10-24T02:55:13.0951127Z ·  ───────── 2026-10-24T02:55:13.0951299Z 51 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true); 2026-10-24T02:55:13.0951350Z ╰──── 2026-10-24T02:55:13.0951358Z 2026-10-24T02:55:13.0951764Z ⚠ 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-24T02:55:13.0951903Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:51:18] 2026-10-24T02:55:13.0952064Z 50 │ assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true); 2026-10-24T02:55:13.0952238Z 51 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true); 2026-10-24T02:55:13.0952319Z ·  ───────── 2026-10-24T02:55:13.0952375Z 52 │ } 2026-10-24T02:55:13.0952426Z ╰──── 2026-10-24T02:55:13.0952428Z 2026-10-24T02:55:13.0952753Z ⚠ 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-24T02:55:13.0952891Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:55:5] 2026-10-24T02:55:13.0952955Z 54 │ assert.equal( 2026-10-24T02:55:13.0953120Z 55 │ Schema.is(CodexSchema.ServerNotification__CollabAgentToolCallStatus)("interrupted"), 2026-10-24T02:55:13.0953191Z ·  ───────── 2026-10-24T02:55:13.0953247Z 56 │ true, 2026-10-24T02:55:13.0953297Z ╰──── 2026-10-24T02:55:13.0953300Z 2026-10-24T02:55:13.0953615Z ⚠ 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-24T02:55:13.0953754Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:59:5] 2026-10-24T02:55:13.0953817Z 58 │ assert.equal( 2026-10-24T02:55:13.0954062Z 59 │ Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentToolCallStatus)("interrupted"), 2026-10-24T02:55:13.0954210Z ·  ───────── 2026-10-24T02:55:13.0954264Z 60 │ true, 2026-10-24T02:55:13.0954315Z ╰──── 2026-10-24T02:55:13.0954317Z 2026-10-24T02:55:13.0954636Z ⚠ 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-24T02:55:13.0954780Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:103:16] 2026-10-24T02:55:13.0954833Z 102 │ 2026-10-24T02:55:13.0954997Z 103 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse)(resumeResponse), true); 2026-10-24T02:55:13.0955080Z ·  ───────── 2026-10-24T02:55:13.0955133Z 104 │ }); 2026-10-24T02:55:13.0955183Z ╰──── 2026-10-24T02:55:13.0955185Z 2026-10-24T02:55:13.0955399Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T02:55:13.0955569Z ╭─[apps/mobile/src/features/threads/NewTaskContextPickerScreens.tsx:249:7] 2026-10-24T02:55:13.0955650Z 248 │ mountedRef.current = false; 2026-10-24T02:55:13.0955723Z 249 │ flow.setBranchQuery(""); 2026-10-24T02:55:13.0955791Z ·  ──┬─ 2026-10-24T02:55:13.0955919Z · ╰── Missing dependency `flow` 2026-10-24T02:55:13.0955976Z 250 │ }; 2026-10-24T02:55:13.0956046Z 251 │ }, [flow.setBranchQuery]); 2026-10-24T02:55:13.0956133Z ·  ─────────┬───────── 2026-10-24T02:55:13.0956336Z · ╰── Overly precise dependency `flow.setBranchQuery`, use `flow` instead 2026-10-24T02:55:13.0956390Z 252 │ 2026-10-24T02:55:13.0956445Z ╰──── 2026-10-24T02:55:13.0956863Z  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-24T02:55:13.0957169Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.0957171Z 2026-10-24T02:55:13.0957629Z ⚠ 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-24T02:55:13.0957775Z ╭─[apps/server/src/background/HostPowerMonitor.test.ts:133:11] 2026-10-24T02:55:13.0957907Z 132 │ const monitor = yield* HostPowerMonitor.HostPowerMonitor; 2026-10-24T02:55:13.0958051Z 133 │ ╭─▶ for ( 2026-10-24T02:55:13.0958155Z 134 │ │ let attempt = 0; 2026-10-24T02:55:13.0958322Z 135 │ │ attempt < 100 && (yield* monitor.snapshot).onBattery !== "true"; 2026-10-24T02:55:13.0958419Z 136 │ │ attempt += 1 2026-10-24T02:55:13.0958500Z 137 │ │ ) { 2026-10-24T02:55:13.0958613Z 138 │ │ yield* Effect.yieldNow; 2026-10-24T02:55:13.0958787Z 139 │ ╰─▶ } 2026-10-24T02:55:13.0958908Z 140 │ expect((yield* monitor.snapshot).onBattery).toBe("true"); 2026-10-24T02:55:13.0959012Z ╰──── 2026-10-24T02:55:13.0959050Z 2026-10-24T02:55:13.0959345Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:55:13.0959493Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:400:5] 2026-10-24T02:55:13.0959544Z 398 │ 2026-10-24T02:55:13.0959611Z 399 │ useEffect(() => { 2026-10-24T02:55:13.0959685Z ·  ────┬──── 2026-10-24T02:55:13.0959813Z · ╰── This is the containing effect 2026-10-24T02:55:13.0959902Z 400 │ setInspectorSelection((current) => { 2026-10-24T02:55:13.0959987Z ·  ──────────┬────────── 2026-10-24T02:55:13.0960157Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:55:13.0960263Z 401 │ if (props.renderInspector === undefined) { 2026-10-24T02:55:13.0960315Z ╰──── 2026-10-24T02:55:13.0960902Z  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-24T02:55:13.0961217Z  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-24T02:55:13.0961220Z 2026-10-24T02:55:13.0961430Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T02:55:13.0961581Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:528:24] 2026-10-24T02:55:13.0961741Z 527 │ const inspectorHeaderInset = Platform.OS === "ios" ? 0 : safeAreaInsets.top; 2026-10-24T02:55:13.0961907Z 528 │ ╭─▶ const GitInspector = () => ( 2026-10-24T02:55:13.0962003Z 529 │ │ 2026-10-24T02:55:13.0962603Z 534 │ ╰─▶ ); 2026-10-24T02:55:13.0962681Z 535 │ const FilesInspector = () => 2026-10-24T02:55:13.0962730Z ╰──── 2026-10-24T02:55:13.0962950Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-24T02:55:13.0962956Z 2026-10-24T02:55:13.0963164Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T02:55:13.0963313Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:535:26] 2026-10-24T02:55:13.0963369Z 534 │ ); 2026-10-24T02:55:13.0963531Z 535 │ ╭─▶ const FilesInspector = () => 2026-10-24T02:55:13.0963678Z 536 │ │ selectedThread !== null && selectedThreadCwd !== null ? ( 2026-10-24T02:55:13.0963785Z 537 │ │ 2026-10-24T02:55:13.0964861Z 545 │ ╰─▶ ) : null; 2026-10-24T02:55:13.0965010Z 546 │ const RouteInspector = () => props.renderInspector?.(inspectorHeaderInset); 2026-10-24T02:55:13.0965063Z ╰──── 2026-10-24T02:55:13.0965281Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-24T02:55:13.0965286Z 2026-10-24T02:55:13.0965537Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:55:13.0965711Z ╭─[apps/mobile/src/features/threads/thread-inspector-content-stack.tsx:60:5] 2026-10-24T02:55:13.0965762Z 58 │ 2026-10-24T02:55:13.0965829Z 59 │ useEffect(() => { 2026-10-24T02:55:13.0965900Z ·  ────┬──── 2026-10-24T02:55:13.0966025Z · ╰── This is the containing effect 2026-10-24T02:55:13.0966107Z 60 │ setMountedModes((current) => { 2026-10-24T02:55:13.0966186Z ·  ───────┬─────── 2026-10-24T02:55:13.0966360Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:55:13.0966443Z 61 │ if (current.has(props.mode)) { 2026-10-24T02:55:13.0966494Z ╰──── 2026-10-24T02:55:13.0967077Z  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-24T02:55:13.0967391Z  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-24T02:55:13.0967394Z 2026-10-24T02:55:13.0967631Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T02:55:13.0967826Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:290:50] 2026-10-24T02:55:13.0967944Z 289 │ return ( 2026-10-24T02:55:13.0968079Z 290 │ 2026-10-24T02:55:13.0968199Z ·  ───────────── 2026-10-24T02:55:13.0968265Z 291 │ {props.children} 2026-10-24T02:55:13.0968316Z ╰──── 2026-10-24T02:55:13.0968536Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T02:55:13.0968676Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T02:55:13.0968679Z 2026-10-24T02:55:13.0968954Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T02:55:13.0969110Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:654:44] 2026-10-24T02:55:13.0969173Z 653 │ return ( 2026-10-24T02:55:13.0969290Z 654 │ 2026-10-24T02:55:13.0969403Z ·  ───────────── 2026-10-24T02:55:13.0969468Z 655 │ {props.children} 2026-10-24T02:55:13.0969519Z ╰──── 2026-10-24T02:55:13.0969736Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T02:55:13.0969873Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T02:55:13.0969875Z 2026-10-24T02:55:13.0970105Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T02:55:13.0970265Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:1462:55] 2026-10-24T02:55:13.0970328Z 1461 │ return ( 2026-10-24T02:55:13.0970486Z 1462 │ 2026-10-24T02:55:13.0970613Z ·  ──────────────────── 2026-10-24T02:55:13.0970710Z 1463 │ { 2026-10-24T02:55:13.0975048Z ·  ────┬──── 2026-10-24T02:55:13.0975177Z · ╰── This is the containing effect 2026-10-24T02:55:13.0975235Z 436 │ if ( 2026-10-24T02:55:13.0975312Z 437 │ props.active === false || 2026-10-24T02:55:13.0975388Z 438 │ activeDraftKey !== null || 2026-10-24T02:55:13.0975469Z 439 │ editingPendingTask !== null || 2026-10-24T02:55:13.0975543Z 440 │ selectedProject === null 2026-10-24T02:55:13.0975604Z 441 │ ) { 2026-10-24T02:55:13.0975664Z 442 │ return; 2026-10-24T02:55:13.0975716Z 443 │ } 2026-10-24T02:55:13.0975785Z 444 │ setActiveDraftKey( 2026-10-24T02:55:13.0975866Z ·  ────────┬──────── 2026-10-24T02:55:13.0976035Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:55:13.0976110Z 445 │ createNewTaskDraft({ 2026-10-24T02:55:13.0976165Z ╰──── 2026-10-24T02:55:13.0976748Z  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-24T02:55:13.0977067Z  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-24T02:55:13.0977070Z 2026-10-24T02:55:13.0977304Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T02:55:13.0977464Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:1244:36] 2026-10-24T02:55:13.0977616Z 1243 │ 2026-10-24T02:55:13.0977881Z 1244 │ {props.children} 2026-10-24T02:55:13.0977996Z ·  ───────────── 2026-10-24T02:55:13.0978068Z 1245 │ 2026-10-24T02:55:13.0978122Z ╰──── 2026-10-24T02:55:13.0978344Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T02:55:13.0978480Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T02:55:13.0978483Z 2026-10-24T02:55:13.0978761Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:55:13.0978956Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:119:10] 2026-10-24T02:55:13.0979013Z 117 │ 2026-10-24T02:55:13.0979078Z 118 │ useEffect(() => { 2026-10-24T02:55:13.0979147Z ·  ────┬──── 2026-10-24T02:55:13.0979277Z · ╰── This is the containing effect 2026-10-24T02:55:13.0979356Z 119 │ void refreshNotifications(); 2026-10-24T02:55:13.0979446Z ·  ──────────┬───────── 2026-10-24T02:55:13.0979618Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:55:13.0979761Z 120 │ const subscription = AppState.addEventListener("change", (state) => { 2026-10-24T02:55:13.0979812Z ╰──── 2026-10-24T02:55:13.0980401Z  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-24T02:55:13.0980720Z  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-24T02:55:13.0980723Z 2026-10-24T02:55:13.0980971Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:55:13.0981152Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:128:7] 2026-10-24T02:55:13.0981205Z 125 │ 2026-10-24T02:55:13.0981271Z 126 │ useEffect(() => { 2026-10-24T02:55:13.0981340Z ·  ────┬──── 2026-10-24T02:55:13.0981472Z · ╰── This is the containing effect 2026-10-24T02:55:13.0981539Z 127 │ if (!isLoaded) { 2026-10-24T02:55:13.0981629Z 128 │ setLiveActivityStatus("checking"); 2026-10-24T02:55:13.0981715Z ·  ──────────┬────────── 2026-10-24T02:55:13.0981885Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:55:13.0981946Z 129 │ return; 2026-10-24T02:55:13.0981997Z ╰──── 2026-10-24T02:55:13.0982576Z  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-24T02:55:13.0983039Z  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-24T02:55:13.0983067Z 2026-10-24T02:55:13.0983364Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T02:55:13.0983495Z ╭─[packages/provider-pi/src/server/adapter.ts:3405:7] 2026-10-24T02:55:13.0983549Z 3404 │ 2026-10-24T02:55:13.0983739Z 3405 │ const layer: Layer.Layer = 2026-10-24T02:55:13.0983812Z ·  ──┬── 2026-10-24T02:55:13.0983938Z · ╰── 'layer' is declared here 2026-10-24T02:55:13.0984001Z 3406 │ Layer.effect( 2026-10-24T02:55:13.0984051Z ╰──── 2026-10-24T02:55:13.0984160Z  help: Consider removing this declaration. 2026-10-24T02:55:13.0984165Z 2026-10-24T02:55:13.0984416Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T02:55:13.0984582Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts:10578:7] 2026-10-24T02:55:13.0984634Z 10577 │ 2026-10-24T02:55:13.0984706Z 10578 │ const layer: Layer.Layer< 2026-10-24T02:55:13.0984777Z ·  ──┬── 2026-10-24T02:55:13.0984904Z · ╰── 'layer' is declared here 2026-10-24T02:55:13.0984995Z 10579 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T02:55:13.0985049Z ╰──── 2026-10-24T02:55:13.0985152Z  help: Consider removing this declaration. 2026-10-24T02:55:13.0985154Z 2026-10-24T02:55:13.0985381Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-24T02:55:13.0985552Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:1998:15] 2026-10-24T02:55:13.0985618Z 1997 │ assert.equal( 2026-10-24T02:55:13.0985771Z 1998 │ items.filter((item) => item.type === "assistant_message").at(-1)?.text, 2026-10-24T02:55:13.0985850Z ·  ────── 2026-10-24T02:55:13.0985925Z 1999 │ "authoritative answer", 2026-10-24T02:55:13.0985975Z ╰──── 2026-10-24T02:55:13.0986143Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T02:55:13.0986146Z 2026-10-24T02:55:13.0986615Z ⚠ 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-24T02:55:13.0986784Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:3951:7] 2026-10-24T02:55:13.0986963Z 3950 │ const closeFiber = yield* Scope.close(sessionScope, Exit.void).pipe(Effect.forkScoped); 2026-10-24T02:55:13.0987169Z 3951 │ ╭─▶ while (!responseLifecycle.includes("failed")) { 2026-10-24T02:55:13.0987280Z 3952 │ │ yield* Effect.yieldNow; 2026-10-24T02:55:13.0987412Z 3953 │ ╰─▶ } 2026-10-24T02:55:13.0987530Z 3954 │ const responseExit = yield* Fiber.join(responseFiber); 2026-10-24T02:55:13.0987583Z ╰──── 2026-10-24T02:55:13.0987585Z 2026-10-24T02:55:13.0988093Z ⚠ 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-24T02:55:13.0988327Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6062:9] 2026-10-24T02:55:13.0988415Z 6061 │ .pipe(Effect.forkScoped); 2026-10-24T02:55:13.0988596Z 6062 │ ╭─▶ while (promptGates.length < 1) { 2026-10-24T02:55:13.0988709Z 6063 │ │ yield* Effect.yieldNow; 2026-10-24T02:55:13.0988891Z 6064 │ ╰─▶ } 2026-10-24T02:55:13.0989060Z 6065 │ assert.isDefined(sessionUpdateHandler, "session update handler must be wired"); 2026-10-24T02:55:13.0989110Z ╰──── 2026-10-24T02:55:13.0989117Z 2026-10-24T02:55:13.0989572Z ⚠ 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-24T02:55:13.0989738Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6197:9] 2026-10-24T02:55:13.0989825Z 6196 │ .pipe(Effect.forkScoped); 2026-10-24T02:55:13.0990004Z 6197 │ ╭─▶ while (promptGates.length < 2) { 2026-10-24T02:55:13.0990111Z 6198 │ │ yield* Effect.yieldNow; 2026-10-24T02:55:13.0990246Z 6199 │ ╰─▶ } 2026-10-24T02:55:13.0990414Z 6200 │ if (sessionUpdateHandler === undefined || capturedMutation.current === null) { 2026-10-24T02:55:13.0990468Z ╰──── 2026-10-24T02:55:13.0990471Z 2026-10-24T02:55:13.0990681Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T02:55:13.0990827Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:773:7] 2026-10-24T02:55:13.0990928Z 772 │ if (settingsSheetPresentation.isActive) { 2026-10-24T02:55:13.0991058Z 773 │ settingsRoutePresentation.present(settingsRouteSession); 2026-10-24T02:55:13.0991153Z ·  ────────────┬──────────── 2026-10-24T02:55:13.0991328Z · ╰── Missing dependency `settingsRoutePresentation` 2026-10-24T02:55:13.0991384Z 774 │ } 2026-10-24T02:55:13.0991689Z 775 │ }, [settingsRoutePresentation.present, settingsRouteSession, settingsSheetPresentation.isActive]); 2026-10-24T02:55:13.0991891Z ·  ────────────────┬──────────────── 2026-10-24T02:55:13.0992172Z · ╰── Overly precise dependency `settingsRoutePresentation.present`, use `settingsRoutePresentation` instead 2026-10-24T02:55:13.0992225Z 776 │ 2026-10-24T02:55:13.0992277Z ╰──── 2026-10-24T02:55:13.0992692Z  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-24T02:55:13.0993002Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.0993005Z 2026-10-24T02:55:13.0993164Z ⚠ react(immutability): This value cannot be modified 2026-10-24T02:55:13.0993308Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:391:5] 2026-10-24T02:55:13.0993465Z 387 │ typeof props.style.borderRadius === "number" ? props.style.borderRadius : 0; 2026-10-24T02:55:13.0993600Z 388 │ const animatedBorderRadius = useSharedValue(targetBorderRadius); 2026-10-24T02:55:13.0993691Z ·  ──────────┬───────── 2026-10-24T02:55:13.0993845Z · ╰── `animatedBorderRadius` originates here 2026-10-24T02:55:13.0993999Z 389 │ const shouldAnimate = props.animateLayout !== false && Platform.OS !== "android"; 2026-10-24T02:55:13.0994068Z 390 │ useLayoutEffect(() => { 2026-10-24T02:55:13.0994168Z 391 │ animatedBorderRadius.value = shouldAnimate 2026-10-24T02:55:13.0994255Z ·  ──────────┬───────── 2026-10-24T02:55:13.0994417Z · ╰── `animatedBorderRadius` cannot be modified 2026-10-24T02:55:13.0994506Z 392 │ ? withTiming(targetBorderRadius, { 2026-10-24T02:55:13.0994559Z ╰──── 2026-10-24T02:55:13.0994821Z  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-24T02:55:13.0995122Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:55:13.0995125Z 2026-10-24T02:55:13.0995375Z ⚠ eslint(no-unused-vars): Function 'layerClaudeAgentSdkReplayQueryRunner' is declared but never used. 2026-10-24T02:55:13.0995549Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.testkit.ts:960:10] 2026-10-24T02:55:13.0995607Z 959 │ 2026-10-24T02:55:13.0995718Z 960 │ function layerClaudeAgentSdkReplayQueryRunner( 2026-10-24T02:55:13.0995833Z ·  ──────────────────┬───────────────── 2026-10-24T02:55:13.0996026Z · ╰── 'layerClaudeAgentSdkReplayQueryRunner' is declared here 2026-10-24T02:55:13.0996128Z 961 │ transcript: ClaudeAgentSdkReplayTranscript, 2026-10-24T02:55:13.0996179Z ╰──── 2026-10-24T02:55:13.0996284Z  help: Consider removing this declaration. 2026-10-24T02:55:13.0996287Z 2026-10-24T02:55:13.0996480Z ⚠ eslint(no-unsafe-optional-chaining): Unsafe usage of optional chaining 2026-10-24T02:55:13.0996645Z ╭─[apps/server/src/orchestration-v2/ThreadLaunchService.test.ts:1783:8] 2026-10-24T02:55:13.0996711Z 1782 │ assert.equal( 2026-10-24T02:55:13.0996916Z 1783 │ (stored.context?.records[0] as { attachmentId: string }).attachmentId, 2026-10-24T02:55:13.0997080Z ·  ────────────────────────── 2026-10-24T02:55:13.0997163Z 1784 │ stored.attachments[0]?.id, 2026-10-24T02:55:13.0997216Z ╰──── 2026-10-24T02:55:13.0997383Z  help: If this short-circuits with 'undefined' the evaluation will throw TypeError 2026-10-24T02:55:13.0997386Z 2026-10-24T02:55:13.0997841Z ⚠ 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-24T02:55:13.0998020Z ╭─[apps/server/src/scheduledTasks/ScheduledTaskService.webhook.test.ts:521:13] 2026-10-24T02:55:13.0998093Z 520 │ })).delivery; 2026-10-24T02:55:13.0998293Z 521 │ ╭─▶ while (delivery.outcome === "accepted") { 2026-10-24T02:55:13.0998413Z 522 │ │ yield* Effect.yieldNow; 2026-10-24T02:55:13.0998554Z 523 │ │ delivery = (yield* service.getWebhookDelivery({ 2026-10-24T02:55:13.0998654Z 524 │ │ id: task.id, 2026-10-24T02:55:13.0998800Z 525 │ │ deliveryId: deliveryId!, 2026-10-24T02:55:13.0998911Z 526 │ │ })).delivery; 2026-10-24T02:55:13.0999046Z 527 │ ╰─▶ } 2026-10-24T02:55:13.0999162Z 528 │ assert.equal(delivery.outcome, "dispatch_failed"); 2026-10-24T02:55:13.0999216Z ╰──── 2026-10-24T02:55:13.0999219Z 2026-10-24T02:55:13.0999367Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:55:13.0999533Z ╭─[apps/mobile/src/features/voice-input/useVoiceInputController.ts:27:14] 2026-10-24T02:55:13.0999617Z 26 │ const latestInput = useRef(input); 2026-10-24T02:55:13.0999691Z 27 │ latestInput.current = input; 2026-10-24T02:55:13.0999802Z ·  ─────┬─────────┬─── 2026-10-24T02:55:13.0999980Z · │ ╰── Cannot update ref value during render 2026-10-24T02:55:13.1000096Z · ╰── This value is a ref 2026-10-24T02:55:13.1000171Z 28 │ const mounted = useRef(true); 2026-10-24T02:55:13.1000223Z ╰──── 2026-10-24T02:55:13.1000692Z  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-24T02:55:13.1000981Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:55:13.1000984Z 2026-10-24T02:55:13.1001189Z ⚠ eslint(no-unused-vars): Function 'describeSchedule' is declared but never used. 2026-10-24T02:55:13.1001313Z ╭─[apps/server/src/scheduledTasks/Schedule.ts:79:10] 2026-10-24T02:55:13.1001367Z 78 │ 2026-10-24T02:55:13.1001500Z 79 │ function describeSchedule(schedule: ScheduledTaskSchedule): string { 2026-10-24T02:55:13.1001588Z ·  ────────┬─────── 2026-10-24T02:55:13.1001789Z · ╰── 'describeSchedule' is declared here 2026-10-24T02:55:13.1001967Z 80 │ if (schedule.type === "webhook") return "On webhook"; 2026-10-24T02:55:13.1002017Z ╰──── 2026-10-24T02:55:13.1002122Z  help: Consider removing this declaration. 2026-10-24T02:55:13.1002125Z 2026-10-24T02:55:13.1002280Z ⚠ react(immutability): This value cannot be modified 2026-10-24T02:55:13.1002444Z ╭─[apps/mobile/src/features/voice-input/GlobalVoiceInputControl.tsx:68:5] 2026-10-24T02:55:13.1002544Z 65 │ const [expanded, setExpanded] = useState(false); 2026-10-24T02:55:13.1002629Z 66 │ const progress = useSharedValue(0); 2026-10-24T02:55:13.1002705Z ·  ────┬─── 2026-10-24T02:55:13.1002835Z · ╰── `progress` originates here 2026-10-24T02:55:13.1002899Z 67 │ useEffect(() => { 2026-10-24T02:55:13.1003031Z 68 │ progress.value = withTiming(expanded ? 1 : 0, MORPH_TIMING); 2026-10-24T02:55:13.1003105Z ·  ────┬─── 2026-10-24T02:55:13.1003236Z · ╰── `progress` cannot be modified 2026-10-24T02:55:13.1003303Z 69 │ }, [expanded, progress]); 2026-10-24T02:55:13.1003357Z ╰──── 2026-10-24T02:55:13.1003619Z  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-24T02:55:13.1003919Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:55:13.1003922Z 2026-10-24T02:55:13.1004076Z ⚠ react(immutability): This value cannot be modified 2026-10-24T02:55:13.1004244Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:93:5] 2026-10-24T02:55:13.1004303Z 90 │ }) { 2026-10-24T02:55:13.1004416Z 91 │ const rotation = useSharedValue(props.hidden ? 1 : 0); 2026-10-24T02:55:13.1004488Z ·  ────┬─── 2026-10-24T02:55:13.1004615Z · ╰── `rotation` originates here 2026-10-24T02:55:13.1004686Z 92 │ useLayoutEffect(() => { 2026-10-24T02:55:13.1004826Z 93 │ rotation.value = withTiming(props.hidden ? 1 : 0, TOOLBAR_FLIP_TIMING); 2026-10-24T02:55:13.1004897Z ·  ────┬─── 2026-10-24T02:55:13.1005024Z · ╰── `rotation` cannot be modified 2026-10-24T02:55:13.1005099Z 94 │ }, [props.hidden, rotation]); 2026-10-24T02:55:13.1005150Z ╰──── 2026-10-24T02:55:13.1005414Z  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-24T02:55:13.1005714Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:55:13.1005716Z 2026-10-24T02:55:13.1005868Z ⚠ react(immutability): This value cannot be modified 2026-10-24T02:55:13.1006034Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:269:5] 2026-10-24T02:55:13.1006129Z 266 │ const variant = props.variant ?? "plain"; 2026-10-24T02:55:13.1006258Z 267 │ const loadingVisibility = useSharedValue(props.loading ? 1 : 0); 2026-10-24T02:55:13.1006345Z ·  ────────┬──────── 2026-10-24T02:55:13.1006489Z · ╰── `loadingVisibility` originates here 2026-10-24T02:55:13.1006609Z 268 │ useLayoutEffect(() => { 2026-10-24T02:55:13.1006835Z 269 │ loadingVisibility.value = withTiming(props.loading ? 1 : 0, DICTATION_TIMING); 2026-10-24T02:55:13.1006918Z ·  ────────┬──────── 2026-10-24T02:55:13.1007063Z · ╰── `loadingVisibility` cannot be modified 2026-10-24T02:55:13.1007153Z 270 │ }, [loadingVisibility, props.loading]); 2026-10-24T02:55:13.1007201Z ╰──── 2026-10-24T02:55:13.1007457Z  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-24T02:55:13.1007755Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:55:13.1007757Z 2026-10-24T02:55:13.1007915Z ⚠ react(immutability): This value cannot be modified 2026-10-24T02:55:13.1008082Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:328:5] 2026-10-24T02:55:13.1008135Z 325 │ }) { 2026-10-24T02:55:13.1008293Z 326 │ const recordingVisibility = useSharedValue(props.phase === "recording" ? 1 : 0); 2026-10-24T02:55:13.1008381Z ·  ─────────┬───────── 2026-10-24T02:55:13.1008529Z · ╰── `recordingVisibility` originates here 2026-10-24T02:55:13.1008596Z 327 │ useLayoutEffect(() => { 2026-10-24T02:55:13.1008799Z 328 │ recordingVisibility.value = withTiming(props.phase === "recording" ? 1 : 0, DICTATION_TIMING); 2026-10-24T02:55:13.1008911Z ·  ─────────┬───────── 2026-10-24T02:55:13.1009062Z · ╰── `recordingVisibility` cannot be modified 2026-10-24T02:55:13.1009156Z 329 │ }, [props.phase, recordingVisibility]); 2026-10-24T02:55:13.1009209Z ╰──── 2026-10-24T02:55:13.1009468Z  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-24T02:55:13.1009767Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:55:13.1009769Z 2026-10-24T02:55:13.1010042Z ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'. 2026-10-24T02:55:13.1010173Z ╭─[apps/server/src/provider/AntigravityAuth.ts:285:20] 2026-10-24T02:55:13.1010231Z 284 │ }, 2026-10-24T02:55:13.1010312Z 285 │ (effect, flow, stopSessions) => 2026-10-24T02:55:13.1010447Z ·  ──────┬───── 2026-10-24T02:55:13.1010656Z · ╰── 'stopSessions' is declared here 2026-10-24T02:55:13.1010722Z 286 │ effect.pipe( 2026-10-24T02:55:13.1010774Z ╰──── 2026-10-24T02:55:13.1010875Z  help: Consider removing this parameter. 2026-10-24T02:55:13.1010880Z 2026-10-24T02:55:13.1011020Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:55:13.1011178Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:122:38] 2026-10-24T02:55:13.1011334Z 121 │ const audioLevelsRef = useRef(Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-24T02:55:13.1011457Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-24T02:55:13.1011576Z ·  ───────────┬────────── 2026-10-24T02:55:13.1011753Z · ╰── Cannot access ref value during render 2026-10-24T02:55:13.1011873Z 123 │ const sessionRef = useRef(null); 2026-10-24T02:55:13.1011924Z ╰──── 2026-10-24T02:55:13.1012381Z  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-24T02:55:13.1012666Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:55:13.1012668Z 2026-10-24T02:55:13.1012809Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:55:13.1012971Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:8] 2026-10-24T02:55:13.1013025Z 125 │ 2026-10-24T02:55:13.1013131Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T02:55:13.1013218Z ·  ─────────┬──────── 2026-10-24T02:55:13.1013365Z · ╰── Cannot access ref value during render 2026-10-24T02:55:13.1013466Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T02:55:13.1013515Z ╰──── 2026-10-24T02:55:13.1013971Z  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-24T02:55:13.1014261Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:55:13.1014266Z 2026-10-24T02:55:13.1014405Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:55:13.1014557Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:7] 2026-10-24T02:55:13.1014611Z 125 │ 2026-10-24T02:55:13.1014717Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T02:55:13.1014803Z ·  ─────────┬───────── 2026-10-24T02:55:13.1014946Z · ╰── Cannot access ref value during render 2026-10-24T02:55:13.1015045Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T02:55:13.1015096Z ╰──── 2026-10-24T02:55:13.1015591Z  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-24T02:55:13.1015942Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:55:13.1015945Z 2026-10-24T02:55:13.1016082Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:55:13.1016238Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:31] 2026-10-24T02:55:13.1016293Z 125 │ 2026-10-24T02:55:13.1016398Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T02:55:13.1016510Z ·  ─────────┬───────── 2026-10-24T02:55:13.1016678Z · ╰── Cannot access ref value during render 2026-10-24T02:55:13.1016779Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T02:55:13.1016830Z ╰──── 2026-10-24T02:55:13.1017277Z  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-24T02:55:13.1017557Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:55:13.1017560Z 2026-10-24T02:55:13.1017699Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:55:13.1017852Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:30] 2026-10-24T02:55:13.1017906Z 125 │ 2026-10-24T02:55:13.1018015Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T02:55:13.1018129Z ·  ──────────┬───────── 2026-10-24T02:55:13.1018292Z · ╰── Cannot access ref value during render 2026-10-24T02:55:13.1018391Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T02:55:13.1018438Z ╰──── 2026-10-24T02:55:13.1018930Z  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-24T02:55:13.1019210Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:55:13.1019217Z 2026-10-24T02:55:13.1019363Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:55:13.1019517Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:127:46] 2026-10-24T02:55:13.1019628Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T02:55:13.1019820Z 127 │ ╭─▶ const recorder = createLazyVoiceRecorder({ 2026-10-24T02:55:13.1019990Z 128 │ │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-24T02:55:13.1020115Z 129 │ │ onStatus: (status: RecordingStatus) => { 2026-10-24T02:55:13.1020265Z 130 │ │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-24T02:55:13.1020429Z 131 │ │ isFinished: status.isFinished, 2026-10-24T02:55:13.1020667Z 132 │ │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-24T02:55:13.1020770Z 133 │ │ error: status.error, 2026-10-24T02:55:13.1020866Z 134 │ │ url: status.url, 2026-10-24T02:55:13.1020947Z 135 │ │ }); 2026-10-24T02:55:13.1021023Z 136 │ │ }, 2026-10-24T02:55:13.1021216Z 137 │ │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-24T02:55:13.1021320Z 138 │ │ selectInput: (inputs) => { 2026-10-24T02:55:13.1021471Z 139 │ │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-24T02:55:13.1021620Z 140 │ │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-24T02:55:13.1021785Z 141 │ │ const known = microphoneOrder(preferences.value.microphones); 2026-10-24T02:55:13.1021921Z 142 │ │ const order = rememberMicrophones(known, inputs); 2026-10-24T02:55:13.1022021Z 143 │ │ if (order !== known) { 2026-10-24T02:55:13.1022159Z 144 │ │ registry.set(updateMobilePreferencesAtom, { 2026-10-24T02:55:13.1022273Z 145 │ │ transform: (current) => ({ 2026-10-24T02:55:13.1022473Z 146 │ │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-24T02:55:13.1022555Z 147 │ │ }), 2026-10-24T02:55:13.1022634Z 148 │ │ }); 2026-10-24T02:55:13.1022718Z 149 │ │ } 2026-10-24T02:55:13.1022859Z 150 │ │ return preferredMicrophoneInput(inputs, order); 2026-10-24T02:55:13.1022933Z 151 │ │ }, 2026-10-24T02:55:13.1023065Z 152 │ ├─▶ }); 2026-10-24T02:55:13.1023298Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T02:55:13.1023382Z 153 │ recorderRef.current = recorder; 2026-10-24T02:55:13.1023432Z ╰──── 2026-10-24T02:55:13.1023886Z  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-24T02:55:13.1024177Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:55:13.1024182Z 2026-10-24T02:55:13.1024324Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:55:13.1024478Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:153:16] 2026-10-24T02:55:13.1024533Z 152 │ }); 2026-10-24T02:55:13.1024614Z 153 │ recorderRef.current = recorder; 2026-10-24T02:55:13.1024724Z ·  ─────┬─────────┬─── 2026-10-24T02:55:13.1024902Z · │ ╰── Cannot update ref value during render 2026-10-24T02:55:13.1025014Z · ╰── This value is a ref 2026-10-24T02:55:13.1025165Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T02:55:13.1025286Z ╰──── 2026-10-24T02:55:13.1025738Z  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-24T02:55:13.1026020Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:55:13.1026023Z 2026-10-24T02:55:13.1026161Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:55:13.1026317Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:48] 2026-10-24T02:55:13.1026401Z 153 │ recorderRef.current = recorder; 2026-10-24T02:55:13.1026596Z 154 │ ╭─▶ sessionRef.current = new VoiceInputSession({ 2026-10-24T02:55:13.1026680Z 155 │ │ recorder, 2026-10-24T02:55:13.1026807Z 156 │ │ getTranscriber: getLocalVoiceTranscriber, 2026-10-24T02:55:13.1026923Z 157 │ │ requestPermission: async () => { 2026-10-24T02:55:13.1027084Z 158 │ │ const permission = await requestRecordingPermissionsAsync(); 2026-10-24T02:55:13.1027269Z 159 │ │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-24T02:55:13.1027346Z 160 │ │ }, 2026-10-24T02:55:13.1027485Z 161 │ │ configureRecording: configureVoiceRecordingAudio, 2026-10-24T02:55:13.1027626Z 162 │ │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-24T02:55:13.1027758Z 163 │ │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-24T02:55:13.1027869Z 164 │ │ onStateChange: (nextState) => 2026-10-24T02:55:13.1027960Z 165 │ │ setState({ 2026-10-24T02:55:13.1028060Z 166 │ │ state: nextState, 2026-10-24T02:55:13.1028192Z 167 │ │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-24T02:55:13.1028319Z 168 │ │ label: sessionRef.current?.label ?? null, 2026-10-24T02:55:13.1028398Z 169 │ │ }), 2026-10-24T02:55:13.1028526Z 170 │ ├─▶ }); 2026-10-24T02:55:13.1028726Z · ╰──── Cannot access ref value during render 2026-10-24T02:55:13.1028801Z 171 │ } 2026-10-24T02:55:13.1028883Z ╰──── 2026-10-24T02:55:13.1029335Z  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-24T02:55:13.1029618Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:55:13.1029620Z 2026-10-24T02:55:13.1029759Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:55:13.1029913Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:15] 2026-10-24T02:55:13.1029995Z 153 │ recorderRef.current = recorder; 2026-10-24T02:55:13.1030144Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T02:55:13.1030316Z ·  ─────┬────────┬─── 2026-10-24T02:55:13.1030493Z · │ ╰── Cannot update ref value during render 2026-10-24T02:55:13.1030609Z · ╰── This value is a ref 2026-10-24T02:55:13.1030673Z 155 │ recorder, 2026-10-24T02:55:13.1030722Z ╰──── 2026-10-24T02:55:13.1031172Z  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-24T02:55:13.1031462Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:55:13.1031467Z 2026-10-24T02:55:13.1031607Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:55:13.1031880Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:7] 2026-10-24T02:55:13.1031965Z 184 │ return () => subscription.remove(); 2026-10-24T02:55:13.1032032Z 185 │ }, [controller]); 2026-10-24T02:55:13.1032109Z ·  ─────┬──── 2026-10-24T02:55:13.1032253Z · ╰── Cannot access ref value during render 2026-10-24T02:55:13.1032304Z 186 │ 2026-10-24T02:55:13.1032355Z ╰──── 2026-10-24T02:55:13.1032812Z  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-24T02:55:13.1033097Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:55:13.1033099Z 2026-10-24T02:55:13.1033237Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:55:13.1033390Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:6] 2026-10-24T02:55:13.1033475Z 184 │ return () => subscription.remove(); 2026-10-24T02:55:13.1033541Z 185 │ }, [controller]); 2026-10-24T02:55:13.1033615Z ·  ──────┬───── 2026-10-24T02:55:13.1033756Z · ╰── Cannot access ref value during render 2026-10-24T02:55:13.1033809Z 186 │ 2026-10-24T02:55:13.1033861Z ╰──── 2026-10-24T02:55:13.1034314Z  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-24T02:55:13.1034599Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:55:13.1034602Z 2026-10-24T02:55:13.1034743Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:55:13.1034896Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:6] 2026-10-24T02:55:13.1034953Z 191 │ }, 2026-10-24T02:55:13.1035024Z 192 │ [controller, recorder], 2026-10-24T02:55:13.1035098Z ·  ─────┬──── 2026-10-24T02:55:13.1035304Z · ╰── Cannot access ref value during render 2026-10-24T02:55:13.1035427Z 193 │ ); 2026-10-24T02:55:13.1035479Z ╰──── 2026-10-24T02:55:13.1035934Z  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-24T02:55:13.1036217Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:55:13.1036219Z 2026-10-24T02:55:13.1036360Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:55:13.1036513Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:175:20] 2026-10-24T02:55:13.1036605Z 174 │ const controller = session.controller; 2026-10-24T02:55:13.1036695Z 175 │ const recorder = recorderRef.current; 2026-10-24T02:55:13.1036798Z ·  ─────────┬───────── 2026-10-24T02:55:13.1036952Z · ╰── Cannot access ref value during render 2026-10-24T02:55:13.1037003Z 176 │ 2026-10-24T02:55:13.1037053Z ╰──── 2026-10-24T02:55:13.1037504Z  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-24T02:55:13.1037784Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:55:13.1037786Z 2026-10-24T02:55:13.1037930Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:55:13.1038085Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:5] 2026-10-24T02:55:13.1038145Z 191 │ }, 2026-10-24T02:55:13.1038216Z 192 │ [controller, recorder], 2026-10-24T02:55:13.1038301Z ·  ───────────┬────────── 2026-10-24T02:55:13.1038447Z · ╰── Cannot access ref value during render 2026-10-24T02:55:13.1038504Z 193 │ ); 2026-10-24T02:55:13.1038556Z ╰──── 2026-10-24T02:55:13.1039045Z  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-24T02:55:13.1039373Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:55:13.1039407Z 2026-10-24T02:55:13.1039581Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:55:13.1039736Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:20] 2026-10-24T02:55:13.1039828Z 245 │ return () => clearInterval(intervalId); 2026-10-24T02:55:13.1039936Z 246 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-24T02:55:13.1040025Z ·  ─────┬──── 2026-10-24T02:55:13.1040176Z · ╰── Cannot access ref value during render 2026-10-24T02:55:13.1040231Z 247 │ 2026-10-24T02:55:13.1040280Z ╰──── 2026-10-24T02:55:13.1040733Z  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-24T02:55:13.1041017Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:55:13.1041020Z 2026-10-24T02:55:13.1041160Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:55:13.1041313Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:6] 2026-10-24T02:55:13.1041401Z 245 │ return () => clearInterval(intervalId); 2026-10-24T02:55:13.1041509Z 246 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-24T02:55:13.1041641Z ·  ────────────────────────┬─────────────────────── 2026-10-24T02:55:13.1041802Z · ╰── Cannot access ref value during render 2026-10-24T02:55:13.1041853Z 247 │ 2026-10-24T02:55:13.1041903Z ╰──── 2026-10-24T02:55:13.1042353Z  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-24T02:55:13.1042634Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:55:13.1042636Z 2026-10-24T02:55:13.1042777Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:55:13.1042932Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:261:5] 2026-10-24T02:55:13.1043005Z 260 │ setOwnerFocused, 2026-10-24T02:55:13.1043068Z 261 │ session, 2026-10-24T02:55:13.1043141Z ·  ───┬─── 2026-10-24T02:55:13.1043276Z · ╰── Cannot access ref value during render 2026-10-24T02:55:13.1043336Z 262 │ stop, 2026-10-24T02:55:13.1043387Z ╰──── 2026-10-24T02:55:13.1043837Z  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-24T02:55:13.1044115Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:55:13.1044118Z 2026-10-24T02:55:13.1044312Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:55:13.1044534Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:251:10] 2026-10-24T02:55:13.1044589Z 250 │ 2026-10-24T02:55:13.1044727Z 251 │ ╭─▶ return { 2026-10-24T02:55:13.1044936Z 252 │ │ isAvailable: getLocalVoiceTranscriber() !== null || getNativeShowcaseScene() !== null, 2026-10-24T02:55:13.1045018Z 253 │ │ state, 2026-10-24T02:55:13.1045105Z 254 │ │ audioLevels, 2026-10-24T02:55:13.1045197Z 255 │ │ elapsedSeconds, 2026-10-24T02:55:13.1045325Z 256 │ │ isBusy: voiceInputBlocksSubmission(state), 2026-10-24T02:55:13.1045410Z 257 │ │ ownerKey, 2026-10-24T02:55:13.1045491Z 258 │ │ label, 2026-10-24T02:55:13.1045579Z 259 │ │ focusedOwners, 2026-10-24T02:55:13.1045671Z 260 │ │ setOwnerFocused, 2026-10-24T02:55:13.1045751Z 261 │ │ session, 2026-10-24T02:55:13.1045828Z 262 │ │ stop, 2026-10-24T02:55:13.1045905Z 263 │ │ cancel, 2026-10-24T02:55:13.1046034Z 264 │ ├─▶ }; 2026-10-24T02:55:13.1046230Z · ╰──── Cannot access ref value during render 2026-10-24T02:55:13.1046286Z 265 │ } 2026-10-24T02:55:13.1046335Z ╰──── 2026-10-24T02:55:13.1046794Z  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-24T02:55:13.1047077Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:55:13.1047080Z 2026-10-24T02:55:13.1047233Z ⚠ react(immutability): This value cannot be modified 2026-10-24T02:55:13.1047389Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7] 2026-10-24T02:55:13.1047545Z 121 │ const audioLevelsRef = useRef(Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-24T02:55:13.1047669Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-24T02:55:13.1047747Z ·  ─────┬───── 2026-10-24T02:55:13.1047886Z · ╰── `audioLevels` originates here 2026-10-24T02:55:13.1048004Z 123 │ const sessionRef = useRef(null); 2026-10-24T02:55:13.1048149Z 124 │ const recorderRef = useRef | null>(null); 2026-10-24T02:55:13.1048204Z 125 │ 2026-10-24T02:55:13.1048309Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T02:55:13.1048405Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T02:55:13.1048540Z 128 │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-24T02:55:13.1048633Z 129 │ onStatus: (status: RecordingStatus) => { 2026-10-24T02:55:13.1048785Z 130 │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-24T02:55:13.1048877Z 131 │ isFinished: status.isFinished, 2026-10-24T02:55:13.1049075Z 132 │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-24T02:55:13.1049213Z 133 │ error: status.error, 2026-10-24T02:55:13.1049283Z 134 │ url: status.url, 2026-10-24T02:55:13.1049340Z 135 │ }); 2026-10-24T02:55:13.1049399Z 136 │ }, 2026-10-24T02:55:13.1049562Z 137 │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-24T02:55:13.1049639Z 138 │ selectInput: (inputs) => { 2026-10-24T02:55:13.1049761Z 139 │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-24T02:55:13.1049872Z 140 │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-24T02:55:13.1050002Z 141 │ const known = microphoneOrder(preferences.value.microphones); 2026-10-24T02:55:13.1050107Z 142 │ const order = rememberMicrophones(known, inputs); 2026-10-24T02:55:13.1050184Z 143 │ if (order !== known) { 2026-10-24T02:55:13.1050291Z 144 │ registry.set(updateMobilePreferencesAtom, { 2026-10-24T02:55:13.1050375Z 145 │ transform: (current) => ({ 2026-10-24T02:55:13.1050544Z 146 │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-24T02:55:13.1050603Z 147 │ }), 2026-10-24T02:55:13.1050667Z 148 │ }); 2026-10-24T02:55:13.1050723Z 149 │ } 2026-10-24T02:55:13.1050832Z 150 │ return preferredMicrophoneInput(inputs, order); 2026-10-24T02:55:13.1050886Z 151 │ }, 2026-10-24T02:55:13.1050943Z 152 │ }); 2026-10-24T02:55:13.1051024Z 153 │ recorderRef.current = recorder; 2026-10-24T02:55:13.1051125Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T02:55:13.1051184Z 155 │ recorder, 2026-10-24T02:55:13.1051288Z 156 │ getTranscriber: getLocalVoiceTranscriber, 2026-10-24T02:55:13.1051374Z 157 │ requestPermission: async () => { 2026-10-24T02:55:13.1051499Z 158 │ const permission = await requestRecordingPermissionsAsync(); 2026-10-24T02:55:13.1051656Z 159 │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-24T02:55:13.1051713Z 160 │ }, 2026-10-24T02:55:13.1051822Z 161 │ configureRecording: configureVoiceRecordingAudio, 2026-10-24T02:55:13.1051925Z 162 │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-24T02:55:13.1052026Z 163 │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-24T02:55:13.1052105Z 164 │ onStateChange: (nextState) => 2026-10-24T02:55:13.1052170Z 165 │ setState({ 2026-10-24T02:55:13.1052239Z 166 │ state: nextState, 2026-10-24T02:55:13.1052344Z 167 │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-24T02:55:13.1052447Z 168 │ label: sessionRef.current?.label ?? null, 2026-10-24T02:55:13.1052507Z 169 │ }), 2026-10-24T02:55:13.1052562Z 170 │ }); 2026-10-24T02:55:13.1052615Z 171 │ } 2026-10-24T02:55:13.1052669Z 172 │ 2026-10-24T02:55:13.1052753Z 173 │ const session = sessionRef.current; 2026-10-24T02:55:13.1052839Z 174 │ const controller = session.controller; 2026-10-24T02:55:13.1052925Z 175 │ const recorder = recorderRef.current; 2026-10-24T02:55:13.1052979Z 176 │ 2026-10-24T02:55:13.1053044Z 177 │ useEffect(() => { 2026-10-24T02:55:13.1053189Z 178 │ const subscription = AppState.addEventListener("change", (nextState) => { 2026-10-24T02:55:13.1053332Z 179 │ // iOS reports `inactive` while its permission dialog is open. Only the 2026-10-24T02:55:13.1053468Z 180 │ // real background state cancels preparation; recorder status handles 2026-10-24T02:55:13.1053625Z 181 │ // calls and route interruptions during capture. 2026-10-24T02:55:13.1053824Z 182 │ if (nextState === "background") controller.appMovedToBackground(); 2026-10-24T02:55:13.1053879Z 183 │ }); 2026-10-24T02:55:13.1053964Z 184 │ return () => subscription.remove(); 2026-10-24T02:55:13.1054030Z 185 │ }, [controller]); 2026-10-24T02:55:13.1054080Z 186 │ 2026-10-24T02:55:13.1054140Z 187 │ useEffect( 2026-10-24T02:55:13.1054202Z 188 │ () => () => { 2026-10-24T02:55:13.1054272Z 189 │ controller.dispose(); 2026-10-24T02:55:13.1054341Z 190 │ recorder.release(); 2026-10-24T02:55:13.1054397Z 191 │ }, 2026-10-24T02:55:13.1054465Z 192 │ [controller, recorder], 2026-10-24T02:55:13.1054518Z 193 │ ); 2026-10-24T02:55:13.1054568Z 194 │ 2026-10-24T02:55:13.1054631Z 195 │ useEffect(() => { 2026-10-24T02:55:13.1054729Z 196 │ if (state.phase !== "recording") return; 2026-10-24T02:55:13.1054781Z 197 │ 2026-10-24T02:55:13.1054927Z 198 │ const tag = `voice-input:${keepAwakeId}:${++keepAwakeSessionRef.current}`; 2026-10-24T02:55:13.1055031Z 199 │ const activation = activateKeepAwakeAsync(tag); 2026-10-24T02:55:13.1055112Z 200 │ void activation.catch(() => {}); 2026-10-24T02:55:13.1055173Z 201 │ return () => { 2026-10-24T02:55:13.1055322Z 202 │ // Release after activation settles, even if the recording ends immediately. 2026-10-24T02:55:13.1055456Z 203 │ void activation.then(() => deactivateKeepAwake(tag)).catch(() => {}); 2026-10-24T02:55:13.1055511Z 204 │ }; 2026-10-24T02:55:13.1055588Z 205 │ }, [keepAwakeId, state.phase]); 2026-10-24T02:55:13.1055640Z 206 │ 2026-10-24T02:55:13.1055702Z 207 │ useEffect(() => { 2026-10-24T02:55:13.1055837Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-24T02:55:13.1055889Z 209 │ 2026-10-24T02:55:13.1056010Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-24T02:55:13.1056165Z 211 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-24T02:55:13.1056268Z 212 │ audioLevels.value = audioLevelsRef.current; 2026-10-24T02:55:13.1056345Z ·  ─────┬───── 2026-10-24T02:55:13.1056486Z · ╰── `audioLevels` cannot be modified 2026-10-24T02:55:13.1056541Z 213 │ } 2026-10-24T02:55:13.1056590Z ╰──── 2026-10-24T02:55:13.1056854Z  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-24T02:55:13.1057160Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:55:13.1057166Z 2026-10-24T02:55:13.1057364Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T02:55:13.1057520Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7] 2026-10-24T02:55:13.1057570Z 206 │ 2026-10-24T02:55:13.1057636Z 207 │ useEffect(() => { 2026-10-24T02:55:13.1057712Z ·  ───┬─── 2026-10-24T02:55:13.1057931Z · ╰── This function may (indirectly) reassign or modify `audioLevels` after render 2026-10-24T02:55:13.1058064Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-24T02:55:13.1058115Z 209 │ 2026-10-24T02:55:13.1058236Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-24T02:55:13.1058448Z 211 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-24T02:55:13.1058616Z 212 │ audioLevels.value = audioLevelsRef.current; 2026-10-24T02:55:13.1058694Z ·  ─────┬───── 2026-10-24T02:55:13.1058873Z · ╰── This modifies `audioLevels` 2026-10-24T02:55:13.1058932Z 213 │ } 2026-10-24T02:55:13.1058983Z ╰──── 2026-10-24T02:55:13.1059320Z  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-24T02:55:13.1059622Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:55:13.1059625Z 2026-10-24T02:55:13.1059925Z ⚠ eslint(no-unused-vars): Variable 'layerFromProviderAdapter' is declared but never used. Unused variables should start with a '_'. 2026-10-24T02:55:13.1060088Z ╭─[apps/server/src/orchestration-v2/ProviderAdapterRegistry.ts:346:7] 2026-10-24T02:55:13.1060139Z 345 │ 2026-10-24T02:55:13.1060243Z 346 │ const layerFromProviderAdapter: Layer.Layer< 2026-10-24T02:55:13.1060339Z ·  ────────────┬─────────── 2026-10-24T02:55:13.1060505Z · ╰── 'layerFromProviderAdapter' is declared here 2026-10-24T02:55:13.1060582Z 347 │ ProviderAdapterRegistryV2, 2026-10-24T02:55:13.1060637Z ╰──── 2026-10-24T02:55:13.1060742Z  help: Consider removing this declaration. 2026-10-24T02:55:13.1060745Z 2026-10-24T02:55:13.1060920Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T02:55:13.1061069Z ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:372:47] 2026-10-24T02:55:13.1061204Z 371 │ const { open, onOpenChange, onSnooze, timestampFormat } = props; 2026-10-24T02:55:13.1061361Z 372 │ const presets = open ? resolveSnoozePresets(new Date(), timestampFormat) : []; 2026-10-24T02:55:13.1061481Z ·  ─────┬──── 2026-10-24T02:55:13.1061638Z · ╰── Cannot call impure function 2026-10-24T02:55:13.1061701Z 373 │ return ( 2026-10-24T02:55:13.1061753Z ╰──── 2026-10-24T02:55:13.1062030Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T02:55:13.1062324Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T02:55:13.1062333Z 2026-10-24T02:55:13.1062496Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T02:55:13.1062643Z ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:853:39] 2026-10-24T02:55:13.1062741Z 852 │ if (snoozeGateClock.thread !== thread) { 2026-10-24T02:55:13.1062873Z 853 │ setSnoozeGateClock({ thread, now: new Date().toISOString() }); 2026-10-24T02:55:13.1062982Z ·  ─────┬──── 2026-10-24T02:55:13.1063137Z · ╰── Cannot call impure function 2026-10-24T02:55:13.1063194Z 854 │ } 2026-10-24T02:55:13.1063247Z ╰──── 2026-10-24T02:55:13.1063570Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T02:55:13.1063934Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T02:55:13.1063937Z 2026-10-24T02:55:13.1064126Z ⚠ eslint(require-yield): This generator function does not have `yield` 2026-10-24T02:55:13.1064274Z ╭─[packages/provider-acp/src/server/mcpOverAcpBridge.ts:81:78] 2026-10-24T02:55:13.1064329Z  80 │ 2026-10-24T02:55:13.1064597Z  81 │ ╭─▶ export const makeAcpMcpOverAcpBridge = Effect.fn("AcpMcpOverAcpBridge.make")(function* ( 2026-10-24T02:55:13.1064723Z  82 │ │ options: AcpMcpOverAcpBridgeOptions, 2026-10-24T02:55:13.1064848Z  83 │ │ ): Effect.fn.Return { 2026-10-24T02:55:13.1065013Z  84 │ │ const fetchImplementation = options.fetchImplementation ?? fetch; 2026-10-24T02:55:13.1065149Z  85 │ │ const connections = new Map(); 2026-10-24T02:55:13.1065224Z  86 │ │ 2026-10-24T02:55:13.1065519Z  87 │ │ const connectionFor = (connectionId: string): Effect.Effect => 2026-10-24T02:55:13.1065634Z  88 │ │ Effect.suspend(() => { 2026-10-24T02:55:13.1065795Z  89 │ │ const connection = connections.get(connectionId); 2026-10-24T02:55:13.1065939Z  90 │ │ return connection === undefined 2026-10-24T02:55:13.1066188Z  91 │ │ ? Effect.fail(new AcpMcpOverAcpError(`Unknown MCP-over-ACP connection "${connectionId}".`)) 2026-10-24T02:55:13.1066319Z  92 │ │ : Effect.succeed(connection); 2026-10-24T02:55:13.1066424Z  93 │ │ }); 2026-10-24T02:55:13.1066523Z  94 │ │ 2026-10-24T02:55:13.1066632Z  95 │ │ const send = ( 2026-10-24T02:55:13.1066754Z  96 │ │ connection: Connection, 2026-10-24T02:55:13.1066882Z  97 │ │ message: unknown, 2026-10-24T02:55:13.1067071Z  98 │ │ ): Effect.Effect, AcpMcpOverAcpError> => 2026-10-24T02:55:13.1067213Z  99 │ │ connection.mutex.withPermits(1)( 2026-10-24T02:55:13.1067349Z 100 │ │ Effect.gen(function* () { 2026-10-24T02:55:13.1067546Z 101 │ │ const body = JSON.stringify(message); 2026-10-24T02:55:13.1067786Z 102 │ │ if (Buffer.byteLength(body) > MAX_MESSAGE_BYTES) { 2026-10-24T02:55:13.1068025Z 103 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("MCP-over-ACP message exceeds 8 MiB.")); 2026-10-24T02:55:13.1068123Z 104 │ │ } 2026-10-24T02:55:13.1068275Z 105 │ │ const response = yield* Effect.tryPromise({ 2026-10-24T02:55:13.1068414Z 106 │ │ try: (signal) => 2026-10-24T02:55:13.1068574Z 107 │ │ fetchImplementation(options.endpoint, { 2026-10-24T02:55:13.1068705Z 108 │ │ method: "POST", 2026-10-24T02:55:13.1068835Z 109 │ │ signal, 2026-10-24T02:55:13.1068996Z 110 │ │ headers: { 2026-10-24T02:55:13.1069153Z 111 │ │ "content-type": "application/json", 2026-10-24T02:55:13.1069325Z 112 │ │ accept: "application/json, text/event-stream", 2026-10-24T02:55:13.1069468Z 113 │ │ authorization: options.authorization, 2026-10-24T02:55:13.1069635Z 114 │ │ ...(connection.sessionId === null 2026-10-24T02:55:13.1069768Z 115 │ │ ? {} 2026-10-24T02:55:13.1069940Z 116 │ │ : { "mcp-session-id": connection.sessionId }), 2026-10-24T02:55:13.1070100Z 117 │ │ ...(connection.protocolVersion === null 2026-10-24T02:55:13.1070198Z 118 │ │ ? {} 2026-10-24T02:55:13.1070426Z 119 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-24T02:55:13.1070544Z 120 │ │ }, 2026-10-24T02:55:13.1070665Z 121 │ │ body, 2026-10-24T02:55:13.1070761Z 122 │ │ }), 2026-10-24T02:55:13.1070900Z 123 │ │ catch: bridgeError, 2026-10-24T02:55:13.1071017Z 124 │ │ }); 2026-10-24T02:55:13.1071255Z 125 │ │ connection.sessionId = response.headers.get("mcp-session-id") ?? connection.sessionId; 2026-10-24T02:55:13.1071367Z 126 │ │ if (!response.ok) { 2026-10-24T02:55:13.1071501Z 127 │ │ yield* Effect.promise( 2026-10-24T02:55:13.1071852Z 128 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-24T02:55:13.1071967Z 129 │ │ ); 2026-10-24T02:55:13.1072090Z 130 │ │ return yield* Effect.fail( 2026-10-24T02:55:13.1072329Z 131 │ │ new AcpMcpOverAcpError(`T3 Code MCP endpoint responded with HTTP ${response.status}.`), 2026-10-24T02:55:13.1072442Z 132 │ │ ); 2026-10-24T02:55:13.1072554Z 133 │ │ } 2026-10-24T02:55:13.1072792Z 134 │ │ const payloads = [...(yield* Stream.runCollect(responsePayloads(response, bridgeError)))]; 2026-10-24T02:55:13.1072928Z 135 │ │ for (const payload of payloads) { 2026-10-24T02:55:13.1073227Z 136 │ │ connection.protocolVersion = protocolVersionOf(payload) ?? connection.protocolVersion; 2026-10-24T02:55:13.1073451Z 137 │ │ } 2026-10-24T02:55:13.1073583Z 138 │ │ return payloads; 2026-10-24T02:55:13.1073717Z 139 │ │ }).pipe(Effect.mapError(bridgeError)), 2026-10-24T02:55:13.1073822Z 140 │ │ ); 2026-10-24T02:55:13.1073923Z 141 │ │ 2026-10-24T02:55:13.1074134Z 142 │ │ const disconnect = Effect.fn("mcpOverAcpBridge.disconnect")(function* ( 2026-10-24T02:55:13.1074273Z 143 │ │ request: AcpSchema.DisconnectMcpRequest, 2026-10-24T02:55:13.1074486Z 144 │ │ ): Effect.fn.Return { 2026-10-24T02:55:13.1074667Z 145 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T02:55:13.1074847Z 146 │ │ connections.delete(request.connectionId); 2026-10-24T02:55:13.1074990Z 147 │ │ const sessionId = connection.sessionId; 2026-10-24T02:55:13.1075121Z 148 │ │ if (sessionId !== null) { 2026-10-24T02:55:13.1075277Z 149 │ │ const response = yield* Effect.tryPromise({ 2026-10-24T02:55:13.1075406Z 150 │ │ try: (signal) => 2026-10-24T02:55:13.1075574Z 151 │ │ fetchImplementation(options.endpoint, { 2026-10-24T02:55:13.1075686Z 152 │ │ method: "DELETE", 2026-10-24T02:55:13.1075806Z 153 │ │ signal, 2026-10-24T02:55:13.1075919Z 154 │ │ headers: { 2026-10-24T02:55:13.1076100Z 155 │ │ authorization: options.authorization, 2026-10-24T02:55:13.1076232Z 156 │ │ "mcp-session-id": sessionId, 2026-10-24T02:55:13.1076391Z 157 │ │ ...(connection.protocolVersion === null 2026-10-24T02:55:13.1076511Z 158 │ │ ? {} 2026-10-24T02:55:13.1076704Z 159 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-24T02:55:13.1076810Z 160 │ │ }, 2026-10-24T02:55:13.1076920Z 161 │ │ }), 2026-10-24T02:55:13.1077049Z 162 │ │ catch: bridgeError, 2026-10-24T02:55:13.1077151Z 163 │ │ }); 2026-10-24T02:55:13.1077307Z 164 │ │ if (!response.ok && response.status !== 404) { 2026-10-24T02:55:13.1077457Z 165 │ │ return yield* Effect.fail( 2026-10-24T02:55:13.1077598Z 166 │ │ new AcpMcpOverAcpError( 2026-10-24T02:55:13.1077807Z 167 │ │ `T3 Code MCP endpoint rejected disconnect with HTTP ${response.status}.`, 2026-10-24T02:55:13.1077893Z 168 │ │ ), 2026-10-24T02:55:13.1078022Z 169 │ │ ); 2026-10-24T02:55:13.1078126Z 170 │ │ } 2026-10-24T02:55:13.1078257Z 171 │ │ yield* Effect.promise( 2026-10-24T02:55:13.1078445Z 172 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-24T02:55:13.1078559Z 173 │ │ ); 2026-10-24T02:55:13.1078670Z 174 │ │ } 2026-10-24T02:55:13.1078872Z 175 │ │ return {}; 2026-10-24T02:55:13.1079032Z 176 │ │ }); 2026-10-24T02:55:13.1079125Z 177 │ │ 2026-10-24T02:55:13.1079255Z 178 │ │ return { 2026-10-24T02:55:13.1079455Z 179 │ │ connect: Effect.fn("mcpOverAcpBridge.connect")(function* (request) { 2026-10-24T02:55:13.1079607Z 180 │ │ if (request.serverId !== "t3-code") { 2026-10-24T02:55:13.1079729Z 181 │ │ return yield* Effect.fail( 2026-10-24T02:55:13.1079960Z 182 │ │ new AcpMcpOverAcpError(`Unknown ACP MCP server "${request.serverId}".`), 2026-10-24T02:55:13.1080074Z 183 │ │ ); 2026-10-24T02:55:13.1080182Z 184 │ │ } 2026-10-24T02:55:13.1080320Z 185 │ │ if (connections.size >= MAX_CONNECTIONS) { 2026-10-24T02:55:13.1080552Z 186 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("Too many MCP-over-ACP connections.")); 2026-10-24T02:55:13.1080676Z 187 │ │ } 2026-10-24T02:55:13.1080862Z 188 │ │ const connectionId = yield* options.allocateConnectionId; 2026-10-24T02:55:13.1080991Z 189 │ │ connections.set(connectionId, { 2026-10-24T02:55:13.1081137Z 190 │ │ mutex: yield* Semaphore.make(1), 2026-10-24T02:55:13.1081263Z 191 │ │ sessionId: null, 2026-10-24T02:55:13.1081407Z 192 │ │ protocolVersion: null, 2026-10-24T02:55:13.1081519Z 193 │ │ nextRequestId: 0, 2026-10-24T02:55:13.1081627Z 194 │ │ }); 2026-10-24T02:55:13.1081758Z 195 │ │ return { connectionId }; 2026-10-24T02:55:13.1081881Z 196 │ │ }), 2026-10-24T02:55:13.1082066Z 197 │ │ message: Effect.fn("mcpOverAcpBridge.message")(function* (request) { 2026-10-24T02:55:13.1082254Z 198 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T02:55:13.1082406Z 199 │ │ const id = ++connection.nextRequestId; 2026-10-24T02:55:13.1082564Z 200 │ │ const payloads = yield* send(connection, { 2026-10-24T02:55:13.1082701Z 201 │ │ jsonrpc: "2.0", 2026-10-24T02:55:13.1082794Z 202 │ │ id, 2026-10-24T02:55:13.1082925Z 203 │ │ method: request.method, 2026-10-24T02:55:13.1083110Z 204 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-24T02:55:13.1083241Z 205 │ │ }); 2026-10-24T02:55:13.1083438Z 206 │ │ const response = payloads.find((payload) => asEnvelope(payload)?.id === id); 2026-10-24T02:55:13.1083589Z 207 │ │ const envelope = asEnvelope(response); 2026-10-24T02:55:13.1083719Z 208 │ │ if (envelope === null) { 2026-10-24T02:55:13.1083855Z 209 │ │ return yield* Effect.fail( 2026-10-24T02:55:13.1084063Z 210 │ │ new AcpMcpOverAcpError("MCP server did not return a matching response."), 2026-10-24T02:55:13.1084173Z 211 │ │ ); 2026-10-24T02:55:13.1084276Z 212 │ │ } 2026-10-24T02:55:13.1084415Z 213 │ │ if (envelope.error !== undefined) { 2026-10-24T02:55:13.1084688Z 214 │ │ return yield* Effect.fail(new AcpMcpOverAcpError(errorMessage(envelope.error))); 2026-10-24T02:55:13.1084914Z 215 │ │ } 2026-10-24T02:55:13.1085133Z 216 │ │ return (envelope.result ?? null) as AcpSchema.MessageMcpResponse; 2026-10-24T02:55:13.1085242Z 217 │ │ }), 2026-10-24T02:55:13.1085465Z 218 │ │ notification: Effect.fn("mcpOverAcpBridge.notification")(function* (request) { 2026-10-24T02:55:13.1085646Z 219 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T02:55:13.1085782Z 220 │ │ yield* send(connection, { 2026-10-24T02:55:13.1085912Z 221 │ │ jsonrpc: "2.0", 2026-10-24T02:55:13.1086041Z 222 │ │ method: request.method, 2026-10-24T02:55:13.1086224Z 223 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-24T02:55:13.1086339Z 224 │ │ }); 2026-10-24T02:55:13.1086446Z 225 │ │ }), 2026-10-24T02:55:13.1086560Z 226 │ │ disconnect, 2026-10-24T02:55:13.1086674Z 227 │ │ dispose: Effect.suspend(() => 2026-10-24T02:55:13.1086816Z 228 │ │ Effect.forEach( 2026-10-24T02:55:13.1086948Z 229 │ │ [...connections.keys()], 2026-10-24T02:55:13.1087149Z 230 │ │ (connectionId) => disconnect({ connectionId }).pipe(Effect.ignore), 2026-10-24T02:55:13.1087261Z 231 │ │ { discard: true }, 2026-10-24T02:55:13.1087371Z 232 │ │ ), 2026-10-24T02:55:13.1087488Z 233 │ │ ), 2026-10-24T02:55:13.1087597Z 234 │ │ }; 2026-10-24T02:55:13.1087738Z 235 │ ╰─▶ }); 2026-10-24T02:55:13.1087817Z ╰──── 2026-10-24T02:55:13.1088112Z  help: Add a `yield` expression inside the generator body, or convert it to a regular function if iteration behavior is not needed. 2026-10-24T02:55:13.1088115Z 2026-10-24T02:55:13.1088316Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T02:55:13.1088492Z ╭─[apps/web/src/components/chat/useThreadLifecycle.tsx:178:58] 2026-10-24T02:55:13.1088613Z 177 │ if (snoozeClockState.shell !== activeThreadShell) { 2026-10-24T02:55:13.1088850Z 178 │ setSnoozeClockState({ shell: activeThreadShell, now: new Date().toISOString() }); 2026-10-24T02:55:13.1089021Z ·  ─────┬──── 2026-10-24T02:55:13.1089224Z · ╰── Cannot call impure function 2026-10-24T02:55:13.1089292Z 179 │ } 2026-10-24T02:55:13.1089366Z ╰──── 2026-10-24T02:55:13.1089687Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T02:55:13.1090009Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T02:55:13.1090012Z 2026-10-24T02:55:13.1090228Z ⚠ eslint(no-unused-vars): Identifier 'HostProcess' is imported but never used. 2026-10-24T02:55:13.1090475Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:25:13] 2026-10-24T02:55:13.1090671Z 24 │ import * as Schema from "effect/Schema"; 2026-10-24T02:55:13.1090821Z 25 │ import * as HostProcess from "@t3tools/shared/HostProcess"; 2026-10-24T02:55:13.1090933Z ·  ─────┬───── 2026-10-24T02:55:13.1091089Z · ╰── 'HostProcess' is imported here 2026-10-24T02:55:13.1091168Z 26 │ 2026-10-24T02:55:13.1091316Z ╰──── 2026-10-24T02:55:13.1091463Z  help: Consider removing this import. 2026-10-24T02:55:13.1091466Z 2026-10-24T02:55:13.1091745Z ⚠ eslint(no-unused-vars): Variable 'serverConfig' is declared but never used. Unused variables should start with a '_'. 2026-10-24T02:55:13.1091943Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:124:11] 2026-10-24T02:55:13.1092064Z 123 │ const path = yield* Path.Path; 2026-10-24T02:55:13.1092221Z 124 │ const serverConfig = yield* ServerConfig.ServerConfig; 2026-10-24T02:55:13.1092316Z ·  ──────┬───── 2026-10-24T02:55:13.1092485Z · ╰── 'serverConfig' is declared here 2026-10-24T02:55:13.1092651Z 125 │ const serverSettings = yield* ServerSettings.ServerSettingsService; 2026-10-24T02:55:13.1092752Z ╰──── 2026-10-24T02:55:13.1092869Z  help: Consider removing this declaration. 2026-10-24T02:55:13.1092872Z 2026-10-24T02:55:13.1093170Z ⚠ eslint(no-unused-vars): Variable 'serverSettings' is declared but never used. Unused variables should start with a '_'. 2026-10-24T02:55:13.1093363Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:125:11] 2026-10-24T02:55:13.1093516Z 124 │ const serverConfig = yield* ServerConfig.ServerConfig; 2026-10-24T02:55:13.1093695Z 125 │ const serverSettings = yield* ServerSettings.ServerSettingsService; 2026-10-24T02:55:13.1093797Z ·  ───────┬────── 2026-10-24T02:55:13.1093973Z · ╰── 'serverSettings' is declared here 2026-10-24T02:55:13.1094130Z 126 │ const gitWorkflow = yield* GitWorkflowService.GitWorkflowService; 2026-10-24T02:55:13.1094229Z ╰──── 2026-10-24T02:55:13.1094345Z  help: Consider removing this declaration. 2026-10-24T02:55:13.1094348Z 2026-10-24T02:55:13.1094535Z ⚠ react(immutability): This value cannot be modified 2026-10-24T02:55:13.1094722Z ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:42:5] 2026-10-24T02:55:13.1094806Z 35 │ 2026-10-24T02:55:13.1094968Z 36 │ const inspectorProgress = useSharedValue(inspectorVisible ? 1 : 0); 2026-10-24T02:55:13.1095087Z ·  ────────┬──────── 2026-10-24T02:55:13.1095265Z · ╰── `inspectorProgress` originates here 2026-10-24T02:55:13.1095379Z 37 │ const { renderedInspectorWidth } = props; 2026-10-24T02:55:13.1095543Z 38 │ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0); 2026-10-24T02:55:13.1095632Z 39 │ 2026-10-24T02:55:13.1095745Z 40 │ const onClosed = props.onClosed; 2026-10-24T02:55:13.1095839Z 41 │ useEffect(() => { 2026-10-24T02:55:13.1095934Z 42 │ inspectorProgress.value = withTiming( 2026-10-24T02:55:13.1096064Z ·  ────────┬──────── 2026-10-24T02:55:13.1096245Z · ╰── `inspectorProgress` cannot be modified 2026-10-24T02:55:13.1096414Z 43 │ inspectorVisible ? 1 : 0, 2026-10-24T02:55:13.1096559Z ╰──── 2026-10-24T02:55:13.1096855Z  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-24T02:55:13.1097197Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:55:13.1097200Z 2026-10-24T02:55:13.1097379Z ⚠ react(immutability): This value cannot be modified 2026-10-24T02:55:13.1097564Z ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:67:7] 2026-10-24T02:55:13.1097663Z 37 │ const { renderedInspectorWidth } = props; 2026-10-24T02:55:13.1097842Z 38 │ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0); 2026-10-24T02:55:13.1097965Z ·  ──────────┬───────── 2026-10-24T02:55:13.1098150Z · ╰── `renderedContentWidth` originates here 2026-10-24T02:55:13.1098215Z 39 │ 2026-10-24T02:55:13.1098334Z 40 │ const onClosed = props.onClosed; 2026-10-24T02:55:13.1098434Z 41 │ useEffect(() => { 2026-10-24T02:55:13.1098552Z 42 │ inspectorProgress.value = withTiming( 2026-10-24T02:55:13.1098640Z 43 │ inspectorVisible ? 1 : 0, 2026-10-24T02:55:13.1098771Z 44 │ WORKSPACE_PANE_TIMING, 2026-10-24T02:55:13.1098883Z 45 │ (finished) => { 2026-10-24T02:55:13.1099050Z 46 │ if (finished === true && !inspectorVisible && onClosed !== undefined) { 2026-10-24T02:55:13.1099135Z 47 │ runOnJS(onClosed)(); 2026-10-24T02:55:13.1099227Z 48 │ } 2026-10-24T02:55:13.1099318Z 49 │ }, 2026-10-24T02:55:13.1099408Z 50 │ ); 2026-10-24T02:55:13.1099559Z 51 │ const targetWidth = inspectorVisible ? (inspectorWidth ?? 0) : 0; 2026-10-24T02:55:13.1099669Z 52 │ renderedInspectorWidth.set( 2026-10-24T02:55:13.1099837Z 53 │ resizing ? targetWidth : withTiming(targetWidth, WORKSPACE_PANE_TIMING), 2026-10-24T02:55:13.1099939Z 54 │ ); 2026-10-24T02:55:13.1100007Z 55 │ }, [ 2026-10-24T02:55:13.1100104Z 56 │ inspectorProgress, 2026-10-24T02:55:13.1100205Z 57 │ inspectorVisible, 2026-10-24T02:55:13.1100300Z 58 │ inspectorWidth, 2026-10-24T02:55:13.1100380Z 59 │ onClosed, 2026-10-24T02:55:13.1100483Z 60 │ renderedInspectorWidth, 2026-10-24T02:55:13.1100576Z 61 │ resizing, 2026-10-24T02:55:13.1100653Z 62 │ ]); 2026-10-24T02:55:13.1100729Z 63 │ 2026-10-24T02:55:13.1100827Z 64 │ useEffect(() => { 2026-10-24T02:55:13.1100950Z 65 │ const targetWidth = inspectorWidth ?? 0; 2026-10-24T02:55:13.1101106Z 66 │ if (!inspectorVisible || resizing) { 2026-10-24T02:55:13.1104958Z 67 │ renderedContentWidth.value = targetWidth; 2026-10-24T02:55:13.1105083Z ·  ──────────┬───────── 2026-10-24T02:55:13.1105246Z · ╰── `renderedContentWidth` cannot be modified 2026-10-24T02:55:13.1105308Z 68 │ return; 2026-10-24T02:55:13.1105361Z ╰──── 2026-10-24T02:55:13.1105618Z  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-24T02:55:13.1105922Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:55:13.1105926Z 2026-10-24T02:55:13.1106141Z ⚠ eslint(no-unused-vars): Function 'summarizePayload' is declared but never used. 2026-10-24T02:55:13.1106282Z ╭─[packages/provider-acp/src/server/nativeLogging.ts:22:10] 2026-10-24T02:55:13.1106336Z 21 │ 2026-10-24T02:55:13.1106492Z 22 │ function summarizePayload(payload: unknown): Readonly> { 2026-10-24T02:55:13.1106581Z ·  ────────┬─────── 2026-10-24T02:55:13.1106729Z · ╰── 'summarizePayload' is declared here 2026-10-24T02:55:13.1106835Z 23 │ if (payload === null) return { valueType: "null" }; 2026-10-24T02:55:13.1106885Z ╰──── 2026-10-24T02:55:13.1106991Z  help: Consider removing this declaration. 2026-10-24T02:55:13.1106993Z 2026-10-24T02:55:13.1107216Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-24T02:55:13.1107365Z ╭─[packages/client-runtime/src/operations/projects.ts:228:51] 2026-10-24T02:55:13.1107429Z 227 │ ): string { 2026-10-24T02:55:13.1107582Z 228 │ const folderName = workspaceRoot.split(/[\\/]/).filter(Boolean).at(-1) ?? ""; 2026-10-24T02:55:13.1107696Z ·  ────── 2026-10-24T02:55:13.1107827Z 229 │ return target.owner ? `${target.owner}/${folderName}` : folderName; 2026-10-24T02:55:13.1107877Z ╰──── 2026-10-24T02:55:13.1108046Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T02:55:13.1108049Z 2026-10-24T02:55:13.1108213Z ⚠ eslint(no-empty-pattern): Empty array binding pattern 2026-10-24T02:55:13.1108371Z ╭─[apps/server/src/pullRequest/PullRequestService.test.ts:1526:12] 2026-10-24T02:55:13.1108426Z 1525 │ 2026-10-24T02:55:13.1108498Z 1526 │ for (const [] of [ 2026-10-24T02:55:13.1108572Z ·  ── 2026-10-24T02:55:13.1108650Z 1527 │ ["github", "github.com"], 2026-10-24T02:55:13.1108701Z ╰──── 2026-10-24T02:55:13.1109028Z  help: Passing non-iterable values (null, undefined, numbers, booleans, etc.) will result in a runtime error because these values are not iterable. 2026-10-24T02:55:13.1109031Z 2026-10-24T02:55:13.1109194Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T02:55:13.1109379Z ╭─[packages/provider-opencode/src/server/OpenCodeRuntime.environment.test.ts:53:14] 2026-10-24T02:55:13.1109431Z 52 │ 2026-10-24T02:55:13.1109494Z 53 │ for (const {} of [ 2026-10-24T02:55:13.1109565Z ·  ── 2026-10-24T02:55:13.1109632Z 54 │ { healthy: true }, 2026-10-24T02:55:13.1109763Z ╰──── 2026-10-24T02:55:13.1110082Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T02:55:13.1110084Z 2026-10-24T02:55:13.1110340Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T02:55:13.1110481Z ╭─[packages/provider-opencode/src/server/adapter.ts:3755:7] 2026-10-24T02:55:13.1110536Z 3754 │ 2026-10-24T02:55:13.1110729Z 3755 │ const layer: Layer.Layer = 2026-10-24T02:55:13.1110802Z ·  ──┬── 2026-10-24T02:55:13.1110928Z · ╰── 'layer' is declared here 2026-10-24T02:55:13.1110993Z 3756 │ Layer.effect( 2026-10-24T02:55:13.1111043Z ╰──── 2026-10-24T02:55:13.1111153Z  help: Consider removing this declaration. 2026-10-24T02:55:13.1111158Z 2026-10-24T02:55:13.1111360Z ⚠ eslint(no-unused-vars): Function 'nonEmptyString' is declared but never used. 2026-10-24T02:55:13.1111509Z ╭─[packages/client-runtime/src/work-log/presentation.ts:234:10] 2026-10-24T02:55:13.1111560Z 233 │ 2026-10-24T02:55:13.1111796Z 234 │ function nonEmptyString(value: unknown): string | null { 2026-10-24T02:55:13.1111932Z ·  ───────┬────── 2026-10-24T02:55:13.1112076Z · ╰── 'nonEmptyString' is declared here 2026-10-24T02:55:13.1112215Z 235 │ return typeof value === "string" && value.trim().length > 0 ? value : null; 2026-10-24T02:55:13.1112269Z ╰──── 2026-10-24T02:55:13.1112372Z  help: Consider removing this declaration. 2026-10-24T02:55:13.1112381Z 2026-10-24T02:55:13.1112637Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:55:13.1112802Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:643:5] 2026-10-24T02:55:13.1112856Z 638 │ 2026-10-24T02:55:13.1112924Z 639 │ useEffect(() => { 2026-10-24T02:55:13.1112997Z ·  ────┬──── 2026-10-24T02:55:13.1113124Z · ╰── This is the containing effect 2026-10-24T02:55:13.1113233Z 640 │ if (pendingLaunchEntry.key === launchTargetKey) { 2026-10-24T02:55:13.1113296Z 641 │ return; 2026-10-24T02:55:13.1113352Z 642 │ } 2026-10-24T02:55:13.1113426Z 643 │ setPendingLaunchEntry({ 2026-10-24T02:55:13.1113516Z ·  ──────────┬────────── 2026-10-24T02:55:13.1113697Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:55:13.1113773Z 644 │ key: launchTargetKey, 2026-10-24T02:55:13.1113823Z ╰──── 2026-10-24T02:55:13.1114405Z  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-24T02:55:13.1114724Z  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-24T02:55:13.1114727Z 2026-10-24T02:55:13.1115053Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:55:13.1115302Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:653:5] 2026-10-24T02:55:13.1115354Z 648 │ 2026-10-24T02:55:13.1115421Z 649 │ useEffect(() => { 2026-10-24T02:55:13.1115494Z ·  ────┬──── 2026-10-24T02:55:13.1115623Z · ╰── This is the containing effect 2026-10-24T02:55:13.1115736Z 650 │ if (initialAttachGridEntry.key === launchTargetKey) { 2026-10-24T02:55:13.1115799Z 651 │ return; 2026-10-24T02:55:13.1115853Z 652 │ } 2026-10-24T02:55:13.1115937Z 653 │ setInitialAttachGridEntry({ 2026-10-24T02:55:13.1116029Z ·  ────────────┬──────────── 2026-10-24T02:55:13.1116202Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:55:13.1116278Z 654 │ key: launchTargetKey, 2026-10-24T02:55:13.1116334Z ╰──── 2026-10-24T02:55:13.1116912Z  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-24T02:55:13.1117227Z  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-24T02:55:13.1117230Z 2026-10-24T02:55:13.1117478Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:55:13.1117646Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:746:7] 2026-10-24T02:55:13.1117702Z 743 │ 2026-10-24T02:55:13.1117764Z 744 │ useEffect(() => { 2026-10-24T02:55:13.1117835Z ·  ────┬──── 2026-10-24T02:55:13.1117962Z · ╰── This is the containing effect 2026-10-24T02:55:13.1118064Z 745 │ if (!routeEnvironmentId || !routeThreadId) { 2026-10-24T02:55:13.1118132Z 746 │ setLastGridSize({ 2026-10-24T02:55:13.1118215Z ·  ───────┬─────── 2026-10-24T02:55:13.1118381Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:55:13.1118465Z 747 │ cols: DEFAULT_TERMINAL_COLS, 2026-10-24T02:55:13.1118514Z ╰──── 2026-10-24T02:55:13.1119144Z  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-24T02:55:13.1119459Z  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-24T02:55:13.1119461Z 2026-10-24T02:55:13.1119660Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:55:13.1119825Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:538:24] 2026-10-24T02:55:13.1119883Z 537 │ }); 2026-10-24T02:55:13.1120010Z 538 │ }, [terminal.buffer, terminal.buffer.length, terminalKey]); 2026-10-24T02:55:13.1120120Z ·  ───────────┬────────── 2026-10-24T02:55:13.1120414Z · ╰── Overly precise dependency `terminal.buffer.length`, use `terminal.buffer` instead 2026-10-24T02:55:13.1120644Z 539 │ const cwd = terminal.summary?.cwd ?? selectedThreadProject?.workspaceRoot ?? null; 2026-10-24T02:55:13.1120696Z ╰──── 2026-10-24T02:55:13.1120985Z  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-24T02:55:13.1121288Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.1121291Z 2026-10-24T02:55:13.1121486Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:55:13.1121657Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:709:7] 2026-10-24T02:55:13.1121755Z 708 │ sentInitialInputKeyRef.current = null; 2026-10-24T02:55:13.1121823Z 709 │ }, [terminalKey]); 2026-10-24T02:55:13.1121899Z ·  ─────┬───── 2026-10-24T02:55:13.1122041Z · ╰── Unnecessary dependency `terminalKey` 2026-10-24T02:55:13.1122095Z 710 │ 2026-10-24T02:55:13.1122148Z ╰──── 2026-10-24T02:55:13.1122429Z  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-24T02:55:13.1122734Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.1122737Z 2026-10-24T02:55:13.1122939Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:55:13.1123106Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:800:52] 2026-10-24T02:55:13.1123163Z 799 │ }; 2026-10-24T02:55:13.1123339Z 800 │ }, [canOperateTerminal, isRunning, pasteSession, terminal.lifecycleVersion, terminalKey]); 2026-10-24T02:55:13.1123516Z ·  ────────────┬──────────── ─────┬───── 2026-10-24T02:55:13.1123743Z · │ ╰── Unnecessary dependency `terminalKey` 2026-10-24T02:55:13.1123948Z · ╰── Unnecessary dependency `terminal.lifecycleVersion` 2026-10-24T02:55:13.1124007Z 801 │ 2026-10-24T02:55:13.1124062Z ╰──── 2026-10-24T02:55:13.1124347Z  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-24T02:55:13.1124648Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.1124650Z 2026-10-24T02:55:13.1124793Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:55:13.1124955Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:793:24] 2026-10-24T02:55:13.1125011Z 792 │ } 2026-10-24T02:55:13.1125119Z 793 │ const pasteSession = pasteSessionRef.current; 2026-10-24T02:55:13.1125284Z ·  ───────────┬─────────── 2026-10-24T02:55:13.1125512Z · ╰── Cannot access ref value during render 2026-10-24T02:55:13.1125565Z 794 │ 2026-10-24T02:55:13.1125617Z ╰──── 2026-10-24T02:55:13.1126080Z  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-24T02:55:13.1126363Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:55:13.1126367Z 2026-10-24T02:55:13.1126565Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T02:55:13.1126701Z ╭─[packages/client-runtime/src/state/filesystem.ts:3:8] 2026-10-24T02:55:13.1126777Z 2 │ AuthFilesystemReadScope, 2026-10-24T02:55:13.1126848Z 3 │ type AuthSessionState, 2026-10-24T02:55:13.1126931Z ·  ────────┬─────── 2026-10-24T02:55:13.1127074Z · ╰── 'AuthSessionState' is imported here 2026-10-24T02:55:13.1127150Z 4 │ type FilesystemBrowseEntry, 2026-10-24T02:55:13.1127204Z ╰──── 2026-10-24T02:55:13.1127301Z  help: Consider removing this import. 2026-10-24T02:55:13.1127303Z 2026-10-24T02:55:13.1127579Z ⚠ eslint(no-unused-vars): Variable 'legacyCredentials' is declared but never used. Unused variables should start with a '_'. 2026-10-24T02:55:13.1127735Z ╭─[packages/provider-cursor/src/server/credentialStore.test.ts:15:7] 2026-10-24T02:55:13.1127788Z 14 │ 2026-10-24T02:55:13.1127863Z 15 │ const legacyCredentials = { 2026-10-24T02:55:13.1127950Z ·  ────────┬──────── 2026-10-24T02:55:13.1128094Z · ╰── 'legacyCredentials' is declared here 2026-10-24T02:55:13.1128163Z 16 │ version: 1 as const, 2026-10-24T02:55:13.1128212Z ╰──── 2026-10-24T02:55:13.1128318Z  help: Consider removing this declaration. 2026-10-24T02:55:13.1128320Z 2026-10-24T02:55:13.1128590Z ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'. 2026-10-24T02:55:13.1128720Z ╭─[packages/provider-cursor/src/server/auth.ts:249:20] 2026-10-24T02:55:13.1128792Z 248 │ }, 2026-10-24T02:55:13.1128908Z 249 │ (effect, flow, stopSessions) => 2026-10-24T02:55:13.1129002Z ·  ──────┬───── 2026-10-24T02:55:13.1129199Z · ╰── 'stopSessions' is declared here 2026-10-24T02:55:13.1129329Z 250 │ effect.pipe( 2026-10-24T02:55:13.1129382Z ╰──── 2026-10-24T02:55:13.1129485Z  help: Consider removing this parameter. 2026-10-24T02:55:13.1129488Z 2026-10-24T02:55:13.1129681Z ⚠ eslint(no-unused-vars): Type 'EnvironmentId' is imported but never used. 2026-10-24T02:55:13.1129815Z ╭─[packages/client-runtime/src/state/sharedSettings.ts:2:3] 2026-10-24T02:55:13.1129878Z 1 │ import type { 2026-10-24T02:55:13.1129943Z 2 │ EnvironmentId, 2026-10-24T02:55:13.1130019Z ·  ──────┬────── 2026-10-24T02:55:13.1130152Z · ╰── 'EnvironmentId' is imported here 2026-10-24T02:55:13.1130244Z 3 │ ExecutionEnvironmentCapabilities, 2026-10-24T02:55:13.1130299Z ╰──── 2026-10-24T02:55:13.1130395Z  help: Consider removing this import. 2026-10-24T02:55:13.1130398Z 2026-10-24T02:55:13.1130857Z ⚠ 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-24T02:55:13.1131011Z ╭─[packages/client-runtime/src/connection/supervisor.test.ts:135:3] 2026-10-24T02:55:13.1131123Z 134 │ let lastState = yield* SubscriptionRef.get(state); 2026-10-24T02:55:13.1131335Z 135 │ ╭─▶ for (let iteration = 0; iteration < 100; iteration += 1) { 2026-10-24T02:55:13.1131470Z 136 │ │ lastState = yield* SubscriptionRef.get(state); 2026-10-24T02:55:13.1131579Z 137 │ │ if (predicate(lastState)) { 2026-10-24T02:55:13.1131681Z 138 │ │ return lastState; 2026-10-24T02:55:13.1131755Z 139 │ │ } 2026-10-24T02:55:13.1131860Z 140 │ │ yield* Effect.yieldNow; 2026-10-24T02:55:13.1131983Z 141 │ ╰─▶ } 2026-10-24T02:55:13.1132058Z 142 │ return yield* Effect.die( 2026-10-24T02:55:13.1132113Z ╰──── 2026-10-24T02:55:13.1132115Z 2026-10-24T02:55:13.1132315Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T02:55:13.1132443Z ╭─[packages/client-runtime/src/state/usageAccess.ts:3:8] 2026-10-24T02:55:13.1132516Z 2 │ AuthDiagnosticsReadScope, 2026-10-24T02:55:13.1132585Z 3 │ type AuthSessionState, 2026-10-24T02:55:13.1132674Z ·  ────────┬─────── 2026-10-24T02:55:13.1132818Z · ╰── 'AuthSessionState' is imported here 2026-10-24T02:55:13.1132888Z 4 │ sessionGrantsScope, 2026-10-24T02:55:13.1132943Z ╰──── 2026-10-24T02:55:13.1133040Z  help: Consider removing this import. 2026-10-24T02:55:13.1133042Z 2026-10-24T02:55:13.1133293Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:55:13.1133424Z ╭─[apps/mobile/src/components/ProjectFavicon.tsx:159:5] 2026-10-24T02:55:13.1133611Z 154 │ const [activeFaviconRequest, setActiveFaviconRequest] = useState(null); 2026-10-24T02:55:13.1133681Z 155 │ useLayoutEffect(() => { 2026-10-24T02:55:13.1133756Z ·  ───────┬─────── 2026-10-24T02:55:13.1133950Z · ╰── This is the containing effect 2026-10-24T02:55:13.1134105Z 156 │ if (faviconRequest === null) return; 2026-10-24T02:55:13.1134158Z 157 │ 2026-10-24T02:55:13.1134289Z 158 │ const endRequest = beginProjectFaviconRequest(faviconRequest); 2026-10-24T02:55:13.1134386Z 159 │ setActiveFaviconRequest(faviconRequest); 2026-10-24T02:55:13.1134478Z ·  ───────────┬─────────── 2026-10-24T02:55:13.1134649Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:55:13.1134715Z 160 │ return endRequest; 2026-10-24T02:55:13.1134767Z ╰──── 2026-10-24T02:55:13.1135360Z  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-24T02:55:13.1135676Z  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-24T02:55:13.1135679Z 2026-10-24T02:55:13.1135904Z ⚠ eslint(no-unused-vars): Function 'resolveThreadWorkspaceCwd' is declared but never used. 2026-10-24T02:55:13.1136019Z ╭─[apps/server/src/checkpointing/Utils.ts:12:10] 2026-10-24T02:55:13.1136075Z 11 │ 2026-10-24T02:55:13.1136171Z 12 │ function resolveThreadWorkspaceCwd(input: { 2026-10-24T02:55:13.1136273Z ·  ────────────┬──────────── 2026-10-24T02:55:13.1136443Z · ╰── 'resolveThreadWorkspaceCwd' is declared here 2026-10-24T02:55:13.1136513Z 13 │ readonly thread: { 2026-10-24T02:55:13.1136565Z ╰──── 2026-10-24T02:55:13.1136668Z  help: Consider removing this declaration. 2026-10-24T02:55:13.1136670Z 2026-10-24T02:55:13.1137119Z ⚠ 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-24T02:55:13.1137254Z ╭─[packages/client-runtime/src/rpc/session.test.ts:226:3] 2026-10-24T02:55:13.1137313Z 225 │ ) { 2026-10-24T02:55:13.1137514Z 226 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T02:55:13.1137624Z 227 │ │ const socket = sockets[index]; 2026-10-24T02:55:13.1137718Z 228 │ │ if (socket) { 2026-10-24T02:55:13.1137815Z 229 │ │ return socket; 2026-10-24T02:55:13.1137889Z 230 │ │ } 2026-10-24T02:55:13.1137990Z 231 │ │ yield* Effect.yieldNow; 2026-10-24T02:55:13.1138113Z 232 │ ╰─▶ } 2026-10-24T02:55:13.1138289Z 233 │ return yield* Effect.die(new Error("Expected the RPC protocol to create a websocket.")); 2026-10-24T02:55:13.1138342Z ╰──── 2026-10-24T02:55:13.1138345Z 2026-10-24T02:55:13.1138809Z ⚠ 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-24T02:55:13.1139023Z ╭─[packages/client-runtime/src/rpc/session.test.ts:240:3] 2026-10-24T02:55:13.1139153Z 239 │ ) { 2026-10-24T02:55:13.1139351Z 240 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T02:55:13.1139561Z 241 │ │ const request = socket.sent.map((message) => decodeJson(message)).filter(isRpcRequest)[index]; 2026-10-24T02:55:13.1139649Z 242 │ │ if (request) { 2026-10-24T02:55:13.1139743Z 243 │ │ return request; 2026-10-24T02:55:13.1139816Z 244 │ │ } 2026-10-24T02:55:13.1139916Z 245 │ │ yield* Effect.yieldNow; 2026-10-24T02:55:13.1140036Z 246 │ ╰─▶ } 2026-10-24T02:55:13.1140206Z 247 │ return yield* Effect.die(new Error("Expected the RPC protocol to send a request.")); 2026-10-24T02:55:13.1140261Z ╰──── 2026-10-24T02:55:13.1140263Z 2026-10-24T02:55:13.1140517Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:55:13.1140647Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:60:5] 2026-10-24T02:55:13.1140701Z 57 │ 2026-10-24T02:55:13.1140768Z 58 │ useEffect(() => { 2026-10-24T02:55:13.1140840Z ·  ────┬──── 2026-10-24T02:55:13.1140965Z · ╰── This is the containing effect 2026-10-24T02:55:13.1141058Z 59 │ const controller = new AbortController(); 2026-10-24T02:55:13.1141132Z 60 │ setLoadState("pending"); 2026-10-24T02:55:13.1141208Z ·  ──────┬───── 2026-10-24T02:55:13.1141378Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:55:13.1141538Z 61 │ // A renewed signature is used on Retry, not as a reason to reset the native player. 2026-10-24T02:55:13.1141593Z ╰──── 2026-10-24T02:55:13.1142175Z  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-24T02:55:13.1142489Z  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-24T02:55:13.1142491Z 2026-10-24T02:55:13.1142690Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:55:13.1142823Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:71:7] 2026-10-24T02:55:13.1142904Z 70 │ return () => controller.abort(); 2026-10-24T02:55:13.1142999Z 71 │ }, [player, props.playRequested, attempt]); 2026-10-24T02:55:13.1143167Z ·  ───┬── ─────────┬───────── ───┬─── 2026-10-24T02:55:13.1143389Z · │ │ ╰── Unnecessary dependency `attempt` 2026-10-24T02:55:13.1143585Z · │ ╰── Unnecessary dependency `props.playRequested` 2026-10-24T02:55:13.1143721Z · ╰── Unnecessary dependency `player_0` 2026-10-24T02:55:13.1143775Z 72 │ 2026-10-24T02:55:13.1143825Z ╰──── 2026-10-24T02:55:13.1144169Z  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-24T02:55:13.1144544Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.1144546Z 2026-10-24T02:55:13.1144998Z ⚠ 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-24T02:55:13.1145129Z ╭─[packages/client-runtime/src/rpc/client.test.ts:131:9] 2026-10-24T02:55:13.1145193Z 130 │ ) { 2026-10-24T02:55:13.1145403Z 131 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T02:55:13.1145529Z 132 │ │ if (subscriptions.length >= count) { 2026-10-24T02:55:13.1145621Z 133 │ │ return; 2026-10-24T02:55:13.1145700Z 134 │ │ } 2026-10-24T02:55:13.1145808Z 135 │ │ yield* Effect.yieldNow; 2026-10-24T02:55:13.1145941Z 136 │ ╰─▶ } 2026-10-24T02:55:13.1146102Z 137 │ return yield* Effect.die(new Error(`Expected ${count} durable subscriptions.`)); 2026-10-24T02:55:13.1146153Z ╰──── 2026-10-24T02:55:13.1146155Z 2026-10-24T02:55:13.1146611Z ⚠ 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-24T02:55:13.1146746Z ╭─[packages/client-runtime/src/rpc/client.test.ts:252:7] 2026-10-24T02:55:13.1146906Z 251 │ yield* SubscriptionRef.set(activeSession, Option.some(session(firstClient))); 2026-10-24T02:55:13.1147149Z 252 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 1; attempt += 1) { 2026-10-24T02:55:13.1147254Z 253 │ │ yield* Effect.yieldNow; 2026-10-24T02:55:13.1147381Z 254 │ ╰─▶ } 2026-10-24T02:55:13.1147505Z 255 │ yield* SubscriptionRef.set(activeSession, Option.none()); 2026-10-24T02:55:13.1147554Z ╰──── 2026-10-24T02:55:13.1147559Z 2026-10-24T02:55:13.1148007Z ⚠ 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-24T02:55:13.1148139Z ╭─[packages/client-runtime/src/rpc/client.test.ts:258:7] 2026-10-24T02:55:13.1148194Z 257 │ 2026-10-24T02:55:13.1148434Z 258 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-24T02:55:13.1148535Z 259 │ │ yield* Effect.yieldNow; 2026-10-24T02:55:13.1148663Z 260 │ ╰─▶ } 2026-10-24T02:55:13.1148780Z 261 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-24T02:55:13.1148863Z ╰──── 2026-10-24T02:55:13.1148865Z 2026-10-24T02:55:13.1149361Z ⚠ 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-24T02:55:13.1149558Z ╭─[packages/client-runtime/src/rpc/client.test.ts:322:7] 2026-10-24T02:55:13.1149619Z 321 │ ); 2026-10-24T02:55:13.1149868Z 322 │ ╭─▶ for (let attempt = 0; attempt < 100 && observedFailures.length < 1; attempt += 1) { 2026-10-24T02:55:13.1149971Z 323 │ │ yield* Effect.yieldNow; 2026-10-24T02:55:13.1150096Z 324 │ ╰─▶ } 2026-10-24T02:55:13.1150150Z 325 │ 2026-10-24T02:55:13.1150202Z ╰──── 2026-10-24T02:55:13.1150204Z 2026-10-24T02:55:13.1150650Z ⚠ 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-24T02:55:13.1150779Z ╭─[packages/client-runtime/src/rpc/client.test.ts:330:7] 2026-10-24T02:55:13.1150938Z 329 │ yield* SubscriptionRef.set(activeSession, Option.some(session(secondClient))); 2026-10-24T02:55:13.1151177Z 330 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-24T02:55:13.1151279Z 331 │ │ yield* Effect.yieldNow; 2026-10-24T02:55:13.1151405Z 332 │ ╰─▶ } 2026-10-24T02:55:13.1151510Z 333 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-24T02:55:13.1151564Z ╰──── 2026-10-24T02:55:13.1151566Z 2026-10-24T02:55:13.1151989Z ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'. 2026-10-24T02:55:13.1152120Z ╭─[apps/server/src/telemetry/AnalyticsService.ts:340:7] 2026-10-24T02:55:13.1152171Z 339 │ 2026-10-24T02:55:13.1152275Z 340 │ const layerTest = AnalyticsService.layerTest; 2026-10-24T02:55:13.1152351Z ·  ────┬──── 2026-10-24T02:55:13.1152482Z · ╰── 'layerTest' is declared here 2026-10-24T02:55:13.1152531Z ╰──── 2026-10-24T02:55:13.1152636Z  help: Consider removing this declaration. 2026-10-24T02:55:13.1152638Z 2026-10-24T02:55:13.1152904Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T02:55:13.1153159Z ╭─[apps/mobile/src/components/ComposerContextSheet.tsx:267:25] 2026-10-24T02:55:13.1153263Z 266 │ {record.elements?.map((element, index) => ( 2026-10-24T02:55:13.1153427Z 267 │ 2026-10-24T02:55:13.1153579Z ·  ─────────────────────────────────────────────────────── 2026-10-24T02:55:13.1153655Z 268 │ } 2026-10-24T02:55:13.1155861Z ·  ───────────────────────────────────────────── 2026-10-24T02:55:13.1155929Z 1075 │ screenListeners={{ 2026-10-24T02:55:13.1155982Z ╰──── 2026-10-24T02:55:13.1156335Z  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-24T02:55:13.1156338Z 2026-10-24T02:55:13.1156523Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T02:55:13.1156640Z ╭─[apps/mobile/src/lib/useHoverGesture.ts:8:15] 2026-10-24T02:55:13.1156701Z 7 │ () => 2026-10-24T02:55:13.1156767Z 8 │ Gesture.Hover() 2026-10-24T02:55:13.1156843Z ·  ──┬── 2026-10-24T02:55:13.1156974Z · ╰── `Hover` may be a component 2026-10-24T02:55:13.1157050Z 9 │ .manualActivation(true) 2026-10-24T02:55:13.1157100Z ╰──── 2026-10-24T02:55:13.1157374Z  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-24T02:55:13.1157809Z  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-24T02:55:13.1157867Z 2026-10-24T02:55:13.1158139Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T02:55:13.1158262Z ╭─[apps/mobile/src/lib/markdownDocument.ts:259:28] 2026-10-24T02:55:13.1158363Z 258 │ visit(parser.parse(markdown), false, false); 2026-10-24T02:55:13.1158449Z 259 │ for (const edit of edits.reverse()) 2026-10-24T02:55:13.1158542Z ·  ─────── 2026-10-24T02:55:13.1158703Z 260 │ markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end); 2026-10-24T02:55:13.1158784Z ╰──── 2026-10-24T02:55:13.1159049Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T02:55:13.1159052Z 2026-10-24T02:55:13.1159262Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T02:55:13.1159386Z ╭─[apps/mobile/src/lib/markdownDocument.ts:290:28] 2026-10-24T02:55:13.1159467Z 289 │ visit(parser.parse(markdown)); 2026-10-24T02:55:13.1159549Z 290 │ for (const edit of edits.reverse()) 2026-10-24T02:55:13.1159640Z ·  ─────── 2026-10-24T02:55:13.1159799Z 291 │ markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end); 2026-10-24T02:55:13.1159850Z ╰──── 2026-10-24T02:55:13.1160100Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T02:55:13.1160103Z 2026-10-24T02:55:13.1160303Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T02:55:13.1160426Z ╭─[apps/mobile/src/lib/markdownDocument.ts:344:38] 2026-10-24T02:55:13.1160507Z 343 │ visit(parser.parse(markdown)); 2026-10-24T02:55:13.1160610Z 344 │ for (const lineStart of lineStarts.reverse()) { 2026-10-24T02:55:13.1160711Z ·  ─────── 2026-10-24T02:55:13.1160872Z 345 │ // The header row may be a lazy line without its container markers (`>` or list indent), 2026-10-24T02:55:13.1160923Z ╰──── 2026-10-24T02:55:13.1161173Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T02:55:13.1161175Z 2026-10-24T02:55:13.1161317Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:55:13.1161475Z ╭─[apps/mobile/src/features/diffs/nativeReviewDiffSurface.ts:277:39] 2026-10-24T02:55:13.1161533Z 276 │ 2026-10-24T02:55:13.1161710Z 277 │ ╭─▶ return createElement(RawNativeView, { 2026-10-24T02:55:13.1161802Z 278 │ │ ...nativeProps, 2026-10-24T02:55:13.1161943Z 279 │ │ refreshEnabled: props.onPullToRefresh !== undefined, 2026-10-24T02:55:13.1162033Z 280 │ │ ref: nativeRef, 2026-10-24T02:55:13.1162161Z 281 │ ├─▶ }); 2026-10-24T02:55:13.1162390Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T02:55:13.1162443Z 282 │ } 2026-10-24T02:55:13.1162493Z ╰──── 2026-10-24T02:55:13.1163006Z  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-24T02:55:13.1163364Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:55:13.1163366Z 2026-10-24T02:55:13.1163628Z ⚠ eslint(no-unused-vars): Variable 'claudeCaps' is declared but never used. Unused variables should start with a '_'. 2026-10-24T02:55:13.1163735Z ╭─[packages/shared/src/model.test.ts:36:7] 2026-10-24T02:55:13.1163790Z 35 │ 2026-10-24T02:55:13.1163921Z 36 │ const claudeCaps: ModelCapabilities = createModelCapabilities({ 2026-10-24T02:55:13.1163994Z ·  ─────┬──── 2026-10-24T02:55:13.1164129Z · ╰── 'claudeCaps' is declared here 2026-10-24T02:55:13.1164203Z 37 │ optionDescriptors: [ 2026-10-24T02:55:13.1164254Z ╰──── 2026-10-24T02:55:13.1164359Z  help: Consider removing this declaration. 2026-10-24T02:55:13.1164361Z 2026-10-24T02:55:13.1164586Z ⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence. 2026-10-24T02:55:13.1164720Z ╭─[apps/web/src/components/chat/useComposerSend.ts:985:13] 2026-10-24T02:55:13.1164842Z 984 │ const changedBeforeDecline = draftChangedSinceSend(); 2026-10-24T02:55:13.1165073Z 985 │ ╭─▶ const pendingIdsBeforeDecline = pendingApprovalsRef.current.map( 2026-10-24T02:55:13.1165191Z 986 │ │ (approval) => approval.requestId, 2026-10-24T02:55:13.1165327Z 987 │ ╰─▶ ); 2026-10-24T02:55:13.1165466Z 988 │ const approvalResponding = approvalsToDecline.some((approval) => 2026-10-24T02:55:13.1165518Z ╰──── 2026-10-24T02:55:13.1165592Z  help: Switch to `Set` 2026-10-24T02:55:13.1165595Z 2026-10-24T02:55:13.1165813Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-24T02:55:13.1165934Z ╭─[apps/server/src/terminal/Manager.test.ts:731:31] 2026-10-24T02:55:13.1165991Z 730 │ ); 2026-10-24T02:55:13.1166158Z 731 │ const snapshot = events.filter((event) => event.type === "snapshot").at(-1)?.snapshot; 2026-10-24T02:55:13.1166255Z ·  ────── 2026-10-24T02:55:13.1166377Z 732 │ expect(snapshot?.history).toBe("aa😀\rEND"); 2026-10-24T02:55:13.1166430Z ╰──── 2026-10-24T02:55:13.1166597Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T02:55:13.1166602Z 2026-10-24T02:55:13.1166820Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T02:55:13.1166940Z ╭─[packages/shared/src/serverSettings.ts:346:9] 2026-10-24T02:55:13.1167041Z 345 │ const entry: ProjectSettingsOverrides = { 2026-10-24T02:55:13.1167169Z 346 │ ...(entries.get(projectId) ?? currentEntries[projectId] ?? {}), 2026-10-24T02:55:13.1167316Z ·  ────────────────────────────────────────────────────────────── 2026-10-24T02:55:13.1167376Z 347 │ }; 2026-10-24T02:55:13.1167429Z ╰──── 2026-10-24T02:55:13.1167744Z  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-24T02:55:13.1167788Z 2026-10-24T02:55:13.1168032Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in Array.prototype.reduce() 2026-10-24T02:55:13.1168151Z ╭─[packages/shared/src/serverSettings.ts:448:24] 2026-10-24T02:55:13.1168219Z 447 │ const favorites = 2026-10-24T02:55:13.1168326Z 448 │ setModelFavorites?.reduce((current, change) => { 2026-10-24T02:55:13.1168410Z ·  ───┬── 2026-10-24T02:55:13.1168534Z · ╰── For this reduce 2026-10-24T02:55:13.1168617Z 449 │ const exists = current.some( 2026-10-24T02:55:13.1168805Z 450 │ (favorite) => favorite.provider === change.provider && favorite.model === change.model, 2026-10-24T02:55:13.1168911Z 451 │ ); 2026-10-24T02:55:13.1168989Z 452 │ return change.favorite 2026-10-24T02:55:13.1169052Z 453 │ ? exists 2026-10-24T02:55:13.1169115Z 454 │ ? current 2026-10-24T02:55:13.1169246Z 455 │ : [...current, { provider: change.provider, model: change.model }] 2026-10-24T02:55:13.1169330Z ·  ─────┬──── 2026-10-24T02:55:13.1169451Z · ╰── From this spread 2026-10-24T02:55:13.1169520Z 456 │ : current.filter( 2026-10-24T02:55:13.1169569Z ╰──── 2026-10-24T02:55:13.1169772Z  help: Consider using `Object.assign()` or `Array.prototype.push()` to mutate the accumulator instead. 2026-10-24T02:55:13.1169929Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T02:55:13.1169931Z 2026-10-24T02:55:13.1170122Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-24T02:55:13.1170238Z ╭─[packages/shared/src/serverSettings.ts:466:3] 2026-10-24T02:55:13.1170297Z 464 │ null; 2026-10-24T02:55:13.1170413Z 465 │ let nextModelPreferences = initialModelPreferences; 2026-10-24T02:55:13.1170503Z ·  ──────────┬───────── 2026-10-24T02:55:13.1170628Z · ╰── From this accumulator 2026-10-24T02:55:13.1170726Z 466 │ for (const change of setModelsHidden ?? []) { 2026-10-24T02:55:13.1170794Z ·  ─┬─ 2026-10-24T02:55:13.1170898Z · ╰── For this loop 2026-10-24T02:55:13.1171027Z 467 │ const preferences = nextModelPreferences?.[change.provider] ?? { 2026-10-24T02:55:13.1171095Z 468 │ hiddenModels: [], 2026-10-24T02:55:13.1171166Z 469 │ modelOrder: [], 2026-10-24T02:55:13.1171225Z 470 │ }; 2026-10-24T02:55:13.1171397Z 471 │ const hiddenModels = preferences.hiddenModels.filter((model) => model !== change.model); 2026-10-24T02:55:13.1171505Z 472 │ if (change.hidden) hiddenModels.push(change.model); 2026-10-24T02:55:13.1171579Z 473 │ nextModelPreferences = { 2026-10-24T02:55:13.1171654Z 474 │ ...nextModelPreferences, 2026-10-24T02:55:13.1171746Z ·  ───────────┬─────────── 2026-10-24T02:55:13.1171868Z · ╰── From this spread 2026-10-24T02:55:13.1171977Z 475 │ [change.provider]: { ...preferences, hiddenModels }, 2026-10-24T02:55:13.1172029Z ╰──── 2026-10-24T02:55:13.1172179Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-24T02:55:13.1172387Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T02:55:13.1172426Z 2026-10-24T02:55:13.1172920Z ⚠ 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-24T02:55:13.1173074Z ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1228:7] 2026-10-24T02:55:13.1173167Z 1227 │ yield* harness.replaceSession; 2026-10-24T02:55:13.1173370Z 1228 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T02:55:13.1173523Z 1229 │ │ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) { 2026-10-24T02:55:13.1173612Z 1230 │ │ break; 2026-10-24T02:55:13.1173695Z 1231 │ │ } 2026-10-24T02:55:13.1173802Z 1232 │ │ yield* Effect.yieldNow; 2026-10-24T02:55:13.1173933Z 1233 │ ╰─▶ } 2026-10-24T02:55:13.1174006Z 1234 │ yield* Queue.offer( 2026-10-24T02:55:13.1174058Z ╰──── 2026-10-24T02:55:13.1174061Z 2026-10-24T02:55:13.1174510Z ⚠ 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-24T02:55:13.1174662Z ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1337:7] 2026-10-24T02:55:13.1174751Z 1336 │ yield* harness.replaceSession; 2026-10-24T02:55:13.1174954Z 1337 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T02:55:13.1175110Z 1338 │ │ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) break; 2026-10-24T02:55:13.1175216Z 1339 │ │ yield* Effect.yieldNow; 2026-10-24T02:55:13.1175345Z 1340 │ ╰─▶ } 2026-10-24T02:55:13.1175472Z 1341 │ expect(yield* Ref.get(harness.subscriptionCount)).toBe(2); 2026-10-24T02:55:13.1175524Z ╰──── 2026-10-24T02:55:13.1175527Z 2026-10-24T02:55:13.1175707Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T02:55:13.1175812Z ╭─[packages/shared/src/qrCode.ts:458:44] 2026-10-24T02:55:13.1175878Z 457 │ ): Array { 2026-10-24T02:55:13.1176032Z 458 │ let result: Array = divisor.map((_) => 0); 2026-10-24T02:55:13.1176198Z ·  ┬ 2026-10-24T02:55:13.1176341Z · ╰── '_' is declared here 2026-10-24T02:55:13.1176410Z 459 │ for (const b of data) { 2026-10-24T02:55:13.1176463Z ╰──── 2026-10-24T02:55:13.1176563Z  help: Consider removing this parameter. 2026-10-24T02:55:13.1176566Z 2026-10-24T02:55:13.1176820Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:55:13.1176950Z ╭─[apps/mobile/src/state/use-vcs-action-state.ts:86:5] 2026-10-24T02:55:13.1177060Z 83 │ const [nowMs, setNowMs] = useState(() => Date.now()); 2026-10-24T02:55:13.1177122Z 84 │ useEffect(() => { 2026-10-24T02:55:13.1177200Z ·  ────┬──── 2026-10-24T02:55:13.1177330Z · ╰── This is the containing effect 2026-10-24T02:55:13.1177418Z 85 │ if (!actionState.isRunning) return; 2026-10-24T02:55:13.1177483Z 86 │ setNowMs(Date.now()); 2026-10-24T02:55:13.1177554Z ·  ────┬─── 2026-10-24T02:55:13.1177719Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:55:13.1177843Z 87 │ const interval = setInterval(() => setNowMs(Date.now()), 1000); 2026-10-24T02:55:13.1177893Z ╰──── 2026-10-24T02:55:13.1178482Z  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-24T02:55:13.1178838Z  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-24T02:55:13.1178842Z 2026-10-24T02:55:13.1179047Z ⚠ typescript(no-extraneous-class): Unexpected class with only a constructor. 2026-10-24T02:55:13.1179171Z ╭─[apps/desktop/src/preview/Manager.test.ts:158:18] 2026-10-24T02:55:13.1179271Z 157 │ BrowserWindow: browserWindowConstructor, 2026-10-24T02:55:13.1179428Z 158 │ ╭─▶ ClipboardItem: class { 2026-10-24T02:55:13.1179556Z 159 │ │ constructor(data: Record) { 2026-10-24T02:55:13.1179673Z 160 │ │ clipboardItemConstructor(data); 2026-10-24T02:55:13.1179752Z 161 │ │ } 2026-10-24T02:55:13.1179880Z 162 │ ╰─▶ }, 2026-10-24T02:55:13.1179944Z 163 │ clipboard: { 2026-10-24T02:55:13.1179995Z ╰──── 2026-10-24T02:55:13.1180158Z  help: Try replacing this class with a standalone function or deleting it entirely 2026-10-24T02:55:13.1180161Z 2026-10-24T02:55:13.1180616Z ⚠ 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-24T02:55:13.1180752Z ╭─[packages/contracts/src/composerContext.test.ts:181:18] 2026-10-24T02:55:13.1180883Z 180 │ it("sends a message without the records the wire cannot carry", () => { 2026-10-24T02:55:13.1181111Z 181 │ const wire = Schema.encodeUnknownSync(Schema.toCodecJson(OrchestrationMessageContext))({ 2026-10-24T02:55:13.1181287Z ·  ──────────────────────── 2026-10-24T02:55:13.1181351Z 182 │ version: 1, 2026-10-24T02:55:13.1181402Z ╰──── 2026-10-24T02:55:13.1181404Z 2026-10-24T02:55:13.1181591Z ⚠ eslint(no-unused-vars): Identifier 'Arr' is imported but never used. 2026-10-24T02:55:13.1181718Z ╭─[packages/client-runtime/src/state/threadSort.ts:4:13] 2026-10-24T02:55:13.1181833Z 3 │ import type { EnvironmentThreadShell } from "./models.ts"; 2026-10-24T02:55:13.1181914Z 4 │ import * as Arr from "effect/Array"; 2026-10-24T02:55:13.1181985Z ·  ─┬─ 2026-10-24T02:55:13.1182104Z · ╰── 'Arr' is imported here 2026-10-24T02:55:13.1182194Z 5 │ import * as Order from "effect/Order"; 2026-10-24T02:55:13.1182249Z ╰──── 2026-10-24T02:55:13.1182347Z  help: Consider removing this import. 2026-10-24T02:55:13.1182349Z 2026-10-24T02:55:13.1182536Z ⚠ eslint(no-unused-vars): Identifier 'Order' is imported but never used. 2026-10-24T02:55:13.1182664Z ╭─[packages/client-runtime/src/state/threadSort.ts:5:13] 2026-10-24T02:55:13.1182743Z 4 │ import * as Arr from "effect/Array"; 2026-10-24T02:55:13.1182822Z 5 │ import * as Order from "effect/Order"; 2026-10-24T02:55:13.1182894Z ·  ──┬── 2026-10-24T02:55:13.1183021Z · ╰── 'Order' is imported here 2026-10-24T02:55:13.1183073Z 6 │ 2026-10-24T02:55:13.1183124Z ╰──── 2026-10-24T02:55:13.1183219Z  help: Consider removing this import. 2026-10-24T02:55:13.1183221Z 2026-10-24T02:55:13.1183424Z ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed 2026-10-24T02:55:13.1183532Z ╭─[packages/contracts/src/rpc.ts:297:8] 2026-10-24T02:55:13.1183598Z 296 │ } from "./device.ts"; 2026-10-24T02:55:13.1183689Z 297 │ import {} from "./previewAutomation.ts"; 2026-10-24T02:55:13.1183758Z ·  ── 2026-10-24T02:55:13.1183817Z 298 │ import { 2026-10-24T02:55:13.1183869Z ╰──── 2026-10-24T02:55:13.1183946Z  help: Remove empty braces 2026-10-24T02:55:13.1183949Z 2026-10-24T02:55:13.1184131Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-24T02:55:13.1184255Z ╭─[packages/client-runtime/src/state/shell.ts:189:5] 2026-10-24T02:55:13.1184363Z 186 │ let waiting = yield* Ref.get(awaitingCompletion); 2026-10-24T02:55:13.1184434Z 187 │ let next = initial; 2026-10-24T02:55:13.1184506Z ·  ──┬─ 2026-10-24T02:55:13.1184624Z · ╰── From this accumulator 2026-10-24T02:55:13.1184705Z 188 │ let receivedSnapshot = false; 2026-10-24T02:55:13.1184778Z 189 │ for (const item of items) { 2026-10-24T02:55:13.1184846Z ·  ─┬─ 2026-10-24T02:55:13.1184950Z · ╰── For this loop 2026-10-24T02:55:13.1185038Z 190 │ if (item.kind === "synchronized") { 2026-10-24T02:55:13.1185103Z 191 │ waiting = false; 2026-10-24T02:55:13.1185194Z 192 │ if (Option.isSome(next.snapshot)) { 2026-10-24T02:55:13.1185312Z 193 │ next = { ...next, status: "live", error: Option.none() }; 2026-10-24T02:55:13.1185396Z ·  ───┬─── 2026-10-24T02:55:13.1185579Z · ╰── From this spread 2026-10-24T02:55:13.1185709Z 194 │ } 2026-10-24T02:55:13.1185761Z ╰──── 2026-10-24T02:55:13.1185912Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-24T02:55:13.1186066Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T02:55:13.1186069Z 2026-10-24T02:55:13.1186522Z ⚠ 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-24T02:55:13.1186667Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:169:7] 2026-10-24T02:55:13.1186729Z 168 │ }); 2026-10-24T02:55:13.1186925Z 169 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T02:55:13.1187116Z 170 │ │ if ((yield* SubscriptionRef.get(shellState)).status === "synchronizing") break; 2026-10-24T02:55:13.1187221Z 171 │ │ yield* Effect.yieldNow; 2026-10-24T02:55:13.1187350Z 172 │ ╰─▶ } 2026-10-24T02:55:13.1187403Z 173 │ 2026-10-24T02:55:13.1187454Z ╰──── 2026-10-24T02:55:13.1187457Z 2026-10-24T02:55:13.1187906Z ⚠ 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-24T02:55:13.1188056Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:178:7] 2026-10-24T02:55:13.1188165Z 177 │ yield* Deferred.succeed(releaseSave, undefined); 2026-10-24T02:55:13.1188351Z 178 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T02:55:13.1188484Z 179 │ │ if ((yield* Ref.get(saved)).length > 0) break; 2026-10-24T02:55:13.1188587Z 180 │ │ yield* Effect.yieldNow; 2026-10-24T02:55:13.1188714Z 181 │ ╰─▶ } 2026-10-24T02:55:13.1188805Z 182 │ 2026-10-24T02:55:13.1188864Z ╰──── 2026-10-24T02:55:13.1188867Z 2026-10-24T02:55:13.1189318Z ⚠ 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-24T02:55:13.1189464Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:307:7] 2026-10-24T02:55:13.1189587Z 306 │ yield* Deferred.succeed(releaseUnenrichedSave, undefined); 2026-10-24T02:55:13.1189772Z 307 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T02:55:13.1189891Z 308 │ │ const values = yield* Ref.get(saved); 2026-10-24T02:55:13.1190081Z 309 │ │ if (values.length > 0 && values.at(-1)?.projects[0]?.repositoryIdentity != null) { 2026-10-24T02:55:13.1190167Z 310 │ │ break; 2026-10-24T02:55:13.1190244Z 311 │ │ } 2026-10-24T02:55:13.1190346Z 312 │ │ yield* Effect.yieldNow; 2026-10-24T02:55:13.1190526Z 313 │ ╰─▶ } 2026-10-24T02:55:13.1190650Z 314 │ 2026-10-24T02:55:13.1190701Z ╰──── 2026-10-24T02:55:13.1190703Z 2026-10-24T02:55:13.1190885Z ⚠ eslint(no-unused-vars): Type 'Scope' is imported but never used. 2026-10-24T02:55:13.1191021Z ╭─[apps/server/src/provider/ProviderAuthService.ts:15:18] 2026-10-24T02:55:13.1191106Z 14 │ import * as Layer from "effect/Layer"; 2026-10-24T02:55:13.1191195Z 15 │ import type * as Scope from "effect/Scope"; 2026-10-24T02:55:13.1191275Z ·  ──┬── 2026-10-24T02:55:13.1191406Z · ╰── 'Scope' is imported here 2026-10-24T02:55:13.1191493Z 16 │ import * as Stream from "effect/Stream"; 2026-10-24T02:55:13.1191542Z ╰──── 2026-10-24T02:55:13.1191702Z  help: Consider removing this import. 2026-10-24T02:55:13.1191707Z 2026-10-24T02:55:13.1192145Z ⚠ 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-24T02:55:13.1192257Z ╭─[packages/contracts/src/auth.test.ts:17:12] 2026-10-24T02:55:13.1192410Z 16 │ it("decodes legacy review credentials without offering them in new grants", () => { 2026-10-24T02:55:13.1192574Z 17 │ expect(Schema.decodeUnknownSync(AuthEnvironmentScopes)(["review:write"])).toEqual([ 2026-10-24T02:55:13.1192677Z ·  ──────────────────────── 2026-10-24T02:55:13.1192743Z 18 │ "review:write", 2026-10-24T02:55:13.1192793Z ╰──── 2026-10-24T02:55:13.1192795Z 2026-10-24T02:55:13.1193152Z ⚠ 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-24T02:55:13.1193265Z ╭─[packages/contracts/src/auth.test.ts:20:18] 2026-10-24T02:55:13.1193322Z 19 │ ]); 2026-10-24T02:55:13.1193482Z 20 │ expect(() => Schema.decodeUnknownSync(AuthGrantScopes)(["review:write"])).toThrow(); 2026-10-24T02:55:13.1193589Z ·  ──────────────────────── 2026-10-24T02:55:13.1193718Z 21 │ expect(AuthStandardClientScopes).not.toContain("review:write"); 2026-10-24T02:55:13.1193769Z ╰──── 2026-10-24T02:55:13.1193772Z 2026-10-24T02:55:13.1194120Z ⚠ 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-24T02:55:13.1194232Z ╭─[packages/contracts/src/auth.test.ts:58:21] 2026-10-24T02:55:13.1194403Z 57 │ it("ignores unknown response permissions without falling back to broader scopes", () => { 2026-10-24T02:55:13.1194525Z 58 │ const session = Schema.decodeUnknownSync(AuthSessionState)({ 2026-10-24T02:55:13.1194630Z ·  ──────────────────────── 2026-10-24T02:55:13.1194698Z 59 │ authenticated: true, 2026-10-24T02:55:13.1194749Z ╰──── 2026-10-24T02:55:13.1194751Z 2026-10-24T02:55:13.1194946Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:55:13.1195087Z ╭─[apps/mobile/src/state/use-thread-outbox-drain.ts:1315:5] 2026-10-24T02:55:13.1195165Z 1314 │ queuedMessagesByThreadKey, 2026-10-24T02:55:13.1195228Z 1315 │ retryTick, 2026-10-24T02:55:13.1195303Z ·  ────┬──── 2026-10-24T02:55:13.1195510Z · ╰── Unnecessary dependency `retryTick` 2026-10-24T02:55:13.1195650Z 1316 │ restoreQueuedMessage, 2026-10-24T02:55:13.1195703Z ╰──── 2026-10-24T02:55:13.1195994Z  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-24T02:55:13.1196300Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.1196303Z 2026-10-24T02:55:13.1196749Z ⚠ 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-24T02:55:13.1196877Z ╭─[packages/contracts/src/baseSchemas.test.ts:39:9] 2026-10-24T02:55:13.1196946Z 38 │ JSON.stringify( 2026-10-24T02:55:13.1197063Z 39 │ Schema.encodeUnknownSync(Schema.toCodecJson(Named))([ 2026-10-24T02:55:13.1197160Z ·  ──────────────────────── 2026-10-24T02:55:13.1197225Z 40 │ { name: "a" }, 2026-10-24T02:55:13.1197276Z ╰──── 2026-10-24T02:55:13.1197278Z 2026-10-24T02:55:13.1197474Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:55:13.1197589Z ╭─[apps/mobile/src/state/thread-order.ts:29:7] 2026-10-24T02:55:13.1197661Z 28 │ getPendingThreadOrder(); 2026-10-24T02:55:13.1197742Z 29 │ }, [nowMinute, snoozeWakeTick]); 2026-10-24T02:55:13.1197863Z ·  ────┬──── ───────┬────── 2026-10-24T02:55:13.1198059Z · │ ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T02:55:13.1198198Z · ╰── Unnecessary dependency `nowMinute` 2026-10-24T02:55:13.1198264Z 30 │ return pending; 2026-10-24T02:55:13.1198314Z ╰──── 2026-10-24T02:55:13.1198598Z  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-24T02:55:13.1198933Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.1198939Z 2026-10-24T02:55:13.1199151Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T02:55:13.1199334Z ╭─[apps/mobile/src/state/use-composer-drafts.ts:1022:15] 2026-10-24T02:55:13.1199466Z 1021 │ instanceId, 2026-10-24T02:55:13.1199609Z 1022 │ { ...(persisted.modelOptionMemory[instanceId] ?? {}), ...models }, 2026-10-24T02:55:13.1199743Z ·  ────────────────────────────────────────────────── 2026-10-24T02:55:13.1199806Z 1023 │ ]), 2026-10-24T02:55:13.1199859Z ╰──── 2026-10-24T02:55:13.1200118Z  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-24T02:55:13.1200121Z 2026-10-24T02:55:13.1200308Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T02:55:13.1200453Z ╭─[apps/mobile/modules/t3-source-text/src/SourceText.tsx:36:9] 2026-10-24T02:55:13.1200545Z 35 │ 2026-10-24T02:55:13.1201587Z 35 │ instanceId === configured ? true : false, 2026-10-24T02:55:13.1201705Z ·  ──────────────────────────────────────── 2026-10-24T02:55:13.1201763Z 36 │ ); 2026-10-24T02:55:13.1201814Z ╰──── 2026-10-24T02:55:13.1201909Z  help: Remove this ternary operator 2026-10-24T02:55:13.1201911Z 2026-10-24T02:55:13.1202169Z ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'. 2026-10-24T02:55:13.1202286Z ╭─[apps/server/src/usage/UsageService.ts:169:7] 2026-10-24T02:55:13.1202338Z 168 │ 2026-10-24T02:55:13.1202416Z 169 │ const layerTest = Layer.succeed( 2026-10-24T02:55:13.1202489Z ·  ────┬──── 2026-10-24T02:55:13.1202620Z · ╰── 'layerTest' is declared here 2026-10-24T02:55:13.1202685Z 170 │ UsageService, 2026-10-24T02:55:13.1202738Z ╰──── 2026-10-24T02:55:13.1202847Z  help: Consider removing this declaration. 2026-10-24T02:55:13.1202853Z 2026-10-24T02:55:13.1203307Z ⚠ 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-24T02:55:13.1203435Z ╭─[apps/server/src/usage/UsageService.test.ts:2383:7] 2026-10-24T02:55:13.1203532Z 2382 │ let orphanedAt: number | undefined; 2026-10-24T02:55:13.1203758Z 2383 │ ╭─▶ for (let interruptAt = 1; interruptAt <= 31; interruptAt += 1) { 2026-10-24T02:55:13.1203876Z 2384 │ │ const tasks: Array<() => void> = []; 2026-10-24T02:55:13.1204094Z 2385 │ │ const dispatcher: Scheduler.SchedulerDispatcher = { 2026-10-24T02:55:13.1204289Z 2386 │ │ scheduleTask: (task) => tasks.push(task), 2026-10-24T02:55:13.1204387Z 2387 │ │ flush: () => { 2026-10-24T02:55:13.1204507Z 2388 │ │ let task: (() => void) | undefined; 2026-10-24T02:55:13.1204654Z 2389 │ │ while ((task = tasks.shift()) !== undefined) task(); 2026-10-24T02:55:13.1204738Z 2390 │ │ }, 2026-10-24T02:55:13.1204819Z 2391 │ │ }; 2026-10-24T02:55:13.1204888Z 2392 │ │ 2026-10-24T02:55:13.1205046Z 2393 │ │ let requestFiber: Fiber.Fiber | undefined; 2026-10-24T02:55:13.1205153Z 2394 │ │ let requestChecks = 0; 2026-10-24T02:55:13.1205289Z 2395 │ │ const scheduler: Scheduler.Scheduler = { 2026-10-24T02:55:13.1205399Z 2396 │ │ executionMode: "async", 2026-10-24T02:55:13.1205517Z 2397 │ │ makeDispatcher: () => dispatcher, 2026-10-24T02:55:13.1205629Z 2398 │ │ shouldYield: (fiber) => { 2026-10-24T02:55:13.1205762Z 2399 │ │ if (fiber !== requestFiber) return false; 2026-10-24T02:55:13.1205864Z 2400 │ │ requestChecks += 1; 2026-10-24T02:55:13.1206008Z 2401 │ │ if (requestChecks !== interruptAt) return false; 2026-10-24T02:55:13.1206124Z 2402 │ │ fiber.interruptUnsafe(); 2026-10-24T02:55:13.1206221Z 2403 │ │ return true; 2026-10-24T02:55:13.1206307Z 2404 │ │ }, 2026-10-24T02:55:13.1206391Z 2405 │ │ }; 2026-10-24T02:55:13.1206461Z 2406 │ │ 2026-10-24T02:55:13.1206581Z 2407 │ │ const input: UsageSummaryInput = { 2026-10-24T02:55:13.1206672Z 2408 │ │ ...WINDOW, 2026-10-24T02:55:13.1206799Z 2409 │ │ sinceDay: UsageDay.make("2026-09-01"), 2026-10-24T02:55:13.1206988Z 2410 │ │ untilDay: UsageDay.make(`2026-08-${String(interruptAt).padStart(2, "0")}`), 2026-10-24T02:55:13.1207067Z 2411 │ │ }; 2026-10-24T02:55:13.1207179Z 2412 │ │ const first = yield* service 2026-10-24T02:55:13.1207283Z 2413 │ │ .readSummary(input) 2026-10-24T02:55:13.1207375Z 2414 │ │ .pipe( 2026-10-24T02:55:13.1207476Z 2415 │ │ Effect.exit, 2026-10-24T02:55:13.1207630Z 2416 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-24T02:55:13.1207733Z 2417 │ │ Effect.forkChild, 2026-10-24T02:55:13.1207815Z 2418 │ │ ); 2026-10-24T02:55:13.1207915Z 2419 │ │ requestFiber = first; 2026-10-24T02:55:13.1208018Z 2420 │ │ yield* Effect.yieldNow; 2026-10-24T02:55:13.1208120Z 2421 │ │ dispatcher.flush(); 2026-10-24T02:55:13.1208190Z 2422 │ │ 2026-10-24T02:55:13.1208340Z 2423 │ │ const second = yield* service.readSummary(input).pipe( 2026-10-24T02:55:13.1208488Z 2424 │ │ Effect.match({ 2026-10-24T02:55:13.1208676Z 2425 │ │ onFailure: (error) => error.reason, 2026-10-24T02:55:13.1208811Z 2426 │ │ onSuccess: () => "success" as const, 2026-10-24T02:55:13.1208929Z 2427 │ │ }), 2026-10-24T02:55:13.1209082Z 2428 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-24T02:55:13.1209183Z 2429 │ │ Effect.forkChild, 2026-10-24T02:55:13.1209263Z 2430 │ │ ); 2026-10-24T02:55:13.1209367Z 2431 │ │ yield* Effect.yieldNow; 2026-10-24T02:55:13.1209468Z 2432 │ │ dispatcher.flush(); 2026-10-24T02:55:13.1209590Z 2433 │ │ const secondExit = second.pollUnsafe(); 2026-10-24T02:55:13.1209710Z 2434 │ │ if (secondExit === undefined) { 2026-10-24T02:55:13.1209827Z 2435 │ │ second.interruptUnsafe(); 2026-10-24T02:55:13.1209938Z 2436 │ │ orphanedAt = interruptAt; 2026-10-24T02:55:13.1210022Z 2437 │ │ break; 2026-10-24T02:55:13.1210102Z 2438 │ │ } 2026-10-24T02:55:13.1210218Z 2439 │ │ if (Exit.isFailure(secondExit)) { 2026-10-24T02:55:13.1210373Z 2440 │ │ assert.fail("the matching request fiber was interrupted"); 2026-10-24T02:55:13.1210449Z 2441 │ │ } 2026-10-24T02:55:13.1210598Z 2442 │ │ assert.strictEqual(secondExit.value, "invalidWindow"); 2026-10-24T02:55:13.1210736Z 2443 │ ╰─▶ } 2026-10-24T02:55:13.1210795Z 2444 │ 2026-10-24T02:55:13.1210847Z ╰──── 2026-10-24T02:55:13.1210849Z 2026-10-24T02:55:13.1211014Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T02:55:13.1211152Z ╭─[apps/server/src/process/externalLauncher.test.ts:186:12] 2026-10-24T02:55:13.1211205Z 185 │ 2026-10-24T02:55:13.1211304Z 186 │ for (const {} of ["darwin", "linux"] as const) { 2026-10-24T02:55:13.1211375Z ·  ── 2026-10-24T02:55:13.1211427Z 187 │ } 2026-10-24T02:55:13.1211478Z ╰──── 2026-10-24T02:55:13.1211703Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T02:55:13.1211705Z 2026-10-24T02:55:13.1211866Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T02:55:13.1212007Z ╭─[apps/server/src/process/externalLauncher.test.ts:189:12] 2026-10-24T02:55:13.1212063Z 188 │ 2026-10-24T02:55:13.1212126Z 189 │ for (const {} of [ 2026-10-24T02:55:13.1212195Z ·  ── 2026-10-24T02:55:13.1212285Z 190 │ { kind: "browser", folderVerb: "none" }, 2026-10-24T02:55:13.1212337Z ╰──── 2026-10-24T02:55:13.1212555Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T02:55:13.1212558Z 2026-10-24T02:55:13.1212720Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T02:55:13.1212852Z ╭─[apps/server/src/process/externalLauncher.test.ts:311:12] 2026-10-24T02:55:13.1212905Z 310 │ 2026-10-24T02:55:13.1213083Z 311 │ for (const {} of ["rejected", "spawn-error", "stalled"] as const) { 2026-10-24T02:55:13.1213222Z ·  ── 2026-10-24T02:55:13.1213275Z 312 │ } 2026-10-24T02:55:13.1213325Z ╰──── 2026-10-24T02:55:13.1213543Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T02:55:13.1213545Z 2026-10-24T02:55:13.1213704Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T02:55:13.1213838Z ╭─[apps/server/src/process/externalLauncher.test.ts:314:12] 2026-10-24T02:55:13.1213889Z 313 │ 2026-10-24T02:55:13.1213951Z 314 │ for (const {} of [ 2026-10-24T02:55:13.1214020Z ·  ── 2026-10-24T02:55:13.1214074Z 315 │ { 2026-10-24T02:55:13.1214125Z ╰──── 2026-10-24T02:55:13.1214346Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T02:55:13.1214352Z 2026-10-24T02:55:13.1214786Z ⚠ 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-24T02:55:13.1214915Z ╭─[apps/server/src/assets/AssetAccess.test.ts:1043:32] 2026-10-24T02:55:13.1215050Z 1042 │ expect(error._tag).toBe("AssetGitHubMediaUrlValidationError"); 2026-10-24T02:55:13.1215234Z 1043 │ const encoded = yield* Schema.encodeEffect(Schema.fromJsonString(AssetAccessError))(error); 2026-10-24T02:55:13.1215349Z ·  ─────────────────── 2026-10-24T02:55:13.1215443Z 1044 │ expect(encoded).not.toContain(url); 2026-10-24T02:55:13.1215497Z ╰──── 2026-10-24T02:55:13.1215500Z 2026-10-24T02:55:13.1215721Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T02:55:13.1215855Z ╭─[apps/mobile/src/state/use-model-option-memory.ts:21:7] 2026-10-24T02:55:13.1215920Z 20 │ [instanceId]: { 2026-10-24T02:55:13.1216001Z 21 │ ...(state[instanceId] ?? {}), 2026-10-24T02:55:13.1216101Z ·  ──────────────────────────── 2026-10-24T02:55:13.1216167Z 22 │ [model]: options, 2026-10-24T02:55:13.1216218Z ╰──── 2026-10-24T02:55:13.1216478Z  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-24T02:55:13.1216481Z 2026-10-24T02:55:13.1216687Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T02:55:13.1216825Z ╭─[packages/shared/src/composerContextLegacySend.ts:19:45] 2026-10-24T02:55:13.1216952Z 18 │ const occurrences = collectComposerContextReferences(text); 2026-10-24T02:55:13.1217060Z 19 │ for (const occurrence of [...occurrences].reverse()) { 2026-10-24T02:55:13.1217169Z ·  ─────── 2026-10-24T02:55:13.1217277Z 20 │ const record = recordsById.get(occurrence.contextId); 2026-10-24T02:55:13.1217328Z ╰──── 2026-10-24T02:55:13.1217583Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T02:55:13.1217585Z 2026-10-24T02:55:13.1217798Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T02:55:13.1217977Z ╭─[scripts/lib/cli-external-packages.test.ts:114:11] 2026-10-24T02:55:13.1218109Z 113 │ const declared = { 2026-10-24T02:55:13.1218200Z 114 │ ...(manifest.dependencies ?? {}), 2026-10-24T02:55:13.1218308Z ·  ──────────────────────────────── 2026-10-24T02:55:13.1218410Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T02:55:13.1218461Z ╰──── 2026-10-24T02:55:13.1218721Z  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-24T02:55:13.1218724Z 2026-10-24T02:55:13.1218978Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T02:55:13.1219102Z ╭─[scripts/lib/cli-external-packages.test.ts:115:11] 2026-10-24T02:55:13.1219189Z 114 │ ...(manifest.dependencies ?? {}), 2026-10-24T02:55:13.1219296Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T02:55:13.1219416Z ·  ──────────────────────────────────────── 2026-10-24T02:55:13.1219512Z 116 │ ...(manifest.peerDependencies ?? {}), 2026-10-24T02:55:13.1219562Z ╰──── 2026-10-24T02:55:13.1219817Z  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-24T02:55:13.1219820Z 2026-10-24T02:55:13.1220029Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T02:55:13.1220152Z ╭─[scripts/lib/cli-external-packages.test.ts:116:11] 2026-10-24T02:55:13.1220250Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T02:55:13.1220344Z 116 │ ...(manifest.peerDependencies ?? {}), 2026-10-24T02:55:13.1220461Z ·  ──────────────────────────────────── 2026-10-24T02:55:13.1220525Z 117 │ }; 2026-10-24T02:55:13.1220574Z ╰──── 2026-10-24T02:55:13.1220828Z  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-24T02:55:13.1220830Z 2026-10-24T02:55:13.1221284Z ⚠ 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-24T02:55:13.1221459Z ╭─[apps/mobile/src/features/agent-awareness/remoteRegistration.test.ts:223:5] 2026-10-24T02:55:13.1221531Z 222 │ let idlePasses = 0; 2026-10-24T02:55:13.1221730Z 223 │ ╭─▶ for (;;) { 2026-10-24T02:55:13.1221936Z 224 │ │ yield* Effect.promise(() => Promise.resolve()); 2026-10-24T02:55:13.1222078Z 225 │ │ const pending = backgroundRuntime.pending.shift(); 2026-10-24T02:55:13.1222171Z 226 │ │ if (!pending) { 2026-10-24T02:55:13.1222262Z 227 │ │ idlePasses++; 2026-10-24T02:55:13.1222362Z 228 │ │ if (idlePasses >= 3) { 2026-10-24T02:55:13.1222448Z 229 │ │ return; 2026-10-24T02:55:13.1222525Z 230 │ │ } 2026-10-24T02:55:13.1222609Z 231 │ │ continue; 2026-10-24T02:55:13.1222684Z 232 │ │ } 2026-10-24T02:55:13.1222777Z 233 │ │ idlePasses = 0; 2026-10-24T02:55:13.1222898Z 234 │ │ const exit = yield* Effect.exit( 2026-10-24T02:55:13.1223105Z 235 │ │ pending.operation as Effect.Effect, 2026-10-24T02:55:13.1223181Z 236 │ │ ); 2026-10-24T02:55:13.1223285Z 237 │ │ yield* Effect.sync(() => { 2026-10-24T02:55:13.1223387Z 238 │ │ pending.resolve(exit); 2026-10-24T02:55:13.1223462Z 239 │ │ }); 2026-10-24T02:55:13.1223591Z 240 │ ╰─▶ } 2026-10-24T02:55:13.1223649Z 241 │ }, 2026-10-24T02:55:13.1223701Z ╰──── 2026-10-24T02:55:13.1223703Z 2026-10-24T02:55:13.1223960Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:55:13.1224133Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:123:7] 2026-10-24T02:55:13.1224187Z 118 │ 2026-10-24T02:55:13.1224253Z 119 │ useEffect(() => { 2026-10-24T02:55:13.1224324Z ·  ────┬──── 2026-10-24T02:55:13.1224452Z · ╰── This is the containing effect 2026-10-24T02:55:13.1224532Z 120 │ if (orientationSettled) return; 2026-10-24T02:55:13.1224644Z 121 │ const orientation = getNativeShowcaseOrientation(); 2026-10-24T02:55:13.1224717Z 122 │ if (orientation === null) { 2026-10-24T02:55:13.1224797Z 123 │ setOrientationSettled(true); 2026-10-24T02:55:13.1224886Z ·  ──────────┬────────── 2026-10-24T02:55:13.1225064Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:55:13.1225128Z 124 │ return; 2026-10-24T02:55:13.1225178Z ╰──── 2026-10-24T02:55:13.1225765Z  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-24T02:55:13.1226082Z  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-24T02:55:13.1226084Z 2026-10-24T02:55:13.1226337Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:55:13.1226556Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:304:7] 2026-10-24T02:55:13.1226676Z 292 │ 2026-10-24T02:55:13.1226742Z 293 │ useEffect(() => { 2026-10-24T02:55:13.1226815Z ·  ────┬──── 2026-10-24T02:55:13.1226941Z · ╰── This is the containing effect 2026-10-24T02:55:13.1226999Z 294 │ if ( 2026-10-24T02:55:13.1227066Z 295 │ scene === null || 2026-10-24T02:55:13.1227143Z 296 │ requestedScene === null || 2026-10-24T02:55:13.1227218Z 297 │ scene !== requestedScene || 2026-10-24T02:55:13.1227283Z 298 │ !hasFixture || 2026-10-24T02:55:13.1227356Z 299 │ !orientationSettled || 2026-10-24T02:55:13.1227421Z 300 │ !themeApplied || 2026-10-24T02:55:13.1227536Z 301 │ (scene === "agent-activity" && !agentActivityStaged) || 2026-10-24T02:55:13.1227675Z 302 │ !isShowcaseNativeContentReady({ scene, themeId, renderSignal }) 2026-10-24T02:55:13.1227734Z 303 │ ) { 2026-10-24T02:55:13.1227800Z 304 │ setReadyScene(null); 2026-10-24T02:55:13.1227881Z ·  ──────┬────── 2026-10-24T02:55:13.1228047Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:55:13.1228109Z 305 │ return; 2026-10-24T02:55:13.1228159Z ╰──── 2026-10-24T02:55:13.1228768Z  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-24T02:55:13.1229091Z  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-24T02:55:13.1229096Z 2026-10-24T02:55:13.1229361Z ⚠ eslint(no-unused-vars): Variable 'lastOutcome' is declared but never used. Unused variables should start with a '_'. 2026-10-24T02:55:13.1229528Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:128:9] 2026-10-24T02:55:13.1229595Z 127 │ let cancelled = false; 2026-10-24T02:55:13.1229686Z 128 │ let lastOutcome: string | null = null; 2026-10-24T02:55:13.1229764Z ·  ─────┬───── 2026-10-24T02:55:13.1229899Z · ╰── 'lastOutcome' is declared here 2026-10-24T02:55:13.1230071Z 129 │ void retryShowcaseOperation(async () => applyNativeShowcaseOrientation(orientation), { 2026-10-24T02:55:13.1230122Z ╰──── 2026-10-24T02:55:13.1230231Z  help: Consider removing this declaration. 2026-10-24T02:55:13.1230237Z 2026-10-24T02:55:13.1230427Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T02:55:13.1230577Z ╭─[apps/mobile/src/features/review/ReviewCommentCard.tsx:223:31] 2026-10-24T02:55:13.1230681Z 222 │ ? snippetTokens.map((line, lineIndex) => ( 2026-10-24T02:55:13.1230774Z 223 │ 2026-10-24T02:55:13.1230878Z ·  ─────────────── 2026-10-24T02:55:13.1230969Z 224 │ {lineIndex > 0 ? "\n" : ""} 2026-10-24T02:55:13.1231019Z ╰──── 2026-10-24T02:55:13.1231163Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T02:55:13.1231166Z 2026-10-24T02:55:13.1231409Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T02:55:13.1231625Z ╭─[apps/mobile/src/features/review/ReviewCommentCard.tsx:227:25] 2026-10-24T02:55:13.1232000Z 226 │ { 2026-10-24T02:55:13.1233089Z ·  ────┬──── 2026-10-24T02:55:13.1233215Z · ╰── This is the containing effect 2026-10-24T02:55:13.1233292Z 106 │ clearReviewCommentTarget(); 2026-10-24T02:55:13.1233388Z 107 │ setPendingNativeCommentSelection(null); 2026-10-24T02:55:13.1233493Z ·  ────────────────┬─────────────── 2026-10-24T02:55:13.1233665Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:55:13.1233735Z 108 │ }, [selectedSection?.id]); 2026-10-24T02:55:13.1233787Z ╰──── 2026-10-24T02:55:13.1234374Z  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-24T02:55:13.1234697Z  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-24T02:55:13.1234700Z 2026-10-24T02:55:13.1234950Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:55:13.1235129Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:112:7] 2026-10-24T02:55:13.1235183Z 109 │ 2026-10-24T02:55:13.1235248Z 110 │ useEffect(() => { 2026-10-24T02:55:13.1235319Z ·  ────┬──── 2026-10-24T02:55:13.1235448Z · ╰── This is the containing effect 2026-10-24T02:55:13.1235538Z 111 │ if (activeCommentTarget === null) { 2026-10-24T02:55:13.1235637Z 112 │ setPendingNativeCommentSelection(null); 2026-10-24T02:55:13.1235743Z ·  ────────────────┬─────────────── 2026-10-24T02:55:13.1235914Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:55:13.1235970Z 113 │ } 2026-10-24T02:55:13.1236023Z ╰──── 2026-10-24T02:55:13.1236600Z  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-24T02:55:13.1236983Z  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-24T02:55:13.1237042Z 2026-10-24T02:55:13.1237272Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:55:13.1237455Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:108:7] 2026-10-24T02:55:13.1237551Z 107 │ setPendingNativeCommentSelection(null); 2026-10-24T02:55:13.1237622Z 108 │ }, [selectedSection?.id]); 2026-10-24T02:55:13.1237707Z ·  ─────────┬───────── 2026-10-24T02:55:13.1237865Z · ╰── Unnecessary dependency `selectedSection?.id` 2026-10-24T02:55:13.1237918Z 109 │ 2026-10-24T02:55:13.1237968Z ╰──── 2026-10-24T02:55:13.1238258Z  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-24T02:55:13.1238565Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.1238567Z 2026-10-24T02:55:13.1239071Z ⚠ 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-24T02:55:13.1239194Z ╭─[packages/shared/src/atomicWrite.test.ts:139:5] 2026-10-24T02:55:13.1239272Z 138 │ Effect.gen(function* () { 2026-10-24T02:55:13.1239463Z 139 │ ╭─▶ while (fiber.pollUnsafe() === undefined) { 2026-10-24T02:55:13.1239587Z 140 │ │ yield* TestClock.adjust("100 millis"); 2026-10-24T02:55:13.1239899Z 141 │ │ // oxlint-disable-next-line t3code/no-real-time-wait-in-tests -- a macrotask boundary so the real stat I/O can finish; time moves only via TestClock 2026-10-24T02:55:13.1240080Z 142 │ │ yield* Effect.promise(() => new Promise((resolve) => setImmediate(resolve))); 2026-10-24T02:55:13.1240204Z 143 │ ╰─▶ } 2026-10-24T02:55:13.1240288Z 144 │ return yield* Fiber.join(fiber); 2026-10-24T02:55:13.1240339Z ╰──── 2026-10-24T02:55:13.1240342Z 2026-10-24T02:55:13.1240523Z ⚠ react(static-components): Cannot create components during render 2026-10-24T02:55:13.1240730Z ╭─[apps/mobile/src/features/terminal/NativeTerminalSurface.tsx:234:10] 2026-10-24T02:55:13.1240881Z 196 │ const { onInput, onResize } = props; 2026-10-24T02:55:13.1241025Z 197 │ const NativeTerminalSurfaceView = resolveNativeTerminalSurfaceView(); 2026-10-24T02:55:13.1241156Z ·  ────────────────┬─────────────── 2026-10-24T02:55:13.1241342Z · ╰── The component is created during render here 2026-10-24T02:55:13.1241467Z 198 │ const hasNativeSurface = Boolean(NativeTerminalSurfaceView); 2026-10-24T02:55:13.1241518Z 199 │ 2026-10-24T02:55:13.1241583Z 200 │ useEffect(() => { 2026-10-24T02:55:13.1241668Z 201 │ terminalDebugLog("native:surface", { 2026-10-24T02:55:13.1241751Z 202 │ terminalKey: props.terminalKey, 2026-10-24T02:55:13.1241825Z 203 │ native: hasNativeSurface, 2026-10-24T02:55:13.1241964Z 204 │ hardwareKeyRevision: getNativeTerminalHardwareKeyRevision(), 2026-10-24T02:55:13.1242050Z 205 │ bufferLen: props.buffer.length, 2026-10-24T02:55:13.1242126Z 206 │ isRunning: props.isRunning, 2026-10-24T02:55:13.1242183Z 207 │ }); 2026-10-24T02:55:13.1242341Z 208 │ }, [hasNativeSurface, props.buffer.length, props.isRunning, props.terminalKey]); 2026-10-24T02:55:13.1242426Z 209 │ const handleNativeInput = useCallback( 2026-10-24T02:55:13.1242539Z 210 │ (event: NativeSyntheticEvent) => { 2026-10-24T02:55:13.1242637Z 211 │ if (!props.isRunning || props.readOnly) { 2026-10-24T02:55:13.1242700Z 212 │ return; 2026-10-24T02:55:13.1242755Z 213 │ } 2026-10-24T02:55:13.1242842Z 214 │ terminalDebugLog("native:onInput", { 2026-10-24T02:55:13.1242996Z 215 │ codes: Array.from(event.nativeEvent.data, (char) => char.codePointAt(0)), 2026-10-24T02:55:13.1243057Z 216 │ }); 2026-10-24T02:55:13.1243141Z 217 │ onInput(event.nativeEvent.data); 2026-10-24T02:55:13.1243197Z 218 │ }, 2026-10-24T02:55:13.1243294Z 219 │ [onInput, props.isRunning, props.readOnly], 2026-10-24T02:55:13.1243348Z 220 │ ); 2026-10-24T02:55:13.1243434Z 221 │ const handleNativeResize = useCallback( 2026-10-24T02:55:13.1243548Z 222 │ (event: NativeSyntheticEvent) => { 2026-10-24T02:55:13.1243611Z 223 │ onResize({ 2026-10-24T02:55:13.1243693Z 224 │ cols: event.nativeEvent.cols, 2026-10-24T02:55:13.1243771Z 225 │ rows: event.nativeEvent.rows, 2026-10-24T02:55:13.1243829Z 226 │ }); 2026-10-24T02:55:13.1243884Z 227 │ }, 2026-10-24T02:55:13.1243946Z 228 │ [onResize], 2026-10-24T02:55:13.1243998Z 229 │ ); 2026-10-24T02:55:13.1244050Z 230 │ 2026-10-24T02:55:13.1244139Z 231 │ if (NativeTerminalSurfaceView) { 2026-10-24T02:55:13.1244199Z 232 │ return ( 2026-10-24T02:55:13.1244275Z 233 │ 2026-10-24T02:55:13.1244355Z 234 │ (null); 2026-10-24T02:55:13.1248209Z 495 │ const showcasedReviewDrawRef = useRef(null); 2026-10-24T02:55:13.1248338Z 496 │ const [isPullRefreshing, setIsPullRefreshing] = useState(false); 2026-10-24T02:55:13.1248429Z 497 │ const handlePullToRefresh = async () => { 2026-10-24T02:55:13.1248504Z 498 │ setIsPullRefreshing(true); 2026-10-24T02:55:13.1248586Z 499 │ await refreshSelectedSection(); 2026-10-24T02:55:13.1248660Z 500 │ setIsPullRefreshing(false); 2026-10-24T02:55:13.1248713Z 501 │ }; 2026-10-24T02:55:13.1248891Z 502 │ const reviewFileNavigatorRef = useRef(null); 2026-10-24T02:55:13.1249038Z 503 │ const reviewFiles = parsedDiff.kind === "files" ? parsedDiff.files : []; 2026-10-24T02:55:13.1249144Z 504 │ const fileVisibility = useReviewFileVisibility({ 2026-10-24T02:55:13.1249227Z 505 │ threadKey: reviewCache.threadKey, 2026-10-24T02:55:13.1249313Z 506 │ sectionId: selectedSection?.id ?? null, 2026-10-24T02:55:13.1249380Z 507 │ files: reviewFiles, 2026-10-24T02:55:13.1249479Z 508 │ cachedExpandedFileIds: selectedSection?.id 2026-10-24T02:55:13.1249608Z 509 │ ? reviewCache.expandedFileIdsBySection[selectedSection.id] 2026-10-24T02:55:13.1249670Z 510 │ : undefined, 2026-10-24T02:55:13.1249762Z 511 │ cachedViewedFileIds: selectedSection?.id 2026-10-24T02:55:13.1249883Z 512 │ ? reviewCache.viewedFileIdsBySection[selectedSection.id] 2026-10-24T02:55:13.1249944Z 513 │ : undefined, 2026-10-24T02:55:13.1249998Z 514 │ }); 2026-10-24T02:55:13.1250238Z 515 │ const { collapsedFileIds, toggleExpandedFile, toggleViewedFile, viewedFileIds } = fileVisibility; 2026-10-24T02:55:13.1250436Z 516 │ const commentSelection = useReviewCommentSelectionController({ 2026-10-24T02:55:13.1250496Z 517 │ environmentId, 2026-10-24T02:55:13.1250558Z 518 │ threadId, 2026-10-24T02:55:13.1250625Z 519 │ selectedSection, 2026-10-24T02:55:13.1250695Z 520 │ nativeReviewDiffData, 2026-10-24T02:55:13.1250747Z 521 │ }); 2026-10-24T02:55:13.1250852Z 522 │ const nativeBridge = useNativeReviewDiffBridge({ 2026-10-24T02:55:13.1250935Z 523 │ threadKey: reviewCache.threadKey, 2026-10-24T02:55:13.1251023Z 524 │ sectionId: selectedSection?.id ?? null, 2026-10-24T02:55:13.1251099Z 525 │ diff: selectedSection?.diff, 2026-10-24T02:55:13.1251174Z 526 │ data: nativeReviewDiffData, 2026-10-24T02:55:13.1251241Z 527 │ collapsedFileIds, 2026-10-24T02:55:13.1251308Z 528 │ viewedFileIds, 2026-10-24T02:55:13.1251417Z 529 │ selectedRowIds: commentSelection.selectedRowIds, 2026-10-24T02:55:13.1251514Z 530 │ canHighlight: parsedDiff.kind === "files", 2026-10-24T02:55:13.1251568Z 531 │ }); 2026-10-24T02:55:13.1251642Z 532 │ const showcaseReviewKey = 2026-10-24T02:55:13.1251770Z 533 │ SHOWCASE_ENABLED && parsedDiff.kind === "files" && selectedSection 2026-10-24T02:55:13.1251975Z 534 │ ? `${reviewCache.threadKey}:${selectedSection.id}:${nativeBridge.tokensResetKey}:${nativeBridge.themeId}` 2026-10-24T02:55:13.1252036Z 535 │ : null; 2026-10-24T02:55:13.1252199Z 536 │ const handleNativeDebug = (event: NativeSyntheticEvent>) => { 2026-10-24T02:55:13.1252274Z 537 │ nativeBridge.onDebug(event); 2026-10-24T02:55:13.1252332Z 538 │ if ( 2026-10-24T02:55:13.1252418Z 539 │ showcaseReviewKey === null || 2026-10-24T02:55:13.1252539Z 540 │ showcasedReviewDrawRef.current === showcaseReviewKey || 2026-10-24T02:55:13.1252646Z 541 │ !isNativeReviewDiffDrawEvent(event.nativeEvent) 2026-10-24T02:55:13.1252701Z 542 │ ) { 2026-10-24T02:55:13.1252761Z 543 │ return; 2026-10-24T02:55:13.1252814Z 544 │ } 2026-10-24T02:55:13.1252925Z 545 │ showcasedReviewDrawRef.current = showcaseReviewKey; 2026-10-24T02:55:13.1253085Z 546 │ reportShowcaseSceneRendered({ scene: "review", themeId: nativeBridge.themeId }); 2026-10-24T02:55:13.1253139Z 547 │ }; 2026-10-24T02:55:13.1253188Z 548 │ 2026-10-24T02:55:13.1253304Z 549 │ const handleSelectFile = async (fileId: string | null) => { 2026-10-24T02:55:13.1253382Z 550 │ loadVisibleFile(fileId, true); 2026-10-24T02:55:13.1253469Z 551 │ commentSelection.clearSelection(); 2026-10-24T02:55:13.1253592Z 552 │ if (fileId !== null && collapsedFileIds.includes(fileId)) { 2026-10-24T02:55:13.1253673Z 553 │ toggleExpandedFile(fileId); 2026-10-24T02:55:13.1253726Z 554 │ } 2026-10-24T02:55:13.1253838Z 555 │ const nativeView = nativeReviewDiffViewRef.current; 2026-10-24T02:55:13.1253907Z 556 │ if (!nativeView) return; 2026-10-24T02:55:13.1253998Z 557 │ const result = await settlePromise(() => 2026-10-24T02:55:13.1254168Z 558 │ fileId === null ? nativeView.scrollToTop(true) : nativeView.scrollToFile(fileId, true), 2026-10-24T02:55:13.1254224Z 559 │ ); 2026-10-24T02:55:13.1254309Z 560 │ if (AsyncResult.isFailure(result)) { 2026-10-24T02:55:13.1254485Z 561 │ console.error("[review] Failed to navigate to diff file", squashAtomCommandFailure(result)); 2026-10-24T02:55:13.1254539Z 562 │ } 2026-10-24T02:55:13.1254593Z 563 │ }; 2026-10-24T02:55:13.1254725Z 564 │ const handleVisibleFileChange = ( 2026-10-24T02:55:13.1254928Z 565 │ event: NativeSyntheticEvent<{ readonly fileId?: string | null }>, 2026-10-24T02:55:13.1254984Z 566 │ ) => { 2026-10-24T02:55:13.1255093Z 567 │ loadVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-24T02:55:13.1255256Z 568 │ reviewFileNavigatorRef.current?.setVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-24T02:55:13.1255310Z 569 │ }; 2026-10-24T02:55:13.1255388Z 570 │ const renderInspector = () => ( 2026-10-24T02:55:13.1255457Z 571 │ void handleSelectFile(fileId)} 2026-10-24T02:55:13.1255969Z 577 │ /> 2026-10-24T02:55:13.1256022Z 578 │ ); 2026-10-24T02:55:13.1256072Z 579 │ 2026-10-24T02:55:13.1256254Z 580 │ const handleNativeToggleFile = (event: NativeSyntheticEvent<{ readonly fileId?: string }>) => { 2026-10-24T02:55:13.1256342Z 581 │ const { fileId } = event.nativeEvent; 2026-10-24T02:55:13.1256405Z 582 │ if (fileId) { 2026-10-24T02:55:13.1256483Z 583 │ loadVisibleFile(fileId, true); 2026-10-24T02:55:13.1256561Z 584 │ toggleExpandedFile(fileId); 2026-10-24T02:55:13.1256615Z 585 │ } 2026-10-24T02:55:13.1256667Z 586 │ }; 2026-10-24T02:55:13.1256717Z 587 │ 2026-10-24T02:55:13.1256804Z 588 │ const handleNativeToggleViewedFile = ( 2026-10-24T02:55:13.1256921Z 589 │ event: NativeSyntheticEvent<{ readonly fileId?: string }>, 2026-10-24T02:55:13.1256978Z 590 │ ) => { 2026-10-24T02:55:13.1257067Z 591 │ const { fileId } = event.nativeEvent; 2026-10-24T02:55:13.1257132Z 592 │ if (fileId) { 2026-10-24T02:55:13.1257206Z 593 │ toggleViewedFile(fileId); 2026-10-24T02:55:13.1257259Z 594 │ } 2026-10-24T02:55:13.1257309Z 595 │ }; 2026-10-24T02:55:13.1257361Z 596 │ 2026-10-24T02:55:13.1257432Z 597 │ const parsedDiffNotice = 2026-10-24T02:55:13.1257588Z 598 │ parsedDiff.kind === "files" || parsedDiff.kind === "raw" ? parsedDiff.notice : null; 2026-10-24T02:55:13.1257707Z 599 │ const hasCachedSelectedDiff = selectedSection?.diff != null; 2026-10-24T02:55:13.1257860Z 600 │ const hasAnyCachedDiff = reviewSections.some((section) => section.diff != null); 2026-10-24T02:55:13.1257977Z 601 │ const sectionMenu = buildReviewSectionMenu(reviewSections); 2026-10-24T02:55:13.1258132Z 602 │ const { showConnectionNotice, showSectionToolbar } = resolveReviewAvailability({ 2026-10-24T02:55:13.1258246Z 603 │ hasEnvironmentPresentation: environment.isReady, 2026-10-24T02:55:13.1259883Z 604 │ isEnvironmentConnected: isEnvironmentReady, 2026-10-24T02:55:13.1259964Z 605 │ hasCachedSelectedDiff, 2026-10-24T02:55:13.1260029Z 606 │ hasAnyCachedDiff, 2026-10-24T02:55:13.1260083Z 607 │ }); 2026-10-24T02:55:13.1260169Z 608 │ const handleRetryEnvironment = () => { 2026-10-24T02:55:13.1260255Z 609 │ void retryEnvironment(environmentId); 2026-10-24T02:55:13.1260305Z 610 │ }; 2026-10-24T02:55:13.1260388Z 611 │ const handleReturnToThread = () => { 2026-10-24T02:55:13.1260464Z 612 │ if (navigation.canGoBack()) { 2026-10-24T02:55:13.1260531Z 613 │ navigation.goBack(); 2026-10-24T02:55:13.1260590Z 614 │ return; 2026-10-24T02:55:13.1260643Z 615 │ } 2026-10-24T02:55:13.1260721Z 616 │ navigation.navigate("Thread", { 2026-10-24T02:55:13.1260878Z 617 │ environmentId: String(environmentId), 2026-10-24T02:55:13.1261031Z 618 │ threadId: String(threadId), 2026-10-24T02:55:13.1261086Z 619 │ }); 2026-10-24T02:55:13.1261138Z 620 │ }; 2026-10-24T02:55:13.1261214Z 621 │ const androidHeaderSubtitle = [ 2026-10-24T02:55:13.1261283Z 622 │ selectedSection?.title, 2026-10-24T02:55:13.1261360Z 623 │ headerDiffSummary.additions, 2026-10-24T02:55:13.1261436Z 624 │ headerDiffSummary.deletions, 2026-10-24T02:55:13.1261486Z 625 │ ] 2026-10-24T02:55:13.1261591Z 626 │ .filter((part): part is string => Boolean(part)) 2026-10-24T02:55:13.1261654Z 627 │ .join(" · "); 2026-10-24T02:55:13.1261706Z 628 │ 2026-10-24T02:55:13.1261780Z 629 │ const showChangedFilesPane = 2026-10-24T02:55:13.1261852Z 630 │ !showConnectionNotice && 2026-10-24T02:55:13.1261925Z 631 │ selectedSection !== null && 2026-10-24T02:55:13.1262010Z 632 │ parsedDiff.kind === "files" && 2026-10-24T02:55:13.1262088Z 633 │ NativeReviewDiffView !== null; 2026-10-24T02:55:13.1262255Z 634 │ useRegisterWorkspaceInspector(showChangedFilesPane ? renderInspector : undefined); 2026-10-24T02:55:13.1262422Z 635 │ const showChangedFilesToggle = panes.supportsAuxiliaryPane && showChangedFilesPane; 2026-10-24T02:55:13.1262472Z 636 │ 2026-10-24T02:55:13.1262542Z 637 │ const listHeader = (() => { 2026-10-24T02:55:13.1262625Z 638 │ const children: ReactElement[] = []; 2026-10-24T02:55:13.1262675Z 639 │ 2026-10-24T02:55:13.1262736Z 640 │ if (error) { 2026-10-24T02:55:13.1262801Z 641 │ children.push( 2026-10-24T02:55:13.1262861Z 642 │ 2026-10-24T02:55:13.1263507Z 649 │ Review unavailable 2026-10-24T02:55:13.1263661Z 650 │ {error} 2026-10-24T02:55:13.1263720Z 651 │ , 2026-10-24T02:55:13.1263774Z 652 │ ); 2026-10-24T02:55:13.1263827Z 653 │ } 2026-10-24T02:55:13.1263877Z 654 │ 2026-10-24T02:55:13.1263946Z 655 │ if (parsedDiffNotice) { 2026-10-24T02:55:13.1264100Z 656 │ children.push(); 2026-10-24T02:55:13.1264153Z 657 │ } 2026-10-24T02:55:13.1264209Z 658 │ 2026-10-24T02:55:13.1264286Z 659 │ if (children.length === 0) { 2026-10-24T02:55:13.1264348Z 660 │ return null; 2026-10-24T02:55:13.1264401Z 661 │ } 2026-10-24T02:55:13.1264451Z 662 │ 2026-10-24T02:55:13.1264517Z 663 │ return <>{children}; 2026-10-24T02:55:13.1264571Z 664 │ })(); 2026-10-24T02:55:13.1264641Z 665 │ const headerSubtitle = [ 2026-10-24T02:55:13.1264718Z 666 │ headerDiffSummary.additions, 2026-10-24T02:55:13.1264793Z 667 │ headerDiffSummary.deletions, 2026-10-24T02:55:13.1264871Z 668 │ pendingReviewCommentCount > 0 2026-10-24T02:55:13.1265039Z 669 │ ? `${pendingReviewCommentCount} comment${pendingReviewCommentCount === 1 ? "" : "s"}` 2026-10-24T02:55:13.1265098Z 670 │ : null, 2026-10-24T02:55:13.1265149Z 671 │ ] 2026-10-24T02:55:13.1265212Z 672 │ .filter(Boolean) 2026-10-24T02:55:13.1265325Z 673 │ .join(" · "); 2026-10-24T02:55:13.1265533Z 674 │ const headerTitleText = selectedSection?.title ?? "Review changes"; 2026-10-24T02:55:13.1265582Z 675 │ 2026-10-24T02:55:13.1265640Z 676 │ return ( 2026-10-24T02:55:13.1265693Z 677 │ <> 2026-10-24T02:55:13.1265756Z 678 │ 2026-10-24T02:55:13.1267028Z 694 │ 2026-10-24T02:55:13.1267092Z 695 │ 2026-10-24T02:55:13.1267209Z 696 │ 2026-10-24T02:55:13.1267287Z 697 │ {showConnectionNotice ? ( 2026-10-24T02:55:13.1267422Z 698 │ 2026-10-24T02:55:13.1267515Z 699 │ 2026-10-24T02:55:13.1268492Z 711 │ 2026-10-24T02:55:13.1268647Z 712 │ ) : selectedSection && parsedDiff.kind === "files" && NativeReviewDiffView ? ( 2026-10-24T02:55:13.1268706Z 713 │ 2026-10-24T02:55:13.1269171Z 719 │ 2026-10-24T02:55:13.1269518Z 723 │ {listHeader} 2026-10-24T02:55:13.1269686Z 724 │ 2026-10-24T02:55:13.1269832Z 725 │ ({ key: input.targetKey, location: candidate })); 2026-10-24T02:55:13.1271433Z 113 │ useEffect(() => { 2026-10-24T02:55:13.1271503Z ·  ────┬──── 2026-10-24T02:55:13.1271644Z · ╰── This is the containing effect 2026-10-24T02:55:13.1271971Z 114 │ if (entry.key === input.targetKey && (entry.location !== null || candidate === null)) { 2026-10-24T02:55:13.1272031Z 115 │ return; 2026-10-24T02:55:13.1272085Z 116 │ } 2026-10-24T02:55:13.1272201Z 117 │ setEntry({ key: input.targetKey, location: candidate }); 2026-10-24T02:55:13.1272276Z ·  ────┬─── 2026-10-24T02:55:13.1272442Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:55:13.1272561Z 118 │ }, [candidate, entry.key, entry.location, input.targetKey]); 2026-10-24T02:55:13.1272611Z ╰──── 2026-10-24T02:55:13.1273192Z  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-24T02:55:13.1273505Z  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-24T02:55:13.1273508Z 2026-10-24T02:55:13.1273770Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T02:55:13.1274076Z ╭─[apps/mobile/src/features/terminal/TerminalContextSheet.tsx:72:15] 2026-10-24T02:55:13.1274144Z 71 │ { 2026-10-24T02:55:13.1275173Z ·  ────┬──── 2026-10-24T02:55:13.1275299Z · ╰── This is the containing effect 2026-10-24T02:55:13.1275364Z 57 │ scheduler.reset(); 2026-10-24T02:55:13.1275460Z 58 │ highlightedRowIdsRef.current = new Set(); 2026-10-24T02:55:13.1275543Z 59 │ visibleChunkIndexRef.current = 0; 2026-10-24T02:55:13.1275658Z 60 │ setVisibleRange({ firstRowIndex: 0, lastRowIndex: 80 }); 2026-10-24T02:55:13.1275734Z ·  ───────┬─────── 2026-10-24T02:55:13.1275897Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:55:13.1276007Z 61 │ setTokensPatchJson(createEmptyTokenPatch(resetKey)); 2026-10-24T02:55:13.1276065Z ╰──── 2026-10-24T02:55:13.1276646Z  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-24T02:55:13.1276958Z  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-24T02:55:13.1276962Z 2026-10-24T02:55:13.1277155Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:55:13.1277322Z ╭─[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:63:7] 2026-10-24T02:55:13.1277400Z 62 │ return () => scheduler.cancel(); 2026-10-24T02:55:13.1277503Z 63 │ }, [enabled, resetKey, rows.length, scheduler]); 2026-10-24T02:55:13.1277628Z ·  ───┬─── ─────┬───── 2026-10-24T02:55:13.1277814Z · │ ╰── Unnecessary dependency `rows.length` 2026-10-24T02:55:13.1277947Z · ╰── Unnecessary dependency `enabled` 2026-10-24T02:55:13.1277999Z 64 │ 2026-10-24T02:55:13.1278047Z ╰──── 2026-10-24T02:55:13.1278333Z  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-24T02:55:13.1278633Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.1278687Z 2026-10-24T02:55:13.1279306Z ⚠ react(immutability): This value cannot be modified 2026-10-24T02:55:13.1279597Z ╭─[apps/mobile/src/features/connection/ConnectionStatusDot.tsx:58:7] 2026-10-24T02:55:13.1279730Z 53 │ function usePulseAnimation(pulse: boolean) { 2026-10-24T02:55:13.1279847Z 54 │ const pulseProgress = useSharedValue(0); 2026-10-24T02:55:13.1279959Z ·  ──────┬────── 2026-10-24T02:55:13.1280141Z · ╰── `pulseProgress` originates here 2026-10-24T02:55:13.1280208Z 55 │ 2026-10-24T02:55:13.1280289Z 56 │ useEffect(() => { 2026-10-24T02:55:13.1280372Z 57 │ if (pulse) { 2026-10-24T02:55:13.1280479Z 58 │ pulseProgress.value = withRepeat( 2026-10-24T02:55:13.1280578Z ·  ──────┬────── 2026-10-24T02:55:13.1280782Z · ╰── `pulseProgress` cannot be modified 2026-10-24T02:55:13.1280869Z 59 │ withTiming(1, { 2026-10-24T02:55:13.1280934Z ╰──── 2026-10-24T02:55:13.1281272Z  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-24T02:55:13.1281662Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:55:13.1281672Z 2026-10-24T02:55:13.1281993Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:55:13.1282211Z ╭─[apps/mobile/src/features/review/ReviewCommentComposerSheet.tsx:103:7] 2026-10-24T02:55:13.1282278Z 100 │ 2026-10-24T02:55:13.1282367Z 101 │ useEffect(() => { 2026-10-24T02:55:13.1282458Z ·  ────┬──── 2026-10-24T02:55:13.1282622Z · ╰── This is the containing effect 2026-10-24T02:55:13.1282756Z 102 │ if (!target || selectedLines.length === 0) { 2026-10-24T02:55:13.1282858Z 103 │ setHighlightedLinesById({}); 2026-10-24T02:55:13.1282972Z ·  ───────────┬─────────── 2026-10-24T02:55:13.1283189Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:55:13.1283266Z 104 │ return; 2026-10-24T02:55:13.1283328Z ╰──── 2026-10-24T02:55:13.1284070Z  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-24T02:55:13.1284472Z  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-24T02:55:13.1284476Z 2026-10-24T02:55:13.1284791Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:55:13.1285001Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:79:5] 2026-10-24T02:55:13.1285068Z 76 │ 2026-10-24T02:55:13.1285146Z 77 │ useEffect(() => { 2026-10-24T02:55:13.1285235Z ·  ────┬──── 2026-10-24T02:55:13.1285390Z · ╰── This is the containing effect 2026-10-24T02:55:13.1285740Z 78 │ const { host, code } = parsePairingUrl(connectionPairingUrl); 2026-10-24T02:55:13.1285888Z 79 │ setHostInput(host); 2026-10-24T02:55:13.1285982Z ·  ──────┬───── 2026-10-24T02:55:13.1286157Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:55:13.1286222Z 80 │ setCodeInput(code); 2026-10-24T02:55:13.1286272Z ╰──── 2026-10-24T02:55:13.1286852Z  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-24T02:55:13.1287171Z  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-24T02:55:13.1287177Z 2026-10-24T02:55:13.1287428Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:55:13.1287592Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:89:5] 2026-10-24T02:55:13.1287642Z 82 │ 2026-10-24T02:55:13.1287703Z 83 │ useEffect(() => { 2026-10-24T02:55:13.1287770Z ·  ────┬──── 2026-10-24T02:55:13.1287894Z · ╰── This is the containing effect 2026-10-24T02:55:13.1287980Z 84 │ if (routePairingUrl.length === 0) { 2026-10-24T02:55:13.1288038Z 85 │ return; 2026-10-24T02:55:13.1288090Z 86 │ } 2026-10-24T02:55:13.1288139Z 87 │ 2026-10-24T02:55:13.1288254Z 88 │ const { host, code } = parsePairingUrl(routePairingUrl); 2026-10-24T02:55:13.1288324Z 89 │ setHostInput(host); 2026-10-24T02:55:13.1288400Z ·  ──────┬───── 2026-10-24T02:55:13.1288560Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:55:13.1288623Z 90 │ setCodeInput(code); 2026-10-24T02:55:13.1288671Z ╰──── 2026-10-24T02:55:13.1289381Z  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-24T02:55:13.1289707Z  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-24T02:55:13.1289710Z 2026-10-24T02:55:13.1289972Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:55:13.1290143Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:95:7] 2026-10-24T02:55:13.1290193Z 92 │ 2026-10-24T02:55:13.1290256Z 93 │ useEffect(() => { 2026-10-24T02:55:13.1290325Z ·  ────┬──── 2026-10-24T02:55:13.1290451Z · ╰── This is the containing effect 2026-10-24T02:55:13.1290532Z 94 │ if (pairingConnectionError) { 2026-10-24T02:55:13.1290602Z 95 │ setIsSubmitting(false); 2026-10-24T02:55:13.1290681Z ·  ───────┬─────── 2026-10-24T02:55:13.1290845Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:55:13.1290898Z 96 │ } 2026-10-24T02:55:13.1291026Z ╰──── 2026-10-24T02:55:13.1291674Z  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-24T02:55:13.1291982Z  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-24T02:55:13.1291984Z 2026-10-24T02:55:13.1292161Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T02:55:13.1292339Z ╭─[apps/mobile/src/features/keyboard/HardwareKeyboardCommandProvider.tsx:116:34] 2026-10-24T02:55:13.1292407Z 115 │ return [...commands]; 2026-10-24T02:55:13.1292543Z 116 │ }, [activeThreadRef, pathname, registrationVersion, navigation]); 2026-10-24T02:55:13.1292659Z ·  ─────────┬───────── 2026-10-24T02:55:13.1292839Z · ╰── Unnecessary dependency `registrationVersion` 2026-10-24T02:55:13.1292891Z 117 │ 2026-10-24T02:55:13.1292941Z ╰──── 2026-10-24T02:55:13.1293244Z  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-24T02:55:13.1293543Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.1293548Z 2026-10-24T02:55:13.1293907Z ⚠ 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-24T02:55:13.1294032Z ╭─[apps/server/src/auth/RpcAuthorization.ts:237:17] 2026-10-24T02:55:13.1294166Z 236 │ const requiredScopesForSettingsUpdate = (payload: unknown) => { 2026-10-24T02:55:13.1294293Z 237 │ const input = Schema.decodeUnknownSync(SettingsUpdate)(payload); 2026-10-24T02:55:13.1294395Z ·  ──────────────────────── 2026-10-24T02:55:13.1294529Z 238 │ const scopes = requiredScopesForServerSettingsPatch(input.patch); 2026-10-24T02:55:13.1294581Z ╰──── 2026-10-24T02:55:13.1294584Z 2026-10-24T02:55:13.1294942Z ⚠ 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-24T02:55:13.1295064Z ╭─[apps/server/src/auth/RpcAuthorization.ts:256:26] 2026-10-24T02:55:13.1295162Z 255 │ if (method === WS_METHODS.assetsCreateUrl) { 2026-10-24T02:55:13.1295314Z 256 │ const { resource } = Schema.decodeUnknownSync(AssetCreateUrlInput)(payload); 2026-10-24T02:55:13.1295425Z ·  ──────────────────────── 2026-10-24T02:55:13.1295483Z 257 │ return [ 2026-10-24T02:55:13.1295533Z ╰──── 2026-10-24T02:55:13.1295535Z 2026-10-24T02:55:13.1295787Z ⚠ unicorn(prefer-add-event-listener): Prefer `addEventListener()` over their `on`-function counterparts. 2026-10-24T02:55:13.1295925Z ╭─[apps/web/src/components/device/deviceHubApi.test.ts:12:14] 2026-10-24T02:55:13.1296077Z 11 │ addEventListener(_type: string, listener: (event: { data: string }) => void) { 2026-10-24T02:55:13.1296207Z 12 │ this.onmessage = listener; 2026-10-24T02:55:13.1296349Z ·  ───────── 2026-10-24T02:55:13.1296405Z 13 │ } 2026-10-24T02:55:13.1296454Z ╰──── 2026-10-24T02:55:13.1296762Z  help: `addEventListener()` can register multiple handlers and accepts options such as `{ once: true }`; assigning to `on` replaces any previously registered handler. 2026-10-24T02:55:13.1296764Z 2026-10-24T02:55:13.1296964Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable. 2026-10-24T02:55:13.1297102Z ╭─[apps/web/src/components/device/deviceHubApi.test.ts:16:9] 2026-10-24T02:55:13.1297167Z 15 │ constructor() { 2026-10-24T02:55:13.1297229Z 16 │ source = this; 2026-10-24T02:55:13.1297303Z ·  ────── 2026-10-24T02:55:13.1297357Z 17 │ } 2026-10-24T02:55:13.1297413Z ╰──── 2026-10-24T02:55:13.1297680Z  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-24T02:55:13.1297683Z 2026-10-24T02:55:13.1297876Z ⚠ eslint(no-unused-vars): Identifier 'identity' is imported but never used. 2026-10-24T02:55:13.1297979Z ╭─[apps/server/src/auth/http.ts:28:10] 2026-10-24T02:55:13.1298066Z 27 │ import * as Schema from "effect/Schema"; 2026-10-24T02:55:13.1298155Z 28 │ import { identity } from "effect/Function"; 2026-10-24T02:55:13.1298230Z ·  ────┬─── 2026-10-24T02:55:13.1298359Z · ╰── 'identity' is imported here 2026-10-24T02:55:13.1298442Z 29 │ import * as Layer from "effect/Layer"; 2026-10-24T02:55:13.1298490Z ╰──── 2026-10-24T02:55:13.1298591Z  help: Consider removing this import. 2026-10-24T02:55:13.1298596Z 2026-10-24T02:55:13.1298865Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T02:55:13.1299000Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:231:6] 2026-10-24T02:55:13.1299157Z 227 │ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents( 2026-10-24T02:55:13.1299245Z 228 │ nativeEventSnapshotsRef.current, 2026-10-24T02:55:13.1299335Z ·  ───────────┬─────────── 2026-10-24T02:55:13.1299789Z · ╰── 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-24T02:55:13.1299914Z 229 │ mostRecentEventCount, 2026-10-24T02:55:13.1300034Z 230 │ ); 2026-10-24T02:55:13.1300157Z 231 │ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]); 2026-10-24T02:55:13.1300289Z ·  ──────────────────────────┬────────────────────────── 2026-10-24T02:55:13.1300486Z · ╰── This dependency list is missing values used by the callback 2026-10-24T02:55:13.1300568Z 232 │ const assumedValue = props.value; 2026-10-24T02:55:13.1300618Z ╰──── 2026-10-24T02:55:13.1300783Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T02:55:13.1301086Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.1301089Z 2026-10-24T02:55:13.1301301Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T02:55:13.1301436Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:239:7] 2026-10-24T02:55:13.1301575Z 238 │ nativeEventSnapshotsRef.current = assumeComposerControlledState( 2026-10-24T02:55:13.1301664Z 239 │ nativeEventSnapshotsRef.current, 2026-10-24T02:55:13.1301751Z ·  ───────────┬─────────── 2026-10-24T02:55:13.1302196Z · ╰── 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-24T02:55:13.1302268Z 240 │ controlledEventCount, 2026-10-24T02:55:13.1302334Z 241 │ assumedValue, 2026-10-24T02:55:13.1302387Z 242 │ ); 2026-10-24T02:55:13.1302546Z 243 │ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]); 2026-10-24T02:55:13.1302683Z ·  ───────────┬────────── 2026-10-24T02:55:13.1302886Z · ╰── Unnecessary dependency `controlledDocumentJson` 2026-10-24T02:55:13.1302973Z 244 │ const acceptNativeEvent = useCallback( 2026-10-24T02:55:13.1303021Z ╰──── 2026-10-24T02:55:13.1303431Z  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-24T02:55:13.1303739Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.1303745Z 2026-10-24T02:55:13.1303886Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:55:13.1304019Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:29] 2026-10-24T02:55:13.1304140Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T02:55:13.1304250Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T02:55:13.1304364Z ·  ─────────────┬──────────── 2026-10-24T02:55:13.1304528Z · ╰── Cannot access ref value during render 2026-10-24T02:55:13.1304582Z 165 │ }); 2026-10-24T02:55:13.1304633Z ╰──── 2026-10-24T02:55:13.1305143Z  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-24T02:55:13.1305498Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:55:13.1305500Z 2026-10-24T02:55:13.1305641Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:55:13.1305775Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:29] 2026-10-24T02:55:13.1305894Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T02:55:13.1306003Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T02:55:13.1306114Z ·  ─────────────┬──────────── 2026-10-24T02:55:13.1306320Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T02:55:13.1306378Z 165 │ }); 2026-10-24T02:55:13.1306428Z ╰──── 2026-10-24T02:55:13.1306877Z  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-24T02:55:13.1307158Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:55:13.1307160Z 2026-10-24T02:55:13.1307301Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:55:13.1307438Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:166:23] 2026-10-24T02:55:13.1307495Z 165 │ }); 2026-10-24T02:55:13.1307583Z 166 │ confirmedTokensRef.current = tokens; 2026-10-24T02:55:13.1307706Z ·  ─────────┬────────────┬─── 2026-10-24T02:55:13.1307890Z · │ ╰── Cannot update ref value during render 2026-10-24T02:55:13.1308003Z · ╰── This value is a ref 2026-10-24T02:55:13.1308073Z 167 │ return JSON.stringify( 2026-10-24T02:55:13.1308124Z ╰──── 2026-10-24T02:55:13.1308573Z  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-24T02:55:13.1308902Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:55:13.1308907Z 2026-10-24T02:55:13.1309048Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:55:13.1309178Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:208:5] 2026-10-24T02:55:13.1309249Z 207 │ mostRecentEventCount, 2026-10-24T02:55:13.1309338Z 208 │ nativeEventSnapshotsRef.current, 2026-10-24T02:55:13.1309440Z ·  ───────────────┬─────────────── 2026-10-24T02:55:13.1309621Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T02:55:13.1309674Z 209 │ ); 2026-10-24T02:55:13.1309724Z ╰──── 2026-10-24T02:55:13.1310222Z  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-24T02:55:13.1310578Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:55:13.1310582Z 2026-10-24T02:55:13.1310721Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:55:13.1310854Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:214:5] 2026-10-24T02:55:13.1310924Z 213 │ mostRecentEventCount, 2026-10-24T02:55:13.1311010Z 214 │ nativeEventSnapshotsRef.current, 2026-10-24T02:55:13.1311110Z ·  ───────────────┬─────────────── 2026-10-24T02:55:13.1311295Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T02:55:13.1311350Z 215 │ ); 2026-10-24T02:55:13.1311400Z ╰──── 2026-10-24T02:55:13.1311947Z  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-24T02:55:13.1312226Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:55:13.1312229Z 2026-10-24T02:55:13.1312412Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T02:55:13.1312543Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:199:6] 2026-10-24T02:55:13.1312667Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T02:55:13.1312777Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T02:55:13.1312885Z ·  ─────────┬──────── 2026-10-24T02:55:13.1313338Z · ╰── 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-24T02:55:13.1313394Z 165 │ }); 2026-10-24T02:55:13.1313482Z 166 │ confirmedTokensRef.current = tokens; 2026-10-24T02:55:13.1313551Z 167 │ return JSON.stringify( 2026-10-24T02:55:13.1313712Z 168 │ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => { 2026-10-24T02:55:13.1313779Z 169 │ const record = 2026-10-24T02:55:13.1313861Z 170 │ token.type === "context" 2026-10-24T02:55:13.1314024Z 171 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-24T02:55:13.1314090Z 172 │ : undefined; 2026-10-24T02:55:13.1314196Z 173 │ const presentation = contextChipPresentation( 2026-10-24T02:55:13.1314301Z 174 │ token.type === "context" ? token.kind : token.type, 2026-10-24T02:55:13.1314364Z 175 │ record, 2026-10-24T02:55:13.1314423Z 176 │ ); 2026-10-24T02:55:13.1314504Z 177 │ const icon = contextChipIcon( 2026-10-24T02:55:13.1314569Z 178 │ presentation, 2026-10-24T02:55:13.1314709Z 179 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-24T02:55:13.1314765Z 180 │ ); 2026-10-24T02:55:13.1314826Z 181 │ return { 2026-10-24T02:55:13.1314974Z 182 │ type: token.type, 2026-10-24T02:55:13.1315119Z 183 │ source: token.source, 2026-10-24T02:55:13.1315190Z 184 │ start: token.start, 2026-10-24T02:55:13.1315254Z 185 │ end: token.end, 2026-10-24T02:55:13.1315399Z 186 │ accent: contextChipAccent(presentation.accent, theme, chipTextColor), 2026-10-24T02:55:13.1315460Z 187 │ label: 2026-10-24T02:55:13.1315536Z 188 │ token.type === "skill" 2026-10-24T02:55:13.1315640Z 189 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-24T02:55:13.1315720Z 190 │ : token.type === "context" 2026-10-24T02:55:13.1315951Z 191 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-24T02:55:13.1316031Z 192 │ : basename(token.value), 2026-10-24T02:55:13.1316174Z 193 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-24T02:55:13.1316269Z 194 │ iconUri: contextChipIconUri(icon), 2026-10-24T02:55:13.1316355Z 195 │ tintsIcon: icon.kind === "chip", 2026-10-24T02:55:13.1316410Z 196 │ }; 2026-10-24T02:55:13.1316466Z 197 │ }), 2026-10-24T02:55:13.1316521Z 198 │ ); 2026-10-24T02:55:13.1316652Z 199 │ }, [props.value, props.context, skillLabels, theme, chipTextColor]); 2026-10-24T02:55:13.1316798Z ·  ───────────────────────────────┬─────────────────────────────── 2026-10-24T02:55:13.1316998Z · ╰── This dependency list is missing values used by the callback 2026-10-24T02:55:13.1317135Z 200 │ // Every render resolves against the snapshot history, so a render whose 2026-10-24T02:55:13.1317186Z ╰──── 2026-10-24T02:55:13.1317395Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T02:55:13.1317703Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.1317705Z 2026-10-24T02:55:13.1317886Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T02:55:13.1318019Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:261:5] 2026-10-24T02:55:13.1318147Z 253 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-24T02:55:13.1318248Z 254 │ nativeEventSnapshotsRef.current.push({ 2026-10-24T02:55:13.1318337Z ·  ───────────┬─────────── 2026-10-24T02:55:13.1318877Z · ╰── 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-24T02:55:13.1319036Z 255 │ eventCount: acknowledgedEventCount, 2026-10-24T02:55:13.1319098Z 256 │ value, 2026-10-24T02:55:13.1319174Z 257 │ selection: nextSelection, 2026-10-24T02:55:13.1319231Z 258 │ }); 2026-10-24T02:55:13.1319314Z 259 │ return acknowledgedEventCount; 2026-10-24T02:55:13.1319368Z 260 │ }, 2026-10-24T02:55:13.1319420Z 261 │ [], 2026-10-24T02:55:13.1319486Z ·  ─┬ 2026-10-24T02:55:13.1319661Z · ╰── This dependency list is missing values used by the callback 2026-10-24T02:55:13.1319715Z 262 │ ); 2026-10-24T02:55:13.1319764Z ╰──── 2026-10-24T02:55:13.1319968Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T02:55:13.1320274Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.1320276Z 2026-10-24T02:55:13.1320472Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:55:13.1320616Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:257:7] 2026-10-24T02:55:13.1320711Z 256 │ return () => cancelAnimationFrame(frame); 2026-10-24T02:55:13.1320789Z 257 │ }, [props.path, targetIndex]); 2026-10-24T02:55:13.1320865Z ·  ─────┬──── 2026-10-24T02:55:13.1321005Z · ╰── Unnecessary dependency `props.path` 2026-10-24T02:55:13.1321063Z 258 │ 2026-10-24T02:55:13.1321115Z ╰──── 2026-10-24T02:55:13.1321398Z  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-24T02:55:13.1321698Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.1321701Z 2026-10-24T02:55:13.1321888Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T02:55:13.1322034Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:293:23] 2026-10-24T02:55:13.1322105Z 292 │ 2026-10-24T02:55:13.1323162Z ·  ─────────── 2026-10-24T02:55:13.1323227Z 310 │ {body} 2026-10-24T02:55:13.1323277Z ╰──── 2026-10-24T02:55:13.1323472Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T02:55:13.1323511Z 2026-10-24T02:55:13.1323680Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:55:13.1323796Z ╭─[apps/mobile/src/native/StackHeader.tsx:185:9] 2026-10-24T02:55:13.1323860Z 184 │ "options", 2026-10-24T02:55:13.1323952Z 185 │ latestOptionFunctionsRef.current, 2026-10-24T02:55:13.1324055Z ·  ────────────────┬─────────────── 2026-10-24T02:55:13.1324244Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T02:55:13.1324339Z 186 │ optionFunctionWrappersRef.current, 2026-10-24T02:55:13.1324388Z ╰──── 2026-10-24T02:55:13.1324844Z  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-24T02:55:13.1325129Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:55:13.1325131Z 2026-10-24T02:55:13.1325272Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:55:13.1325386Z ╭─[apps/mobile/src/native/StackHeader.tsx:186:9] 2026-10-24T02:55:13.1325476Z 185 │ latestOptionFunctionsRef.current, 2026-10-24T02:55:13.1325566Z 186 │ optionFunctionWrappersRef.current, 2026-10-24T02:55:13.1325672Z ·  ────────────────┬──────────────── 2026-10-24T02:55:13.1325863Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T02:55:13.1325956Z 187 │ ) as NativeStackNavigationOptions) 2026-10-24T02:55:13.1326005Z ╰──── 2026-10-24T02:55:13.1326454Z  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-24T02:55:13.1326734Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:55:13.1326737Z 2026-10-24T02:55:13.1326926Z ⚠ eslint(no-unused-vars): Identifier 'Image' is imported but never used. 2026-10-24T02:55:13.1327065Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:17:10] 2026-10-24T02:55:13.1327201Z 16 │ import type { NativeSyntheticEvent, ViewProps } from "react-native"; 2026-10-24T02:55:13.1327316Z 17 │ import { Image, Platform, StyleSheet } from "react-native"; 2026-10-24T02:55:13.1327387Z ·  ──┬── 2026-10-24T02:55:13.1327510Z · ╰── 'Image' is imported here 2026-10-24T02:55:13.1327560Z 18 │ 2026-10-24T02:55:13.1327610Z ╰──── 2026-10-24T02:55:13.1327706Z  help: Consider removing this import. 2026-10-24T02:55:13.1327709Z 2026-10-24T02:55:13.1327908Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T02:55:13.1328043Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:229:6] 2026-10-24T02:55:13.1328202Z 225 │ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents( 2026-10-24T02:55:13.1328360Z 226 │ nativeEventSnapshotsRef.current, 2026-10-24T02:55:13.1328515Z ·  ───────────┬─────────── 2026-10-24T02:55:13.1329006Z · ╰── 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-24T02:55:13.1329079Z 227 │ mostRecentEventCount, 2026-10-24T02:55:13.1329134Z 228 │ ); 2026-10-24T02:55:13.1329253Z 229 │ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]); 2026-10-24T02:55:13.1329383Z ·  ──────────────────────────┬────────────────────────── 2026-10-24T02:55:13.1329575Z · ╰── This dependency list is missing values used by the callback 2026-10-24T02:55:13.1329662Z 230 │ const assumedValue = props.value; 2026-10-24T02:55:13.1329716Z ╰──── 2026-10-24T02:55:13.1329879Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T02:55:13.1330182Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.1330184Z 2026-10-24T02:55:13.1330394Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T02:55:13.1330532Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:237:7] 2026-10-24T02:55:13.1330672Z 236 │ nativeEventSnapshotsRef.current = assumeComposerControlledState( 2026-10-24T02:55:13.1330757Z 237 │ nativeEventSnapshotsRef.current, 2026-10-24T02:55:13.1330845Z ·  ───────────┬─────────── 2026-10-24T02:55:13.1331292Z · ╰── 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-24T02:55:13.1331369Z 238 │ controlledEventCount, 2026-10-24T02:55:13.1331432Z 239 │ assumedValue, 2026-10-24T02:55:13.1331487Z 240 │ ); 2026-10-24T02:55:13.1331639Z 241 │ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]); 2026-10-24T02:55:13.1331772Z ·  ───────────┬────────── 2026-10-24T02:55:13.1331973Z · ╰── Unnecessary dependency `controlledDocumentJson` 2026-10-24T02:55:13.1332065Z 242 │ const acceptNativeEvent = useCallback( 2026-10-24T02:55:13.1332118Z ╰──── 2026-10-24T02:55:13.1332524Z  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-24T02:55:13.1332827Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.1332830Z 2026-10-24T02:55:13.1332969Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:55:13.1333111Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29] 2026-10-24T02:55:13.1333234Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T02:55:13.1333396Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T02:55:13.1333576Z ·  ─────────────┬──────────── 2026-10-24T02:55:13.1333739Z · ╰── Cannot access ref value during render 2026-10-24T02:55:13.1333795Z 163 │ }); 2026-10-24T02:55:13.1333845Z ╰──── 2026-10-24T02:55:13.1334297Z  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-24T02:55:13.1334578Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:55:13.1334580Z 2026-10-24T02:55:13.1334726Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:55:13.1334869Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29] 2026-10-24T02:55:13.1334987Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T02:55:13.1335094Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T02:55:13.1335207Z ·  ─────────────┬──────────── 2026-10-24T02:55:13.1335409Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T02:55:13.1335464Z 163 │ }); 2026-10-24T02:55:13.1335513Z ╰──── 2026-10-24T02:55:13.1335965Z  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-24T02:55:13.1336249Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:55:13.1336251Z 2026-10-24T02:55:13.1336392Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:55:13.1336530Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:164:23] 2026-10-24T02:55:13.1336584Z 163 │ }); 2026-10-24T02:55:13.1336671Z 164 │ confirmedTokensRef.current = tokens; 2026-10-24T02:55:13.1336792Z ·  ─────────┬────────────┬─── 2026-10-24T02:55:13.1336975Z · │ ╰── Cannot update ref value during render 2026-10-24T02:55:13.1337141Z · ╰── This value is a ref 2026-10-24T02:55:13.1337277Z 165 │ return JSON.stringify( 2026-10-24T02:55:13.1337329Z ╰──── 2026-10-24T02:55:13.1337781Z  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-24T02:55:13.1338062Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:55:13.1338064Z 2026-10-24T02:55:13.1338203Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:55:13.1338340Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:206:5] 2026-10-24T02:55:13.1338410Z 205 │ mostRecentEventCount, 2026-10-24T02:55:13.1338499Z 206 │ nativeEventSnapshotsRef.current, 2026-10-24T02:55:13.1338603Z ·  ───────────────┬─────────────── 2026-10-24T02:55:13.1338814Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T02:55:13.1338877Z 207 │ ); 2026-10-24T02:55:13.1338927Z ╰──── 2026-10-24T02:55:13.1339372Z  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-24T02:55:13.1339651Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:55:13.1339653Z 2026-10-24T02:55:13.1339797Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:55:13.1339942Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:212:5] 2026-10-24T02:55:13.1340012Z 211 │ mostRecentEventCount, 2026-10-24T02:55:13.1340095Z 212 │ nativeEventSnapshotsRef.current, 2026-10-24T02:55:13.1340199Z ·  ───────────────┬─────────────── 2026-10-24T02:55:13.1340383Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T02:55:13.1340437Z 213 │ ); 2026-10-24T02:55:13.1340486Z ╰──── 2026-10-24T02:55:13.1340931Z  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-24T02:55:13.1341216Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:55:13.1341221Z 2026-10-24T02:55:13.1341404Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T02:55:13.1341541Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:197:6] 2026-10-24T02:55:13.1341661Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T02:55:13.1341771Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T02:55:13.1341878Z ·  ─────────┬──────── 2026-10-24T02:55:13.1342374Z · ╰── 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-24T02:55:13.1342497Z 163 │ }); 2026-10-24T02:55:13.1342587Z 164 │ confirmedTokensRef.current = tokens; 2026-10-24T02:55:13.1342657Z 165 │ return JSON.stringify( 2026-10-24T02:55:13.1342817Z 166 │ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => { 2026-10-24T02:55:13.1342882Z 167 │ const record = 2026-10-24T02:55:13.1342961Z 168 │ token.type === "context" 2026-10-24T02:55:13.1343122Z 169 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-24T02:55:13.1343187Z 170 │ : undefined; 2026-10-24T02:55:13.1343292Z 171 │ const presentation = contextChipPresentation( 2026-10-24T02:55:13.1343400Z 172 │ token.type === "context" ? token.kind : token.type, 2026-10-24T02:55:13.1343469Z 173 │ record, 2026-10-24T02:55:13.1343529Z 174 │ ); 2026-10-24T02:55:13.1343611Z 175 │ const icon = contextChipIcon( 2026-10-24T02:55:13.1343679Z 176 │ presentation, 2026-10-24T02:55:13.1343819Z 177 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-24T02:55:13.1343875Z 178 │ ); 2026-10-24T02:55:13.1343938Z 179 │ return { 2026-10-24T02:55:13.1344007Z 180 │ type: token.type, 2026-10-24T02:55:13.1344081Z 181 │ source: token.source, 2026-10-24T02:55:13.1344151Z 182 │ start: token.start, 2026-10-24T02:55:13.1344217Z 183 │ end: token.end, 2026-10-24T02:55:13.1344362Z 184 │ accent: contextChipAccent(presentation.accent, theme, chipTextColor), 2026-10-24T02:55:13.1344424Z 185 │ label: 2026-10-24T02:55:13.1344505Z 186 │ token.type === "skill" 2026-10-24T02:55:13.1344614Z 187 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-24T02:55:13.1344696Z 188 │ : token.type === "context" 2026-10-24T02:55:13.1344925Z 189 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-24T02:55:13.1345005Z 190 │ : basename(token.value), 2026-10-24T02:55:13.1345144Z 191 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-24T02:55:13.1345236Z 192 │ iconUri: contextChipIconUri(icon), 2026-10-24T02:55:13.1345321Z 193 │ tintsIcon: icon.kind === "chip", 2026-10-24T02:55:13.1345377Z 194 │ }; 2026-10-24T02:55:13.1345434Z 195 │ }), 2026-10-24T02:55:13.1345490Z 196 │ ); 2026-10-24T02:55:13.1345627Z 197 │ }, [props.value, props.context, skillLabels, theme, chipTextColor]); 2026-10-24T02:55:13.1345776Z ·  ───────────────────────────────┬─────────────────────────────── 2026-10-24T02:55:13.1345973Z · ╰── This dependency list is missing values used by the callback 2026-10-24T02:55:13.1346109Z 198 │ // Every render resolves against the snapshot history, so a render whose 2026-10-24T02:55:13.1346160Z ╰──── 2026-10-24T02:55:13.1346359Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T02:55:13.1346662Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.1346664Z 2026-10-24T02:55:13.1346904Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T02:55:13.1347110Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:259:5] 2026-10-24T02:55:13.1347237Z 251 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-24T02:55:13.1347336Z 252 │ nativeEventSnapshotsRef.current.push({ 2026-10-24T02:55:13.1347428Z ·  ───────────┬─────────── 2026-10-24T02:55:13.1347876Z · ╰── 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-24T02:55:13.1347967Z 253 │ eventCount: acknowledgedEventCount, 2026-10-24T02:55:13.1348026Z 254 │ value, 2026-10-24T02:55:13.1348104Z 255 │ selection: nextSelection, 2026-10-24T02:55:13.1348163Z 256 │ }); 2026-10-24T02:55:13.1348251Z 257 │ return acknowledgedEventCount; 2026-10-24T02:55:13.1348306Z 258 │ }, 2026-10-24T02:55:13.1348361Z 259 │ [], 2026-10-24T02:55:13.1348429Z ·  ─┬ 2026-10-24T02:55:13.1348606Z · ╰── This dependency list is missing values used by the callback 2026-10-24T02:55:13.1348658Z 260 │ ); 2026-10-24T02:55:13.1348710Z ╰──── 2026-10-24T02:55:13.1348951Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T02:55:13.1349255Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.1349258Z 2026-10-24T02:55:13.1349399Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:55:13.1349520Z ╭─[apps/mobile/src/components/ui/Menu.tsx:54:36] 2026-10-24T02:55:13.1349697Z 53 │ const child = children as ReactElement>; 2026-10-24T02:55:13.1349866Z 54 │ ╭─▶ children = cloneElement(child, { 2026-10-24T02:55:13.1349968Z 55 │ │ onTouchStart: (event) => { 2026-10-24T02:55:13.1350123Z 56 │ │ // Reset for a new touch, not onPressIn, which also fires when a 2026-10-24T02:55:13.1350278Z 57 │ │ // finger moves out of the row and back during the same gesture. 2026-10-24T02:55:13.1350402Z 58 │ │ menuPress.current.isPreparing = false; 2026-10-24T02:55:13.1350571Z 59 │ │ menuPress.current.suppressPress = menuPress.current.isOpen; 2026-10-24T02:55:13.1350680Z 60 │ │ pendingPress.current = null; 2026-10-24T02:55:13.1350801Z 61 │ │ child.props.onTouchStart?.(event); 2026-10-24T02:55:13.1350877Z 62 │ │ }, 2026-10-24T02:55:13.1350976Z 63 │ │ onPress: (event) => { 2026-10-24T02:55:13.1351140Z 64 │ │ // Accessibility clicks have no touch identifier and must not inherit 2026-10-24T02:55:13.1351274Z 65 │ │ // cancellation from a previous physical gesture. 2026-10-24T02:55:13.1351437Z 66 │ │ const isTouch = typeof event.nativeEvent.identifier === "number"; 2026-10-24T02:55:13.1351621Z 67 │ │ if (isTouch ? menuPress.current.suppressPress : menuPress.current.isOpen) { 2026-10-24T02:55:13.1351844Z 68 │ │ return; 2026-10-24T02:55:13.1352016Z 69 │ │ } 2026-10-24T02:55:13.1352169Z 70 │ │ if (isTouch && menuPress.current.isPreparing) { 2026-10-24T02:55:13.1352335Z 71 │ │ // A release can arrive between native menu preparation and display. 2026-10-24T02:55:13.1352497Z 72 │ │ // Let UIKit's display/cancel callback decide this press's outcome. 2026-10-24T02:55:13.1352597Z 73 │ │ event.persist(); 2026-10-24T02:55:13.1352754Z 74 │ │ pendingPress.current = () => child.props.onPress?.(event); 2026-10-24T02:55:13.1352839Z 75 │ │ return; 2026-10-24T02:55:13.1352914Z 76 │ │ } 2026-10-24T02:55:13.1353033Z 77 │ │ child.props.onPress?.(event); 2026-10-24T02:55:13.1353110Z 78 │ │ }, 2026-10-24T02:55:13.1353237Z 79 │ ├─▶ }); 2026-10-24T02:55:13.1353464Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T02:55:13.1353566Z 80 │ menuProps.onMenuInteractionStart = () => { 2026-10-24T02:55:13.1353618Z ╰──── 2026-10-24T02:55:13.1354072Z  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-24T02:55:13.1354357Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:55:13.1354362Z 2026-10-24T02:55:13.1354526Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T02:55:13.1354661Z ╭─[apps/web/src/components/CustomSnoozeDialog.tsx:140:58] 2026-10-24T02:55:13.1354792Z 139 │ {...(weekStartsOn === undefined ? {} : { weekStartsOn })} 2026-10-24T02:55:13.1354936Z 140 │ disabled={{ before: new Date(new Date().setHours(0, 0, 0, 0)) }} 2026-10-24T02:55:13.1355058Z ·  ─────┬──── 2026-10-24T02:55:13.1355225Z · ╰── Cannot call impure function 2026-10-24T02:55:13.1355322Z 141 │ onSelect={(selected) => { 2026-10-24T02:55:13.1355373Z ╰──── 2026-10-24T02:55:13.1355650Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T02:55:13.1355936Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T02:55:13.1355938Z 2026-10-24T02:55:13.1356202Z ⚠ eslint(no-unused-vars): Variable 'layerDaemon' is declared but never used. Unused variables should start with a '_'. 2026-10-24T02:55:13.1356337Z ╭─[apps/server/src/orchestration-v2/EffectWorker.ts:914:7] 2026-10-24T02:55:13.1356390Z 913 │ 2026-10-24T02:55:13.1356574Z 914 │ const layerDaemon: Layer.Layer = Layer.effectDiscard( 2026-10-24T02:55:13.1356652Z ·  ─────┬───── 2026-10-24T02:55:13.1356840Z · ╰── 'layerDaemon' is declared here 2026-10-24T02:55:13.1356997Z 915 │ runDaemon.pipe(Effect.forkScoped), 2026-10-24T02:55:13.1357048Z ╰──── 2026-10-24T02:55:13.1357152Z  help: Consider removing this declaration. 2026-10-24T02:55:13.1357155Z 2026-10-24T02:55:13.1357407Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:55:13.1357540Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:68:5] 2026-10-24T02:55:13.1357641Z 66 │ const { id: attachmentId, fileUri } = attachment; 2026-10-24T02:55:13.1357705Z 67 │ useEffect(() => { 2026-10-24T02:55:13.1357777Z ·  ────┬──── 2026-10-24T02:55:13.1357904Z · ╰── This is the containing effect 2026-10-24T02:55:13.1357974Z 68 │ setUri(null); 2026-10-24T02:55:13.1358044Z ·  ───┬── 2026-10-24T02:55:13.1358207Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:55:13.1358272Z 69 │ setError(null); 2026-10-24T02:55:13.1358321Z ╰──── 2026-10-24T02:55:13.1358936Z  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-24T02:55:13.1359251Z  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-24T02:55:13.1359253Z 2026-10-24T02:55:13.1359455Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:55:13.1359590Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:91:7] 2026-10-24T02:55:13.1359644Z 90 │ }; 2026-10-24T02:55:13.1359719Z 91 │ }, [attachmentId, fileUri]); 2026-10-24T02:55:13.1359837Z ·  ──────┬───── ───┬─── 2026-10-24T02:55:13.1360012Z · │ ╰── Unnecessary dependency `fileUri` 2026-10-24T02:55:13.1360154Z · ╰── Unnecessary dependency `attachmentId` 2026-10-24T02:55:13.1360287Z 92 │ const mimeType = videoMimeType(attachment) ?? attachment.mimeType; 2026-10-24T02:55:13.1360339Z ╰──── 2026-10-24T02:55:13.1360683Z  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-24T02:55:13.1361064Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.1361067Z 2026-10-24T02:55:13.1361274Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T02:55:13.1361412Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:213:34] 2026-10-24T02:55:13.1361479Z 212 │ useEffect(() => { 2026-10-24T02:55:13.1361590Z 213 │ if (!isFocused && hasSource) props.onRequestClose(); 2026-10-24T02:55:13.1361686Z ·  ──┬── 2026-10-24T02:55:13.1361839Z · ╰── Missing dependency `props` 2026-10-24T02:55:13.1361946Z 214 │ }, [isFocused, hasSource, props.onRequestClose]); 2026-10-24T02:55:13.1362058Z ·  ──────────┬───────── 2026-10-24T02:55:13.1362278Z · ╰── Overly precise dependency `props.onRequestClose`, use `props` instead 2026-10-24T02:55:13.1362351Z 215 │ const { source } = props; 2026-10-24T02:55:13.1362404Z ╰──── 2026-10-24T02:55:13.1362812Z  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-24T02:55:13.1363114Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.1363121Z 2026-10-24T02:55:13.1363287Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T02:55:13.1363415Z ╭─[apps/web/src/components/CommandPalette.tsx:1996:20] 2026-10-24T02:55:13.1363532Z 1995 │ title: inferProjectTitleFromPath(destinationPath), 2026-10-24T02:55:13.1363627Z 1996 │ createdAt: new Date().toISOString(), 2026-10-24T02:55:13.1363716Z ·  ─────┬──── 2026-10-24T02:55:13.1363855Z · ╰── Cannot call impure function 2026-10-24T02:55:13.1363959Z 1997 │ remoteUrl: addProjectCloneFlow.remoteUrl, 2026-10-24T02:55:13.1364013Z ╰──── 2026-10-24T02:55:13.1364286Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T02:55:13.1364572Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T02:55:13.1364575Z 2026-10-24T02:55:13.1364826Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:55:13.1364971Z ╭─[apps/mobile/src/components/VideoPreviewModal.ios.tsx:63:55] 2026-10-24T02:55:13.1365029Z 61 │ }, []); 2026-10-24T02:55:13.1365092Z 62 │ useEffect(() => { 2026-10-24T02:55:13.1365164Z ·  ────┬──── 2026-10-24T02:55:13.1365289Z · ╰── This is the containing effect 2026-10-24T02:55:13.1365435Z 63 │ if (playbackUrl === null && resolvedUrl !== null) setPlaybackUrl(resolvedUrl); 2026-10-24T02:55:13.1365606Z ·  ───────┬────── 2026-10-24T02:55:13.1365872Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:55:13.1365952Z 64 │ }, [playbackUrl, resolvedUrl]); 2026-10-24T02:55:13.1366004Z ╰──── 2026-10-24T02:55:13.1366588Z  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-24T02:55:13.1366904Z  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-24T02:55:13.1366912Z 2026-10-24T02:55:13.1367056Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:55:13.1367205Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:152:27] 2026-10-24T02:55:13.1367380Z 151 │ 2026-10-24T02:55:13.1367456Z 152 │ {props.children(open)} 2026-10-24T02:55:13.1367544Z ·  ──┬─ 2026-10-24T02:55:13.1367696Z · ╰── Cannot access ref value during render 2026-10-24T02:55:13.1367758Z 153 │ 2026-10-24T02:55:13.1367808Z ╰──── 2026-10-24T02:55:13.1368266Z  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-24T02:55:13.1368549Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:55:13.1368551Z 2026-10-24T02:55:13.1368774Z ⚠ react(memo-dependencies): Found missing/extra memoization dependencies 2026-10-24T02:55:13.1368930Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:140:9] 2026-10-24T02:55:13.1369010Z 139 │ if (action.id !== undefined) { 2026-10-24T02:55:13.1369087Z 140 │ props.onPressAction?.({ 2026-10-24T02:55:13.1369158Z ·  ──┬── 2026-10-24T02:55:13.1369285Z · ╰── Missing dependency `props` 2026-10-24T02:55:13.1369379Z 141 │ nativeEvent: { event: action.id }, 2026-10-24T02:55:13.1369526Z 142 │ } as Parameters>[0]); 2026-10-24T02:55:13.1369581Z 143 │ } 2026-10-24T02:55:13.1369636Z 144 │ }, 2026-10-24T02:55:13.1369714Z 145 │ [close, props.onPressAction], 2026-10-24T02:55:13.1369805Z ·  ─────────┬───────── 2026-10-24T02:55:13.1370010Z · ╰── Overly precise dependency `props.onPressAction`, use `props` instead 2026-10-24T02:55:13.1370065Z 146 │ ); 2026-10-24T02:55:13.1370114Z ╰──── 2026-10-24T02:55:13.1370577Z  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-24T02:55:13.1370935Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:55:13.1370979Z 2026-10-24T02:55:13.1371091Z Found 0 errors and 362 warnings in 5407 files (4.9s, 8 threads) 2026-10-24T02:55:13.1820004Z Post job cleanup. 2026-10-24T02:55:13.2417043Z Cache hit occurred on the primary key electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309, not saving cache. 2026-10-24T02:55:13.2487433Z Post job cleanup. 2026-10-24T02:55:13.2498953Z ##[start-action display=Cache full pnpm store;id=__a9fe98d3-79f6-46a5-855e-3d1d55321f39.__actions_cache] 2026-10-24T02:55:13.2796396Z Post job cleanup. 2026-10-24T02:55:13.3378635Z Cache hit occurred on the primary key pnpm-full-v1-Linux-X64-3cb0b4d7cff93dc8fe33f2ea73cac71ca25a36270fcb648b9b4a9320151012ef, not saving cache. 2026-10-24T02:55:13.3405959Z ##[end-action id=__a9fe98d3-79f6-46a5-855e-3d1d55321f39.__actions_cache;outcome=success;conclusion=success;duration_ms=90] 2026-10-24T02:55:13.3408130Z ##[start-action display=Cache Vite+;id=__a9fe98d3-79f6-46a5-855e-3d1d55321f39.vp_cache] 2026-10-24T02:55:13.3427680Z Post job cleanup. 2026-10-24T02:55:13.3986333Z 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-24T02:55:13.4020362Z ##[end-action id=__a9fe98d3-79f6-46a5-855e-3d1d55321f39.vp_cache;outcome=success;conclusion=success;duration_ms=61] 2026-10-24T02:55:13.4060969Z Post job cleanup. 2026-10-24T02:55:13.4496768Z [command]/usr/local/bin/git version 2026-10-24T02:55:13.4523236Z git version 2.55.0 2026-10-24T02:55:13.4539472Z Temporarily overriding HOME='/home/runner/_work/_temp/c6b3a94e-82e4-475d-91e7-76f33924482f' before making global git config changes 2026-10-24T02:55:13.4539817Z Adding repository directory to the temporary git global config as a safe directory 2026-10-24T02:55:13.4542277Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code 2026-10-24T02:55:13.4563160Z Removing SSH command configuration 2026-10-24T02:55:13.4566689Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand 2026-10-24T02:55:13.4587509Z [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-24T02:55:13.4696893Z fatal: No url found for submodule path '.repos/alchemy-effect/submodules/distilled' in .gitmodules 2026-10-24T02:55:13.4720976Z ##[warning]The process '/usr/local/bin/git' failed with exit code 128 2026-10-24T02:55:13.4757625Z A job completed hook has been configured by the self-hosted runner administrator 2026-10-24T02:55:13.4776139Z ##[group]Run '/job_completed.sh' 2026-10-24T02:55:13.4784028Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T02:55:13.4784199Z env: 2026-10-24T02:55:13.4784310Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 168 2026-10-24T02:55:13.4784464Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 372 2026-10-24T02:55:13.4784603Z BLACKSMITH_CHECK_RUN_ID: 120759370161 2026-10-24T02:55:13.4784744Z BLACKSMITH_JOB_DISPLAY_NAME: Lint 2026-10-24T02:55:13.4784881Z GITHUB_ACTIONS_CACHE_MODE: write 2026-10-24T02:55:13.4785014Z ##[endgroup] 2026-10-24T02:55:13.4854805Z Docker container cache not activated, skipping hash computation. 2026-10-24T02:55:13.5124425Z No active SSH sessions detected. Proceeding with shutdown immediately. 2026-10-24T02:55:13.5175248Z Cleaning up orphan processes