2026-10-25T07:31:06.1721155Z Current runner version: '2.338.1' 2026-10-25T07:31:06.1724782Z Runner name: 'blacksmith-8vcpu-ubuntu-2404-po6fbmgsbocu7stv' 2026-10-25T07:31:06.1725504Z Runner group name: 'blacksmith scale sets - blacksmith-8vcpu-ubuntu-2404' 2026-10-25T07:31:06.1726178Z Machine name: 'ip-172-31-73-130' 2026-10-25T07:31:06.1727746Z ##[group]GITHUB_TOKEN Permissions 2026-10-25T07:31:06.1729000Z Contents: read 2026-10-25T07:31:06.1729430Z Metadata: read 2026-10-25T07:31:06.1729880Z ##[endgroup] 2026-10-25T07:31:06.1731177Z Secret source: Actions 2026-10-25T07:31:06.1731860Z Cache mode: write 2026-10-25T07:31:06.1732315Z Prepare workflow directory 2026-10-25T07:31:06.1901659Z Prepare all required actions 2026-10-25T07:31:06.1926649Z Getting action download info 2026-10-25T07:31:06.3170813Z Download action repository 'actions/checkout@v6' (SHA:d23441a48e516b6c34aea4fa41551a30e30af803) 2026-10-25T07:31:06.3570688Z Download action repository 'actions/cache@v6' (SHA:55cc8345863c7cc4c66a329aec7e433d2d1c52a9) 2026-10-25T07:31:06.4619179Z Setting BLACKSMITH_ACTIONS_RESULTS_URL to https://results-receiver.actions.githubusercontent.com/ 2026-10-25T07:31:06.4655058Z Complete job name: Lint 2026-10-25T07:31:06.6809756Z A job started hook has been configured by the self-hosted runner administrator 2026-10-25T07:31:06.6876415Z ##[group]Run '/setup.sh' 2026-10-25T07:31:06.6890281Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-25T07:31:06.6890690Z env: 2026-10-25T07:31:06.6890906Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 152 2026-10-25T07:31:06.6891192Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 517 2026-10-25T07:31:06.6891465Z BLACKSMITH_CHECK_RUN_ID: 121107811281 2026-10-25T07:31:06.6891740Z BLACKSMITH_JOB_DISPLAY_NAME: Lint 2026-10-25T07:31:06.6892005Z GITHUB_ACTIONS_CACHE_MODE: write 2026-10-25T07:31:06.6892259Z ##[endgroup] 2026-10-25T07:31:06.7099679Z Logging daemon started (blacksmithd for logs) 2026-10-25T07:31:06.7187285Z Results daemon started (blacksmithd for results) 2026-10-25T07:31:06.7298254Z Background adoption and SSH setup started (PID: 3176) 2026-10-25T07:31:06.7298732Z 2026-10-25T07:31:06.7299074Z ---------------------------------------- 2026-10-25T07:31:06.7299859Z View this job: https://app.blacksmith.sh/pingdotgg/runs/40173061590/jobs/121107811281 2026-10-25T07:31:06.7300535Z SSH Access (using your GitHub SSH key): 2026-10-25T07:31:06.7301225Z ssh -p 64000 runner@blacksmith-8vcpu-ubuntu-2404-po6fbmgsbocu7stv.vm.blacksmith.sh 2026-10-25T07:31:06.7301730Z 2026-10-25T07:31:06.7301870Z No GitHub SSH key? Add one at: 2026-10-25T07:31:06.7302402Z https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account 2026-10-25T07:31:06.7303065Z 2026-10-25T07:31:06.7303232Z ---------------------------------------- 2026-10-25T07:31:06.7303618Z 2026-10-25T07:31:06.7303839Z VM ID: blacksmith-8vcpu-ubuntu-2404-po6fbmgsbocu7stv 2026-10-25T07:31:06.7304359Z Host: production-152.236.31.172-x8664 2026-10-25T07:31:06.7304891Z Host Agent PID: 4080299 2026-10-25T07:31:06.7305289Z Host Agent Git SHA: 1637818df 2026-10-25T07:31:06.7305693Z Host CPU Manufacturer: AuthenticAMD 2026-10-25T07:31:06.7306142Z Blacksmith Host Generation: gen 2 2026-10-25T07:31:06.7306605Z Petname: production-massive-heron-087916f7 2026-10-25T07:31:06.7307055Z Region: us-east 2026-10-25T07:31:06.7307418Z Rootfs Version: ubuntu24-full-x64-081926 2026-10-25T07:31:06.7310000Z OS Version: Ubuntu 24.04.4 LTS 2026-10-25T07:31:06.7310604Z 2026-10-25T07:31:06.7310789Z Enabling Blacksmith transparent cache 2026-10-25T07:31:06.7567839Z ##[group]Run actions/checkout@v6 2026-10-25T07:31:06.7568129Z with: 2026-10-25T07:31:06.7568535Z sparse-checkout: /* !/.repos/ !/apps/mobile/modules/t3-terminal/Vendor/**/*.a 2026-10-25T07:31:06.7568926Z sparse-checkout-cone-mode: false 2026-10-25T07:31:06.7569200Z repository: pingdotgg/t3code 2026-10-25T07:31:06.7570942Z token: *** 2026-10-25T07:31:06.7571152Z ssh-strict: true 2026-10-25T07:31:06.7571365Z ssh-user: git 2026-10-25T07:31:06.7571586Z persist-credentials: true 2026-10-25T07:31:06.7572028Z clean: true 2026-10-25T07:31:06.7572237Z fetch-depth: 1 2026-10-25T07:31:06.7572447Z fetch-tags: false 2026-10-25T07:31:06.7572668Z show-progress: true 2026-10-25T07:31:06.7572889Z lfs: false 2026-10-25T07:31:06.7573100Z submodules: false 2026-10-25T07:31:06.7573321Z set-safe-directory: true 2026-10-25T07:31:06.7573572Z allow-unsafe-pr-checkout: false 2026-10-25T07:31:06.7573825Z env: 2026-10-25T07:31:06.7574064Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 152 2026-10-25T07:31:06.7574346Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 517 2026-10-25T07:31:06.7574625Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-25T07:31:06.7574884Z ##[endgroup] 2026-10-25T07:31:06.8791499Z Syncing repository: pingdotgg/t3code 2026-10-25T07:31:06.8792541Z ##[group]Getting Git version info 2026-10-25T07:31:06.8792959Z Working directory is '/home/runner/_work/t3code/t3code' 2026-10-25T07:31:06.8793440Z [command]/usr/local/bin/git version 2026-10-25T07:31:06.8842668Z git version 2.55.0 2026-10-25T07:31:06.8853663Z ##[endgroup] 2026-10-25T07:31:06.8860587Z Temporarily overriding HOME='/home/runner/_work/_temp/2d063ad9-648c-4c2a-b066-59c8b46b2df9' before making global git config changes 2026-10-25T07:31:06.8861238Z Adding repository directory to the temporary git global config as a safe directory 2026-10-25T07:31:06.8863743Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code 2026-10-25T07:31:06.8891854Z Deleting the contents of '/home/runner/_work/t3code/t3code' 2026-10-25T07:31:06.8893468Z ##[group]Determining repository object format 2026-10-25T07:31:06.8894505Z ##[endgroup] 2026-10-25T07:31:06.8894871Z ##[group]Initializing the repository 2026-10-25T07:31:06.8896991Z [command]/usr/local/bin/git init /home/runner/_work/t3code/t3code 2026-10-25T07:31:06.8928176Z hint: Using 'master' as the name for the initial branch. This default branch name 2026-10-25T07:31:06.8928649Z hint: will change to "main" in Git 3.0. To configure the initial branch name 2026-10-25T07:31:06.8929110Z hint: to use in all of your new repositories, which will suppress this warning, 2026-10-25T07:31:06.8929521Z hint: call: 2026-10-25T07:31:06.8929726Z hint: 2026-10-25T07:31:06.8929983Z hint: git config --global init.defaultBranch 2026-10-25T07:31:06.8930290Z hint: 2026-10-25T07:31:06.8930571Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and 2026-10-25T07:31:06.8931019Z hint: 'development'. The just-created branch can be renamed via this command: 2026-10-25T07:31:06.8931380Z hint: 2026-10-25T07:31:06.8931592Z hint: git branch -m 2026-10-25T07:31:06.8931826Z hint: 2026-10-25T07:31:06.8932135Z hint: Disable this message with "git config set advice.defaultBranchName false" 2026-10-25T07:31:06.8932600Z Initialized empty Git repository in /home/runner/_work/t3code/t3code/.git/ 2026-10-25T07:31:06.8933571Z [command]/usr/local/bin/git remote add origin https://github.com/pingdotgg/t3code 2026-10-25T07:31:06.8960123Z ##[endgroup] 2026-10-25T07:31:06.8960495Z ##[group]Disabling automatic garbage collection 2026-10-25T07:31:06.8962765Z [command]/usr/local/bin/git config --local gc.auto 0 2026-10-25T07:31:06.8980550Z ##[endgroup] 2026-10-25T07:31:06.8980892Z ##[group]Setting up auth 2026-10-25T07:31:06.8981154Z Removing SSH command configuration 2026-10-25T07:31:06.8984733Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand 2026-10-25T07:31:06.9004762Z [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-25T07:31:06.9128231Z Removing HTTP extra header 2026-10-25T07:31:06.9131166Z [command]/usr/local/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader 2026-10-25T07:31:06.9152538Z [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-25T07:31:06.9241626Z Removing includeIf entries pointing to credentials config files 2026-10-25T07:31:06.9244619Z [command]/usr/local/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir: 2026-10-25T07:31:06.9265204Z [command]/usr/local/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url 2026-10-25T07:31:06.9356036Z [command]/usr/local/bin/git config --file /home/runner/_work/_temp/git-credentials-7864d72f-f244-4dee-84be-4de48c8c1c61.config http.https://github.com/.extraheader AUTHORIZATION: basic *** 2026-10-25T07:31:06.9377001Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git.path /home/runner/_work/_temp/git-credentials-7864d72f-f244-4dee-84be-4de48c8c1c61.config 2026-10-25T07:31:06.9395673Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git/worktrees/*.path /home/runner/_work/_temp/git-credentials-7864d72f-f244-4dee-84be-4de48c8c1c61.config 2026-10-25T07:31:06.9414554Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git.path /github/runner_temp/git-credentials-7864d72f-f244-4dee-84be-4de48c8c1c61.config 2026-10-25T07:31:06.9433686Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git/worktrees/*.path /github/runner_temp/git-credentials-7864d72f-f244-4dee-84be-4de48c8c1c61.config 2026-10-25T07:31:06.9448757Z ##[endgroup] 2026-10-25T07:31:06.9449119Z ##[group]Fetching the repository 2026-10-25T07:31:06.9453039Z [command]/usr/local/bin/git -c protocol.version=2 fetch --no-tags --prune --no-recurse-submodules --filter=blob:none --depth=1 origin +5f40dc04b29c04e9f3dbfbfd5fda6adaf83bc792:refs/remotes/pull/24770/merge 2026-10-25T07:31:07.2133203Z From https://github.com/pingdotgg/t3code 2026-10-25T07:31:07.2133713Z * [new ref] 5f40dc04b29c04e9f3dbfbfd5fda6adaf83bc792 -> pull/24770/merge 2026-10-25T07:31:07.2153954Z ##[endgroup] 2026-10-25T07:31:07.2154404Z ##[group]Determining the checkout info 2026-10-25T07:31:07.2154832Z ##[endgroup] 2026-10-25T07:31:07.2155239Z ##[group]Setting up sparse checkout 2026-10-25T07:31:07.2157880Z [command]/usr/local/bin/git config core.sparseCheckout true 2026-10-25T07:31:07.2180684Z [command]/usr/local/bin/git rev-parse --git-path info/sparse-checkout 2026-10-25T07:31:07.2196364Z .git/info/sparse-checkout 2026-10-25T07:31:07.2200651Z ##[endgroup] 2026-10-25T07:31:07.2201094Z ##[group]Checking out the ref 2026-10-25T07:31:07.2202999Z [command]/usr/local/bin/git checkout --progress --force refs/remotes/pull/24770/merge 2026-10-25T07:31:14.4901316Z Updating files: 0% (1/6567) 2026-10-25T07:31:14.4928294Z Updating files: 1% (66/6567) 2026-10-25T07:31:14.4943474Z Updating files: 2% (132/6567) 2026-10-25T07:31:14.4966212Z Updating files: 3% (198/6567) 2026-10-25T07:31:14.4987005Z Updating files: 4% (263/6567) 2026-10-25T07:31:14.5016319Z Updating files: 5% (329/6567) 2026-10-25T07:31:14.5036778Z Updating files: 6% (395/6567) 2026-10-25T07:31:14.5085474Z Updating files: 7% (460/6567) 2026-10-25T07:31:14.5122874Z Updating files: 8% (526/6567) 2026-10-25T07:31:14.5211087Z Updating files: 9% (592/6567) 2026-10-25T07:31:14.5446631Z Updating files: 10% (657/6567) 2026-10-25T07:31:14.5490619Z Updating files: 11% (723/6567) 2026-10-25T07:31:14.5500940Z Updating files: 12% (789/6567) 2026-10-25T07:31:14.5511838Z Updating files: 13% (854/6567) 2026-10-25T07:31:14.5526770Z Updating files: 14% (920/6567) 2026-10-25T07:31:14.5541149Z Updating files: 15% (986/6567) 2026-10-25T07:31:14.5556963Z Updating files: 16% (1051/6567) 2026-10-25T07:31:14.5571381Z Updating files: 17% (1117/6567) 2026-10-25T07:31:14.5588474Z Updating files: 18% (1183/6567) 2026-10-25T07:31:14.5604592Z Updating files: 19% (1248/6567) 2026-10-25T07:31:14.5621253Z Updating files: 20% (1314/6567) 2026-10-25T07:31:14.5644967Z Updating files: 21% (1380/6567) 2026-10-25T07:31:14.5662483Z Updating files: 22% (1445/6567) 2026-10-25T07:31:14.5677721Z Updating files: 23% (1511/6567) 2026-10-25T07:31:14.5691241Z Updating files: 24% (1577/6567) 2026-10-25T07:31:14.5704606Z Updating files: 25% (1642/6567) 2026-10-25T07:31:14.5719481Z Updating files: 26% (1708/6567) 2026-10-25T07:31:14.5732626Z Updating files: 27% (1774/6567) 2026-10-25T07:31:14.5753506Z Updating files: 28% (1839/6567) 2026-10-25T07:31:14.5783405Z Updating files: 29% (1905/6567) 2026-10-25T07:31:14.5804158Z Updating files: 30% (1971/6567) 2026-10-25T07:31:14.5827085Z Updating files: 31% (2036/6567) 2026-10-25T07:31:14.5855181Z Updating files: 32% (2102/6567) 2026-10-25T07:31:14.5884767Z Updating files: 33% (2168/6567) 2026-10-25T07:31:14.5951133Z Updating files: 34% (2233/6567) 2026-10-25T07:31:14.6005308Z Updating files: 35% (2299/6567) 2026-10-25T07:31:14.6038390Z Updating files: 36% (2365/6567) 2026-10-25T07:31:14.6073114Z Updating files: 37% (2430/6567) 2026-10-25T07:31:14.6112722Z Updating files: 38% (2496/6567) 2026-10-25T07:31:14.6138105Z Updating files: 39% (2562/6567) 2026-10-25T07:31:14.6169246Z Updating files: 40% (2627/6567) 2026-10-25T07:31:14.6197070Z Updating files: 41% (2693/6567) 2026-10-25T07:31:14.6212320Z Updating files: 42% (2759/6567) 2026-10-25T07:31:14.6222205Z Updating files: 43% (2824/6567) 2026-10-25T07:31:14.6246579Z Updating files: 44% (2890/6567) 2026-10-25T07:31:14.6272855Z Updating files: 45% (2956/6567) 2026-10-25T07:31:14.6299325Z Updating files: 46% (3021/6567) 2026-10-25T07:31:14.6324538Z Updating files: 47% (3087/6567) 2026-10-25T07:31:14.6352850Z Updating files: 48% (3153/6567) 2026-10-25T07:31:14.6387777Z Updating files: 49% (3218/6567) 2026-10-25T07:31:14.6414241Z Updating files: 50% (3284/6567) 2026-10-25T07:31:14.6437067Z Updating files: 51% (3350/6567) 2026-10-25T07:31:14.6466328Z Updating files: 52% (3415/6567) 2026-10-25T07:31:14.6492072Z Updating files: 53% (3481/6567) 2026-10-25T07:31:14.6514682Z Updating files: 54% (3547/6567) 2026-10-25T07:31:14.6534055Z Updating files: 55% (3612/6567) 2026-10-25T07:31:14.6547586Z Updating files: 56% (3678/6567) 2026-10-25T07:31:14.6567596Z Updating files: 57% (3744/6567) 2026-10-25T07:31:14.6909958Z Updating files: 58% (3809/6567) 2026-10-25T07:31:14.6927525Z Updating files: 59% (3875/6567) 2026-10-25T07:31:14.6945677Z Updating files: 60% (3941/6567) 2026-10-25T07:31:14.6968506Z Updating files: 61% (4006/6567) 2026-10-25T07:31:14.6991246Z Updating files: 62% (4072/6567) 2026-10-25T07:31:14.7016050Z Updating files: 63% (4138/6567) 2026-10-25T07:31:14.7039872Z Updating files: 64% (4203/6567) 2026-10-25T07:31:14.7056646Z Updating files: 65% (4269/6567) 2026-10-25T07:31:14.7080012Z Updating files: 66% (4335/6567) 2026-10-25T07:31:14.7094643Z Updating files: 67% (4400/6567) 2026-10-25T07:31:14.7112688Z Updating files: 68% (4466/6567) 2026-10-25T07:31:14.7125502Z Updating files: 69% (4532/6567) 2026-10-25T07:31:14.7140870Z Updating files: 70% (4597/6567) 2026-10-25T07:31:14.7158123Z Updating files: 71% (4663/6567) 2026-10-25T07:31:14.7170716Z Updating files: 72% (4729/6567) 2026-10-25T07:31:14.7426430Z Updating files: 73% (4794/6567) 2026-10-25T07:31:14.7607289Z Updating files: 74% (4860/6567) 2026-10-25T07:31:14.7628571Z Updating files: 75% (4926/6567) 2026-10-25T07:31:14.7648236Z Updating files: 76% (4991/6567) 2026-10-25T07:31:14.7669533Z Updating files: 77% (5057/6567) 2026-10-25T07:31:14.7688528Z Updating files: 78% (5123/6567) 2026-10-25T07:31:14.7706607Z Updating files: 79% (5188/6567) 2026-10-25T07:31:14.7727518Z Updating files: 80% (5254/6567) 2026-10-25T07:31:14.7742543Z Updating files: 81% (5320/6567) 2026-10-25T07:31:14.7761718Z Updating files: 82% (5385/6567) 2026-10-25T07:31:14.7781896Z Updating files: 83% (5451/6567) 2026-10-25T07:31:14.7803633Z Updating files: 84% (5517/6567) 2026-10-25T07:31:14.7821191Z Updating files: 85% (5582/6567) 2026-10-25T07:31:14.7844841Z Updating files: 86% (5648/6567) 2026-10-25T07:31:14.7911378Z Updating files: 87% (5714/6567) 2026-10-25T07:31:14.7942594Z Updating files: 88% (5779/6567) 2026-10-25T07:31:14.7963939Z Updating files: 89% (5845/6567) 2026-10-25T07:31:14.7985214Z Updating files: 90% (5911/6567) 2026-10-25T07:31:14.8017880Z Updating files: 91% (5976/6567) 2026-10-25T07:31:14.8032870Z Updating files: 92% (6042/6567) 2026-10-25T07:31:14.8053645Z Updating files: 93% (6108/6567) 2026-10-25T07:31:14.8072458Z Updating files: 94% (6173/6567) 2026-10-25T07:31:14.8096121Z Updating files: 95% (6239/6567) 2026-10-25T07:31:14.8154047Z Updating files: 96% (6305/6567) 2026-10-25T07:31:14.8178068Z Updating files: 97% (6370/6567) 2026-10-25T07:31:14.8224065Z Updating files: 98% (6436/6567) 2026-10-25T07:31:14.8243247Z Updating files: 99% (6502/6567) 2026-10-25T07:31:14.8243465Z Updating files: 100% (6567/6567) 2026-10-25T07:31:14.8243718Z Updating files: 100% (6567/6567), done. 2026-10-25T07:31:14.8391669Z Note: switching to 'refs/remotes/pull/24770/merge'. 2026-10-25T07:31:14.8391798Z 2026-10-25T07:31:14.8391946Z You are in 'detached HEAD' state. You can look around, make experimental 2026-10-25T07:31:14.8392374Z changes and commit them, and you can discard any commits you make in this 2026-10-25T07:31:14.8392650Z state without impacting any branches by switching back to a branch. 2026-10-25T07:31:14.8392798Z 2026-10-25T07:31:14.8392922Z If you want to create a new branch to retain commits you create, you may 2026-10-25T07:31:14.8393185Z do so (now or later) by using -c with the switch command. Example: 2026-10-25T07:31:14.8393324Z 2026-10-25T07:31:14.8393409Z git switch -c 2026-10-25T07:31:14.8393514Z 2026-10-25T07:31:14.8393590Z Or undo this operation with: 2026-10-25T07:31:14.8393684Z 2026-10-25T07:31:14.8393753Z git switch - 2026-10-25T07:31:14.8393843Z 2026-10-25T07:31:14.8393986Z Turn off this advice by setting config variable advice.detachedHead to false 2026-10-25T07:31:14.8394144Z 2026-10-25T07:31:14.8394348Z HEAD is now at 5f40dc0 Merge 1fe6b549aabd413f2207f31ba2ebcbc2f14e23a8 into b3d382e1009d5430de8c528aef99a39854a7cbc4 2026-10-25T07:31:14.8405273Z ##[endgroup] 2026-10-25T07:31:14.8435420Z [command]/usr/local/bin/git log -1 --format=%H 2026-10-25T07:31:14.8474454Z 5f40dc04b29c04e9f3dbfbfd5fda6adaf83bc792 2026-10-25T07:31:14.8548129Z ##[group]Run files="$(git ls-files .github/pr-assets)" 2026-10-25T07:31:14.8548375Z files="$(git ls-files .github/pr-assets)" 2026-10-25T07:31:14.8548578Z if test -n "$files"; then 2026-10-25T07:31:14.8548893Z  printf 'PR evidence must be uploaded to GitHub, not committed:\n%s\n' "$files" >&2 2026-10-25T07:31:14.8549255Z  exit 1 2026-10-25T07:31:14.8549464Z fi 2026-10-25T07:31:14.8568698Z shell: /usr/bin/bash -e {0} 2026-10-25T07:31:14.8568866Z env: 2026-10-25T07:31:14.8569011Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 152 2026-10-25T07:31:14.8569193Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 517 2026-10-25T07:31:14.8569363Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-25T07:31:14.8569523Z ##[endgroup] 2026-10-25T07:31:14.8724172Z Prepare all required actions 2026-10-25T07:31:14.8724513Z Getting action download info 2026-10-25T07:31:14.9733387Z Download action repository 'voidzero-dev/setup-vp@v1' (SHA:250f29ce396baf5e8f24498e17c0dfdebabc26eb) 2026-10-25T07:31:15.0813043Z ##[group]Run ./.github/actions/setup-ci-deps 2026-10-25T07:31:15.0813228Z with: 2026-10-25T07:31:15.0813623Z task-cache-read-token: *** 2026-10-25T07:31:15.0813775Z env: 2026-10-25T07:31:15.0813910Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 152 2026-10-25T07:31:15.0814078Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 517 2026-10-25T07:31:15.0814250Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-25T07:31:15.0814405Z ##[endgroup] 2026-10-25T07:31:15.0918702Z ##[start-action display=Resolve Vite+ version;id=__self.vp] 2026-10-25T07:31:15.0935826Z ##[group]Run echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-25T07:31:15.0936222Z echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-25T07:31:15.0936510Z echo "node=$(jq -r '.engines.node' package.json)" >> "$GITHUB_OUTPUT" 2026-10-25T07:31:15.0936773Z echo "pnpm=$(jq -r '.packageManager' package.json)" >> "$GITHUB_OUTPUT" 2026-10-25T07:31:15.0954329Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-25T07:31:15.0954519Z env: 2026-10-25T07:31:15.0954660Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 152 2026-10-25T07:31:15.0954828Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 517 2026-10-25T07:31:15.0954999Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-25T07:31:15.0955156Z ##[endgroup] 2026-10-25T07:31:15.1028436Z ##[end-action id=__self.vp;outcome=success;conclusion=success;duration_ms=10] 2026-10-25T07:31:15.1029917Z ##[start-action display=Cache Vite+;id=__self.vp_cache] 2026-10-25T07:31:15.1073807Z ##[group]Run actions/cache@v6 2026-10-25T07:31:15.1073967Z with: 2026-10-25T07:31:15.1074100Z path: ~/.vite-plus 2026-10-25T07:31:15.1074300Z key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-25T07:31:15.1074528Z enableCrossOsArchive: false 2026-10-25T07:31:15.1074689Z fail-on-cache-miss: false 2026-10-25T07:31:15.1074842Z lookup-only: false 2026-10-25T07:31:15.1074977Z save-always: false 2026-10-25T07:31:15.1075112Z env: 2026-10-25T07:31:15.1075247Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 152 2026-10-25T07:31:15.1075420Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 517 2026-10-25T07:31:15.1075585Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-25T07:31:15.1075744Z ##[endgroup] 2026-10-25T07:31:15.3012064Z Cache hit for: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-25T07:31:15.6611359Z Received 170349591 of 170349591 (100.0%), 479.2 MBs/sec 2026-10-25T07:31:15.6611782Z Cache Size: ~162 MB (170349591 B) 2026-10-25T07:31:15.6631778Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/bd9d1271-c4c1-463f-8695-eb97b63db536/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-25T07:31:16.2920217Z Cache restored successfully 2026-10-25T07:31:16.3050510Z Cache restored from key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-25T07:31:16.3125048Z ##[end-action id=__self.vp_cache;outcome=success;conclusion=success;duration_ms=1209] 2026-10-25T07:31:16.3127124Z ##[start-action display=Use cached Vite+;id=__self.__run] 2026-10-25T07:31:16.3147021Z ##[group]Run echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-25T07:31:16.3147243Z echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-25T07:31:16.3147417Z "$HOME/.vite-plus/bin/vp" env use "26.12.1" 2026-10-25T07:31:16.3166178Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-25T07:31:16.3166343Z env: 2026-10-25T07:31:16.3166461Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 152 2026-10-25T07:31:16.3166619Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 517 2026-10-25T07:31:16.3166771Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-25T07:31:16.3166989Z ##[endgroup] 2026-10-25T07:31:16.3219371Z Using Node.js v26.12.1 (resolved from 26.12.1) 2026-10-25T07:31:16.3225514Z ##[end-action id=__self.__run;outcome=success;conclusion=success;duration_ms=9] 2026-10-25T07:31:16.3226792Z ##[start-action display=Setup Vite+;id=__self.__voidzero-dev_setup-vp] 2026-10-25T07:31:16.3230385Z ##[end-action id=__self.__voidzero-dev_setup-vp;outcome=skipped;conclusion=skipped;duration_ms=0] 2026-10-25T07:31:16.3231420Z ##[start-action display=Resolve pnpm store path;id=__self.pnpm_store] 2026-10-25T07:31:16.3241889Z ##[group]Run store_path="$(vp pm cache dir)" 2026-10-25T07:31:16.3242110Z store_path="$(vp pm cache dir)" 2026-10-25T07:31:16.3242272Z echo "path=$store_path" >> "$GITHUB_OUTPUT" 2026-10-25T07:31:16.3257675Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-25T07:31:16.3257848Z env: 2026-10-25T07:31:16.3258100Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 152 2026-10-25T07:31:16.3258246Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 517 2026-10-25T07:31:16.3258389Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-25T07:31:16.3258546Z ##[endgroup] 2026-10-25T07:31:16.3383966Z ##[end-action id=__self.pnpm_store;outcome=success;conclusion=success;duration_ms=15] 2026-10-25T07:31:16.3385280Z ##[start-action display=Cache full pnpm store;id=__self.__actions_cache] 2026-10-25T07:31:16.3702535Z ##[group]Run actions/cache@v6 2026-10-25T07:31:16.3702678Z with: 2026-10-25T07:31:16.3702801Z path: /home/runner/.local/share/pnpm/store/v11 2026-10-25T07:31:16.3703067Z key: pnpm-full-v1-Linux-X64-8a4fb989c1a2cecc2b0e5829ebdd9db8b402fe97cf8844590fcfa86441a5fa16 2026-10-25T07:31:16.3703324Z restore-keys: pnpm-full-v1-Linux-X64- 2026-10-25T07:31:16.3703481Z enableCrossOsArchive: false 2026-10-25T07:31:16.3703608Z fail-on-cache-miss: false 2026-10-25T07:31:16.3703734Z lookup-only: false 2026-10-25T07:31:16.3703841Z save-always: false 2026-10-25T07:31:16.3703961Z env: 2026-10-25T07:31:16.3704067Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 152 2026-10-25T07:31:16.3704220Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 517 2026-10-25T07:31:16.3704364Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-25T07:31:16.3704497Z ##[endgroup] 2026-10-25T07:31:16.5591478Z Cache hit for: pnpm-full-v1-Linux-X64-8a4fb989c1a2cecc2b0e5829ebdd9db8b402fe97cf8844590fcfa86441a5fa16 2026-10-25T07:31:17.6352910Z Received 671088640 of 998205880 (67.2%), 602.1 MBs/sec 2026-10-25T07:31:18.1228609Z Received 998205880 of 998205880 (100.0%), 614.2 MBs/sec 2026-10-25T07:31:18.1229392Z Cache Size: ~952 MB (998205880 B) 2026-10-25T07:31:18.1283620Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/a99304ab-2caa-4c08-8d67-0926b5f86f3f/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-25T07:31:23.1829774Z Cache restored successfully 2026-10-25T07:31:23.2290691Z Cache restored from key: pnpm-full-v1-Linux-X64-8a4fb989c1a2cecc2b0e5829ebdd9db8b402fe97cf8844590fcfa86441a5fa16 2026-10-25T07:31:23.2342086Z ##[end-action id=__self.__actions_cache;outcome=success;conclusion=success;duration_ms=6895] 2026-10-25T07:31:23.2344900Z ##[start-action display=Install dependencies;id=__self.__run_2] 2026-10-25T07:31:23.2357985Z ##[group]Run vp install 2026-10-25T07:31:23.2358188Z vp install 2026-10-25T07:31:23.2376691Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-25T07:31:23.2376855Z env: 2026-10-25T07:31:23.2376969Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 152 2026-10-25T07:31:23.2377111Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 517 2026-10-25T07:31:23.2377256Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-25T07:31:23.2377460Z ##[endgroup] 2026-10-25T07:31:23.2690393Z Scope: all 35 workspace projects 2026-10-25T07:31:23.3693295Z ? Verifying lockfile against supply-chain policies (2087 entries)... 2026-10-25T07:31:23.6054518Z Packages are hard linked from the content-addressable store to the virtual store. 2026-10-25T07:31:23.6054836Z Content-addressable store is at: /home/runner/.local/share/pnpm/store/v11 2026-10-25T07:31:23.6055059Z Virtual store is at: node_modules/.pnpm 2026-10-25T07:31:25.8059767Z ✓ Lockfile passes supply-chain policies (2087 entries in 2.4s) 2026-10-25T07:31:25.8060030Z Lockfile is up to date, resolution step is skipped 2026-10-25T07:31:25.8217001Z Packages: +1722 2026-10-25T07:31:25.8217217Z ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2026-10-25T07:31:25.8528945Z Progress: resolved 1722, reused 1718, downloaded 0, added 1722, done 2026-10-25T07:31:26.7863243Z . prepare$ vp config --no-agent 2026-10-25T07:31:26.8827232Z . prepare: Done 2026-10-25T07:31:26.8840163Z 2026-10-25T07:31:26.8840222Z devDependencies: 2026-10-25T07:31:26.8840436Z + @coderabbitai/config 1.1.0 2026-10-25T07:31:26.8840575Z + @shadcn/lint 0.1.5 2026-10-25T07:31:26.8840718Z + @types/node 24.12.4 2026-10-25T07:31:26.8840849Z + knip 6.34.0 2026-10-25T07:31:26.8840980Z + typescript <- @tsc-rs/typescript 0.8.0 2026-10-25T07:31:26.8841136Z + vite-plus 1.3.0 2026-10-25T07:31:26.8841228Z 2026-10-25T07:31:26.8858361Z Done in 3.6s using pnpm v12.14.0 2026-10-25T07:31:26.9001785Z ##[end-action id=__self.__run_2;outcome=success;conclusion=success;duration_ms=3665] 2026-10-25T07:31:26.9004706Z ##[start-action display=Enable shared task cache;id=__self.__run_3] 2026-10-25T07:31:26.9293847Z ##[group]Run node infra/task-cache/scripts/install-ci.ts 2026-10-25T07:31:26.9294077Z node infra/task-cache/scripts/install-ci.ts 2026-10-25T07:31:26.9294380Z if [[ ( "$GITHUB_EVENT_NAME" == pull_request && "$GITHUB_BASE_REF" == main ) || ( "$GITHUB_EVENT_NAME" == push && "$GITHUB_REF" == refs/heads/main ) ]]; then 2026-10-25T07:31:26.9294689Z  echo 'VP_REMOTE_CACHE=read-write' >> "$GITHUB_ENV" 2026-10-25T07:31:26.9294846Z else 2026-10-25T07:31:26.9294986Z  echo 'VP_REMOTE_CACHE=read' >> "$GITHUB_ENV" 2026-10-25T07:31:26.9295139Z fi 2026-10-25T07:31:26.9313359Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-25T07:31:26.9313520Z env: 2026-10-25T07:31:26.9313633Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 152 2026-10-25T07:31:26.9313774Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 517 2026-10-25T07:31:26.9313919Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-25T07:31:26.9314176Z T3_TASK_CACHE_READ_TOKEN: *** 2026-10-25T07:31:26.9314299Z ##[endgroup] 2026-10-25T07:31:26.9638797Z ##[end-action id=__self.__run_3;outcome=success;conclusion=success;duration_ms=63] 2026-10-25T07:31:27.0080445Z ##[group]Run actions/cache@v6 2026-10-25T07:31:27.0080631Z with: 2026-10-25T07:31:27.0080796Z path: ~/.cache/electron 2026-10-25T07:31:27.0081149Z key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-25T07:31:27.0081537Z enableCrossOsArchive: false 2026-10-25T07:31:27.0081750Z fail-on-cache-miss: false 2026-10-25T07:31:27.0081938Z lookup-only: false 2026-10-25T07:31:27.0082328Z save-always: false 2026-10-25T07:31:27.0082495Z env: 2026-10-25T07:31:27.0082669Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 152 2026-10-25T07:31:27.0082899Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 517 2026-10-25T07:31:27.0083133Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-25T07:31:27.0083374Z BASH_ENV: /home/runner/_work/_temp/t3-task-cache.sh 2026-10-25T07:31:27.0083622Z VP_REMOTE_CACHE: read-write 2026-10-25T07:31:27.0083777Z ##[endgroup] 2026-10-25T07:31:27.2025524Z Cache hit for: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-25T07:31:27.3805979Z Received 122906203 of 122906203 (100.0%), 719.1 MBs/sec 2026-10-25T07:31:27.3806358Z Cache Size: ~117 MB (122906203 B) 2026-10-25T07:31:27.3852444Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/fa5972b4-9d22-4aef-a7f6-5033c714a832/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-25T07:31:27.4569230Z Cache restored successfully 2026-10-25T07:31:27.4693594Z Cache restored from key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-25T07:31:27.4807174Z ##[group]Run vp run --filter @t3tools/desktop ensure:electron 2026-10-25T07:31:27.4807541Z vp run --filter @t3tools/desktop ensure:electron 2026-10-25T07:31:27.4830613Z shell: /usr/bin/bash -e {0} 2026-10-25T07:31:27.4830774Z env: 2026-10-25T07:31:27.4830901Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 152 2026-10-25T07:31:27.4831074Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 517 2026-10-25T07:31:27.4831264Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-25T07:31:27.4831425Z BASH_ENV: /home/runner/_work/_temp/t3-task-cache.sh 2026-10-25T07:31:27.4831594Z VP_REMOTE_CACHE: read-write 2026-10-25T07:31:27.4831733Z ##[endgroup] 2026-10-25T07:31:27.6682647Z ~/apps/desktop$ node scripts/ensure-electron-runtime.mjs ⊘ cache disabled 2026-10-25T07:31:28.2251537Z /home/runner/_work/t3code/t3code/node_modules/.pnpm/electron@44.9.3_supports-color@8.1.1/node_modules/electron/dist/electron 2026-10-25T07:31:28.2300483Z 2026-10-25T07:31:28.2386966Z ##[group]Run vp run knip:check 2026-10-25T07:31:28.2387179Z vp run knip:check 2026-10-25T07:31:28.2405183Z shell: /usr/bin/bash -e {0} 2026-10-25T07:31:28.2405308Z env: 2026-10-25T07:31:28.2405419Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 152 2026-10-25T07:31:28.2405572Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 517 2026-10-25T07:31:28.2405715Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-25T07:31:28.2405873Z BASH_ENV: /home/runner/_work/_temp/t3-task-cache.sh 2026-10-25T07:31:28.2406034Z VP_REMOTE_CACHE: read-write 2026-10-25T07:31:28.2406159Z ##[endgroup] 2026-10-25T07:31:28.4138982Z $ knip --include files,dependencies --no-config-hints ⊘ cache disabled 2026-10-25T07:31:31.9587540Z 2026-10-25T07:31:31.9590319Z $ knip --workspace apps/server --workspace apps/desktop --workspace apps/web --workspace packages/client-runtime --workspace packages/contracts --workspace packages/effect-acp --workspace packages/effect-codex-app-server --workspace packages/shared --workspace packages/ssh --workspace packages/tailscale --workspace packages/provider-core --workspace packages/provider-acp --workspace packages/provider-acp-registry --workspace packages/provider-testing --workspace packages/provider-pi --workspace packages/provider-muse --workspace packages/provider-opencode --workspace packages/provider-cursor --workspace packages/provider-grok --workspace packages/source-control-core --workspace packages/source-control-definitions --workspace packages/source-control-azure-devops --workspace packages/source-control-bitbucket --workspace packages/source-control-forgejo --workspace packages/source-control-gitcafe --workspace packages/source-control-github --workspace packages/source-control-gitlab --workspace packages/source-control-testing --exports --preprocessor ./scripts/knip-schemas.ts --no-config-hints ⊘ cache disabled 2026-10-25T07:31:39.7943252Z 2026-10-25T07:31:39.7944362Z --- 2026-10-25T07:31:39.7944816Z vp run: 2/2 successful. (Run `vp run --last-details` for full details) 2026-10-25T07:31:39.8025110Z ##[group]Run vp run --filter @t3tools/source-control-github generate --check 2026-10-25T07:31:39.8025413Z vp run --filter @t3tools/source-control-github generate --check 2026-10-25T07:31:39.8043269Z shell: /usr/bin/bash -e {0} 2026-10-25T07:31:39.8043395Z env: 2026-10-25T07:31:39.8043507Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 152 2026-10-25T07:31:39.8043650Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 517 2026-10-25T07:31:39.8043790Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-25T07:31:39.8043944Z BASH_ENV: /home/runner/_work/_temp/t3-task-cache.sh 2026-10-25T07:31:39.8044101Z VP_REMOTE_CACHE: read-write 2026-10-25T07:31:39.8044222Z ##[endgroup] 2026-10-25T07:31:39.9745092Z ~/packages/source-control-github$ graphqlgen --check ⊘ cache disabled 2026-10-25T07:31:40.1507984Z 2026-10-25T07:31:40.1584400Z ##[group]Run vp run --filter t3 generate --check 2026-10-25T07:31:40.1584780Z vp run --filter t3 generate --check 2026-10-25T07:31:40.1602759Z shell: /usr/bin/bash -e {0} 2026-10-25T07:31:40.1602889Z env: 2026-10-25T07:31:40.1602999Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 152 2026-10-25T07:31:40.1603143Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 517 2026-10-25T07:31:40.1603281Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-25T07:31:40.1603438Z BASH_ENV: /home/runner/_work/_temp/t3-task-cache.sh 2026-10-25T07:31:40.1603600Z VP_REMOTE_CACHE: read-write 2026-10-25T07:31:40.1603729Z ##[endgroup] 2026-10-25T07:31:40.3343793Z ~/apps/server$ graphqlgen --check ⊘ cache disabled 2026-10-25T07:31:40.4776572Z 2026-10-25T07:31:40.4967380Z ##[group]Run vp check 2026-10-25T07:31:40.4967536Z vp check 2026-10-25T07:31:40.4985892Z shell: /usr/bin/bash -e {0} 2026-10-25T07:31:40.4986016Z env: 2026-10-25T07:31:40.4986121Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 152 2026-10-25T07:31:40.4986269Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 517 2026-10-25T07:31:40.4986410Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-25T07:31:40.4986576Z BASH_ENV: /home/runner/_work/_temp/t3-task-cache.sh 2026-10-25T07:31:40.4986738Z VP_REMOTE_CACHE: read-write 2026-10-25T07:31:40.4986863Z ##[endgroup] 2026-10-25T07:31:41.0269935Z pass: All 5861 files are correctly formatted (389ms, 8 threads) 2026-10-25T07:31:46.0768523Z warn: Lint warnings found 2026-10-25T07:31:46.0769761Z ⚠ eslint(no-unused-vars): Identifier 'androidWorkspaceNavigationState' is imported but never used. 2026-10-25T07:31:46.0770316Z ╭─[apps/mobile/src/lib/android-workspace-navigation.test.ts:9:3] 2026-10-25T07:31:46.0770548Z  8 │ import { 2026-10-25T07:31:46.0770718Z  9 │ androidWorkspaceNavigationState, 2026-10-25T07:31:46.0770999Z ·  ───────────────┬─────────────── 2026-10-25T07:31:46.0771457Z · ╰── 'androidWorkspaceNavigationState' is imported here 2026-10-25T07:31:46.0771852Z 10 │ linkedThreadStep, 2026-10-25T07:31:46.0772013Z ╰──── 2026-10-25T07:31:46.0772167Z  help: Consider removing this import. 2026-10-25T07:31:46.0772284Z 2026-10-25T07:31:46.0772578Z ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'. 2026-10-25T07:31:46.0772976Z ╭─[apps/server/src/telemetry/AnalyticsService.ts:327:7] 2026-10-25T07:31:46.0773178Z 326 │ 2026-10-25T07:31:46.0773343Z 327 │ const layerTest = AnalyticsService.layerTest; 2026-10-25T07:31:46.0773544Z ·  ────┬──── 2026-10-25T07:31:46.0773770Z · ╰── 'layerTest' is declared here 2026-10-25T07:31:46.0773961Z ╰──── 2026-10-25T07:31:46.0774126Z  help: Consider removing this declaration. 2026-10-25T07:31:46.0774249Z 2026-10-25T07:31:46.0774464Z ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed 2026-10-25T07:31:46.0774776Z ╭─[packages/contracts/src/rpc.ts:302:8] 2026-10-25T07:31:46.0774961Z 301 │ } from "./device.ts"; 2026-10-25T07:31:46.0775151Z 302 │ import {} from "./previewAutomation.ts"; 2026-10-25T07:31:46.0775333Z ·  ── 2026-10-25T07:31:46.0775477Z 303 │ import { 2026-10-25T07:31:46.0775597Z ╰──── 2026-10-25T07:31:46.0775737Z  help: Remove empty braces 2026-10-25T07:31:46.0775836Z 2026-10-25T07:31:46.0776008Z ⚠ react(purity): Cannot call impure function during render 2026-10-25T07:31:46.0776336Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:699:76] 2026-10-25T07:31:46.0776696Z 698 │ const [snoozeGateClock, setSnoozeGateClock] = useState(() => ({ thread, now: Date.now() })); 2026-10-25T07:31:46.0777048Z 699 │ if (snoozeGateClock.thread !== thread) setSnoozeGateClock({ thread, now: Date.now() }); 2026-10-25T07:31:46.0777357Z ·  ─────┬──── 2026-10-25T07:31:46.0777685Z · ╰── Cannot call impure function 2026-10-25T07:31:46.0777996Z 700 │ const snoozeGateNow = new Date(snoozeGateClock.now).toISOString(); 2026-10-25T07:31:46.0778197Z ╰──── 2026-10-25T07:31:46.0778544Z  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-25T07:31:46.0779130Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-25T07:31:46.0779414Z 2026-10-25T07:31:46.0779582Z ⚠ react(purity): Cannot call impure function during render 2026-10-25T07:31:46.0780121Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:720:71] 2026-10-25T07:31:46.0780570Z 719 │ const snoozePresets = useMemo( 2026-10-25T07:31:46.0780974Z 720 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-25T07:31:46.0781293Z ·  ─────┬──── 2026-10-25T07:31:46.0781609Z · ╰── Cannot call impure function 2026-10-25T07:31:46.0781899Z 721 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-25T07:31:46.0782084Z ╰──── 2026-10-25T07:31:46.0782414Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-25T07:31:46.0782975Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-25T07:31:46.0783256Z 2026-10-25T07:31:46.0783437Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-25T07:31:46.0783774Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:721:6] 2026-10-25T07:31:46.0784108Z 720 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-25T07:31:46.0784405Z 721 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-25T07:31:46.0785002Z ·  ────────────┬─────────── 2026-10-25T07:31:46.0785282Z · ╰── Unnecessary dependency `props.snoozePresetMinute` 2026-10-25T07:31:46.0785512Z 722 │ ); 2026-10-25T07:31:46.0785626Z ╰──── 2026-10-25T07:31:46.0786006Z  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-25T07:31:46.0786618Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.0786917Z 2026-10-25T07:31:46.0787099Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-25T07:31:46.0787432Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:767:7] 2026-10-25T07:31:46.0787666Z 766 │ thread.pinnedAt, 2026-10-25T07:31:46.0787817Z 767 │ variant, 2026-10-25T07:31:46.0787975Z ·  ───┬─── 2026-10-25T07:31:46.0788200Z · ╰── Unnecessary dependency `variant` 2026-10-25T07:31:46.0788403Z 768 │ ], 2026-10-25T07:31:46.0788523Z ╰──── 2026-10-25T07:31:46.0788888Z  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-25T07:31:46.0789490Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.0789829Z 2026-10-25T07:31:46.0790029Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-25T07:31:46.0790392Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:1216:21] 2026-10-25T07:31:46.0790692Z 1215 │ {providerDrivers.slice(0, -1).map((driver, index) => ( 2026-10-25T07:31:46.0791085Z 1216 │ 2026-10-25T07:31:46.0791406Z ·  ────────────────────────── 2026-10-25T07:31:46.0791643Z 1217 │ 2026-10-25T07:31:46.0791823Z ╰──── 2026-10-25T07:31:46.0792032Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-25T07:31:46.0792191Z 2026-10-25T07:31:46.0792383Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-25T07:31:46.0792762Z ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:555:70] 2026-10-25T07:31:46.0793030Z 554 │ assert.deepStrictEqual( 2026-10-25T07:31:46.0793312Z 555 │ (yield* Ref.get(fixture.syncCommands)).map(({ commandId: _, ...rest }) => rest), 2026-10-25T07:31:46.0793617Z ·  ┬ 2026-10-25T07:31:46.0793919Z · ╰── '_' is declared here 2026-10-25T07:31:46.0794142Z 556 │ [ 2026-10-25T07:31:46.0794272Z ╰──── 2026-10-25T07:31:46.0794438Z  help: Consider removing this parameter. 2026-10-25T07:31:46.0794559Z 2026-10-25T07:31:46.0794744Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-25T07:31:46.0795111Z ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:1154:70] 2026-10-25T07:31:46.0795374Z 1153 │ assert.deepStrictEqual( 2026-10-25T07:31:46.0795640Z 1154 │ (yield* Ref.get(fixture.linkCommands)).map(({ commandId: _, ...rest }) => rest), 2026-10-25T07:31:46.0795936Z ·  ┬ 2026-10-25T07:31:46.0796228Z · ╰── '_' is declared here 2026-10-25T07:31:46.0796445Z 1155 │ [ 2026-10-25T07:31:46.0796576Z ╰──── 2026-10-25T07:31:46.0796736Z  help: Consider removing this parameter. 2026-10-25T07:31:46.0796853Z 2026-10-25T07:31:46.0797118Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-25T07:31:46.0797537Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:269:5] 2026-10-25T07:31:46.0797835Z 267 │ const [snoozeWakeTick, bumpSnoozeWakeTick] = useState(0); 2026-10-25T07:31:46.0798047Z 268 │ useEffect(() => { 2026-10-25T07:31:46.0798207Z ·  ────┬──── 2026-10-25T07:31:46.0798436Z · ╰── This is the containing effect 2026-10-25T07:31:46.0798654Z 269 │ setNow(new Date().toISOString()); 2026-10-25T07:31:46.0798829Z ·  ───┬── 2026-10-25T07:31:46.0799085Z · ╰── Avoid calling setState() directly within an effect 2026-10-25T07:31:46.0799391Z 270 │ const id = setInterval(() => setNow(new Date().toISOString()), 60_000); 2026-10-25T07:31:46.0799622Z ╰──── 2026-10-25T07:31:46.0800573Z  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-25T07:31:46.0801843Z  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-25T07:31:46.0802302Z 2026-10-25T07:31:46.0802581Z ⚠ eslint(no-unused-vars): Type 'EnvironmentThreadSearchMatch' is imported but never used. 2026-10-25T07:31:46.0802991Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:12:8] 2026-10-25T07:31:46.0803240Z 11 │ threadSearchMatchKey, 2026-10-25T07:31:46.0803428Z 12 │ type EnvironmentThreadSearchMatch, 2026-10-25T07:31:46.0803655Z ·  ──────────────┬───────────── 2026-10-25T07:31:46.0804557Z · ╰── 'EnvironmentThreadSearchMatch' is imported here 2026-10-25T07:31:46.0804984Z 13 │ } from "@t3tools/client-runtime/state/thread-search"; 2026-10-25T07:31:46.0805272Z ╰──── 2026-10-25T07:31:46.0805521Z  help: Consider removing this import. 2026-10-25T07:31:46.0805712Z 2026-10-25T07:31:46.0806014Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-25T07:31:46.0806526Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:325:25] 2026-10-25T07:31:46.0806910Z 324 │ // snoozeWakeTick re-arms clamped timers even when the wake date exceeds 32-bit setTimeout and stays unchanged. 2026-10-25T07:31:46.0807214Z 325 │ }, [nextSnoozeWakeAt, snoozeWakeTick]); 2026-10-25T07:31:46.0807430Z ·  ───────┬────── 2026-10-25T07:31:46.0807818Z · ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-25T07:31:46.0808078Z 326 │ const listItems: readonly SidebarListItem[] = 2026-10-25T07:31:46.0808254Z ╰──── 2026-10-25T07:31:46.0808618Z  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-25T07:31:46.0809221Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.0809516Z 2026-10-25T07:31:46.0809956Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-25T07:31:46.0810431Z ╭─[apps/mobile/src/lib/markdownDocument.ts:259:28] 2026-10-25T07:31:46.0810685Z 258 │ visit(parser.parse(markdown), false, false); 2026-10-25T07:31:46.0810895Z 259 │ for (const edit of edits.reverse()) 2026-10-25T07:31:46.0811107Z ·  ─────── 2026-10-25T07:31:46.0811495Z 260 │ markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end); 2026-10-25T07:31:46.0811754Z ╰──── 2026-10-25T07:31:46.0812089Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-25T07:31:46.0812347Z 2026-10-25T07:31:46.0812569Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-25T07:31:46.0812907Z ╭─[apps/mobile/src/lib/markdownDocument.ts:290:28] 2026-10-25T07:31:46.0813124Z 289 │ visit(parser.parse(markdown)); 2026-10-25T07:31:46.0813314Z 290 │ for (const edit of edits.reverse()) 2026-10-25T07:31:46.0813516Z ·  ─────── 2026-10-25T07:31:46.0813786Z 291 │ markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end); 2026-10-25T07:31:46.0814152Z ╰──── 2026-10-25T07:31:46.0814508Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-25T07:31:46.0814760Z 2026-10-25T07:31:46.0814977Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-25T07:31:46.0815301Z ╭─[apps/mobile/src/lib/markdownDocument.ts:339:38] 2026-10-25T07:31:46.0815514Z 338 │ visit(parser.parse(markdown)); 2026-10-25T07:31:46.0815717Z 339 │ for (const lineStart of lineStarts.reverse()) { 2026-10-25T07:31:46.0815959Z ·  ─────── 2026-10-25T07:31:46.0816263Z 340 │ // Lazy headers can lack container markers; copy the delimiter's markers to the header and blank line. 2026-10-25T07:31:46.0816514Z ╰──── 2026-10-25T07:31:46.0816832Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-25T07:31:46.0817086Z 2026-10-25T07:31:46.0817292Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but only used as a type. 2026-10-25T07:31:46.0817630Z ╭─[packages/contracts/src/orchestrationV2IdTable.ts:86:36] 2026-10-25T07:31:46.0817916Z 85 │ // tree. The input is parsed JSON and the inner codec validates it anyway. 2026-10-25T07:31:46.0818203Z 86 │ const ParsedJson = Schema.declare((_: unknown): _ is unknown => true, { 2026-10-25T07:31:46.0818448Z ·  ┬ 2026-10-25T07:31:46.0818699Z · ╰── '_' is declared here 2026-10-25T07:31:46.0818913Z 87 │ toCodecJson: () => undefined, 2026-10-25T07:31:46.0819074Z ╰──── 2026-10-25T07:31:46.0819231Z  help: Consider removing this parameter. 2026-10-25T07:31:46.0819351Z 2026-10-25T07:31:46.0819802Z ⚠ 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-25T07:31:46.0820267Z ╭─[apps/server/src/assets/AssetAccess.test.ts:975:35] 2026-10-25T07:31:46.0820553Z 974 │ // Every client and server release spells the resource this way on the wire. 2026-10-25T07:31:46.0820861Z 975 │ const { resource } = yield* Schema.decodeUnknownEffect(AssetCreateUrlInput)({ 2026-10-25T07:31:46.0821139Z ·  ────────────────────────── 2026-10-25T07:31:46.0821379Z 976 │ resource: { _tag: "github-media", cwd: "/repo", url }, 2026-10-25T07:31:46.0821556Z ╰──── 2026-10-25T07:31:46.0821618Z 2026-10-25T07:31:46.0822072Z ⚠ 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-25T07:31:46.0822605Z ╭─[apps/server/src/assets/AssetAccess.test.ts:1012:32] 2026-10-25T07:31:46.0822883Z 1011 │ expect(error._tag).toBe("AssetGitHubMediaUrlValidationError"); 2026-10-25T07:31:46.0823213Z 1012 │ const encoded = yield* Schema.encodeEffect(Schema.fromJsonString(AssetAccessError))(error); 2026-10-25T07:31:46.0823521Z ·  ─────────────────── 2026-10-25T07:31:46.0823736Z 1013 │ expect(encoded).not.toContain(url); 2026-10-25T07:31:46.0823900Z ╰──── 2026-10-25T07:31:46.0823961Z 2026-10-25T07:31:46.0824294Z ⚠ unicorn(prefer-add-event-listener): Prefer `addEventListener()` over their `on`-function counterparts. 2026-10-25T07:31:46.0824842Z ╭─[apps/web/src/components/device/deviceHubApi.test.ts:12:14] 2026-10-25T07:31:46.0825145Z 11 │ addEventListener(_type: string, listener: (event: { data: string }) => void) { 2026-10-25T07:31:46.0825387Z 12 │ this.onmessage = listener; 2026-10-25T07:31:46.0825568Z ·  ───────── 2026-10-25T07:31:46.0825718Z 13 │ } 2026-10-25T07:31:46.0825839Z ╰──── 2026-10-25T07:31:46.0826221Z  help: `addEventListener()` can register multiple handlers and accepts options such as `{ once: true }`; assigning to `on` replaces any previously registered handler. 2026-10-25T07:31:46.0826531Z 2026-10-25T07:31:46.0826744Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable. 2026-10-25T07:31:46.0827087Z ╭─[apps/web/src/components/device/deviceHubApi.test.ts:16:9] 2026-10-25T07:31:46.0827304Z 15 │ constructor() { 2026-10-25T07:31:46.0827460Z 16 │ source = this; 2026-10-25T07:31:46.0827615Z ·  ────── 2026-10-25T07:31:46.0827761Z 17 │ } 2026-10-25T07:31:46.0827877Z ╰──── 2026-10-25T07:31:46.0828210Z  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-25T07:31:46.0828467Z 2026-10-25T07:31:46.0828682Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-25T07:31:46.0829044Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:767:7] 2026-10-25T07:31:46.0829300Z 766 │ if (settingsSheetPresentation.isActive) { 2026-10-25T07:31:46.0829552Z 767 │ settingsRoutePresentation.present(settingsRouteSession); 2026-10-25T07:31:46.0829823Z ·  ────────────┬──────────── 2026-10-25T07:31:46.0830104Z · ╰── Missing dependency `settingsRoutePresentation` 2026-10-25T07:31:46.0830328Z 768 │ } 2026-10-25T07:31:46.0830598Z 769 │ }, [settingsRoutePresentation.present, settingsRouteSession, settingsSheetPresentation.isActive]); 2026-10-25T07:31:46.0830908Z ·  ────────────────┬──────────────── 2026-10-25T07:31:46.0831305Z · ╰── Overly precise dependency `settingsRoutePresentation.present`, use `settingsRoutePresentation` instead 2026-10-25T07:31:46.0831626Z 770 │ 2026-10-25T07:31:46.0831739Z ╰──── 2026-10-25T07:31:46.0832304Z  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-25T07:31:46.0833062Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.0833357Z 2026-10-25T07:31:46.0833518Z ⚠ react(immutability): This value cannot be modified 2026-10-25T07:31:46.0833821Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:388:5] 2026-10-25T07:31:46.0834132Z 384 │ typeof props.style.borderRadius === "number" ? props.style.borderRadius : 0; 2026-10-25T07:31:46.0834436Z 385 │ const animatedBorderRadius = useSharedValue(targetBorderRadius); 2026-10-25T07:31:46.0834675Z ·  ──────────┬───────── 2026-10-25T07:31:46.0834931Z · ╰── `animatedBorderRadius` originates here 2026-10-25T07:31:46.0835238Z 386 │ const shouldAnimate = props.animateLayout !== false && Platform.OS !== "android"; 2026-10-25T07:31:46.0835478Z 387 │ useLayoutEffect(() => { 2026-10-25T07:31:46.0835668Z 388 │ animatedBorderRadius.value = shouldAnimate 2026-10-25T07:31:46.0835876Z ·  ──────────┬───────── 2026-10-25T07:31:46.0836129Z · ╰── `animatedBorderRadius` cannot be modified 2026-10-25T07:31:46.0836370Z 389 │ ? withTiming(targetBorderRadius, { 2026-10-25T07:31:46.0836527Z ╰──── 2026-10-25T07:31:46.0836847Z  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-25T07:31:46.0837405Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-25T07:31:46.0837694Z 2026-10-25T07:31:46.0838155Z ⚠ 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-25T07:31:46.0838702Z ╭─[apps/server/src/project/ProjectService.test.ts:94:3] 2026-10-25T07:31:46.0838900Z 93 │ ) { 2026-10-25T07:31:46.0839165Z 94 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-25T07:31:46.0839516Z 95 │ │ const project = Option.getOrThrow(yield* service.getById(projectId)); 2026-10-25T07:31:46.0839849Z 96 │ │ if (predicate(project)) return project; 2026-10-25T07:31:46.0840084Z 97 │ │ yield* Effect.yieldNow; 2026-10-25T07:31:46.0840323Z 98 │ ╰─▶ } 2026-10-25T07:31:46.0840596Z 99 │ return yield* Effect.die(`Project ${projectId} was not enriched in time.`); 2026-10-25T07:31:46.0840802Z ╰──── 2026-10-25T07:31:46.0840854Z 2026-10-25T07:31:46.0841019Z ⚠ react(purity): Cannot call impure function during render 2026-10-25T07:31:46.0841300Z ╭─[apps/web/src/hooks/useThreadActions.ts:839:56] 2026-10-25T07:31:46.0841524Z 838 │ const resolved = resolveThreadTarget(target); 2026-10-25T07:31:46.0841792Z 839 │ if (resolved && !canSnooze(resolved.thread, { now: new Date().toISOString() })) { 2026-10-25T07:31:46.0842141Z ·  ─────┬──── 2026-10-25T07:31:46.0842463Z · ╰── Cannot call impure function 2026-10-25T07:31:46.0842696Z 840 │ return AsyncResult.failure( 2026-10-25T07:31:46.0842843Z ╰──── 2026-10-25T07:31:46.0843171Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-25T07:31:46.0843852Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-25T07:31:46.0844164Z 2026-10-25T07:31:46.0844338Z ⚠ react(purity): Cannot call impure function during render 2026-10-25T07:31:46.0844684Z ╭─[apps/web/src/hooks/useThreadActions.ts:727:46] 2026-10-25T07:31:46.0844931Z 726 │ const wokeAt = resolved 2026-10-25T07:31:46.0845205Z 727 │ ? threadWokeAt(resolved.thread, { now: new Date().toISOString() }) 2026-10-25T07:31:46.0845514Z ·  ─────┬──── 2026-10-25T07:31:46.0845837Z · ╰── Cannot call impure function 2026-10-25T07:31:46.0846115Z 728 │ : null; 2026-10-25T07:31:46.0846277Z ╰──── 2026-10-25T07:31:46.0846670Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-25T07:31:46.0847250Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-25T07:31:46.0847553Z 2026-10-25T07:31:46.0848042Z ⚠ 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-25T07:31:46.0848678Z ╭─[apps/server/src/project/ProjectEnrichmentService.test.ts:28:3] 2026-10-25T07:31:46.0848926Z 27 │ ) { 2026-10-25T07:31:46.0849257Z 28 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-25T07:31:46.0849619Z 29 │ │ const available = yield* service.peek(workspaceRoot); 2026-10-25T07:31:46.0849991Z 30 │ │ if (predicate(available)) return available; 2026-10-25T07:31:46.0850259Z 31 │ │ yield* Effect.yieldNow; 2026-10-25T07:31:46.0850563Z 32 │ ╰─▶ } 2026-10-25T07:31:46.0850902Z 33 │ return yield* Effect.die(`Project metadata for ${workspaceRoot} was not resolved in time.`); 2026-10-25T07:31:46.0851190Z ╰──── 2026-10-25T07:31:46.0851281Z 2026-10-25T07:31:46.0851567Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-25T07:31:46.0852002Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:433:5] 2026-10-25T07:31:46.0852296Z 423 │ : null; 2026-10-25T07:31:46.0852478Z 424 │ useEffect(() => { 2026-10-25T07:31:46.0852694Z ·  ────┬──── 2026-10-25T07:31:46.0852946Z · ╰── This is the containing effect 2026-10-25T07:31:46.0853197Z 425 │ if ( 2026-10-25T07:31:46.0853441Z 426 │ props.active === false || 2026-10-25T07:31:46.0853699Z 427 │ activeDraftKey !== null || 2026-10-25T07:31:46.0853924Z 428 │ editingPendingTask !== null || 2026-10-25T07:31:46.0854143Z 429 │ selectedProject === null 2026-10-25T07:31:46.0854347Z 430 │ ) { 2026-10-25T07:31:46.0854520Z 431 │ return; 2026-10-25T07:31:46.0854702Z 432 │ } 2026-10-25T07:31:46.0854883Z 433 │ setActiveDraftKey( 2026-10-25T07:31:46.0855091Z ·  ────────┬──────── 2026-10-25T07:31:46.0855445Z · ╰── Avoid calling setState() directly within an effect 2026-10-25T07:31:46.0855736Z 434 │ createNewTaskDraft({ 2026-10-25T07:31:46.0855928Z ╰──── 2026-10-25T07:31:46.0856635Z  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-25T07:31:46.0857544Z  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-25T07:31:46.0857876Z 2026-10-25T07:31:46.0858144Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-25T07:31:46.0858619Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:1214:36] 2026-10-25T07:31:46.0858929Z 1213 │ 2026-10-25T07:31:46.0859327Z 1214 │ {props.children} 2026-10-25T07:31:46.0859706Z ·  ───────────── 2026-10-25T07:31:46.0859962Z 1215 │ 2026-10-25T07:31:46.0860159Z ╰──── 2026-10-25T07:31:46.0860491Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-25T07:31:46.0860906Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-25T07:31:46.0861109Z 2026-10-25T07:31:46.0861306Z ⚠ react(purity): Cannot call impure function during render 2026-10-25T07:31:46.0861675Z ╭─[apps/web/src/components/CommandPalette.tsx:2057:20] 2026-10-25T07:31:46.0861976Z 2056 │ title: inferProjectTitleFromPath(destinationPath), 2026-10-25T07:31:46.0862282Z 2057 │ createdAt: new Date().toISOString(), 2026-10-25T07:31:46.0862531Z ·  ─────┬──── 2026-10-25T07:31:46.0862830Z · ╰── Cannot call impure function 2026-10-25T07:31:46.0863120Z 2058 │ remoteUrl: addProjectCloneFlow.remoteUrl, 2026-10-25T07:31:46.0863343Z ╰──── 2026-10-25T07:31:46.0863727Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-25T07:31:46.0864338Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-25T07:31:46.0864920Z 2026-10-25T07:31:46.0865188Z ⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence. 2026-10-25T07:31:46.0865689Z ╭─[apps/web/src/components/pullRequest/pullRequestList.logic.ts:262:9] 2026-10-25T07:31:46.0866045Z 261 │ ): boolean { 2026-10-25T07:31:46.0866307Z 262 │ const labels = entry.labels.map((label) => label.name.trim().toLowerCase()); 2026-10-25T07:31:46.0866699Z ·  ───────────────────────────────────────────────────────────────────── 2026-10-25T07:31:46.0867056Z 263 │ const holds = (label: string) => labels.includes(label.trim().toLowerCase()); 2026-10-25T07:31:46.0867315Z ╰──── 2026-10-25T07:31:46.0867506Z  help: Switch to `Set` 2026-10-25T07:31:46.0867631Z 2026-10-25T07:31:46.0867922Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-25T07:31:46.0868388Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:52:5] 2026-10-25T07:31:46.0868643Z 50 │ 2026-10-25T07:31:46.0868852Z 51 │ useEffect(() => { 2026-10-25T07:31:46.0869054Z ·  ────┬──── 2026-10-25T07:31:46.0869338Z · ╰── This is the containing effect 2026-10-25T07:31:46.0869590Z 52 │ setDecodedSize(null); 2026-10-25T07:31:46.0869840Z ·  ───────┬────── 2026-10-25T07:31:46.0870157Z · ╰── Avoid calling setState() directly within an effect 2026-10-25T07:31:46.0870455Z 53 │ }, [props.sourceKey]); 2026-10-25T07:31:46.0870644Z ╰──── 2026-10-25T07:31:46.0871361Z  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-25T07:31:46.0872283Z  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-25T07:31:46.0872614Z 2026-10-25T07:31:46.0872887Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-25T07:31:46.0873346Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:56:5] 2026-10-25T07:31:46.0873609Z 54 │ 2026-10-25T07:31:46.0873775Z 55 │ useEffect(() => { 2026-10-25T07:31:46.0873984Z ·  ────┬──── 2026-10-25T07:31:46.0874255Z · ╰── This is the containing effect 2026-10-25T07:31:46.0874527Z 56 │ setFailedUri(null); 2026-10-25T07:31:46.0874742Z ·  ──────┬───── 2026-10-25T07:31:46.0875123Z · ╰── Avoid calling setState() directly within an effect 2026-10-25T07:31:46.0875426Z 57 │ }, [props.uri]); 2026-10-25T07:31:46.0875621Z ╰──── 2026-10-25T07:31:46.0876309Z  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-25T07:31:46.0877210Z  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-25T07:31:46.0877554Z 2026-10-25T07:31:46.0877795Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-25T07:31:46.0878200Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:7:10] 2026-10-25T07:31:46.0878570Z 6 │ import { parse, SvgAst, type JsxAST } from "react-native-svg"; 2026-10-25T07:31:46.0878920Z 7 │ import { ActivityIndicator, Pressable, StyleSheet, View, type ViewStyle } from "react-native"; 2026-10-25T07:31:46.0879257Z ·  ────────┬──────── 2026-10-25T07:31:46.0879542Z · ╰── 'ActivityIndicator' is imported here 2026-10-25T07:31:46.0879846Z 8 │ 2026-10-25T07:31:46.0880002Z ╰──── 2026-10-25T07:31:46.0880203Z  help: Consider removing this import. 2026-10-25T07:31:46.0880362Z 2026-10-25T07:31:46.0880593Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-25T07:31:46.0880985Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:53:7] 2026-10-25T07:31:46.0881300Z 52 │ setDecodedSize(null); 2026-10-25T07:31:46.0881505Z 53 │ }, [props.sourceKey]); 2026-10-25T07:31:46.0881742Z ·  ───────┬─────── 2026-10-25T07:31:46.0882035Z · ╰── Unnecessary dependency `props.sourceKey` 2026-10-25T07:31:46.0882301Z 54 │ 2026-10-25T07:31:46.0882460Z ╰──── 2026-10-25T07:31:46.0882854Z  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-25T07:31:46.0883497Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.0883818Z 2026-10-25T07:31:46.0884044Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-25T07:31:46.0884478Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:57:7] 2026-10-25T07:31:46.0884749Z 56 │ setFailedUri(null); 2026-10-25T07:31:46.0884971Z 57 │ }, [props.uri]); 2026-10-25T07:31:46.0885163Z ·  ────┬──── 2026-10-25T07:31:46.0885451Z · ╰── Unnecessary dependency `props.uri` 2026-10-25T07:31:46.0885694Z 58 │ 2026-10-25T07:31:46.0885848Z ╰──── 2026-10-25T07:31:46.0886262Z  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-25T07:31:46.0886893Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.0887198Z 2026-10-25T07:31:46.0887520Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-25T07:31:46.0887940Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2223:5] 2026-10-25T07:31:46.0888140Z 2221 │ ); 2026-10-25T07:31:46.0888274Z 2222 │ useEffect(() => { 2026-10-25T07:31:46.0888431Z ·  ────┬──── 2026-10-25T07:31:46.0888655Z · ╰── This is the containing effect 2026-10-25T07:31:46.0888862Z 2223 │ setExpandedVideo(null); 2026-10-25T07:31:46.0889039Z ·  ────────┬─────── 2026-10-25T07:31:46.0889307Z · ╰── Avoid calling setState() directly within an effect 2026-10-25T07:31:46.0889548Z 2224 │ setExpandedFile(null); 2026-10-25T07:31:46.0889704Z ╰──── 2026-10-25T07:31:46.0890388Z  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-25T07:31:46.0891237Z  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-25T07:31:46.0891533Z 2026-10-25T07:31:46.0891788Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-25T07:31:46.0892167Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2716:9] 2026-10-25T07:31:46.0892450Z 2707 │ const stopFollowingEnd = useEffectEvent(() => setEndFollow(false)); 2026-10-25T07:31:46.0892668Z 2708 │ useEffect(() => { 2026-10-25T07:31:46.0892822Z ·  ────┬──── 2026-10-25T07:31:46.0893043Z · ╰── This is the containing effect 2026-10-25T07:31:46.0893307Z 2709 │ if (!jumpToMessageId || loadedListKey !== listMountKey) return; 2026-10-25T07:31:46.0893545Z 2710 │ const index = presentedFeed.findIndex( 2026-10-25T07:31:46.0893786Z 2711 │ (entry) => entry.type === "message" && entry.id === jumpToMessageId, 2026-10-25T07:31:46.0893984Z 2712 │ ); 2026-10-25T07:31:46.0894125Z 2713 │ if (index === -1) { 2026-10-25T07:31:46.0894339Z 2714 │ const runId = messageFoldRunId(props.feed, jumpToMessageId); 2026-10-25T07:31:46.0894584Z 2715 │ if (runId && !expandedTurnIds.has(runId)) { 2026-10-25T07:31:46.0894846Z 2716 │ setInteractionState((current) => ({ 2026-10-25T07:31:46.0895056Z ·  ─────────┬───────── 2026-10-25T07:31:46.0895333Z · ╰── Avoid calling setState() directly within an effect 2026-10-25T07:31:46.0895574Z 2717 │ ...current, 2026-10-25T07:31:46.0895709Z ╰──── 2026-10-25T07:31:46.0896352Z  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-25T07:31:46.0897189Z  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-25T07:31:46.0897490Z 2026-10-25T07:31:46.0897798Z ⚠ eslint(no-unused-vars): Identifier 'isMarkdownFileLinkLabel' is imported but never used. 2026-10-25T07:31:46.0898181Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:72:10] 2026-10-25T07:31:46.0898459Z 71 │ import { resolveAssetUrl } from "@t3tools/client-runtime/state/assets"; 2026-10-25T07:31:46.0898748Z 72 │ import { isMarkdownFileLinkLabel } from "@t3tools/shared/markdownLinks"; 2026-10-25T07:31:46.0898997Z ·  ───────────┬─────────── 2026-10-25T07:31:46.0899270Z · ╰── 'isMarkdownFileLinkLabel' is imported here 2026-10-25T07:31:46.0899586Z 73 │ import { formatAttachmentSize } from "@t3tools/client-runtime/state/attachments"; 2026-10-25T07:31:46.0899846Z ╰──── 2026-10-25T07:31:46.0900001Z  help: Consider removing this import. 2026-10-25T07:31:46.0900117Z 2026-10-25T07:31:46.0900328Z ⚠ eslint(no-unused-vars): Identifier 'createContext' is imported but never used. 2026-10-25T07:31:46.0900664Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:98:3] 2026-10-25T07:31:46.0900859Z 97 │ import { 2026-10-25T07:31:46.0900996Z 98 │ createContext, 2026-10-25T07:31:46.0901149Z ·  ──────┬────── 2026-10-25T07:31:46.0901379Z · ╰── 'createContext' is imported here 2026-10-25T07:31:46.0901575Z 99 │ memo, 2026-10-25T07:31:46.0901691Z ╰──── 2026-10-25T07:31:46.0901838Z  help: Consider removing this import. 2026-10-25T07:31:46.0901951Z 2026-10-25T07:31:46.0902163Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-25T07:31:46.0902503Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:114:3] 2026-10-25T07:31:46.0902707Z 113 │ import { 2026-10-25T07:31:46.0902842Z 114 │ ActivityIndicator, 2026-10-25T07:31:46.0903011Z ·  ────────┬──────── 2026-10-25T07:31:46.0903254Z · ╰── 'ActivityIndicator' is imported here 2026-10-25T07:31:46.0903457Z 115 │ Image, 2026-10-25T07:31:46.0903572Z ╰──── 2026-10-25T07:31:46.0903726Z  help: Consider removing this import. 2026-10-25T07:31:46.0903837Z 2026-10-25T07:31:46.0904033Z ⚠ eslint(no-unused-vars): Identifier 'ScrollView' is imported but never used. 2026-10-25T07:31:46.0904358Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:121:3] 2026-10-25T07:31:46.0904717Z 120 │ Pressable, 2026-10-25T07:31:46.0904860Z 121 │ ScrollView, 2026-10-25T07:31:46.0905005Z ·  ─────┬──── 2026-10-25T07:31:46.0905232Z · ╰── 'ScrollView' is imported here 2026-10-25T07:31:46.0905435Z 122 │ StyleSheet, 2026-10-25T07:31:46.0905565Z ╰──── 2026-10-25T07:31:46.0905712Z  help: Consider removing this import. 2026-10-25T07:31:46.0905823Z 2026-10-25T07:31:46.0906022Z ⚠ eslint(no-unused-vars): Identifier 'NativeText' is imported but never used. 2026-10-25T07:31:46.0906350Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:123:11] 2026-10-25T07:31:46.0906554Z 122 │ StyleSheet, 2026-10-25T07:31:46.0906699Z 123 │ Text as NativeText, 2026-10-25T07:31:46.0906862Z ·  ─────┬──── 2026-10-25T07:31:46.0907094Z · ╰── 'NativeText' is imported here 2026-10-25T07:31:46.0907298Z 124 │ type ColorValue, 2026-10-25T07:31:46.0907504Z ╰──── 2026-10-25T07:31:46.0907690Z  help: Consider removing this import. 2026-10-25T07:31:46.0907802Z 2026-10-25T07:31:46.0908015Z ⚠ eslint(no-unused-vars): Identifier 'tryOpenExternalUrl' is imported but never used. 2026-10-25T07:31:46.0908356Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:146:10] 2026-10-25T07:31:46.0908632Z 145 │ import { copyTextWithHaptic } from "../../lib/copyTextWithHaptic"; 2026-10-25T07:31:46.0908899Z 146 │ import { tryOpenExternalUrl } from "../../lib/openExternalUrl"; 2026-10-25T07:31:46.0909128Z ·  ─────────┬──────── 2026-10-25T07:31:46.0909376Z · ╰── 'tryOpenExternalUrl' is imported here 2026-10-25T07:31:46.0909703Z 147 │ import { downloadAndShareAttachment } from "../../lib/attachmentDownload"; 2026-10-25T07:31:46.0909913Z ╰──── 2026-10-25T07:31:46.0910074Z  help: Consider removing this import. 2026-10-25T07:31:46.0910190Z 2026-10-25T07:31:46.0910408Z ⚠ eslint(no-unused-vars): Identifier 'faviconUrlForOrigin' is imported but never used. 2026-10-25T07:31:46.0910750Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:149:10] 2026-10-25T07:31:46.0911028Z 148 │ import { hasWideMarkdownBlock } from "../../lib/wideMarkdownBlocks"; 2026-10-25T07:31:46.0911294Z 149 │ import { faviconUrlForOrigin } from "@t3tools/shared/favicon"; 2026-10-25T07:31:46.0911523Z ·  ─────────┬───────── 2026-10-25T07:31:46.0911773Z · ╰── 'faviconUrlForOrigin' is imported here 2026-10-25T07:31:46.0911986Z 150 │ import { 2026-10-25T07:31:46.0912104Z ╰──── 2026-10-25T07:31:46.0912261Z  help: Consider removing this import. 2026-10-25T07:31:46.0912377Z 2026-10-25T07:31:46.0912584Z ⚠ eslint(no-unused-vars): Identifier 'MediaVideoPlayer' is imported but never used. 2026-10-25T07:31:46.0912923Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:163:10] 2026-10-25T07:31:46.0913210Z 162 │ import { VideoAttachmentTile } from "../../components/VideoAttachmentTile"; 2026-10-25T07:31:46.0913501Z 163 │ import { MediaVideoPlayer } from "../../components/MediaVideoPlayer"; 2026-10-25T07:31:46.0913736Z ·  ────────┬─────── 2026-10-25T07:31:46.0913987Z · ╰── 'MediaVideoPlayer' is imported here 2026-10-25T07:31:46.0914276Z 164 │ import { resolveMarkdownMediaPreview } from "../../lib/markdownMedia"; 2026-10-25T07:31:46.0914476Z ╰──── 2026-10-25T07:31:46.0914632Z  help: Consider removing this import. 2026-10-25T07:31:46.0914745Z 2026-10-25T07:31:46.0914965Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoPreviewUri' is imported but never used. 2026-10-25T07:31:46.0915309Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:167:3] 2026-10-25T07:31:46.0915532Z 166 │ attachmentVideoPreviewSource, 2026-10-25T07:31:46.0915709Z 167 │ mediaVideoPreviewUri, 2026-10-25T07:31:46.0915884Z ·  ──────────┬───────── 2026-10-25T07:31:46.0916136Z · ╰── 'mediaVideoPreviewUri' is imported here 2026-10-25T07:31:46.0916356Z 168 │ mediaVideoThumbnailKey, 2026-10-25T07:31:46.0916501Z ╰──── 2026-10-25T07:31:46.0916648Z  help: Consider removing this import. 2026-10-25T07:31:46.0916762Z 2026-10-25T07:31:46.0917057Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoThumbnailKey' is imported but never used. 2026-10-25T07:31:46.0917441Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:168:3] 2026-10-25T07:31:46.0917656Z 167 │ mediaVideoPreviewUri, 2026-10-25T07:31:46.0917819Z 168 │ mediaVideoThumbnailKey, 2026-10-25T07:31:46.0917996Z ·  ───────────┬────────── 2026-10-25T07:31:46.0918248Z · ╰── 'mediaVideoThumbnailKey' is imported here 2026-10-25T07:31:46.0918482Z 169 │ type MediaVideoPreviewSource, 2026-10-25T07:31:46.0918638Z ╰──── 2026-10-25T07:31:46.0918785Z  help: Consider removing this import. 2026-10-25T07:31:46.0918897Z 2026-10-25T07:31:46.0919109Z ⚠ eslint(no-unused-vars): Type 'MediaVideoPreviewSource' is imported but never used. 2026-10-25T07:31:46.0919452Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:169:8] 2026-10-25T07:31:46.0919680Z 168 │ mediaVideoThumbnailKey, 2026-10-25T07:31:46.0919873Z 169 │ type MediaVideoPreviewSource, 2026-10-25T07:31:46.0920071Z ·  ───────────┬─────────── 2026-10-25T07:31:46.0920335Z · ╰── 'MediaVideoPreviewSource' is imported here 2026-10-25T07:31:46.0920584Z 170 │ } from "../../lib/videoPreviewSource"; 2026-10-25T07:31:46.0920738Z ╰──── 2026-10-25T07:31:46.0920889Z  help: Consider removing this import. 2026-10-25T07:31:46.0921003Z 2026-10-25T07:31:46.0921226Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownFontSizes' is imported but never used. 2026-10-25T07:31:46.0921575Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:191:3] 2026-10-25T07:31:46.0921776Z 190 │ import { 2026-10-25T07:31:46.0921922Z 191 │ resolveMarkdownFontSizes, 2026-10-25T07:31:46.0922110Z ·  ────────────┬─────────── 2026-10-25T07:31:46.0922365Z · ╰── 'resolveMarkdownFontSizes' is imported here 2026-10-25T07:31:46.0922608Z 192 │ resolveNativeMarkdownTypography, 2026-10-25T07:31:46.0922763Z ╰──── 2026-10-25T07:31:46.0922912Z  help: Consider removing this import. 2026-10-25T07:31:46.0923020Z 2026-10-25T07:31:46.0923278Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownInlineCodePresentation' is imported but never used. 2026-10-25T07:31:46.0923728Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:198:3] 2026-10-25T07:31:46.0923943Z 197 │ normalizeNativeMarkdownUrl, 2026-10-25T07:31:46.0924143Z 198 │ resolveMarkdownInlineCodePresentation, 2026-10-25T07:31:46.0924432Z ·  ──────────────────┬────────────────── 2026-10-25T07:31:46.0924778Z · ╰── 'resolveMarkdownInlineCodePresentation' is imported here 2026-10-25T07:31:46.0925048Z 199 │ resolveMarkdownLinkPresentation, 2026-10-25T07:31:46.0925208Z ╰──── 2026-10-25T07:31:46.0925358Z  help: Consider removing this import. 2026-10-25T07:31:46.0925473Z 2026-10-25T07:31:46.0925687Z ⚠ eslint(no-unused-vars): Type 'PendingThreadFeedEntry' is imported but never used. 2026-10-25T07:31:46.0926027Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:237:8] 2026-10-25T07:31:46.0926248Z 236 │ isCompactionCommandFeedEntry, 2026-10-25T07:31:46.0926428Z 237 │ type PendingThreadFeedEntry, 2026-10-25T07:31:46.0926618Z ·  ───────────┬────────── 2026-10-25T07:31:46.0926889Z · ╰── 'PendingThreadFeedEntry' is imported here 2026-10-25T07:31:46.0927119Z 238 │ type ThreadFeedRow, 2026-10-25T07:31:46.0927260Z ╰──── 2026-10-25T07:31:46.0927413Z  help: Consider removing this import. 2026-10-25T07:31:46.0927526Z 2026-10-25T07:31:46.0927737Z ⚠ eslint(no-unused-vars): Identifier 'useAssetUrlState' is imported but never used. 2026-10-25T07:31:46.0928071Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:248:3] 2026-10-25T07:31:46.0928280Z 247 │ useAssetUrl, 2026-10-25T07:31:46.0928425Z 248 │ useAssetUrlState, 2026-10-25T07:31:46.0928590Z ·  ────────┬─────── 2026-10-25T07:31:46.0928827Z · ╰── 'useAssetUrlState' is imported here 2026-10-25T07:31:46.0929042Z 249 │ useRefreshAssetUrl, 2026-10-25T07:31:46.0929184Z ╰──── 2026-10-25T07:31:46.0929340Z  help: Consider removing this import. 2026-10-25T07:31:46.0929451Z 2026-10-25T07:31:46.0929725Z ⚠ eslint(no-unused-vars): Variable 'navigation' is declared but never used. Unused variables should start with a '_'. 2026-10-25T07:31:46.0930147Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:438:9] 2026-10-25T07:31:46.0930471Z 437 │ const forkFromRun = useAtomCommand(threadEnvironment.forkFromRun, "fork from response"); 2026-10-25T07:31:46.0942823Z 438 │ const navigation = useNavigation(); 2026-10-25T07:31:46.0943055Z ·  ─────┬──── 2026-10-25T07:31:46.0943300Z · ╰── 'navigation' is declared here 2026-10-25T07:31:46.0943555Z 439 │ const selectDetail = useSelectWorkspaceDetail(); 2026-10-25T07:31:46.0943731Z ╰──── 2026-10-25T07:31:46.0943902Z  help: Consider removing this declaration. 2026-10-25T07:31:46.0944026Z 2026-10-25T07:31:46.0944236Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-25T07:31:46.0944656Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2225:7] 2026-10-25T07:31:46.0944871Z 2224 │ setExpandedFile(null); 2026-10-25T07:31:46.0945119Z 2225 │ }, [props.environmentId, props.threadId, props.contentPresentation.kind]); 2026-10-25T07:31:46.0945515Z ·  ─────────┬───────── ───────┬────── ───────────────┬────────────── 2026-10-25T07:31:46.0946017Z · │ │ ╰── Unnecessary dependency `props.contentPresentation.kind` 2026-10-25T07:31:46.0946588Z · │ ╰── Unnecessary dependency `props.threadId` 2026-10-25T07:31:46.0946984Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-25T07:31:46.0947290Z 2226 │ const horizontalPadding = props.layoutVariant === "split" ? 20 : 16; 2026-10-25T07:31:46.0947490Z ╰──── 2026-10-25T07:31:46.0947835Z  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-25T07:31:46.0948417Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.0948710Z 2026-10-25T07:31:46.0948916Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-25T07:31:46.0949246Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2685:7] 2026-10-25T07:31:46.0949489Z 2684 │ reportHeaderMaterialVisibility(false); 2026-10-25T07:31:46.0949747Z 2685 │ }, [feedThreadKey, reportHeaderMaterialVisibility]); 2026-10-25T07:31:46.0949958Z ·  ──────┬────── 2026-10-25T07:31:46.0950199Z · ╰── Unnecessary dependency `feedThreadKey` 2026-10-25T07:31:46.0950405Z 2686 │ 2026-10-25T07:31:46.0950516Z ╰──── 2026-10-25T07:31:46.0950859Z  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-25T07:31:46.0951444Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.0951741Z 2026-10-25T07:31:46.0951939Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-25T07:31:46.0952271Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2701:7] 2026-10-25T07:31:46.0952470Z 2700 │ } 2026-10-25T07:31:46.0952670Z 2701 │ }, [listMountKey, props.contentInsetEndAdjustment, listRef]); 2026-10-25T07:31:46.0952889Z ·  ──────┬───── 2026-10-25T07:31:46.0953133Z · ╰── Unnecessary dependency `listMountKey` 2026-10-25T07:31:46.0953421Z 2702 │ // Opening at a message: its run unfolds, the list stops following the end 2026-10-25T07:31:46.0953624Z ╰──── 2026-10-25T07:31:46.0953974Z  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-25T07:31:46.0954558Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.0954850Z 2026-10-25T07:31:46.0955048Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-25T07:31:46.0955374Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2895:7] 2026-10-25T07:31:46.0955571Z 2894 │ } 2026-10-25T07:31:46.0955811Z 2895 │ }, [expandedTurnIds, expandedWorkGroups, expandedWorkRows, settleDisclosureAfterLayout]); 2026-10-25T07:31:46.0956206Z ·  ───────┬─────── ─────────┬──────── ────────┬─────── 2026-10-25T07:31:46.0956693Z · │ │ ╰── Unnecessary dependency `expandedWorkRows` 2026-10-25T07:31:46.0957151Z · │ ╰── Unnecessary dependency `expandedWorkGroups` 2026-10-25T07:31:46.0957493Z · ╰── Unnecessary dependency `expandedTurnIds` 2026-10-25T07:31:46.0957699Z 2896 │ 2026-10-25T07:31:46.0957811Z ╰──── 2026-10-25T07:31:46.0958151Z  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-25T07:31:46.0958724Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.0959015Z 2026-10-25T07:31:46.0959199Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-25T07:31:46.0959516Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:628:9] 2026-10-25T07:31:46.0959753Z 627 │ }; 2026-10-25T07:31:46.0959936Z 628 │ }, [props.environmentId, attachment.id, httpBaseUrl]), 2026-10-25T07:31:46.0960258Z ·  ─────────┬───────── ──────┬────── ─────┬───── 2026-10-25T07:31:46.0960667Z · │ │ ╰── Unnecessary dependency `httpBaseUrl` 2026-10-25T07:31:46.0961073Z · │ ╰── Unnecessary dependency `attachment.id` 2026-10-25T07:31:46.0961424Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-25T07:31:46.0961646Z 629 │ ); 2026-10-25T07:31:46.0961761Z ╰──── 2026-10-25T07:31:46.0962129Z  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-25T07:31:46.0962731Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.0963021Z 2026-10-25T07:31:46.0963264Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-25T07:31:46.0963655Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:287:50] 2026-10-25T07:31:46.0963877Z 286 │ return ( 2026-10-25T07:31:46.0964134Z 287 │ 2026-10-25T07:31:46.0964429Z ·  ───────────── 2026-10-25T07:31:46.0964630Z 288 │ {props.children} 2026-10-25T07:31:46.0964766Z ╰──── 2026-10-25T07:31:46.0965044Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-25T07:31:46.0965398Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-25T07:31:46.0965573Z 2026-10-25T07:31:46.0965813Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-25T07:31:46.0966198Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:651:44] 2026-10-25T07:31:46.0966418Z 650 │ return ( 2026-10-25T07:31:46.0966614Z 651 │ 2026-10-25T07:31:46.0966864Z ·  ───────────── 2026-10-25T07:31:46.0967054Z 652 │ {props.children} 2026-10-25T07:31:46.0967192Z ╰──── 2026-10-25T07:31:46.0967472Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-25T07:31:46.0967816Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-25T07:31:46.0967992Z 2026-10-25T07:31:46.0968231Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-25T07:31:46.0968615Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:1460:55] 2026-10-25T07:31:46.0968838Z 1459 │ return ( 2026-10-25T07:31:46.0969074Z 1460 │ 2026-10-25T07:31:46.0969379Z ·  ──────────────────── 2026-10-25T07:31:46.0969607Z 1461 │ { 2026-10-25T07:31:46.0971782Z ·  ────┬──── 2026-10-25T07:31:46.0971999Z · ╰── This is the containing effect 2026-10-25T07:31:46.0972223Z 562 │ setKeyboardStateSuspect(false); 2026-10-25T07:31:46.0972414Z ·  ───────────┬─────────── 2026-10-25T07:31:46.0972687Z · ╰── Avoid calling setState() directly within an effect 2026-10-25T07:31:46.0972954Z 563 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-25T07:31:46.0973124Z ╰──── 2026-10-25T07:31:46.0973846Z  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-25T07:31:46.0974730Z  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-25T07:31:46.0975036Z 2026-10-25T07:31:46.0975296Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-25T07:31:46.0975693Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:956:7] 2026-10-25T07:31:46.0976012Z 953 │ const [lastKnownKeyboardHeight, setLastKnownKeyboardHeight] = useState(0); 2026-10-25T07:31:46.0976243Z 954 │ useEffect(() => { 2026-10-25T07:31:46.0976396Z ·  ────┬──── 2026-10-25T07:31:46.0976619Z · ╰── This is the containing effect 2026-10-25T07:31:46.0976913Z 955 │ if (liveKeyboardHeight > 0 && liveKeyboardHeight !== lastKnownKeyboardHeight) { 2026-10-25T07:31:46.0977191Z 956 │ setLastKnownKeyboardHeight(liveKeyboardHeight); 2026-10-25T07:31:46.0977414Z ·  ─────────────┬──────────── 2026-10-25T07:31:46.0977695Z · ╰── Avoid calling setState() directly within an effect 2026-10-25T07:31:46.0977918Z 957 │ } 2026-10-25T07:31:46.0978037Z ╰──── 2026-10-25T07:31:46.0978684Z  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-25T07:31:46.0979536Z  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-25T07:31:46.0979886Z 2026-10-25T07:31:46.0980143Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-25T07:31:46.0980536Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1199:5] 2026-10-25T07:31:46.0980750Z 1197 │ 2026-10-25T07:31:46.0980876Z 1198 │ useEffect(() => { 2026-10-25T07:31:46.0981038Z ·  ────┬──── 2026-10-25T07:31:46.0981255Z · ╰── This is the containing effect 2026-10-25T07:31:46.0981470Z 1199 │ setAnchorMessageId(null); 2026-10-25T07:31:46.0981649Z ·  ─────────┬──────── 2026-10-25T07:31:46.0981925Z · ╰── Avoid calling setState() directly within an effect 2026-10-25T07:31:46.0982173Z 1200 │ setSubmittedMessageId(null); 2026-10-25T07:31:46.0982329Z ╰──── 2026-10-25T07:31:46.0982973Z  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-25T07:31:46.0983819Z  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-25T07:31:46.0984120Z 2026-10-25T07:31:46.0984321Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-25T07:31:46.0984812Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:563:7] 2026-10-25T07:31:46.0985093Z 562 │ setKeyboardStateSuspect(false); 2026-10-25T07:31:46.0985297Z 563 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-25T07:31:46.0985560Z ·  ────────┬──────── ─────────┬──────── 2026-10-25T07:31:46.0985899Z · │ ╰── Unnecessary dependency `liveKeyboardHeight` 2026-10-25T07:31:46.0986247Z · ╰── Unnecessary dependency `isKeyboardVisible` 2026-10-25T07:31:46.0986533Z 564 │ const handleOwnedInputFocusChange = (focused: boolean) => { 2026-10-25T07:31:46.0986721Z ╰──── 2026-10-25T07:31:46.0987072Z  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-25T07:31:46.0987656Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.0987949Z 2026-10-25T07:31:46.0988150Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-25T07:31:46.0988494Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1147:7] 2026-10-25T07:31:46.0988742Z 1146 │ userInputInsetProgress.set(1); 2026-10-25T07:31:46.0989008Z 1147 │ }, [activeUserInputRequestId, userInputCardProgress, userInputInsetProgress]); 2026-10-25T07:31:46.0989283Z ·  ────────────┬─────────── 2026-10-25T07:31:46.0989568Z · ╰── Unnecessary dependency `activeUserInputRequestId` 2026-10-25T07:31:46.0989889Z 1148 │ const showContent = props.showContent ?? true; 2026-10-25T07:31:46.0990066Z ╰──── 2026-10-25T07:31:46.0990411Z  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-25T07:31:46.0990991Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.0991289Z 2026-10-25T07:31:46.0991485Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-25T07:31:46.0991837Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1205:15] 2026-10-25T07:31:46.0992067Z 1204 │ freeze.set(false); 2026-10-25T07:31:46.0992235Z 1205 │ }, [freeze, selectedThreadKey]); 2026-10-25T07:31:46.0992437Z ·  ────────┬──────── 2026-10-25T07:31:46.0992703Z · ╰── Unnecessary dependency `selectedThreadKey` 2026-10-25T07:31:46.0992917Z 1206 │ 2026-10-25T07:31:46.0993029Z ╰──── 2026-10-25T07:31:46.0993374Z  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-25T07:31:46.0993952Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.0994244Z 2026-10-25T07:31:46.0994399Z ⚠ react(immutability): This value cannot be modified 2026-10-25T07:31:46.0994760Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1042:5] 2026-10-25T07:31:46.0995060Z 1037 │ const composerPopoverHeight = useSharedValue(0); 2026-10-25T07:31:46.0995293Z 1038 │ const floatingControlCoverage = useSharedValue( 2026-10-25T07:31:46.0995508Z ·  ───────────┬─────────── 2026-10-25T07:31:46.0995775Z · ╰── `floatingControlCoverage` originates here 2026-10-25T07:31:46.0996064Z 1039 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-25T07:31:46.0996261Z 1040 │ ); 2026-10-25T07:31:46.0996391Z 1041 │ useEffect(() => { 2026-10-25T07:31:46.0996587Z 1042 │ floatingControlCoverage.value = withTiming( 2026-10-25T07:31:46.0996797Z ·  ───────────┬─────────── 2026-10-25T07:31:46.0997063Z · ╰── `floatingControlCoverage` cannot be modified 2026-10-25T07:31:46.0997357Z 1043 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-25T07:31:46.0997550Z ╰──── 2026-10-25T07:31:46.0997868Z  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-25T07:31:46.0998422Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-25T07:31:46.0998710Z 2026-10-25T07:31:46.0998867Z ⚠ react(immutability): This value cannot be modified 2026-10-25T07:31:46.0999180Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1058:7] 2026-10-25T07:31:46.0999531Z 1048 │ const userInputCoverageApplies = Platform.OS === "ios" && activeUserInputRequestId !== null; 2026-10-25T07:31:46.0999897Z 1049 │ const combinedContentInsetEndAdjustment = useSharedValue( 2026-10-25T07:31:46.1000151Z ·  ────────────────┬──────────────── 2026-10-25T07:31:46.1000455Z · ╰── `combinedContentInsetEndAdjustment` originates here 2026-10-25T07:31:46.1000770Z 1050 │ Math.max(0, estimatedOverlayHeight - nativeInsetOvercount), 2026-10-25T07:31:46.1000973Z 1051 │ ); 2026-10-25T07:31:46.1001109Z 1052 │ useAnimatedReaction( 2026-10-25T07:31:46.1001256Z 1053 │ () => 2026-10-25T07:31:46.1001421Z 1054 │ contentInsetEndAdjustment.value + 2026-10-25T07:31:46.1001616Z 1055 │ floatingControlCoverage.value + 2026-10-25T07:31:46.1001920Z 1056 │ (userInputCoverageApplies ? userInputInsetProgress.value * userInputCardCoverage.value : 0), 2026-10-25T07:31:46.1002182Z 1057 │ (value) => { 2026-10-25T07:31:46.1002387Z 1058 │ combinedContentInsetEndAdjustment.value = value; 2026-10-25T07:31:46.1002630Z ·  ────────────────┬──────────────── 2026-10-25T07:31:46.1002936Z · ╰── `combinedContentInsetEndAdjustment` cannot be modified 2026-10-25T07:31:46.1003177Z 1059 │ }, 2026-10-25T07:31:46.1003301Z ╰──── 2026-10-25T07:31:46.1003617Z  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-25T07:31:46.1004176Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-25T07:31:46.1004465Z 2026-10-25T07:31:46.1004677Z ⚠ eslint(no-unused-vars): Identifier 'HookForwarder' is imported but never used. 2026-10-25T07:31:46.1005035Z ╭─[infra/relay/src/http/Api.ts:69:13] 2026-10-25T07:31:46.1005332Z 68 │ import * as EnvironmentLinks from "../environments/EnvironmentLinks.ts"; 2026-10-25T07:31:46.1005597Z 69 │ import * as HookForwarder from "../hooks/HookForwarder.ts"; 2026-10-25T07:31:46.1005816Z ·  ──────┬────── 2026-10-25T07:31:46.1006056Z · ╰── 'HookForwarder' is imported here 2026-10-25T07:31:46.1006306Z 70 │ import * as HeldHooks from "../hooks/HeldHooks.ts"; 2026-10-25T07:31:46.1006476Z ╰──── 2026-10-25T07:31:46.1006637Z  help: Consider removing this import. 2026-10-25T07:31:46.1006751Z 2026-10-25T07:31:46.1007019Z ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'. 2026-10-25T07:31:46.1007392Z ╭─[apps/server/src/usage/UsageService.ts:162:7] 2026-10-25T07:31:46.1007580Z 161 │ 2026-10-25T07:31:46.1007720Z 162 │ const layerTest = Layer.succeed( 2026-10-25T07:31:46.1007899Z ·  ────┬──── 2026-10-25T07:31:46.1008120Z · ╰── 'layerTest' is declared here 2026-10-25T07:31:46.1008324Z 163 │ UsageService, 2026-10-25T07:31:46.1008454Z ╰──── 2026-10-25T07:31:46.1008613Z  help: Consider removing this declaration. 2026-10-25T07:31:46.1008731Z 2026-10-25T07:31:46.1008939Z ⚠ eslint(no-unused-vars): Function 'nonEmptyString' is declared but never used. 2026-10-25T07:31:46.1009289Z ╭─[packages/client-runtime/src/work-log/presentation.ts:237:10] 2026-10-25T07:31:46.1009496Z 236 │ 2026-10-25T07:31:46.1009690Z 237 │ function nonEmptyString(value: unknown): string | null { 2026-10-25T07:31:46.1009938Z ·  ───────┬────── 2026-10-25T07:31:46.1010188Z · ╰── 'nonEmptyString' is declared here 2026-10-25T07:31:46.1010477Z 238 │ return typeof value === "string" && value.trim().length > 0 ? value : null; 2026-10-25T07:31:46.1010682Z ╰──── 2026-10-25T07:31:46.1010841Z  help: Consider removing this declaration. 2026-10-25T07:31:46.1010960Z 2026-10-25T07:31:46.1011224Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-25T07:31:46.1011621Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:413:5] 2026-10-25T07:31:46.1011829Z 411 │ 2026-10-25T07:31:46.1011958Z 412 │ useEffect(() => { 2026-10-25T07:31:46.1012115Z ·  ────┬──── 2026-10-25T07:31:46.1012405Z · ╰── This is the containing effect 2026-10-25T07:31:46.1012660Z 413 │ setInspectorSelection((current) => { 2026-10-25T07:31:46.1012856Z ·  ──────────┬────────── 2026-10-25T07:31:46.1013126Z · ╰── Avoid calling setState() directly within an effect 2026-10-25T07:31:46.1013394Z 414 │ if (props.renderInspector === undefined) { 2026-10-25T07:31:46.1013565Z ╰──── 2026-10-25T07:31:46.1014219Z  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-25T07:31:46.1015087Z  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-25T07:31:46.1015390Z 2026-10-25T07:31:46.1015606Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-25T07:31:46.1015970Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:541:24] 2026-10-25T07:31:46.1016286Z 540 │ const inspectorHeaderInset = Platform.OS === "ios" ? 0 : safeAreaInsets.top; 2026-10-25T07:31:46.1016624Z 541 │ ╭─▶ const GitInspector = () => ( 2026-10-25T07:31:46.1016884Z 542 │ │ 2026-10-25T07:31:46.1018143Z 547 │ ╰─▶ ); 2026-10-25T07:31:46.1018356Z 548 │ const FilesInspector = () => 2026-10-25T07:31:46.1018507Z ╰──── 2026-10-25T07:31:46.1018781Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-25T07:31:46.1018994Z 2026-10-25T07:31:46.1019206Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-25T07:31:46.1019562Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:548:26] 2026-10-25T07:31:46.1019802Z 547 │ ); 2026-10-25T07:31:46.1020045Z 548 │ ╭─▶ const FilesInspector = () => 2026-10-25T07:31:46.1020358Z 549 │ │ selectedThread !== null && selectedThreadCwd !== null ? ( 2026-10-25T07:31:46.1020623Z 550 │ │ 2026-10-25T07:31:46.1022703Z 558 │ ╰─▶ ) : null; 2026-10-25T07:31:46.1023003Z 559 │ const RouteInspector = () => props.renderInspector?.(inspectorHeaderInset); 2026-10-25T07:31:46.1023216Z ╰──── 2026-10-25T07:31:46.1023491Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-25T07:31:46.1023706Z 2026-10-25T07:31:46.1023964Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-25T07:31:46.1024372Z ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:40:5] 2026-10-25T07:31:46.1024907Z 37 │ const [initialized, setInitialized] = useState(false); 2026-10-25T07:31:46.1025112Z 38 │ useLayoutEffect(() => { 2026-10-25T07:31:46.1025285Z ·  ───────┬─────── 2026-10-25T07:31:46.1025510Z · ╰── This is the containing effect 2026-10-25T07:31:46.1025709Z 39 │ reset(); 2026-10-25T07:31:46.1025852Z 40 │ setInitialized(true); 2026-10-25T07:31:46.1026024Z ·  ───────┬────── 2026-10-25T07:31:46.1026282Z · ╰── Avoid calling setState() directly within an effect 2026-10-25T07:31:46.1026511Z 41 │ }, [reset]); 2026-10-25T07:31:46.1026637Z ╰──── 2026-10-25T07:31:46.1027290Z  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-25T07:31:46.1028140Z  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-25T07:31:46.1028443Z 2026-10-25T07:31:46.1028701Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-25T07:31:46.1029107Z ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:93:5] 2026-10-25T07:31:46.1029324Z 88 │ 2026-10-25T07:31:46.1029450Z 89 │ useEffect(() => { 2026-10-25T07:31:46.1029602Z ·  ────┬──── 2026-10-25T07:31:46.1029847Z · ╰── This is the containing effect 2026-10-25T07:31:46.1030136Z 90 │ if (!needsPreparation || !initialProjectRef.branch || waitingForProject) return; 2026-10-25T07:31:46.1030413Z 91 │ const branchName = initialProjectRef.branch; 2026-10-25T07:31:46.1030599Z 92 │ let active = true; 2026-10-25T07:31:46.1030783Z 93 │ setPendingCheckouts((count) => count + 1); 2026-10-25T07:31:46.1030980Z ·  ─────────┬───────── 2026-10-25T07:31:46.1031249Z · ╰── Avoid calling setState() directly within an effect 2026-10-25T07:31:46.1031569Z 94 │ // Serialize replacements: ignoring a stale result cannot undo its Git mutation. 2026-10-25T07:31:46.1031784Z ╰──── 2026-10-25T07:31:46.1032423Z  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-25T07:31:46.1033339Z  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-25T07:31:46.1033683Z 2026-10-25T07:31:46.1034151Z ⚠ 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-25T07:31:46.1034701Z ╭─[apps/server/src/usage/UsageService.test.ts:2613:7] 2026-10-25T07:31:46.1034943Z 2612 │ let orphanedAt: number | undefined; 2026-10-25T07:31:46.1035287Z 2613 │ ╭─▶ for (let interruptAt = 1; interruptAt <= 31; interruptAt += 1) { 2026-10-25T07:31:46.1035623Z 2614 │ │ const tasks: Array<() => void> = []; 2026-10-25T07:31:46.1035909Z 2615 │ │ const dispatcher: Scheduler.SchedulerDispatcher = { 2026-10-25T07:31:46.1036193Z 2616 │ │ scheduleTask: (task) => tasks.push(task), 2026-10-25T07:31:46.1036435Z 2617 │ │ flush: () => { 2026-10-25T07:31:46.1036671Z 2618 │ │ let task: (() => void) | undefined; 2026-10-25T07:31:46.1036953Z 2619 │ │ while ((task = tasks.shift()) !== undefined) task(); 2026-10-25T07:31:46.1037185Z 2620 │ │ }, 2026-10-25T07:31:46.1037368Z 2621 │ │ }; 2026-10-25T07:31:46.1037535Z 2622 │ │ 2026-10-25T07:31:46.1037783Z 2623 │ │ let requestFiber: Fiber.Fiber | undefined; 2026-10-25T07:31:46.1038054Z 2624 │ │ let requestChecks = 0; 2026-10-25T07:31:46.1038310Z 2625 │ │ const scheduler: Scheduler.Scheduler = { 2026-10-25T07:31:46.1038558Z 2626 │ │ executionMode: "async", 2026-10-25T07:31:46.1038802Z 2627 │ │ makeDispatcher: () => dispatcher, 2026-10-25T07:31:46.1039050Z 2628 │ │ shouldYield: (fiber) => { 2026-10-25T07:31:46.1039307Z 2629 │ │ if (fiber !== requestFiber) return false; 2026-10-25T07:31:46.1039554Z 2630 │ │ requestChecks += 1; 2026-10-25T07:31:46.1039856Z 2631 │ │ if (requestChecks !== interruptAt) return false; 2026-10-25T07:31:46.1040125Z 2632 │ │ fiber.interruptUnsafe(); 2026-10-25T07:31:46.1040357Z 2633 │ │ return true; 2026-10-25T07:31:46.1040556Z 2634 │ │ }, 2026-10-25T07:31:46.1040734Z 2635 │ │ }; 2026-10-25T07:31:46.1040901Z 2636 │ │ 2026-10-25T07:31:46.1041106Z 2637 │ │ const input: UsageSummaryInput = { 2026-10-25T07:31:46.1041334Z 2638 │ │ ...WINDOW, 2026-10-25T07:31:46.1041569Z 2639 │ │ sinceDay: UsageDay.make("2026-09-01"), 2026-10-25T07:31:46.1041902Z 2640 │ │ untilDay: UsageDay.make(`2026-08-${String(interruptAt).padStart(2, "0")}`), 2026-10-25T07:31:46.1042171Z 2641 │ │ }; 2026-10-25T07:31:46.1042380Z 2642 │ │ const first = yield* service 2026-10-25T07:31:46.1042666Z 2643 │ │ .readSummary(input) 2026-10-25T07:31:46.1042908Z 2644 │ │ .pipe( 2026-10-25T07:31:46.1043112Z 2645 │ │ Effect.exit, 2026-10-25T07:31:46.1043381Z 2646 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-25T07:31:46.1043647Z 2647 │ │ Effect.forkChild, 2026-10-25T07:31:46.1043843Z 2648 │ │ ); 2026-10-25T07:31:46.1044047Z 2649 │ │ requestFiber = first; 2026-10-25T07:31:46.1044269Z 2650 │ │ yield* Effect.yieldNow; 2026-10-25T07:31:46.1044495Z 2651 │ │ dispatcher.flush(); 2026-10-25T07:31:46.1044680Z 2652 │ │ 2026-10-25T07:31:46.1044923Z 2653 │ │ const second = yield* service.readSummary(input).pipe( 2026-10-25T07:31:46.1045179Z 2654 │ │ Effect.match({ 2026-10-25T07:31:46.1045415Z 2655 │ │ onFailure: (error) => error.reason, 2026-10-25T07:31:46.1045671Z 2656 │ │ onSuccess: () => "success" as const, 2026-10-25T07:31:46.1045891Z 2657 │ │ }), 2026-10-25T07:31:46.1046142Z 2658 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-25T07:31:46.1046404Z 2659 │ │ Effect.forkChild, 2026-10-25T07:31:46.1046601Z 2660 │ │ ); 2026-10-25T07:31:46.1046800Z 2661 │ │ yield* Effect.yieldNow; 2026-10-25T07:31:46.1047023Z 2662 │ │ dispatcher.flush(); 2026-10-25T07:31:46.1047269Z 2663 │ │ const secondExit = second.pollUnsafe(); 2026-10-25T07:31:46.1047532Z 2664 │ │ if (secondExit === undefined) { 2026-10-25T07:31:46.1047777Z 2665 │ │ second.interruptUnsafe(); 2026-10-25T07:31:46.1048016Z 2666 │ │ orphanedAt = interruptAt; 2026-10-25T07:31:46.1048229Z 2667 │ │ break; 2026-10-25T07:31:46.1048415Z 2668 │ │ } 2026-10-25T07:31:46.1048630Z 2669 │ │ if (Exit.isFailure(secondExit)) { 2026-10-25T07:31:46.1048919Z 2670 │ │ assert.fail("the matching request fiber was interrupted"); 2026-10-25T07:31:46.1049157Z 2671 │ │ } 2026-10-25T07:31:46.1049410Z 2672 │ │ assert.strictEqual(secondExit.value, "invalidWindow"); 2026-10-25T07:31:46.1049733Z 2673 │ ╰─▶ } 2026-10-25T07:31:46.1049927Z 2674 │ 2026-10-25T07:31:46.1050044Z ╰──── 2026-10-25T07:31:46.1050105Z 2026-10-25T07:31:46.1050364Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-25T07:31:46.1050781Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:217:7] 2026-10-25T07:31:46.1051003Z 213 │ }; 2026-10-25T07:31:46.1051134Z 214 │ useEffect(() => { 2026-10-25T07:31:46.1051368Z ·  ────┬──── 2026-10-25T07:31:46.1051583Z · ╰── This is the containing effect 2026-10-25T07:31:46.1051945Z 215 │ const inserted = ownerKey ? readComposerDraftSelection(ownerKey, draftMessage) : null; 2026-10-25T07:31:46.1052237Z 216 │ if (inserted) { 2026-10-25T07:31:46.1052397Z 217 │ setSelection((current) => 2026-10-25T07:31:46.1052573Z ·  ──────┬───── 2026-10-25T07:31:46.1052838Z · ╰── Avoid calling setState() directly within an effect 2026-10-25T07:31:46.1053174Z 218 │ current.start === inserted.start && current.end === inserted.end ? current : inserted, 2026-10-25T07:31:46.1053395Z ╰──── 2026-10-25T07:31:46.1054048Z  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-25T07:31:46.1054903Z  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-25T07:31:46.1055206Z 2026-10-25T07:31:46.1055466Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-25T07:31:46.1055875Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:297:7] 2026-10-25T07:31:46.1056124Z 285 │ }, [hasWorkspaceSnapshot]); 2026-10-25T07:31:46.1056290Z 286 │ useEffect(() => { 2026-10-25T07:31:46.1056441Z ·  ────┬──── 2026-10-25T07:31:46.1056660Z · ╰── This is the containing effect 2026-10-25T07:31:46.1056941Z 287 │ if (!environmentId || !projectCwd || !selectedProviderInstanceId) return; 2026-10-25T07:31:46.1057249Z 288 │ const key = `${environmentId}:${selectedProviderInstanceId}:${projectCwd}`; 2026-10-25T07:31:46.1057477Z 289 │ const now = Date.now(); 2026-10-25T07:31:46.1057682Z 290 │ const lastRequest = workspaceRefreshKeyRef.current; 2026-10-25T07:31:46.1057872Z 291 │ if ( 2026-10-25T07:31:46.1058016Z 292 │ lastRequest?.key === key && 2026-10-25T07:31:46.1058255Z 293 │ now - lastRequest.requestedAt < PROVIDER_WORKSPACE_SNAPSHOT_TTL_MS 2026-10-25T07:31:46.1058460Z 294 │ ) 2026-10-25T07:31:46.1058588Z 295 │ return; 2026-10-25T07:31:46.1058838Z 296 │ if (hasCurrentProviderWorkspaceSnapshot(selectedProviderStatus, projectCwd, now)) { 2026-10-25T07:31:46.1059105Z 297 │ setWorkspaceRefreshRetry(null); 2026-10-25T07:31:46.1059305Z ·  ────────────┬─────────── 2026-10-25T07:31:46.1059587Z · ╰── Avoid calling setState() directly within an effect 2026-10-25T07:31:46.1059906Z 298 │ return; 2026-10-25T07:31:46.1060066Z ╰──── 2026-10-25T07:31:46.1060713Z  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-25T07:31:46.1061572Z  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-25T07:31:46.1061873Z 2026-10-25T07:31:46.1062076Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-25T07:31:46.1062438Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:327:5] 2026-10-25T07:31:46.1062669Z 326 │ }, [ 2026-10-25T07:31:46.1062808Z 327 │ draftMessage, 2026-10-25T07:31:46.1062971Z ·  ──────┬───── 2026-10-25T07:31:46.1063209Z · ╰── Unnecessary dependency `draftMessage` 2026-10-25T07:31:46.1063423Z 328 │ environmentId, 2026-10-25T07:31:46.1063556Z ╰──── 2026-10-25T07:31:46.1063902Z  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-25T07:31:46.1064481Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.1064834Z 2026-10-25T07:31:46.1065281Z ⚠ 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-25T07:31:46.1065812Z ╭─[apps/server/src/serverSettings.test.ts:1740:32] 2026-10-25T07:31:46.1066116Z 1739 │ const model = createModelSelection(ProviderInstanceId.make("codex"), "gpt-5.5"); 2026-10-25T07:31:46.1066475Z 1740 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-25T07:31:46.1066779Z ·  ─────────────────── 2026-10-25T07:31:46.1067013Z 1741 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-25T07:31:46.1067189Z ╰──── 2026-10-25T07:31:46.1067246Z 2026-10-25T07:31:46.1067694Z ⚠ 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-25T07:31:46.1068219Z ╭─[apps/server/src/serverSettings.test.ts:1741:34] 2026-10-25T07:31:46.1068534Z 1740 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-25T07:31:46.1068829Z 1741 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-25T07:31:46.1069066Z ·  ─────────────────── 2026-10-25T07:31:46.1069307Z 1742 │ Schema.fromJsonString(Schema.Array(ProjectScript)), 2026-10-25T07:31:46.1069489Z ╰──── 2026-10-25T07:31:46.1069547Z 2026-10-25T07:31:46.1069769Z ⚠ eslint(require-yield): This generator function does not have `yield` 2026-10-25T07:31:46.1070104Z ╭─[packages/provider-acp/src/server/mcpOverAcpBridge.ts:81:78] 2026-10-25T07:31:46.1070383Z  80 │ 2026-10-25T07:31:46.1070754Z  81 │ ╭─▶ export const makeAcpMcpOverAcpBridge = Effect.fn("AcpMcpOverAcpBridge.make")(function* ( 2026-10-25T07:31:46.1071127Z  82 │ │ options: AcpMcpOverAcpBridgeOptions, 2026-10-25T07:31:46.1071377Z  83 │ │ ): Effect.fn.Return { 2026-10-25T07:31:46.1071679Z  84 │ │ const fetchImplementation = options.fetchImplementation ?? fetch; 2026-10-25T07:31:46.1071985Z  85 │ │ const connections = new Map(); 2026-10-25T07:31:46.1072198Z  86 │ │ 2026-10-25T07:31:46.1072501Z  87 │ │ const connectionFor = (connectionId: string): Effect.Effect => 2026-10-25T07:31:46.1072814Z  88 │ │ Effect.suspend(() => { 2026-10-25T07:31:46.1073070Z  89 │ │ const connection = connections.get(connectionId); 2026-10-25T07:31:46.1073321Z  90 │ │ return connection === undefined 2026-10-25T07:31:46.1073657Z  91 │ │ ? Effect.fail(new AcpMcpOverAcpError(`Unknown MCP-over-ACP connection "${connectionId}".`)) 2026-10-25T07:31:46.1073973Z  92 │ │ : Effect.succeed(connection); 2026-10-25T07:31:46.1074172Z  93 │ │ }); 2026-10-25T07:31:46.1074330Z  94 │ │ 2026-10-25T07:31:46.1074500Z  95 │ │ const send = ( 2026-10-25T07:31:46.1074697Z  96 │ │ connection: Connection, 2026-10-25T07:31:46.1074900Z  97 │ │ message: unknown, 2026-10-25T07:31:46.1075166Z  98 │ │ ): Effect.Effect, AcpMcpOverAcpError> => 2026-10-25T07:31:46.1075443Z  99 │ │ connection.mutex.withPermits(1)( 2026-10-25T07:31:46.1075674Z 100 │ │ Effect.gen(function* () { 2026-10-25T07:31:46.1075910Z 101 │ │ const body = JSON.stringify(message); 2026-10-25T07:31:46.1076182Z 102 │ │ if (Buffer.byteLength(body) > MAX_MESSAGE_BYTES) { 2026-10-25T07:31:46.1076536Z 103 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("MCP-over-ACP message exceeds 8 MiB.")); 2026-10-25T07:31:46.1076820Z 104 │ │ } 2026-10-25T07:31:46.1077046Z 105 │ │ const response = yield* Effect.tryPromise({ 2026-10-25T07:31:46.1077286Z 106 │ │ try: (signal) => 2026-10-25T07:31:46.1077532Z 107 │ │ fetchImplementation(options.endpoint, { 2026-10-25T07:31:46.1077783Z 108 │ │ method: "POST", 2026-10-25T07:31:46.1077989Z 109 │ │ signal, 2026-10-25T07:31:46.1078194Z 110 │ │ headers: { 2026-10-25T07:31:46.1078429Z 111 │ │ "content-type": "application/json", 2026-10-25T07:31:46.1078707Z 112 │ │ accept: "application/json, text/event-stream", 2026-10-25T07:31:46.1078985Z 113 │ │ authorization: options.authorization, 2026-10-25T07:31:46.1079247Z 114 │ │ ...(connection.sessionId === null 2026-10-25T07:31:46.1079478Z 115 │ │ ? {} 2026-10-25T07:31:46.1079818Z 116 │ │ : { "mcp-session-id": connection.sessionId }), 2026-10-25T07:31:46.1080123Z 117 │ │ ...(connection.protocolVersion === null 2026-10-25T07:31:46.1080355Z 118 │ │ ? {} 2026-10-25T07:31:46.1080629Z 119 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-25T07:31:46.1080876Z 120 │ │ }, 2026-10-25T07:31:46.1081069Z 121 │ │ body, 2026-10-25T07:31:46.1081255Z 122 │ │ }), 2026-10-25T07:31:46.1081460Z 123 │ │ catch: bridgeError, 2026-10-25T07:31:46.1081655Z 124 │ │ }); 2026-10-25T07:31:46.1081970Z 125 │ │ connection.sessionId = response.headers.get("mcp-session-id") ?? connection.sessionId; 2026-10-25T07:31:46.1082278Z 126 │ │ if (!response.ok) { 2026-10-25T07:31:46.1082501Z 127 │ │ yield* Effect.promise( 2026-10-25T07:31:46.1082801Z 128 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-25T07:31:46.1083064Z 129 │ │ ); 2026-10-25T07:31:46.1083275Z 130 │ │ return yield* Effect.fail( 2026-10-25T07:31:46.1083607Z 131 │ │ new AcpMcpOverAcpError(`T3 Code MCP endpoint responded with HTTP ${response.status}.`), 2026-10-25T07:31:46.1083892Z 132 │ │ ); 2026-10-25T07:31:46.1084064Z 133 │ │ } 2026-10-25T07:31:46.1084371Z 134 │ │ const payloads = [...(yield* Stream.runCollect(responsePayloads(response, bridgeError)))]; 2026-10-25T07:31:46.1084693Z 135 │ │ for (const payload of payloads) { 2026-10-25T07:31:46.1085037Z 136 │ │ connection.protocolVersion = protocolVersionOf(payload) ?? connection.protocolVersion; 2026-10-25T07:31:46.1085323Z 137 │ │ } 2026-10-25T07:31:46.1085516Z 138 │ │ return payloads; 2026-10-25T07:31:46.1085748Z 139 │ │ }).pipe(Effect.mapError(bridgeError)), 2026-10-25T07:31:46.1085958Z 140 │ │ ); 2026-10-25T07:31:46.1086121Z 141 │ │ 2026-10-25T07:31:46.1086380Z 142 │ │ const disconnect = Effect.fn("mcpOverAcpBridge.disconnect")(function* ( 2026-10-25T07:31:46.1086690Z 143 │ │ request: AcpSchema.DisconnectMcpRequest, 2026-10-25T07:31:46.1087014Z 144 │ │ ): Effect.fn.Return { 2026-10-25T07:31:46.1087358Z 145 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-25T07:31:46.1087644Z 146 │ │ connections.delete(request.connectionId); 2026-10-25T07:31:46.1087906Z 147 │ │ const sessionId = connection.sessionId; 2026-10-25T07:31:46.1088010Z 148 │ │ if (sessionId !== null) { 2026-10-25T07:31:46.1088138Z 149 │ │ const response = yield* Effect.tryPromise({ 2026-10-25T07:31:46.1088238Z 150 │ │ try: (signal) => 2026-10-25T07:31:46.1088367Z 151 │ │ fetchImplementation(options.endpoint, { 2026-10-25T07:31:46.1088523Z 152 │ │ method: "DELETE", 2026-10-25T07:31:46.1088641Z 153 │ │ signal, 2026-10-25T07:31:46.1088737Z 154 │ │ headers: { 2026-10-25T07:31:46.1088871Z 155 │ │ authorization: options.authorization, 2026-10-25T07:31:46.1088989Z 156 │ │ "mcp-session-id": sessionId, 2026-10-25T07:31:46.1089123Z 157 │ │ ...(connection.protocolVersion === null 2026-10-25T07:31:46.1089212Z 158 │ │ ? {} 2026-10-25T07:31:46.1089382Z 159 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-25T07:31:46.1089466Z 160 │ │ }, 2026-10-25T07:31:46.1089548Z 161 │ │ }), 2026-10-25T07:31:46.1089665Z 162 │ │ catch: bridgeError, 2026-10-25T07:31:46.1089745Z 163 │ │ }); 2026-10-25T07:31:46.1089910Z 164 │ │ if (!response.ok && response.status !== 404) { 2026-10-25T07:31:46.1090024Z 165 │ │ return yield* Effect.fail( 2026-10-25T07:31:46.1090133Z 166 │ │ new AcpMcpOverAcpError( 2026-10-25T07:31:46.1090314Z 167 │ │ `T3 Code MCP endpoint rejected disconnect with HTTP ${response.status}.`, 2026-10-25T07:31:46.1090396Z 168 │ │ ), 2026-10-25T07:31:46.1090477Z 169 │ │ ); 2026-10-25T07:31:46.1090554Z 170 │ │ } 2026-10-25T07:31:46.1090658Z 171 │ │ yield* Effect.promise( 2026-10-25T07:31:46.1090840Z 172 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-25T07:31:46.1090925Z 173 │ │ ); 2026-10-25T07:31:46.1091000Z 174 │ │ } 2026-10-25T07:31:46.1091085Z 175 │ │ return {}; 2026-10-25T07:31:46.1091160Z 176 │ │ }); 2026-10-25T07:31:46.1091227Z 177 │ │ 2026-10-25T07:31:46.1091306Z 178 │ │ return { 2026-10-25T07:31:46.1091477Z 179 │ │ connect: Effect.fn("mcpOverAcpBridge.connect")(function* (request) { 2026-10-25T07:31:46.1091597Z 180 │ │ if (request.serverId !== "t3-code") { 2026-10-25T07:31:46.1091703Z 181 │ │ return yield* Effect.fail( 2026-10-25T07:31:46.1091894Z 182 │ │ new AcpMcpOverAcpError(`Unknown ACP MCP server "${request.serverId}".`), 2026-10-25T07:31:46.1091975Z 183 │ │ ); 2026-10-25T07:31:46.1092051Z 184 │ │ } 2026-10-25T07:31:46.1092177Z 185 │ │ if (connections.size >= MAX_CONNECTIONS) { 2026-10-25T07:31:46.1092381Z 186 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("Too many MCP-over-ACP connections.")); 2026-10-25T07:31:46.1092458Z 187 │ │ } 2026-10-25T07:31:46.1092613Z 188 │ │ const connectionId = yield* options.allocateConnectionId; 2026-10-25T07:31:46.1092729Z 189 │ │ connections.set(connectionId, { 2026-10-25T07:31:46.1092848Z 190 │ │ mutex: yield* Semaphore.make(1), 2026-10-25T07:31:46.1092943Z 191 │ │ sessionId: null, 2026-10-25T07:31:46.1093095Z 192 │ │ protocolVersion: null, 2026-10-25T07:31:46.1093228Z 193 │ │ nextRequestId: 0, 2026-10-25T07:31:46.1093307Z 194 │ │ }); 2026-10-25T07:31:46.1093408Z 195 │ │ return { connectionId }; 2026-10-25T07:31:46.1093482Z 196 │ │ }), 2026-10-25T07:31:46.1093653Z 197 │ │ message: Effect.fn("mcpOverAcpBridge.message")(function* (request) { 2026-10-25T07:31:46.1093814Z 198 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-25T07:31:46.1093940Z 199 │ │ const id = ++connection.nextRequestId; 2026-10-25T07:31:46.1094066Z 200 │ │ const payloads = yield* send(connection, { 2026-10-25T07:31:46.1094172Z 201 │ │ jsonrpc: "2.0", 2026-10-25T07:31:46.1094255Z 202 │ │ id, 2026-10-25T07:31:46.1094360Z 203 │ │ method: request.method, 2026-10-25T07:31:46.1094518Z 204 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-25T07:31:46.1094594Z 205 │ │ }); 2026-10-25T07:31:46.1094780Z 206 │ │ const response = payloads.find((payload) => asEnvelope(payload)?.id === id); 2026-10-25T07:31:46.1094901Z 207 │ │ const envelope = asEnvelope(response); 2026-10-25T07:31:46.1095004Z 208 │ │ if (envelope === null) { 2026-10-25T07:31:46.1095111Z 209 │ │ return yield* Effect.fail( 2026-10-25T07:31:46.1095300Z 210 │ │ new AcpMcpOverAcpError("MCP server did not return a matching response."), 2026-10-25T07:31:46.1095382Z 211 │ │ ); 2026-10-25T07:31:46.1095457Z 212 │ │ } 2026-10-25T07:31:46.1095573Z 213 │ │ if (envelope.error !== undefined) { 2026-10-25T07:31:46.1095766Z 214 │ │ return yield* Effect.fail(new AcpMcpOverAcpError(errorMessage(envelope.error))); 2026-10-25T07:31:46.1095843Z 215 │ │ } 2026-10-25T07:31:46.1096015Z 216 │ │ return (envelope.result ?? null) as AcpSchema.MessageMcpResponse; 2026-10-25T07:31:46.1096090Z 217 │ │ }), 2026-10-25T07:31:46.1096282Z 218 │ │ notification: Effect.fn("mcpOverAcpBridge.notification")(function* (request) { 2026-10-25T07:31:46.1096444Z 219 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-25T07:31:46.1096553Z 220 │ │ yield* send(connection, { 2026-10-25T07:31:46.1096650Z 221 │ │ jsonrpc: "2.0", 2026-10-25T07:31:46.1096753Z 222 │ │ method: request.method, 2026-10-25T07:31:46.1096909Z 223 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-25T07:31:46.1096989Z 224 │ │ }); 2026-10-25T07:31:46.1097065Z 225 │ │ }), 2026-10-25T07:31:46.1097151Z 226 │ │ disconnect, 2026-10-25T07:31:46.1097259Z 227 │ │ dispose: Effect.suspend(() => 2026-10-25T07:31:46.1097352Z 228 │ │ Effect.forEach( 2026-10-25T07:31:46.1097458Z 229 │ │ [...connections.keys()], 2026-10-25T07:31:46.1097680Z 230 │ │ (connectionId) => disconnect({ connectionId }).pipe(Effect.ignore), 2026-10-25T07:31:46.1097808Z 231 │ │ { discard: true }, 2026-10-25T07:31:46.1097889Z 232 │ │ ), 2026-10-25T07:31:46.1097962Z 233 │ │ ), 2026-10-25T07:31:46.1098037Z 234 │ │ }; 2026-10-25T07:31:46.1098164Z 235 │ ╰─▶ }); 2026-10-25T07:31:46.1098221Z ╰──── 2026-10-25T07:31:46.1098470Z  help: Add a `yield` expression inside the generator body, or convert it to a regular function if iteration behavior is not needed. 2026-10-25T07:31:46.1098472Z 2026-10-25T07:31:46.1098739Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-25T07:31:46.1098901Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:358:7] 2026-10-25T07:31:46.1099037Z 352 │ }, [cancelledIncomingShareId, navigation, props.incomingShareId]); 2026-10-25T07:31:46.1099108Z 353 │ useEffect(() => { 2026-10-25T07:31:46.1099179Z ·  ────┬──── 2026-10-25T07:31:46.1099309Z · ╰── This is the containing effect 2026-10-25T07:31:46.1099401Z 354 │ if (!isReturningToProjectPicker) { 2026-10-25T07:31:46.1099466Z 355 │ return; 2026-10-25T07:31:46.1099522Z 356 │ } 2026-10-25T07:31:46.1099617Z 357 │ if (requestedInitialProjectAvailable) { 2026-10-25T07:31:46.1099743Z 358 │ setIsReturningToProjectPicker(false); 2026-10-25T07:31:46.1099855Z ·  ──────────────┬────────────── 2026-10-25T07:31:46.1100037Z · ╰── Avoid calling setState() directly within an effect 2026-10-25T07:31:46.1100099Z 359 │ return; 2026-10-25T07:31:46.1100154Z ╰──── 2026-10-25T07:31:46.1100748Z  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-25T07:31:46.1101068Z  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-25T07:31:46.1101071Z 2026-10-25T07:31:46.1101326Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-25T07:31:46.1101528Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:496:9] 2026-10-25T07:31:46.1101607Z 441 │ 2026-10-25T07:31:46.1101675Z 442 │ useEffect(() => { 2026-10-25T07:31:46.1101747Z ·  ────┬──── 2026-10-25T07:31:46.1101875Z · ╰── This is the containing effect 2026-10-25T07:31:46.1101975Z 443 │ if (props.pendingTaskId || props.draftId) { 2026-10-25T07:31:46.1102037Z 444 │ return; 2026-10-25T07:31:46.1102091Z 445 │ } 2026-10-25T07:31:46.1102234Z 446 │ if (lastInitialProjectRefRef.current !== props.initialProjectRef) { 2026-10-25T07:31:46.1102366Z 447 │ lastInitialProjectRefRef.current = props.initialProjectRef; 2026-10-25T07:31:46.1102470Z 448 │ appliedInitialProjectKeyRef.current = null; 2026-10-25T07:31:46.1102526Z 449 │ } 2026-10-25T07:31:46.1102671Z 450 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-25T07:31:46.1102799Z 451 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-25T07:31:46.1102901Z 452 │ if (initialEnvironmentId && initialProjectId) { 2026-10-25T07:31:46.1102975Z 453 │ const directProject = 2026-10-25T07:31:46.1103043Z 454 │ projects.find( 2026-10-25T07:31:46.1103111Z 455 │ (project) => 2026-10-25T07:31:46.1103283Z 456 │ project.environmentId === initialEnvironmentId && project.id === initialProjectId, 2026-10-25T07:31:46.1103344Z 457 │ ) ?? null; 2026-10-25T07:31:46.1103398Z 458 │ 2026-10-25T07:31:46.1103468Z 459 │ if (directProject) { 2026-10-25T07:31:46.1103618Z 460 │ // Apply the route project once or picker changes would immediately revert. 2026-10-25T07:31:46.1103781Z 461 │ const directProjectKey = `${directProject.environmentId}:${directProject.id}`; 2026-10-25T07:31:46.1103921Z 462 │ if (appliedInitialProjectKeyRef.current === directProjectKey) { 2026-10-25T07:31:46.1103986Z 463 │ return; 2026-10-25T07:31:46.1104046Z 464 │ } 2026-10-25T07:31:46.1104144Z 465 │ if (props.initialProjectRef?.branch) { 2026-10-25T07:31:46.1104204Z 466 │ if ( 2026-10-25T07:31:46.1104346Z 467 │ selectedProject?.environmentId !== directProject.environmentId || 2026-10-25T07:31:46.1104445Z 468 │ selectedProject.id !== directProject.id 2026-10-25T07:31:46.1104588Z 469 │ ) { 2026-10-25T07:31:46.1104671Z 470 │ setProject(directProject); 2026-10-25T07:31:46.1104740Z 471 │ return; 2026-10-25T07:31:46.1104801Z 472 │ } 2026-10-25T07:31:46.1104885Z 473 │ if (!flow.draftKey) return; 2026-10-25T07:31:46.1105080Z 474 │ // Checkout completed before mount; local mode reuses it while worktree mode would create another. 2026-10-25T07:31:46.1105195Z 475 │ updateComposerDraftSettings(flow.draftKey, { 2026-10-25T07:31:46.1105273Z 476 │ workspaceSelection: { 2026-10-25T07:31:46.1105345Z 477 │ mode: "local", 2026-10-25T07:31:46.1105452Z 478 │ branch: props.initialProjectRef.branch, 2026-10-25T07:31:46.1105586Z 479 │ worktreePath: props.initialProjectRef.worktreePath ?? null, 2026-10-25T07:31:46.1105668Z 480 │ startFromOrigin: false, 2026-10-25T07:31:46.1105732Z 481 │ }, 2026-10-25T07:31:46.1105792Z 482 │ }); 2026-10-25T07:31:46.1105847Z 483 │ } 2026-10-25T07:31:46.1105974Z 484 │ appliedInitialProjectKeyRef.current = directProjectKey; 2026-10-25T07:31:46.1106034Z 485 │ if ( 2026-10-25T07:31:46.1106241Z 486 │ selectedProject?.environmentId === directProject.environmentId && 2026-10-25T07:31:46.1106377Z 487 │ selectedProject.id === directProject.id 2026-10-25T07:31:46.1106435Z 488 │ ) { 2026-10-25T07:31:46.1106499Z 489 │ return; 2026-10-25T07:31:46.1113136Z 490 │ } 2026-10-25T07:31:46.1113235Z 491 │ setProject(directProject); 2026-10-25T07:31:46.1113295Z 492 │ return; 2026-10-25T07:31:46.1113350Z 493 │ } 2026-10-25T07:31:46.1113403Z 494 │ 2026-10-25T07:31:46.1113482Z 495 │ if (projects.length > 0) { 2026-10-25T07:31:46.1113577Z 496 │ setIsReturningToProjectPicker(true); 2026-10-25T07:31:46.1113690Z ·  ──────────────┬────────────── 2026-10-25T07:31:46.1113875Z · ╰── Avoid calling setState() directly within an effect 2026-10-25T07:31:46.1113941Z 497 │ } 2026-10-25T07:31:46.1113998Z ╰──── 2026-10-25T07:31:46.1114592Z  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-25T07:31:46.1114917Z  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-25T07:31:46.1114920Z 2026-10-25T07:31:46.1115183Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-25T07:31:46.1115341Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:596:5] 2026-10-25T07:31:46.1115395Z 537 │ 2026-10-25T07:31:46.1115458Z 538 │ useEffect(() => { 2026-10-25T07:31:46.1115528Z ·  ────┬──── 2026-10-25T07:31:46.1115656Z · ╰── This is the containing effect 2026-10-25T07:31:46.1115749Z 539 │ const shareId = props.incomingShareId; 2026-10-25T07:31:46.1115828Z 540 │ const draftKey = flow.draftKey; 2026-10-25T07:31:46.1115926Z 541 │ const destinationProject = selectedProject; 2026-10-25T07:31:46.1116065Z 542 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-25T07:31:46.1116189Z 543 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-25T07:31:46.1116276Z 544 │ const selectedProjectMatchesRoute = 2026-10-25T07:31:46.1116350Z 545 │ !initialEnvironmentId || 2026-10-25T07:31:46.1116425Z 546 │ !initialProjectId || 2026-10-25T07:31:46.1116555Z 547 │ (destinationProject?.environmentId === initialEnvironmentId && 2026-10-25T07:31:46.1116656Z 548 │ destinationProject.id === initialProjectId); 2026-10-25T07:31:46.1116712Z 549 │ if ( 2026-10-25T07:31:46.1116774Z 550 │ !shareId || 2026-10-25T07:31:46.1116835Z 551 │ !draftKey || 2026-10-25T07:31:46.1116906Z 552 │ !destinationProject || 2026-10-25T07:31:46.1116992Z 553 │ !selectedProjectMatchesRoute || 2026-10-25T07:31:46.1117078Z 554 │ cancelledIncomingShareId === shareId 2026-10-25T07:31:46.1117133Z 555 │ ) { 2026-10-25T07:31:46.1117192Z 556 │ return; 2026-10-25T07:31:46.1117247Z 557 │ } 2026-10-25T07:31:46.1117342Z 558 │ const importKey = `${shareId}:${draftKey}`; 2026-10-25T07:31:46.1117399Z 559 │ if ( 2026-10-25T07:31:46.1117580Z 560 │ startedShareImportKeyRef.current === importKey || 2026-10-25T07:31:46.1117721Z 561 │ cancellingShareImportKeyRef.current === importKey 2026-10-25T07:31:46.1117777Z 562 │ ) { 2026-10-25T07:31:46.1117833Z 563 │ return; 2026-10-25T07:31:46.1117887Z 564 │ } 2026-10-25T07:31:46.1117940Z 565 │ 2026-10-25T07:31:46.1118009Z 566 │ if (!incomingShare) { 2026-10-25T07:31:46.1118201Z 567 │ if (isIncomingShareUnavailable && alertedUnavailableIncomingShareIdRef.current !== shareId) { 2026-10-25T07:31:46.1118332Z 568 │ alertedUnavailableIncomingShareIdRef.current = shareId; 2026-10-25T07:31:46.1118398Z 569 │ Dialog.alert( 2026-10-25T07:31:46.1118482Z 570 │ "Shared content unavailable", 2026-10-25T07:31:46.1118654Z 571 │ "The shared content is no longer in the inbox. You can continue editing this task draft.", 2026-10-25T07:31:46.1118715Z 572 │ ); 2026-10-25T07:31:46.1118778Z 573 │ } 2026-10-25T07:31:46.1118839Z 574 │ return; 2026-10-25T07:31:46.1118894Z 575 │ } 2026-10-25T07:31:46.1118944Z 576 │ 2026-10-25T07:31:46.1119001Z 577 │ if ( 2026-10-25T07:31:46.1119161Z 578 │ incomingShare.attachments.some((attachment) => attachment.type === "file") && 2026-10-25T07:31:46.1119261Z 579 │ selectedEnvironmentServerConfig === null 2026-10-25T07:31:46.1119315Z 580 │ ) { 2026-10-25T07:31:46.1119373Z 581 │ return; 2026-10-25T07:31:46.1119427Z 582 │ } 2026-10-25T07:31:46.1119481Z 583 │ 2026-10-25T07:31:46.1119616Z 584 │ if (alertedUnavailableIncomingShareIdRef.current === shareId) { 2026-10-25T07:31:46.1119750Z 585 │ alertedUnavailableIncomingShareIdRef.current = null; 2026-10-25T07:31:46.1119838Z 586 │ } 2026-10-25T07:31:46.1119945Z 587 │ startedShareImportKeyRef.current = importKey; 2026-10-25T07:31:46.1120020Z 588 │ const draftBackup = 2026-10-25T07:31:46.1120203Z 589 │ shareImportDraftBackupRef.current.get(importKey) ?? getComposerDraftSnapshot(draftKey); 2026-10-25T07:31:46.1120341Z 590 │ shareImportDraftBackupRef.current.set(importKey, draftBackup); 2026-10-25T07:31:46.1120431Z 591 │ const importToken = Symbol(importKey); 2026-10-25T07:31:46.1120509Z 592 │ let didReserveShare = false; 2026-10-25T07:31:46.1120583Z 593 │ let didConsumeShare = false; 2026-10-25T07:31:46.1120664Z 594 │ let needsDraftRestore = false; 2026-10-25T07:31:46.1120774Z 595 │ activeShareImportTokenRef.current = importToken; 2026-10-25T07:31:46.1120856Z 596 │ setImportingShareKey(importKey); 2026-10-25T07:31:46.1120941Z ·  ──────────┬───────── 2026-10-25T07:31:46.1121119Z · ╰── Avoid calling setState() directly within an effect 2026-10-25T07:31:46.1121189Z 597 │ void (async () => { 2026-10-25T07:31:46.1121242Z ╰──── 2026-10-25T07:31:46.1121836Z  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-25T07:31:46.1122157Z  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-25T07:31:46.1122159Z 2026-10-25T07:31:46.1122360Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-25T07:31:46.1122565Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:516:5] 2026-10-25T07:31:46.1122676Z 515 │ props.initialProjectRef, 2026-10-25T07:31:46.1122749Z 516 │ props.incomingShareId, 2026-10-25T07:31:46.1122837Z ·  ──────────┬────────── 2026-10-25T07:31:46.1123000Z · ╰── Unnecessary dependency `props.incomingShareId` 2026-10-25T07:31:46.1123073Z 517 │ props.pendingTaskId, 2026-10-25T07:31:46.1123127Z ╰──── 2026-10-25T07:31:46.1123416Z  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-25T07:31:46.1123721Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.1123724Z 2026-10-25T07:31:46.1123940Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-25T07:31:46.1124094Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:535:5] 2026-10-25T07:31:46.1124207Z 534 │ loadedBranchesProjectKeyRef.current = projectKey; 2026-10-25T07:31:46.1124275Z 535 │ flow.loadBranches(); 2026-10-25T07:31:46.1124347Z ·  ──┬─ 2026-10-25T07:31:46.1124469Z · ╰── Missing dependency `flow` 2026-10-25T07:31:46.1124563Z 536 │ }, [flow.loadBranches, selectedProject]); 2026-10-25T07:31:46.1124649Z ·  ────────┬──────── 2026-10-25T07:31:46.1124845Z · ╰── Overly precise dependency `flow.loadBranches`, use `flow` instead 2026-10-25T07:31:46.1124897Z 537 │ 2026-10-25T07:31:46.1124949Z ╰──── 2026-10-25T07:31:46.1125371Z  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-25T07:31:46.1125681Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.1125683Z 2026-10-25T07:31:46.1125883Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-25T07:31:46.1126031Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:748:5] 2026-10-25T07:31:46.1126099Z 747 │ flow.draftKey, 2026-10-25T07:31:46.1126178Z 748 │ hasImportedIncomingShare, 2026-10-25T07:31:46.1126270Z ·  ────────────┬─────────── 2026-10-25T07:31:46.1126447Z · ╰── Unnecessary dependency `hasImportedIncomingShare` 2026-10-25T07:31:46.1126513Z 749 │ incomingShare, 2026-10-25T07:31:46.1126598Z 750 │ isIncomingShareInboxLoading, 2026-10-25T07:31:46.1126695Z ·  ─────────────┬───────────── 2026-10-25T07:31:46.1126876Z · ╰── Unnecessary dependency `isIncomingShareInboxLoading` 2026-10-25T07:31:46.1126957Z 751 │ isIncomingShareUnavailable, 2026-10-25T07:31:46.1127026Z 752 │ props.incomingShareId, 2026-10-25T07:31:46.1127120Z 753 │ props.initialProjectRef?.environmentId, 2026-10-25T07:31:46.1127209Z 754 │ props.initialProjectRef?.projectId, 2026-10-25T07:31:46.1127282Z 755 │ releaseShareReservation, 2026-10-25T07:31:46.1127344Z 756 │ reserveShare, 2026-10-25T07:31:46.1127483Z 757 │ selectedEnvironmentServerConfig, 2026-10-25T07:31:46.1127581Z 758 │ selectedProject, 2026-10-25T07:31:46.1127651Z 759 │ shareImportAttempt, 2026-10-25T07:31:46.1127739Z ·  ─────────┬──────── 2026-10-25T07:31:46.1127900Z · ╰── Unnecessary dependency `shareImportAttempt` 2026-10-25T07:31:46.1127958Z 760 │ ]); 2026-10-25T07:31:46.1128013Z ╰──── 2026-10-25T07:31:46.1128303Z  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-25T07:31:46.1128604Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.1128609Z 2026-10-25T07:31:46.1128870Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-25T07:31:46.1129022Z ╭─[apps/mobile/src/components/VideoPreviewModal.ios.tsx:63:55] 2026-10-25T07:31:46.1129080Z 61 │ }, []); 2026-10-25T07:31:46.1129144Z 62 │ useEffect(() => { 2026-10-25T07:31:46.1129213Z ·  ────┬──── 2026-10-25T07:31:46.1129342Z · ╰── This is the containing effect 2026-10-25T07:31:46.1129493Z 63 │ if (playbackUrl === null && resolvedUrl !== null) setPlaybackUrl(resolvedUrl); 2026-10-25T07:31:46.1129617Z ·  ───────┬────── 2026-10-25T07:31:46.1129850Z · ╰── Avoid calling setState() directly within an effect 2026-10-25T07:31:46.1129927Z 64 │ }, [playbackUrl, resolvedUrl]); 2026-10-25T07:31:46.1129986Z ╰──── 2026-10-25T07:31:46.1130583Z  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-25T07:31:46.1130898Z  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-25T07:31:46.1130900Z 2026-10-25T07:31:46.1131159Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-25T07:31:46.1131296Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:59:5] 2026-10-25T07:31:46.1131348Z 56 │ 2026-10-25T07:31:46.1131417Z 57 │ useEffect(() => { 2026-10-25T07:31:46.1131490Z ·  ────┬──── 2026-10-25T07:31:46.1131617Z · ╰── This is the containing effect 2026-10-25T07:31:46.1131709Z 58 │ const controller = new AbortController(); 2026-10-25T07:31:46.1131784Z 59 │ setLoadState("pending"); 2026-10-25T07:31:46.1131860Z ·  ──────┬───── 2026-10-25T07:31:46.1132026Z · ╰── Avoid calling setState() directly within an effect 2026-10-25T07:31:46.1132184Z 60 │ // A renewed signature is used on Retry, not as a reason to reset the native player. 2026-10-25T07:31:46.1132235Z ╰──── 2026-10-25T07:31:46.1132870Z  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-25T07:31:46.1133217Z  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-25T07:31:46.1133219Z 2026-10-25T07:31:46.1133420Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-25T07:31:46.1133551Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:70:7] 2026-10-25T07:31:46.1133633Z 69 │ return () => controller.abort(); 2026-10-25T07:31:46.1133727Z 70 │ }, [player, props.playRequested, attempt]); 2026-10-25T07:31:46.1133901Z ·  ───┬── ─────────┬───────── ───┬─── 2026-10-25T07:31:46.1134136Z · │ │ ╰── Unnecessary dependency `attempt` 2026-10-25T07:31:46.1134337Z · │ ╰── Unnecessary dependency `props.playRequested` 2026-10-25T07:31:46.1134472Z · ╰── Unnecessary dependency `player_0` 2026-10-25T07:31:46.1134524Z 71 │ 2026-10-25T07:31:46.1134577Z ╰──── 2026-10-25T07:31:46.1134867Z  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-25T07:31:46.1135174Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.1135177Z 2026-10-25T07:31:46.1135339Z ⚠ react(immutability): This value cannot be modified 2026-10-25T07:31:46.1135491Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:90:5] 2026-10-25T07:31:46.1135545Z 79 │ 2026-10-25T07:31:46.1135638Z 80 │ const cardCoverage = props.cardCoverage; 2026-10-25T07:31:46.1135721Z ·  ──────┬───── 2026-10-25T07:31:46.1135856Z · ╰── `cardCoverage` originates here 2026-10-25T07:31:46.1135936Z 81 │ const barHeightRef = useRef(0); 2026-10-25T07:31:46.1136016Z 82 │ const cardHeightRef = useRef(0); 2026-10-25T07:31:46.1136101Z 83 │ const cardHeight = useSharedValue(0); 2026-10-25T07:31:46.1136193Z 84 │ const notifyCoverage = useCallback(() => { 2026-10-25T07:31:46.1136260Z 85 │ if (!cardCoverage) { 2026-10-25T07:31:46.1136372Z 86 │ return; 2026-10-25T07:31:46.1136457Z 87 │ } 2026-10-25T07:31:46.1136623Z 88 │ // The card resizes with the keyboard every frame, so easing each sample would leave the 2026-10-25T07:31:46.1136721Z 89 │ // feed inset and floating controls trailing it. 2026-10-25T07:31:46.1136882Z 90 │ cardCoverage.value = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-25T07:31:46.1136958Z ·  ──────┬───── 2026-10-25T07:31:46.1137094Z · ╰── `cardCoverage` cannot be modified 2026-10-25T07:31:46.1137161Z 91 │ }, [cardCoverage]); 2026-10-25T07:31:46.1137212Z ╰──── 2026-10-25T07:31:46.1137504Z  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-25T07:31:46.1137812Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-25T07:31:46.1137817Z 2026-10-25T07:31:46.1137973Z ⚠ react(immutability): This value cannot be modified 2026-10-25T07:31:46.1138129Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:102:7] 2026-10-25T07:31:46.1138209Z  82 │ const cardHeightRef = useRef(0); 2026-10-25T07:31:46.1138296Z  83 │ const cardHeight = useSharedValue(0); 2026-10-25T07:31:46.1138375Z ·  ─────┬──── 2026-10-25T07:31:46.1138509Z · ╰── `cardHeight` originates here 2026-10-25T07:31:46.1138599Z  84 │ const notifyCoverage = useCallback(() => { 2026-10-25T07:31:46.1138668Z  85 │ if (!cardCoverage) { 2026-10-25T07:31:46.1138729Z  86 │ return; 2026-10-25T07:31:46.1138792Z  87 │ } 2026-10-25T07:31:46.1138963Z  88 │ // The card resizes with the keyboard every frame, so easing each sample would leave the 2026-10-25T07:31:46.1139062Z  89 │ // feed inset and floating controls trailing it. 2026-10-25T07:31:46.1139219Z  90 │ cardCoverage.value = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-25T07:31:46.1139286Z  91 │ }, [cardCoverage]); 2026-10-25T07:31:46.1139371Z  92 │ const handleBarLayout = useCallback( 2026-10-25T07:31:46.1139448Z  93 │ (event: LayoutChangeEvent) => { 2026-10-25T07:31:46.1139572Z  94 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-25T07:31:46.1139640Z  95 │ notifyCoverage(); 2026-10-25T07:31:46.1139707Z  96 │ }, 2026-10-25T07:31:46.1139799Z  97 │ [notifyCoverage], 2026-10-25T07:31:46.1139851Z  98 │ ); 2026-10-25T07:31:46.1139942Z  99 │ const handleCardLayout = useCallback( 2026-10-25T07:31:46.1140027Z 100 │ (event: LayoutChangeEvent) => { 2026-10-25T07:31:46.1140158Z 101 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-25T07:31:46.1140269Z 102 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-25T07:31:46.1140347Z ·  ─────┬──── 2026-10-25T07:31:46.1140483Z · ╰── `cardHeight` cannot be modified 2026-10-25T07:31:46.1140552Z 103 │ notifyCoverage(); 2026-10-25T07:31:46.1140606Z ╰──── 2026-10-25T07:31:46.1140871Z  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-25T07:31:46.1141175Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-25T07:31:46.1141228Z 2026-10-25T07:31:46.1141468Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-25T07:31:46.1141625Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:90:5] 2026-10-25T07:31:46.1141710Z 83 │ const cardHeight = useSharedValue(0); 2026-10-25T07:31:46.1141799Z 84 │ const notifyCoverage = useCallback(() => { 2026-10-25T07:31:46.1141903Z ·  ───┬─── 2026-10-25T07:31:46.1142143Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-25T07:31:46.1142211Z 85 │ if (!cardCoverage) { 2026-10-25T07:31:46.1142271Z 86 │ return; 2026-10-25T07:31:46.1142324Z 87 │ } 2026-10-25T07:31:46.1142497Z 88 │ // The card resizes with the keyboard every frame, so easing each sample would leave the 2026-10-25T07:31:46.1142600Z 89 │ // feed inset and floating controls trailing it. 2026-10-25T07:31:46.1142756Z 90 │ cardCoverage.value = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-25T07:31:46.1142830Z ·  ──────┬───── 2026-10-25T07:31:46.1142962Z · ╰── This modifies `cardCoverage` 2026-10-25T07:31:46.1143030Z 91 │ }, [cardCoverage]); 2026-10-25T07:31:46.1143085Z ╰──── 2026-10-25T07:31:46.1143425Z  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-25T07:31:46.1143729Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-25T07:31:46.1143734Z 2026-10-25T07:31:46.1143933Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-25T07:31:46.1144089Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:90:5] 2026-10-25T07:31:46.1144189Z 89 │ // feed inset and floating controls trailing it. 2026-10-25T07:31:46.1144343Z 90 │ cardCoverage.value = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-25T07:31:46.1144415Z ·  ──────┬───── 2026-10-25T07:31:46.1144606Z · ╰── This modifies `cardCoverage` 2026-10-25T07:31:46.1144674Z 91 │ }, [cardCoverage]); 2026-10-25T07:31:46.1144765Z 92 │ const handleBarLayout = useCallback( 2026-10-25T07:31:46.1144845Z 93 │ (event: LayoutChangeEvent) => { 2026-10-25T07:31:46.1144956Z ·  ───────────────┬─────────────── 2026-10-25T07:31:46.1145182Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-25T07:31:46.1145305Z 94 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-25T07:31:46.1145358Z ╰──── 2026-10-25T07:31:46.1145688Z  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-25T07:31:46.1145987Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-25T07:31:46.1145989Z 2026-10-25T07:31:46.1146188Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-25T07:31:46.1146414Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:102:7] 2026-10-25T07:31:46.1146541Z  99 │ const handleCardLayout = useCallback( 2026-10-25T07:31:46.1146625Z 100 │ (event: LayoutChangeEvent) => { 2026-10-25T07:31:46.1146727Z ·  ───────────────┬─────────────── 2026-10-25T07:31:46.1146945Z · ╰── This function may (indirectly) reassign or modify `cardHeight` after render 2026-10-25T07:31:46.1147072Z 101 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-25T07:31:46.1147185Z 102 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-25T07:31:46.1147259Z ·  ─────┬──── 2026-10-25T07:31:46.1147389Z · ╰── This modifies `cardHeight` 2026-10-25T07:31:46.1147459Z 103 │ notifyCoverage(); 2026-10-25T07:31:46.1147519Z ╰──── 2026-10-25T07:31:46.1147853Z  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-25T07:31:46.1148150Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-25T07:31:46.1148156Z 2026-10-25T07:31:46.1148365Z ⚠ eslint(no-unused-vars): Function 'summarizePayload' is declared but never used. 2026-10-25T07:31:46.1148508Z ╭─[packages/provider-acp/src/server/nativeLogging.ts:22:10] 2026-10-25T07:31:46.1148562Z 21 │ 2026-10-25T07:31:46.1148719Z 22 │ function summarizePayload(payload: unknown): Readonly> { 2026-10-25T07:31:46.1148809Z ·  ────────┬─────── 2026-10-25T07:31:46.1148960Z · ╰── 'summarizePayload' is declared here 2026-10-25T07:31:46.1149069Z 23 │ if (payload === null) return { valueType: "null" }; 2026-10-25T07:31:46.1149122Z ╰──── 2026-10-25T07:31:46.1149226Z  help: Consider removing this declaration. 2026-10-25T07:31:46.1149228Z 2026-10-25T07:31:46.1149383Z ⚠ react(immutability): This value cannot be modified 2026-10-25T07:31:46.1149552Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:108:5] 2026-10-25T07:31:46.1149607Z 104 │ ); 2026-10-25T07:31:46.1149804Z 105 │ const separationProgress = useSharedValue(props.showScrollToEnd ? 1 : 0); 2026-10-25T07:31:46.1149896Z ·  ─────────┬──────── 2026-10-25T07:31:46.1150051Z · ╰── `separationProgress` originates here 2026-10-25T07:31:46.1150106Z 106 │ 2026-10-25T07:31:46.1150173Z 107 │ useEffect(() => { 2026-10-25T07:31:46.1150345Z 108 │ separationProgress.value = withTiming(props.showScrollToEnd ? 1 : 0, CONTROL_TIMING); 2026-10-25T07:31:46.1150427Z ·  ─────────┬──────── 2026-10-25T07:31:46.1150581Z · ╰── `separationProgress` cannot be modified 2026-10-25T07:31:46.1150687Z 109 │ }, [props.showScrollToEnd, separationProgress]); 2026-10-25T07:31:46.1150739Z ╰──── 2026-10-25T07:31:46.1151001Z  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-25T07:31:46.1151350Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-25T07:31:46.1151410Z 2026-10-25T07:31:46.1151564Z ⚠ react(immutability): This value cannot be modified 2026-10-25T07:31:46.1151727Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:132:5] 2026-10-25T07:31:46.1151950Z 122 │ // Animate an in-flow sizer for native glass layout. Measure labels at fixed width to avoid repeated animation retargeting. 2026-10-25T07:31:46.1152066Z 123 │ const capsuleWidth = useSharedValue(null); 2026-10-25T07:31:46.1152147Z ·  ──────┬───── 2026-10-25T07:31:46.1152284Z · ╰── `capsuleWidth` originates here 2026-10-25T07:31:46.1152392Z 124 │ const measuredWidthRef = useRef(null); 2026-10-25T07:31:46.1152506Z 125 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-25T07:31:46.1152616Z 126 │ const width = event.nativeEvent.layout.width; 2026-10-25T07:31:46.1152714Z 127 │ if (width === measuredWidthRef.current) { 2026-10-25T07:31:46.1152775Z 128 │ return; 2026-10-25T07:31:46.1152828Z 129 │ } 2026-10-25T07:31:46.1152934Z 130 │ const first = measuredWidthRef.current === null; 2026-10-25T07:31:46.1153018Z 131 │ measuredWidthRef.current = width; 2026-10-25T07:31:46.1153157Z 132 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-25T07:31:46.1153232Z ·  ──────┬───── 2026-10-25T07:31:46.1153368Z · ╰── `capsuleWidth` cannot be modified 2026-10-25T07:31:46.1153421Z 133 │ }; 2026-10-25T07:31:46.1153472Z ╰──── 2026-10-25T07:31:46.1153736Z  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-25T07:31:46.1154037Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-25T07:31:46.1154039Z 2026-10-25T07:31:46.1154192Z ⚠ react(immutability): This value cannot be modified 2026-10-25T07:31:46.1154353Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:139:7] 2026-10-25T07:31:46.1154573Z 122 │ // Animate an in-flow sizer for native glass layout. Measure labels at fixed width to avoid repeated animation retargeting. 2026-10-25T07:31:46.1154687Z 123 │ const capsuleWidth = useSharedValue(null); 2026-10-25T07:31:46.1154764Z ·  ──────┬───── 2026-10-25T07:31:46.1154900Z · ╰── `capsuleWidth` originates here 2026-10-25T07:31:46.1155010Z 124 │ const measuredWidthRef = useRef(null); 2026-10-25T07:31:46.1155125Z 125 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-25T07:31:46.1155229Z 126 │ const width = event.nativeEvent.layout.width; 2026-10-25T07:31:46.1155321Z 127 │ if (width === measuredWidthRef.current) { 2026-10-25T07:31:46.1155383Z 128 │ return; 2026-10-25T07:31:46.1155437Z 129 │ } 2026-10-25T07:31:46.1155541Z 130 │ const first = measuredWidthRef.current === null; 2026-10-25T07:31:46.1155623Z 131 │ measuredWidthRef.current = width; 2026-10-25T07:31:46.1155767Z 132 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-25T07:31:46.1155822Z 133 │ }; 2026-10-25T07:31:46.1155913Z 134 │ const hasStatus = props.status !== null; 2026-10-25T07:31:46.1156097Z 135 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-25T07:31:46.1156188Z 136 │ useEffect(() => { 2026-10-25T07:31:46.1156253Z 137 │ if (!hasStatus) { 2026-10-25T07:31:46.1156338Z 138 │ measuredWidthRef.current = null; 2026-10-25T07:31:46.1156415Z 139 │ capsuleWidth.value = null; 2026-10-25T07:31:46.1156489Z ·  ──────┬───── 2026-10-25T07:31:46.1156628Z · ╰── `capsuleWidth` cannot be modified 2026-10-25T07:31:46.1156682Z 140 │ } 2026-10-25T07:31:46.1156735Z ╰──── 2026-10-25T07:31:46.1156992Z  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-25T07:31:46.1157292Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-25T07:31:46.1157294Z 2026-10-25T07:31:46.1157498Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-25T07:31:46.1157660Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:139:7] 2026-10-25T07:31:46.1157790Z 135 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-25T07:31:46.1157856Z 136 │ useEffect(() => { 2026-10-25T07:31:46.1157931Z ·  ───┬─── 2026-10-25T07:31:46.1158149Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-25T07:31:46.1158214Z 137 │ if (!hasStatus) { 2026-10-25T07:31:46.1158299Z 138 │ measuredWidthRef.current = null; 2026-10-25T07:31:46.1158373Z 139 │ capsuleWidth.value = null; 2026-10-25T07:31:46.1158448Z ·  ──────┬───── 2026-10-25T07:31:46.1158586Z · ╰── This modifies `capsuleWidth` 2026-10-25T07:31:46.1158642Z 140 │ } 2026-10-25T07:31:46.1158693Z ╰──── 2026-10-25T07:31:46.1159025Z  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-25T07:31:46.1159322Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-25T07:31:46.1159324Z 2026-10-25T07:31:46.1159521Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-25T07:31:46.1159694Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:132:5] 2026-10-25T07:31:46.1159884Z 124 │ const measuredWidthRef = useRef(null); 2026-10-25T07:31:46.1160024Z 125 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-25T07:31:46.1160149Z ·  ───────────────┬─────────────── 2026-10-25T07:31:46.1160387Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-25T07:31:46.1160493Z 126 │ const width = event.nativeEvent.layout.width; 2026-10-25T07:31:46.1160588Z 127 │ if (width === measuredWidthRef.current) { 2026-10-25T07:31:46.1160647Z 128 │ return; 2026-10-25T07:31:46.1160704Z 129 │ } 2026-10-25T07:31:46.1160810Z 130 │ const first = measuredWidthRef.current === null; 2026-10-25T07:31:46.1160895Z 131 │ measuredWidthRef.current = width; 2026-10-25T07:31:46.1161040Z 132 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-25T07:31:46.1161121Z ·  ──────┬───── 2026-10-25T07:31:46.1161253Z · ╰── This modifies `capsuleWidth` 2026-10-25T07:31:46.1161309Z 133 │ }; 2026-10-25T07:31:46.1161364Z ╰──── 2026-10-25T07:31:46.1161694Z  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-25T07:31:46.1161995Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-25T07:31:46.1161997Z 2026-10-25T07:31:46.1162255Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-25T07:31:46.1162397Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:67:5] 2026-10-25T07:31:46.1162502Z 65 │ const { id: attachmentId, fileUri } = attachment; 2026-10-25T07:31:46.1162565Z 66 │ useEffect(() => { 2026-10-25T07:31:46.1162639Z ·  ────┬──── 2026-10-25T07:31:46.1162768Z · ╰── This is the containing effect 2026-10-25T07:31:46.1162833Z 67 │ setUri(null); 2026-10-25T07:31:46.1162904Z ·  ───┬── 2026-10-25T07:31:46.1163067Z · ╰── Avoid calling setState() directly within an effect 2026-10-25T07:31:46.1163133Z 68 │ setError(null); 2026-10-25T07:31:46.1163186Z ╰──── 2026-10-25T07:31:46.1163785Z  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-25T07:31:46.1164105Z  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-25T07:31:46.1164108Z 2026-10-25T07:31:46.1164306Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-25T07:31:46.1164443Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:90:7] 2026-10-25T07:31:46.1164504Z 89 │ }; 2026-10-25T07:31:46.1164580Z 90 │ }, [attachmentId, fileUri]); 2026-10-25T07:31:46.1164698Z ·  ──────┬───── ───┬─── 2026-10-25T07:31:46.1164926Z · │ ╰── Unnecessary dependency `fileUri` 2026-10-25T07:31:46.1165101Z · ╰── Unnecessary dependency `attachmentId` 2026-10-25T07:31:46.1165235Z 91 │ const mimeType = videoMimeType(attachment) ?? attachment.mimeType; 2026-10-25T07:31:46.1165287Z ╰──── 2026-10-25T07:31:46.1165576Z  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-25T07:31:46.1165880Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.1165882Z 2026-10-25T07:31:46.1166095Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-25T07:31:46.1166239Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:212:34] 2026-10-25T07:31:46.1166308Z 211 │ useEffect(() => { 2026-10-25T07:31:46.1166422Z 212 │ if (!isFocused && hasSource) props.onRequestClose(); 2026-10-25T07:31:46.1166519Z ·  ──┬── 2026-10-25T07:31:46.1166669Z · ╰── Missing dependency `props` 2026-10-25T07:31:46.1166775Z 213 │ }, [isFocused, hasSource, props.onRequestClose]); 2026-10-25T07:31:46.1166887Z ·  ──────────┬───────── 2026-10-25T07:31:46.1167113Z · ╰── Overly precise dependency `props.onRequestClose`, use `props` instead 2026-10-25T07:31:46.1167183Z 214 │ const { source } = props; 2026-10-25T07:31:46.1167237Z ╰──── 2026-10-25T07:31:46.1167660Z  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-25T07:31:46.1167970Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.1167972Z 2026-10-25T07:31:46.1168337Z ⚠ 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-25T07:31:46.1168460Z ╭─[apps/server/src/auth/RpcAuthorization.ts:238:17] 2026-10-25T07:31:46.1168598Z 237 │ const requiredScopesForSettingsUpdate = (payload: unknown) => { 2026-10-25T07:31:46.1168733Z 238 │ const input = Schema.decodeUnknownSync(SettingsUpdate)(payload); 2026-10-25T07:31:46.1168841Z ·  ──────────────────────── 2026-10-25T07:31:46.1168978Z 239 │ const scopes = requiredScopesForServerSettingsPatch(input.patch); 2026-10-25T07:31:46.1169028Z ╰──── 2026-10-25T07:31:46.1169031Z 2026-10-25T07:31:46.1169389Z ⚠ 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-25T07:31:46.1169513Z ╭─[apps/server/src/auth/RpcAuthorization.ts:256:26] 2026-10-25T07:31:46.1169613Z 255 │ if (method === WS_METHODS.assetsCreateUrl) { 2026-10-25T07:31:46.1169816Z 256 │ const { resource } = Schema.decodeUnknownSync(AssetCreateUrlInput)(payload); 2026-10-25T07:31:46.1169928Z ·  ──────────────────────── 2026-10-25T07:31:46.1170045Z 257 │ return [ 2026-10-25T07:31:46.1170127Z ╰──── 2026-10-25T07:31:46.1170129Z 2026-10-25T07:31:46.1170327Z ⚠ eslint(no-unused-vars): Identifier 'identity' is imported but never used. 2026-10-25T07:31:46.1170431Z ╭─[apps/server/src/auth/http.ts:28:10] 2026-10-25T07:31:46.1170519Z 27 │ import * as Schema from "effect/Schema"; 2026-10-25T07:31:46.1170613Z 28 │ import { identity } from "effect/Function"; 2026-10-25T07:31:46.1170688Z ·  ────┬─── 2026-10-25T07:31:46.1170824Z · ╰── 'identity' is imported here 2026-10-25T07:31:46.1170906Z 29 │ import * as Layer from "effect/Layer"; 2026-10-25T07:31:46.1170961Z ╰──── 2026-10-25T07:31:46.1171059Z  help: Consider removing this import. 2026-10-25T07:31:46.1171062Z 2026-10-25T07:31:46.1171282Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-25T07:31:46.1171390Z ╭─[apps/mobile/src/Stack.tsx:1072:21] 2026-10-25T07:31:46.1171454Z 1071 │ } 2026-10-25T07:31:46.1171723Z ·  ───────────────────────────────────────────── 2026-10-25T07:31:46.1171807Z 1073 │ screenOptions={({ route }) => 2026-10-25T07:31:46.1171860Z ╰──── 2026-10-25T07:31:46.1172219Z  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-25T07:31:46.1172221Z 2026-10-25T07:31:46.1172421Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-25T07:31:46.1172573Z ╭─[apps/mobile/src/components/ComposerContextSheet.tsx:272:25] 2026-10-25T07:31:46.1172681Z 271 │ {record.elements?.map((element, index) => ( 2026-10-25T07:31:46.1172849Z 272 │ 2026-10-25T07:31:46.1172999Z ·  ─────────────────────────────────────────────────────── 2026-10-25T07:31:46.1173082Z 273 │ file.path === path)!; 2026-10-25T07:31:46.1174060Z 1786 │ const request = yield* Schema.decodeEffect(ReviewDiffPreviewInput)({ 2026-10-25T07:31:46.1174174Z ·  ─────────────────── 2026-10-25T07:31:46.1174240Z 1787 │ cwd, 2026-10-25T07:31:46.1174291Z ╰──── 2026-10-25T07:31:46.1174294Z 2026-10-25T07:31:46.1174533Z ⚠ unicorn(prefer-string-starts-ends-with): Prefer String#startsWith over a regex with a caret. 2026-10-25T07:31:46.1174658Z ╭─[apps/server/src/vcs/GitVcsDriverCore.ts:498:11] 2026-10-25T07:31:46.1174760Z 497 │ GIT_DIAGNOSTIC_LINE_PATTERN.test(line) || 2026-10-25T07:31:46.1174944Z 498 │ (!/^remote:/.test(line) && SSH_TRANSPORT_REFUSAL_PATTERN.test(line)), 2026-10-25T07:31:46.1175058Z ·  ─────────────── 2026-10-25T07:31:46.1175116Z 499 │ ) 2026-10-25T07:31:46.1175169Z ╰──── 2026-10-25T07:31:46.1175322Z  help: Replace `/^remote:/.test(line)` with `line.startsWith('remote:')`. 2026-10-25T07:31:46.1175324Z 2026-10-25T07:31:46.1175605Z ⚠ eslint(no-unused-vars): Variable 'legacyCredentials' is declared but never used. Unused variables should start with a '_'. 2026-10-25T07:31:46.1175763Z ╭─[packages/provider-cursor/src/server/credentialStore.test.ts:15:7] 2026-10-25T07:31:46.1175818Z 14 │ 2026-10-25T07:31:46.1175891Z 15 │ const legacyCredentials = { 2026-10-25T07:31:46.1175975Z ·  ────────┬──────── 2026-10-25T07:31:46.1176125Z · ╰── 'legacyCredentials' is declared here 2026-10-25T07:31:46.1176196Z 16 │ version: 1 as const, 2026-10-25T07:31:46.1176248Z ╰──── 2026-10-25T07:31:46.1176352Z  help: Consider removing this declaration. 2026-10-25T07:31:46.1176355Z 2026-10-25T07:31:46.1176495Z ⚠ react(refs): Cannot access refs during render 2026-10-25T07:31:46.1176613Z ╭─[apps/mobile/src/components/ui/Menu.tsx:54:36] 2026-10-25T07:31:46.1176789Z 53 │ const child = children as ReactElement>; 2026-10-25T07:31:46.1176963Z 54 │ ╭─▶ children = cloneElement(child, { 2026-10-25T07:31:46.1177069Z 55 │ │ onTouchStart: (event) => { 2026-10-25T07:31:46.1177271Z 56 │ │ // onPressIn can repeat within one gesture when a finger leaves and re-enters the row. 2026-10-25T07:31:46.1177401Z 57 │ │ menuPress.current.isPreparing = false; 2026-10-25T07:31:46.1177567Z 58 │ │ menuPress.current.suppressPress = menuPress.current.isOpen; 2026-10-25T07:31:46.1177679Z 59 │ │ pendingPress.current = null; 2026-10-25T07:31:46.1177795Z 60 │ │ child.props.onTouchStart?.(event); 2026-10-25T07:31:46.1177870Z 61 │ │ }, 2026-10-25T07:31:46.1177969Z 62 │ │ onPress: (event) => { 2026-10-25T07:31:46.1178180Z 63 │ │ // Accessibility clicks lack touch identifiers and must ignore previous touch cancellation. 2026-10-25T07:31:46.1178399Z 64 │ │ const isTouch = typeof event.nativeEvent.identifier === "number"; 2026-10-25T07:31:46.1178616Z 65 │ │ if (isTouch ? menuPress.current.suppressPress : menuPress.current.isOpen) { 2026-10-25T07:31:46.1178705Z 66 │ │ return; 2026-10-25T07:31:46.1178785Z 67 │ │ } 2026-10-25T07:31:46.1178924Z 68 │ │ if (isTouch && menuPress.current.isPreparing) { 2026-10-25T07:31:46.1179144Z 69 │ │ // A release can precede native display; let UIKit's display/cancel callback decide its outcome. 2026-10-25T07:31:46.1179242Z 70 │ │ event.persist(); 2026-10-25T07:31:46.1179398Z 71 │ │ pendingPress.current = () => child.props.onPress?.(event); 2026-10-25T07:31:46.1179484Z 72 │ │ return; 2026-10-25T07:31:46.1179566Z 73 │ │ } 2026-10-25T07:31:46.1179718Z 74 │ │ child.props.onPress?.(event); 2026-10-25T07:31:46.1179791Z 75 │ │ }, 2026-10-25T07:31:46.1179923Z 76 │ ├─▶ }); 2026-10-25T07:31:46.1180158Z · ╰──── Passing a ref to a function may read its value during render 2026-10-25T07:31:46.1180261Z 77 │ menuProps.onMenuInteractionStart = () => { 2026-10-25T07:31:46.1180314Z ╰──── 2026-10-25T07:31:46.1180779Z  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-25T07:31:46.1181073Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-25T07:31:46.1181078Z 2026-10-25T07:31:46.1181358Z ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'. 2026-10-25T07:31:46.1181490Z ╭─[packages/provider-cursor/src/server/auth.ts:249:20] 2026-10-25T07:31:46.1181549Z 248 │ }, 2026-10-25T07:31:46.1181632Z 249 │ (effect, flow, stopSessions) => 2026-10-25T07:31:46.1181723Z ·  ──────┬───── 2026-10-25T07:31:46.1181874Z · ╰── 'stopSessions' is declared here 2026-10-25T07:31:46.1181942Z 250 │ effect.pipe( 2026-10-25T07:31:46.1181996Z ╰──── 2026-10-25T07:31:46.1182103Z  help: Consider removing this parameter. 2026-10-25T07:31:46.1182109Z 2026-10-25T07:31:46.1182275Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-25T07:31:46.1182424Z ╭─[apps/server/src/provider/Drivers/CodexDriver.test.ts:460:14] 2026-10-25T07:31:46.1182478Z 459 │ 2026-10-25T07:31:46.1182585Z 460 │ for (const {} of ["direct", "wrapper"] as const) { 2026-10-25T07:31:46.1182656Z ·  ── 2026-10-25T07:31:46.1182714Z 461 │ } 2026-10-25T07:31:46.1182767Z ╰──── 2026-10-25T07:31:46.1182996Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-25T07:31:46.1182999Z 2026-10-25T07:31:46.1183217Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-25T07:31:46.1183397Z ╭─[scripts/lib/cli-external-packages.test.ts:104:11] 2026-10-25T07:31:46.1183499Z 103 │ const declared = { 2026-10-25T07:31:46.1183590Z 104 │ ...(manifest.dependencies ?? {}), 2026-10-25T07:31:46.1183702Z ·  ──────────────────────────────── 2026-10-25T07:31:46.1183803Z 105 │ ...(manifest.optionalDependencies ?? {}), 2026-10-25T07:31:46.1183857Z ╰──── 2026-10-25T07:31:46.1184119Z  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-25T07:31:46.1184121Z 2026-10-25T07:31:46.1184337Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-25T07:31:46.1184464Z ╭─[scripts/lib/cli-external-packages.test.ts:105:11] 2026-10-25T07:31:46.1184567Z 104 │ ...(manifest.dependencies ?? {}), 2026-10-25T07:31:46.1184713Z 105 │ ...(manifest.optionalDependencies ?? {}), 2026-10-25T07:31:46.1184838Z ·  ──────────────────────────────────────── 2026-10-25T07:31:46.1184936Z 106 │ ...(manifest.peerDependencies ?? {}), 2026-10-25T07:31:46.1184989Z ╰──── 2026-10-25T07:31:46.1185247Z  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-25T07:31:46.1185250Z 2026-10-25T07:31:46.1185463Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-25T07:31:46.1185590Z ╭─[scripts/lib/cli-external-packages.test.ts:106:11] 2026-10-25T07:31:46.1185691Z 105 │ ...(manifest.optionalDependencies ?? {}), 2026-10-25T07:31:46.1185793Z 106 │ ...(manifest.peerDependencies ?? {}), 2026-10-25T07:31:46.1185910Z ·  ──────────────────────────────────── 2026-10-25T07:31:46.1185971Z 107 │ }; 2026-10-25T07:31:46.1186024Z ╰──── 2026-10-25T07:31:46.1186281Z  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-25T07:31:46.1186283Z 2026-10-25T07:31:46.1186481Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable. 2026-10-25T07:31:46.1186604Z ╭─[apps/web/src/contextMenuFallback.test.ts:38:9] 2026-10-25T07:31:46.1186674Z 37 │ get isConnected() { 2026-10-25T07:31:46.1186763Z 38 │ let current: FakeElement | null = this; 2026-10-25T07:31:46.1186837Z ·  ─────── 2026-10-25T07:31:46.1186907Z 39 │ while (current?.parent) { 2026-10-25T07:31:46.1186967Z ╰──── 2026-10-25T07:31:46.1187241Z  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-25T07:31:46.1187243Z 2026-10-25T07:31:46.1187453Z ⚠ eslint(no-unused-vars): Identifier 'serverEnvironment' is imported but never used. 2026-10-25T07:31:46.1187570Z ╭─[apps/web/src/components/Sidebar.tsx:133:40] 2026-10-25T07:31:46.1187700Z 132 │ import { environmentPresentations } from "../state/presentation"; 2026-10-25T07:31:46.1187863Z 133 │ import { primaryServerKeybindingsAtom, serverEnvironment } from "../state/server"; 2026-10-25T07:31:46.1187983Z ·  ────────┬──────── 2026-10-25T07:31:46.1188218Z · ╰── 'serverEnvironment' is imported here 2026-10-25T07:31:46.1188371Z 134 │ import { environmentProjects } from "../state/projects"; 2026-10-25T07:31:46.1188421Z ╰──── 2026-10-25T07:31:46.1188522Z  help: Consider removing this import. 2026-10-25T07:31:46.1188524Z 2026-10-25T07:31:46.1188689Z ⚠ react(purity): Cannot call impure function during render 2026-10-25T07:31:46.1188808Z ╭─[apps/web/src/components/Sidebar.tsx:1130:11] 2026-10-25T07:31:46.1188905Z 1129 │ foldSearchQuery(threadSearchQuery), 2026-10-25T07:31:46.1188972Z 1130 │ Date.now(), 2026-10-25T07:31:46.1189053Z ·  ─────┬──── 2026-10-25T07:31:46.1189187Z · ╰── Cannot call impure function 2026-10-25T07:31:46.1189331Z 1131 │ // A list filter, as on mobile: a pick would move rows unexplained. 2026-10-25T07:31:46.1189389Z ╰──── 2026-10-25T07:31:46.1189704Z  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-25T07:31:46.1189998Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-25T07:31:46.1190000Z 2026-10-25T07:31:46.1190255Z ⚠ eslint(no-unused-vars): Function 'promptResponseHasMissingXAiStopReason' is declared but never used. 2026-10-25T07:31:46.1190406Z ╭─[packages/provider-grok/src/server/xaiAcpExtension.ts:1558:10] 2026-10-25T07:31:46.1190458Z 1557 │ 2026-10-25T07:31:46.1190668Z 1558 │ function promptResponseHasMissingXAiStopReason(response: EffectAcpSchema.PromptResponse): boolean { 2026-10-25T07:31:46.1190790Z ·  ──────────────────┬────────────────── 2026-10-25T07:31:46.1190993Z · ╰── 'promptResponseHasMissingXAiStopReason' is declared here 2026-10-25T07:31:46.1191069Z 1559 │ const meta = response._meta; 2026-10-25T07:31:46.1191120Z ╰──── 2026-10-25T07:31:46.1191225Z  help: Consider removing this declaration. 2026-10-25T07:31:46.1191228Z 2026-10-25T07:31:46.1191480Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-25T07:31:46.1191608Z ╭─[packages/provider-grok/src/server/adapter.ts:411:7] 2026-10-25T07:31:46.1191661Z 410 │ 2026-10-25T07:31:46.1191728Z 411 │ const layer: Layer.Layer< 2026-10-25T07:31:46.1191797Z ·  ──┬── 2026-10-25T07:31:46.1191926Z · ╰── 'layer' is declared here 2026-10-25T07:31:46.1192018Z 412 │ ProviderAdapter.ProviderAdapterV2, 2026-10-25T07:31:46.1192067Z ╰──── 2026-10-25T07:31:46.1192167Z  help: Consider removing this declaration. 2026-10-25T07:31:46.1192169Z 2026-10-25T07:31:46.1192334Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-25T07:31:46.1192522Z ╭─[packages/provider-opencode/src/server/OpenCodeRuntime.environment.test.ts:53:14] 2026-10-25T07:31:46.1192575Z 52 │ 2026-10-25T07:31:46.1192639Z 53 │ for (const {} of [ 2026-10-25T07:31:46.1192710Z ·  ── 2026-10-25T07:31:46.1192776Z 54 │ { healthy: true }, 2026-10-25T07:31:46.1192828Z ╰──── 2026-10-25T07:31:46.1193101Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-25T07:31:46.1193138Z 2026-10-25T07:31:46.1193279Z ⚠ react(refs): Cannot access refs during render 2026-10-25T07:31:46.1193429Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:148:27] 2026-10-25T07:31:46.1193608Z 147 │ 2026-10-25T07:31:46.1193686Z 148 │ {props.children(open)} 2026-10-25T07:31:46.1193776Z ·  ──┬─ 2026-10-25T07:31:46.1193935Z · ╰── Cannot access ref value during render 2026-10-25T07:31:46.1193999Z 149 │ 2026-10-25T07:31:46.1194051Z ╰──── 2026-10-25T07:31:46.1194516Z  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-25T07:31:46.1194801Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-25T07:31:46.1194807Z 2026-10-25T07:31:46.1194998Z ⚠ react(memo-dependencies): Found missing/extra memoization dependencies 2026-10-25T07:31:46.1195146Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:136:9] 2026-10-25T07:31:46.1195227Z 135 │ if (action.id !== undefined) { 2026-10-25T07:31:46.1195304Z 136 │ props.onPressAction?.({ 2026-10-25T07:31:46.1195374Z ·  ──┬── 2026-10-25T07:31:46.1195503Z · ╰── Missing dependency `props` 2026-10-25T07:31:46.1195602Z 137 │ nativeEvent: { event: action.id }, 2026-10-25T07:31:46.1195750Z 138 │ } as Parameters>[0]); 2026-10-25T07:31:46.1195807Z 139 │ } 2026-10-25T07:31:46.1195862Z 140 │ }, 2026-10-25T07:31:46.1195942Z 141 │ [close, props.onPressAction], 2026-10-25T07:31:46.1196036Z ·  ─────────┬───────── 2026-10-25T07:31:46.1196246Z · ╰── Overly precise dependency `props.onPressAction`, use `props` instead 2026-10-25T07:31:46.1196300Z 142 │ ); 2026-10-25T07:31:46.1196353Z ╰──── 2026-10-25T07:31:46.1196875Z  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-25T07:31:46.1197209Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.1197212Z 2026-10-25T07:31:46.1197394Z ⚠ eslint(no-unused-vars): Type 'Scope' is imported but never used. 2026-10-25T07:31:46.1197528Z ╭─[apps/server/src/provider/ProviderAuthService.ts:15:18] 2026-10-25T07:31:46.1197612Z 14 │ import * as Layer from "effect/Layer"; 2026-10-25T07:31:46.1197705Z 15 │ import type * as Scope from "effect/Scope"; 2026-10-25T07:31:46.1197784Z ·  ──┬── 2026-10-25T07:31:46.1197921Z · ╰── 'Scope' is imported here 2026-10-25T07:31:46.1198006Z 16 │ import * as Stream from "effect/Stream"; 2026-10-25T07:31:46.1198063Z ╰──── 2026-10-25T07:31:46.1198164Z  help: Consider removing this import. 2026-10-25T07:31:46.1198166Z 2026-10-25T07:31:46.1198408Z ⚠ eslint(no-unused-vars): Function 'normalizeTerminalContextSelection' is declared but never used. 2026-10-25T07:31:46.1198520Z ╭─[apps/web/src/lib/terminalContext.ts:56:10] 2026-10-25T07:31:46.1198571Z 55 │ 2026-10-25T07:31:46.1198669Z 56 │ function normalizeTerminalContextSelection( 2026-10-25T07:31:46.1198779Z ·  ────────────────┬──────────────── 2026-10-25T07:31:46.1198967Z · ╰── 'normalizeTerminalContextSelection' is declared here 2026-10-25T07:31:46.1199053Z 57 │ selection: TerminalContextSelection, 2026-10-25T07:31:46.1199102Z ╰──── 2026-10-25T07:31:46.1199212Z  help: Consider removing this declaration. 2026-10-25T07:31:46.1199217Z 2026-10-25T07:31:46.1199426Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-25T07:31:46.1199551Z ╭─[apps/web/src/lib/announce.browser.test.ts:41:46] 2026-10-25T07:31:46.1199605Z 40 │ 2026-10-25T07:31:46.1199721Z 41 │ expect(regionTexts()).toEqual([...first].reverse()); 2026-10-25T07:31:46.1199858Z ·  ─────── 2026-10-25T07:31:46.1199953Z 42 │ expect(regionTexts()).toContain("Claude"); 2026-10-25T07:31:46.1200005Z ╰──── 2026-10-25T07:31:46.1200259Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-25T07:31:46.1200261Z 2026-10-25T07:31:46.1200520Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-25T07:31:46.1200665Z ╭─[packages/provider-opencode/src/server/adapter.ts:3719:7] 2026-10-25T07:31:46.1200721Z 3718 │ 2026-10-25T07:31:46.1200917Z 3719 │ const layer: Layer.Layer = 2026-10-25T07:31:46.1200987Z ·  ──┬── 2026-10-25T07:31:46.1201113Z · ╰── 'layer' is declared here 2026-10-25T07:31:46.1201179Z 3720 │ Layer.effect( 2026-10-25T07:31:46.1201230Z ╰──── 2026-10-25T07:31:46.1201333Z  help: Consider removing this declaration. 2026-10-25T07:31:46.1201335Z 2026-10-25T07:31:46.1201588Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-25T07:31:46.1201767Z ╭─[apps/mobile/src/components/ProjectFavicon.tsx:171:5] 2026-10-25T07:31:46.1201989Z 166 │ const [activeFaviconRequest, setActiveFaviconRequest] = useState(null); 2026-10-25T07:31:46.1202059Z 167 │ useLayoutEffect(() => { 2026-10-25T07:31:46.1202135Z ·  ───────┬─────── 2026-10-25T07:31:46.1202265Z · ╰── This is the containing effect 2026-10-25T07:31:46.1202352Z 168 │ if (faviconRequest === null) return; 2026-10-25T07:31:46.1202407Z 169 │ 2026-10-25T07:31:46.1202538Z 170 │ const endRequest = beginProjectFaviconRequest(faviconRequest); 2026-10-25T07:31:46.1202631Z 171 │ setActiveFaviconRequest(faviconRequest); 2026-10-25T07:31:46.1202721Z ·  ───────────┬─────────── 2026-10-25T07:31:46.1202899Z · ╰── Avoid calling setState() directly within an effect 2026-10-25T07:31:46.1202969Z 172 │ return endRequest; 2026-10-25T07:31:46.1203022Z ╰──── 2026-10-25T07:31:46.1203611Z  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-25T07:31:46.1203931Z  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-25T07:31:46.1203934Z 2026-10-25T07:31:46.1204133Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-25T07:31:46.1204266Z ╭─[apps/mobile/src/components/ComposerEditor.tsx:82:6] 2026-10-25T07:31:46.1204325Z 81 │ }, 2026-10-25T07:31:46.1204388Z 82 │ [draftKey], 2026-10-25T07:31:46.1204463Z ·  ────┬─── 2026-10-25T07:31:46.1204599Z · ╰── Unnecessary dependency `draftKey` 2026-10-25T07:31:46.1204654Z 83 │ ); 2026-10-25T07:31:46.1204704Z ╰──── 2026-10-25T07:31:46.1204993Z  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-25T07:31:46.1205298Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.1205300Z 2026-10-25T07:31:46.1205726Z ⚠ 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-25T07:31:46.1205877Z ╭─[apps/server/src/provider/acp/AntigravityProtocol.ts:260:20] 2026-10-25T07:31:46.1205960Z 259 │ ...(update._meta !== undefined 2026-10-25T07:31:46.1206122Z 260 │ ? { _meta: Schema.is(Schema.Record(Schema.String, Schema.Json))(meta) ? meta : null } 2026-10-25T07:31:46.1206211Z ·  ───────── 2026-10-25T07:31:46.1206274Z 261 │ : {}), 2026-10-25T07:31:46.1206327Z ╰──── 2026-10-25T07:31:46.1206329Z 2026-10-25T07:31:46.1206492Z ⚠ eslint(no-control-regex): Unexpected control character 2026-10-25T07:31:46.1206680Z ╭─[apps/mobile/src/features/settings/SettingsProviderAccountsRouteScreen.tsx:220:46] 2026-10-25T07:31:46.1206868Z 219 │ 2026-10-25T07:31:46.1207037Z 220 │ {interaction.output.replace(/\x1b\[[0-?]*[ -/]*[@-~]/g, "")} 2026-10-25T07:31:46.1207147Z ·  ──┬─ 2026-10-25T07:31:46.1207312Z · ╰── 'U+001B' is a control character. 2026-10-25T07:31:46.1207376Z 221 │ 2026-10-25T07:31:46.1207428Z ╰──── 2026-10-25T07:31:46.1207659Z  help: Avoid matching control characters in regular expressions. If intentional, disable this rule for the expression. 2026-10-25T07:31:46.1207661Z 2026-10-25T07:31:46.1207867Z ⚠ eslint(no-unused-vars): Type 'ScheduledTaskDraft' is imported but never used. 2026-10-25T07:31:46.1208028Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:10:8] 2026-10-25T07:31:46.1208107Z  9 │ hasScheduledTaskDraftChanges, 2026-10-25T07:31:46.1208179Z 10 │ type ScheduledTaskDraft, 2026-10-25T07:31:46.1208268Z ·  ─────────┬──────── 2026-10-25T07:31:46.1208419Z · ╰── 'ScheduledTaskDraft' is imported here 2026-10-25T07:31:46.1208492Z 11 │ } from "./scheduledTaskDraft"; 2026-10-25T07:31:46.1208548Z ╰──── 2026-10-25T07:31:46.1208650Z  help: Consider removing this import. 2026-10-25T07:31:46.1208653Z 2026-10-25T07:31:46.1208833Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-25T07:31:46.1208990Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:81:85] 2026-10-25T07:31:46.1209087Z 80 │ const startEditor = startScheduledTaskEditor; 2026-10-25T07:31:46.1209273Z 81 │ const resetEditor = useCallback(() => startEditor(defaultEditor), [defaultEditor, startEditor]); 2026-10-25T07:31:46.1209420Z ·  ─────┬───── 2026-10-25T07:31:46.1209623Z · ╰── Unnecessary dependency `startEditor` 2026-10-25T07:31:46.1209712Z 82 │ const readEditor = useCallback( 2026-10-25T07:31:46.1209786Z ╰──── 2026-10-25T07:31:46.1210097Z  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-25T07:31:46.1210408Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.1210412Z 2026-10-25T07:31:46.1210591Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-25T07:31:46.1210749Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:102:7] 2026-10-25T07:31:46.1210812Z 101 │ setEditor, 2026-10-25T07:31:46.1210879Z 102 │ startEditor, 2026-10-25T07:31:46.1210956Z ·  ─────┬───── 2026-10-25T07:31:46.1211099Z · ╰── Unnecessary dependency `startEditor` 2026-10-25T07:31:46.1211164Z 103 │ hasChanges, 2026-10-25T07:31:46.1211214Z ╰──── 2026-10-25T07:31:46.1211523Z  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-25T07:31:46.1211876Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.1211931Z 2026-10-25T07:31:46.1212096Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-25T07:31:46.1212214Z ╭─[apps/server/src/processRunner.test.ts:264:14] 2026-10-25T07:31:46.1212266Z 263 │ 2026-10-25T07:31:46.1212374Z 264 │ for (const {} of ["timeout", "success"] as const) { 2026-10-25T07:31:46.1212445Z ·  ── 2026-10-25T07:31:46.1212499Z 265 │ } 2026-10-25T07:31:46.1212548Z ╰──── 2026-10-25T07:31:46.1212776Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-25T07:31:46.1212779Z 2026-10-25T07:31:46.1212974Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-25T07:31:46.1213151Z ╭─[apps/web/src/components/pullRequest/PullRequestChecksPopover.tsx:84:15] 2026-10-25T07:31:46.1213214Z 83 │
  • (count); 2026-10-25T07:31:46.1214382Z ·  ──────────────────────── 2026-10-25T07:31:46.1214484Z 187 │ for (let index = 0; index < count; index += 1) { 2026-10-25T07:31:46.1214537Z ╰──── 2026-10-25T07:31:46.1214947Z  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-25T07:31:46.1214950Z 2026-10-25T07:31:46.1215229Z ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'. 2026-10-25T07:31:46.1215364Z ╭─[apps/server/src/provider/AntigravityAuth.ts:303:20] 2026-10-25T07:31:46.1215423Z 302 │ }, 2026-10-25T07:31:46.1215506Z 303 │ (effect, flow, stopSessions) => 2026-10-25T07:31:46.1215599Z ·  ──────┬───── 2026-10-25T07:31:46.1215746Z · ╰── 'stopSessions' is declared here 2026-10-25T07:31:46.1215810Z 304 │ effect.pipe( 2026-10-25T07:31:46.1215863Z ╰──── 2026-10-25T07:31:46.1215964Z  help: Consider removing this parameter. 2026-10-25T07:31:46.1215967Z 2026-10-25T07:31:46.1216417Z ⚠ 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-25T07:31:46.1216593Z ╭─[packages/contracts/src/baseSchemas.test.ts:39:9] 2026-10-25T07:31:46.1216688Z 38 │ JSON.stringify( 2026-10-25T07:31:46.1216807Z 39 │ Schema.encodeUnknownSync(Schema.toCodecJson(Named))([ 2026-10-25T07:31:46.1216903Z ·  ──────────────────────── 2026-10-25T07:31:46.1216970Z 40 │ { name: "a" }, 2026-10-25T07:31:46.1217022Z ╰──── 2026-10-25T07:31:46.1217025Z 2026-10-25T07:31:46.1217225Z ⚠ eslint(no-unused-vars): Type 'ThreadRunSummary' is imported but never used. 2026-10-25T07:31:46.1217318Z ╭─[apps/web/src/types.ts:22:3] 2026-10-25T07:31:46.1217389Z 21 │ EnvironmentThreadShell, 2026-10-25T07:31:46.1217455Z 22 │ ThreadRunSummary, 2026-10-25T07:31:46.1217532Z ·  ────────┬─────── 2026-10-25T07:31:46.1217674Z · ╰── 'ThreadRunSummary' is imported here 2026-10-25T07:31:46.1217750Z 23 │ ThreadRuntimeSummary, 2026-10-25T07:31:46.1217806Z ╰──── 2026-10-25T07:31:46.1217906Z  help: Consider removing this import. 2026-10-25T07:31:46.1217908Z 2026-10-25T07:31:46.1218351Z ⚠ 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-25T07:31:46.1218489Z ╭─[packages/contracts/src/composerContext.test.ts:181:18] 2026-10-25T07:31:46.1218625Z 180 │ it("sends a message without the records the wire cannot carry", () => { 2026-10-25T07:31:46.1218804Z 181 │ const wire = Schema.encodeUnknownSync(Schema.toCodecJson(OrchestrationMessageContext))({ 2026-10-25T07:31:46.1218909Z ·  ──────────────────────── 2026-10-25T07:31:46.1218977Z 182 │ version: 1, 2026-10-25T07:31:46.1219033Z ╰──── 2026-10-25T07:31:46.1219036Z 2026-10-25T07:31:46.1219244Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-25T07:31:46.1219376Z ╭─[apps/web/src/lib/composerContextReferences.ts:90:40] 2026-10-25T07:31:46.1219453Z 89 │ let cursor = prompt.length; 2026-10-25T07:31:46.1219557Z 90 │ for (const occurrence of occurrences.reverse()) { 2026-10-25T07:31:46.1219694Z ·  ─────── 2026-10-25T07:31:46.1219775Z 91 │ let { start, end } = occurrence; 2026-10-25T07:31:46.1219829Z ╰──── 2026-10-25T07:31:46.1220083Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-25T07:31:46.1220089Z 2026-10-25T07:31:46.1220497Z ⚠ 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-25T07:31:46.1220641Z ╭─[packages/contracts/src/auth.test.ts:17:12] 2026-10-25T07:31:46.1220798Z 16 │ it("decodes legacy review credentials without offering them in new grants", () => { 2026-10-25T07:31:46.1220966Z 17 │ expect(Schema.decodeUnknownSync(AuthEnvironmentScopes)(["review:write"])).toEqual([ 2026-10-25T07:31:46.1221066Z ·  ──────────────────────── 2026-10-25T07:31:46.1221131Z 18 │ "review:write", 2026-10-25T07:31:46.1221183Z ╰──── 2026-10-25T07:31:46.1221186Z 2026-10-25T07:31:46.1221549Z ⚠ 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-25T07:31:46.1221662Z ╭─[packages/contracts/src/auth.test.ts:20:18] 2026-10-25T07:31:46.1221718Z 19 │ ]); 2026-10-25T07:31:46.1221876Z 20 │ expect(() => Schema.decodeUnknownSync(AuthGrantScopes)(["review:write"])).toThrow(); 2026-10-25T07:31:46.1221982Z ·  ──────────────────────── 2026-10-25T07:31:46.1222113Z 21 │ expect(AuthStandardClientScopes).not.toContain("review:write"); 2026-10-25T07:31:46.1222165Z ╰──── 2026-10-25T07:31:46.1222168Z 2026-10-25T07:31:46.1222521Z ⚠ 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-25T07:31:46.1222626Z ╭─[packages/contracts/src/auth.test.ts:57:21] 2026-10-25T07:31:46.1222802Z 56 │ it("ignores unknown response permissions without falling back to broader scopes", () => { 2026-10-25T07:31:46.1222927Z 57 │ const session = Schema.decodeUnknownSync(AuthSessionState)({ 2026-10-25T07:31:46.1223034Z ·  ──────────────────────── 2026-10-25T07:31:46.1223102Z 58 │ authenticated: true, 2026-10-25T07:31:46.1223153Z ╰──── 2026-10-25T07:31:46.1223155Z 2026-10-25T07:31:46.1223358Z ⚠ eslint(no-unused-vars): Type 'PullRequestChecks' is imported but never used. 2026-10-25T07:31:46.1223523Z ╭─[apps/web/src/components/pullRequest/pullRequestDetail.logic.ts:16:8] 2026-10-25T07:31:46.1223595Z 15 │ type PullRequestCheck, 2026-10-25T07:31:46.1223665Z 16 │ type PullRequestChecks, 2026-10-25T07:31:46.1223750Z ·  ────────┬──────── 2026-10-25T07:31:46.1223904Z · ╰── 'PullRequestChecks' is imported here 2026-10-25T07:31:46.1224040Z 17 │ type PullRequestChecksState as ContractPullRequestChecksState, 2026-10-25T07:31:46.1224092Z ╰──── 2026-10-25T07:31:46.1224186Z  help: Consider removing this import. 2026-10-25T07:31:46.1224188Z 2026-10-25T07:31:46.1224444Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-25T07:31:46.1224682Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:119:10] 2026-10-25T07:31:46.1224736Z 117 │ 2026-10-25T07:31:46.1224800Z 118 │ useEffect(() => { 2026-10-25T07:31:46.1224873Z ·  ────┬──── 2026-10-25T07:31:46.1225006Z · ╰── This is the containing effect 2026-10-25T07:31:46.1225086Z 119 │ void refreshNotifications(); 2026-10-25T07:31:46.1225279Z ·  ──────────┬───────── 2026-10-25T07:31:46.1225493Z · ╰── Avoid calling setState() directly within an effect 2026-10-25T07:31:46.1225635Z 120 │ const subscription = AppState.addEventListener("change", (state) => { 2026-10-25T07:31:46.1225692Z ╰──── 2026-10-25T07:31:46.1226286Z  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-25T07:31:46.1226606Z  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-25T07:31:46.1226612Z 2026-10-25T07:31:46.1226869Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-25T07:31:46.1227052Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:128:7] 2026-10-25T07:31:46.1227109Z 125 │ 2026-10-25T07:31:46.1227176Z 126 │ useEffect(() => { 2026-10-25T07:31:46.1227248Z ·  ────┬──── 2026-10-25T07:31:46.1227376Z · ╰── This is the containing effect 2026-10-25T07:31:46.1227444Z 127 │ if (!isLoaded) { 2026-10-25T07:31:46.1227534Z 128 │ setLiveActivityStatus("checking"); 2026-10-25T07:31:46.1227623Z ·  ──────────┬────────── 2026-10-25T07:31:46.1227794Z · ╰── Avoid calling setState() directly within an effect 2026-10-25T07:31:46.1227862Z 129 │ return; 2026-10-25T07:31:46.1227920Z ╰──── 2026-10-25T07:31:46.1228506Z  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-25T07:31:46.1228823Z  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-25T07:31:46.1228825Z 2026-10-25T07:31:46.1229024Z ⚠ eslint(no-unsafe-optional-chaining): Unsafe usage of optional chaining 2026-10-25T07:31:46.1229190Z ╭─[apps/server/src/orchestration-v2/ThreadLaunchService.test.ts:1849:8] 2026-10-25T07:31:46.1229263Z 1848 │ assert.equal( 2026-10-25T07:31:46.1229416Z 1849 │ (stored.context?.records[0] as { attachmentId: string }).attachmentId, 2026-10-25T07:31:46.1229521Z ·  ────────────────────────── 2026-10-25T07:31:46.1229602Z 1850 │ stored.attachments[0]?.id, 2026-10-25T07:31:46.1229685Z ╰──── 2026-10-25T07:31:46.1229857Z  help: If this short-circuits with 'undefined' the evaluation will throw TypeError 2026-10-25T07:31:46.1229860Z 2026-10-25T07:31:46.1230051Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-25T07:31:46.1230218Z ╭─[apps/web/src/components/pullRequest/PullRequestSummaryTab.tsx:803:17] 2026-10-25T07:31:46.1230283Z 802 │
    { 2026-10-25T07:31:46.1232046Z 174 │ rotation.value = withTiming(props.expanded ? expandedAngle : 0, { 2026-10-25T07:31:46.1232115Z ·  ────┬─── 2026-10-25T07:31:46.1232247Z · ╰── `rotation` cannot be modified 2026-10-25T07:31:46.1232346Z 175 │ duration: THREAD_DISCLOSURE_TRANSITION_MS, 2026-10-25T07:31:46.1232399Z ╰──── 2026-10-25T07:31:46.1232660Z  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-25T07:31:46.1232969Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-25T07:31:46.1232973Z 2026-10-25T07:31:46.1233168Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-25T07:31:46.1233319Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:1239:23] 2026-10-25T07:31:46.1233386Z 1238 │ { 2026-10-25T07:31:46.1237941Z ·  ────┬──── 2026-10-25T07:31:46.1238073Z · ╰── This is the containing effect 2026-10-25T07:31:46.1238135Z 261 │ stop(); 2026-10-25T07:31:46.1238205Z ·  ──┬─ 2026-10-25T07:31:46.1238370Z · ╰── Avoid calling setState() directly within an effect 2026-10-25T07:31:46.1238439Z 262 │ }, [orderVersion]); 2026-10-25T07:31:46.1238492Z ╰──── 2026-10-25T07:31:46.1239126Z  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-25T07:31:46.1239477Z  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-25T07:31:46.1239480Z 2026-10-25T07:31:46.1239704Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-25T07:31:46.1239896Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5] 2026-10-25T07:31:46.1239965Z 260 │ useEffect(() => { 2026-10-25T07:31:46.1240023Z 261 │ stop(); 2026-10-25T07:31:46.1240094Z ·  ──┬─ 2026-10-25T07:31:46.1240220Z · ╰── Missing dependency `stop` 2026-10-25T07:31:46.1240288Z 262 │ }, [orderVersion]); 2026-10-25T07:31:46.1240367Z ·  ──────┬───── 2026-10-25T07:31:46.1240518Z · ╰── Unnecessary dependency `orderVersion` 2026-10-25T07:31:46.1240585Z 263 │ useEffect( 2026-10-25T07:31:46.1240639Z ╰──── 2026-10-25T07:31:46.1241053Z  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-25T07:31:46.1241364Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.1241366Z 2026-10-25T07:31:46.1241510Z ⚠ react(refs): Cannot access refs during render 2026-10-25T07:31:46.1241668Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:96:9] 2026-10-25T07:31:46.1241751Z 95 │ const latest = useRef(props); 2026-10-25T07:31:46.1241822Z 96 │ latest.current = props; 2026-10-25T07:31:46.1241927Z ·  ───┬──────┬─── 2026-10-25T07:31:46.1242102Z · │ ╰── Cannot update ref value during render 2026-10-25T07:31:46.1242217Z · ╰── This value is a ref 2026-10-25T07:31:46.1242286Z 97 │ const gesture = useMemo( 2026-10-25T07:31:46.1242338Z ╰──── 2026-10-25T07:31:46.1242798Z  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-25T07:31:46.1243091Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-25T07:31:46.1243096Z 2026-10-25T07:31:46.1243240Z ⚠ react(refs): Cannot access refs during render 2026-10-25T07:31:46.1243402Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:104:18] 2026-10-25T07:31:46.1243468Z 103 │ .runOnJS(true) 2026-10-25T07:31:46.1243568Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-25T07:31:46.1243681Z ·  ───────────────┬────────────── 2026-10-25T07:31:46.1243881Z · ╰── Passing a ref to a function may read its value during render 2026-10-25T07:31:46.1244014Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-25T07:31:46.1244068Z ╰──── 2026-10-25T07:31:46.1244582Z  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-25T07:31:46.1244901Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-25T07:31:46.1244904Z 2026-10-25T07:31:46.1245046Z ⚠ react(refs): Cannot access refs during render 2026-10-25T07:31:46.1245204Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:105:19] 2026-10-25T07:31:46.1245302Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-25T07:31:46.1245434Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-25T07:31:46.1245575Z ·  ──────────────────────────┬───────────────────────── 2026-10-25T07:31:46.1245788Z · ╰── Passing a ref to a function may read its value during render 2026-10-25T07:31:46.1245912Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-25T07:31:46.1245966Z ╰──── 2026-10-25T07:31:46.1246421Z  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-25T07:31:46.1246705Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-25T07:31:46.1246709Z 2026-10-25T07:31:46.1246853Z ⚠ react(refs): Cannot access refs during render 2026-10-25T07:31:46.1247014Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:106:16] 2026-10-25T07:31:46.1247143Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-25T07:31:46.1247265Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-25T07:31:46.1247408Z ·  ──────────────────────────┬───────────────────────── 2026-10-25T07:31:46.1247608Z · ╰── Passing a ref to a function may read its value during render 2026-10-25T07:31:46.1247732Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-25T07:31:46.1247786Z ╰──── 2026-10-25T07:31:46.1248246Z  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-25T07:31:46.1248535Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-25T07:31:46.1248537Z 2026-10-25T07:31:46.1248676Z ⚠ react(refs): Cannot access refs during render 2026-10-25T07:31:46.1248834Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:107:21] 2026-10-25T07:31:46.1248954Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-25T07:31:46.1249074Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-25T07:31:46.1249274Z ·  ───────────────────────┬────────────────────── 2026-10-25T07:31:46.1249505Z · ╰── Passing a ref to a function may read its value during render 2026-10-25T07:31:46.1249577Z 108 │ [props.disabled], 2026-10-25T07:31:46.1249630Z ╰──── 2026-10-25T07:31:46.1250121Z  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-25T07:31:46.1250407Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-25T07:31:46.1250409Z 2026-10-25T07:31:46.1250549Z ⚠ react(refs): Cannot access refs during render 2026-10-25T07:31:46.1250714Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:249:9] 2026-10-25T07:31:46.1250829Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-25T07:31:46.1250936Z 249 │ latest.current = { rows, planners, moveThread }; 2026-10-25T07:31:46.1251041Z ·  ───┬──────┬─── 2026-10-25T07:31:46.1251216Z · │ ╰── Cannot update ref value during render 2026-10-25T07:31:46.1251332Z · ╰── This value is a ref 2026-10-25T07:31:46.1251387Z 250 │ 2026-10-25T07:31:46.1251440Z ╰──── 2026-10-25T07:31:46.1251900Z  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-25T07:31:46.1252186Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-25T07:31:46.1252191Z 2026-10-25T07:31:46.1252331Z ⚠ react(refs): Cannot access refs during render 2026-10-25T07:31:46.1252489Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:247:22] 2026-10-25T07:31:46.1252607Z 246 │ const [preview, setPreview] = useState(null); 2026-10-25T07:31:46.1252722Z 247 │ const translateY = useRef(new Animated.Value(0)).current; 2026-10-25T07:31:46.1252846Z ·  ──────────────────┬────────────────── 2026-10-25T07:31:46.1253014Z · ╰── Cannot access ref value during render 2026-10-25T07:31:46.1253131Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-25T07:31:46.1253187Z ╰──── 2026-10-25T07:31:46.1253641Z  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-25T07:31:46.1253926Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-25T07:31:46.1253928Z 2026-10-25T07:31:46.1254095Z ⚠ react(purity): Cannot call impure function during render 2026-10-25T07:31:46.1254252Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:324:16] 2026-10-25T07:31:46.1254318Z 323 │ update(0); 2026-10-25T07:31:46.1254453Z 324 │ let last = performance.now(); 2026-10-25T07:31:46.1254574Z ·  ────────┬──────── 2026-10-25T07:31:46.1254714Z · ╰── Cannot call impure function 2026-10-25T07:31:46.1254784Z 325 │ const tick = () => { 2026-10-25T07:31:46.1254838Z ╰──── 2026-10-25T07:31:46.1255134Z  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-25T07:31:46.1255422Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-25T07:31:46.1255427Z 2026-10-25T07:31:46.1255613Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-25T07:31:46.1255776Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:99:15] 2026-10-25T07:31:46.1255839Z  98 │ () => 2026-10-25T07:31:46.1255909Z  99 │ Gesture.Pan() 2026-10-25T07:31:46.1255982Z ·  ─┬─ 2026-10-25T07:31:46.1256114Z · ╰── `Pan` may be a component 2026-10-25T07:31:46.1256194Z 100 │ .enabled(!props.disabled) 2026-10-25T07:31:46.1256249Z ╰──── 2026-10-25T07:31:46.1256520Z  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-25T07:31:46.1256951Z  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-25T07:31:46.1256962Z 2026-10-25T07:31:46.1257146Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-25T07:31:46.1257305Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:108:5] 2026-10-25T07:31:46.1257374Z 103 │ .runOnJS(true) 2026-10-25T07:31:46.1257475Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-25T07:31:46.1257560Z ·  ───┬── 2026-10-25T07:31:46.1257990Z · ╰── 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-25T07:31:46.1258122Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-25T07:31:46.1258296Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-25T07:31:46.1258451Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-25T07:31:46.1258518Z 108 │ [props.disabled], 2026-10-25T07:31:46.1258602Z ·  ────────┬─────── 2026-10-25T07:31:46.1258787Z · ╰── This dependency list is missing values used by the callback 2026-10-25T07:31:46.1258844Z 109 │ ); 2026-10-25T07:31:46.1258896Z ╰──── 2026-10-25T07:31:46.1259097Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-25T07:31:46.1259405Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.1259408Z 2026-10-25T07:31:46.1259679Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-25T07:31:46.1259879Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts:10633:7] 2026-10-25T07:31:46.1259937Z 10632 │ 2026-10-25T07:31:46.1260008Z 10633 │ const layer: Layer.Layer< 2026-10-25T07:31:46.1260082Z ·  ──┬── 2026-10-25T07:31:46.1260210Z · ╰── 'layer' is declared here 2026-10-25T07:31:46.1260309Z 10634 │ ProviderAdapter.ProviderAdapterV2, 2026-10-25T07:31:46.1260361Z ╰──── 2026-10-25T07:31:46.1260468Z  help: Consider removing this declaration. 2026-10-25T07:31:46.1260470Z 2026-10-25T07:31:46.1260725Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-25T07:31:46.1260854Z ╭─[apps/server/src/serverRuntimeStartup.ts:720:7] 2026-10-25T07:31:46.1260911Z 719 │ 2026-10-25T07:31:46.1260990Z 720 │ const layer = layerWithOptions(); 2026-10-25T07:31:46.1261063Z ·  ──┬── 2026-10-25T07:31:46.1261186Z · ╰── 'layer' is declared here 2026-10-25T07:31:46.1261239Z ╰──── 2026-10-25T07:31:46.1261339Z  help: Consider removing this declaration. 2026-10-25T07:31:46.1261344Z 2026-10-25T07:31:46.1261527Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-25T07:31:46.1261653Z ╭─[packages/client-runtime/src/state/shell.ts:203:5] 2026-10-25T07:31:46.1261764Z 200 │ let waiting = yield* Ref.get(awaitingCompletion); 2026-10-25T07:31:46.1261833Z 201 │ let next = initial; 2026-10-25T07:31:46.1261905Z ·  ──┬─ 2026-10-25T07:31:46.1262028Z · ╰── From this accumulator 2026-10-25T07:31:46.1262109Z 202 │ let receivedSnapshot = false; 2026-10-25T07:31:46.1262186Z 203 │ for (const item of items) { 2026-10-25T07:31:46.1262255Z ·  ─┬─ 2026-10-25T07:31:46.1262359Z · ╰── For this loop 2026-10-25T07:31:46.1262449Z 204 │ if (item.kind === "synchronized") { 2026-10-25T07:31:46.1262518Z 205 │ waiting = false; 2026-10-25T07:31:46.1262608Z 206 │ if (Option.isSome(next.snapshot)) { 2026-10-25T07:31:46.1262724Z 207 │ next = { ...next, status: "live", error: Option.none() }; 2026-10-25T07:31:46.1262812Z ·  ───┬─── 2026-10-25T07:31:46.1262993Z · ╰── From this spread 2026-10-25T07:31:46.1263091Z 208 │ } 2026-10-25T07:31:46.1263146Z ╰──── 2026-10-25T07:31:46.1263296Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-25T07:31:46.1263453Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-25T07:31:46.1263456Z 2026-10-25T07:31:46.1263732Z ⚠ eslint(no-unused-vars): Variable 'layerDaemon' is declared but never used. Unused variables should start with a '_'. 2026-10-25T07:31:46.1263871Z ╭─[apps/server/src/orchestration-v2/EffectWorker.ts:920:7] 2026-10-25T07:31:46.1263927Z 919 │ 2026-10-25T07:31:46.1264112Z 920 │ const layerDaemon: Layer.Layer = Layer.effectDiscard( 2026-10-25T07:31:46.1264187Z ·  ─────┬───── 2026-10-25T07:31:46.1264327Z · ╰── 'layerDaemon' is declared here 2026-10-25T07:31:46.1264416Z 921 │ runDaemon.pipe(Effect.forkScoped), 2026-10-25T07:31:46.1264467Z ╰──── 2026-10-25T07:31:46.1264584Z  help: Consider removing this declaration. 2026-10-25T07:31:46.1264586Z 2026-10-25T07:31:46.1264828Z ⚠ eslint(no-unused-vars): Identifier 'HostProcess' is imported but never used. 2026-10-25T07:31:46.1264994Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:25:13] 2026-10-25T07:31:46.1265082Z 24 │ import * as Schema from "effect/Schema"; 2026-10-25T07:31:46.1265196Z 25 │ import * as HostProcess from "@t3tools/shared/HostProcess"; 2026-10-25T07:31:46.1265279Z ·  ─────┬───── 2026-10-25T07:31:46.1265426Z · ╰── 'HostProcess' is imported here 2026-10-25T07:31:46.1265482Z 26 │ 2026-10-25T07:31:46.1265535Z ╰──── 2026-10-25T07:31:46.1265631Z  help: Consider removing this import. 2026-10-25T07:31:46.1265634Z 2026-10-25T07:31:46.1265905Z ⚠ eslint(no-unused-vars): Variable 'serverConfig' is declared but never used. Unused variables should start with a '_'. 2026-10-25T07:31:46.1266068Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:124:11] 2026-10-25T07:31:46.1266151Z 123 │ const path = yield* Path.Path; 2026-10-25T07:31:46.1266265Z 124 │ const serverConfig = yield* ServerConfig.ServerConfig; 2026-10-25T07:31:46.1266352Z ·  ──────┬───── 2026-10-25T07:31:46.1266491Z · ╰── 'serverConfig' is declared here 2026-10-25T07:31:46.1266637Z 125 │ const serverSettings = yield* ServerSettings.ServerSettingsService; 2026-10-25T07:31:46.1266694Z ╰──── 2026-10-25T07:31:46.1266795Z  help: Consider removing this declaration. 2026-10-25T07:31:46.1266797Z 2026-10-25T07:31:46.1267069Z ⚠ eslint(no-unused-vars): Variable 'serverSettings' is declared but never used. Unused variables should start with a '_'. 2026-10-25T07:31:46.1267232Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:125:11] 2026-10-25T07:31:46.1267347Z 124 │ const serverConfig = yield* ServerConfig.ServerConfig; 2026-10-25T07:31:46.1267485Z 125 │ const serverSettings = yield* ServerSettings.ServerSettingsService; 2026-10-25T07:31:46.1267569Z ·  ───────┬────── 2026-10-25T07:31:46.1267712Z · ╰── 'serverSettings' is declared here 2026-10-25T07:31:46.1267913Z 126 │ const gitWorkflow = yield* GitWorkflowService.GitWorkflowService; 2026-10-25T07:31:46.1268002Z ╰──── 2026-10-25T07:31:46.1268103Z  help: Consider removing this declaration. 2026-10-25T07:31:46.1268106Z 2026-10-25T07:31:46.1268298Z ⚠ eslint(no-unused-vars): Type 'EnvironmentId' is imported but never used. 2026-10-25T07:31:46.1268435Z ╭─[packages/client-runtime/src/state/sharedSettings.ts:2:3] 2026-10-25T07:31:46.1268499Z 1 │ import type { 2026-10-25T07:31:46.1268564Z 2 │ EnvironmentId, 2026-10-25T07:31:46.1268636Z ·  ──────┬────── 2026-10-25T07:31:46.1268771Z · ╰── 'EnvironmentId' is imported here 2026-10-25T07:31:46.1268858Z 3 │ ExecutionEnvironmentCapabilities, 2026-10-25T07:31:46.1268915Z ╰──── 2026-10-25T07:31:46.1269013Z  help: Consider removing this import. 2026-10-25T07:31:46.1269022Z 2026-10-25T07:31:46.1269269Z ⚠ eslint(no-unused-vars): Variable 'I' is declared but never used. Unused variables should start with a '_'. 2026-10-25T07:31:46.1271981Z ╭─[apps/server/src/guest/http.ts:88:33] 2026-10-25T07:31:46.1272143Z 87 │ /** Server-sent events with a heartbeat, never cached or buffered on the way. */ 2026-10-25T07:31:46.1272225Z 88 │ const eventStreamResponse = ( 2026-10-25T07:31:46.1272316Z ·  ┬ 2026-10-25T07:31:46.1272454Z · ╰── 'I' is declared here 2026-10-25T07:31:46.1272525Z 89 │ events: Stream.Stream, 2026-10-25T07:31:46.1272574Z ╰──── 2026-10-25T07:31:46.1272677Z  help: Consider removing this declaration. 2026-10-25T07:31:46.1272679Z 2026-10-25T07:31:46.1272879Z ⚠ eslint(no-unused-vars): Identifier 'Option' is imported but never used. 2026-10-25T07:31:46.1273019Z ╭─[apps/server/src/guest/GuestShareService.test.ts:24:13] 2026-10-25T07:31:46.1273099Z 23 │ import * as Ref from "effect/Ref"; 2026-10-25T07:31:46.1273183Z 24 │ import * as Option from "effect/Option"; 2026-10-25T07:31:46.1273258Z ·  ───┬── 2026-10-25T07:31:46.1273389Z · ╰── 'Option' is imported here 2026-10-25T07:31:46.1273474Z 25 │ import * as Stream from "effect/Stream"; 2026-10-25T07:31:46.1273522Z ╰──── 2026-10-25T07:31:46.1273617Z  help: Consider removing this import. 2026-10-25T07:31:46.1273619Z 2026-10-25T07:31:46.1273842Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-25T07:31:46.1273983Z ╭─[apps/server/src/guest/GuestShareService.test.ts:733:50] 2026-10-25T07:31:46.1274134Z 732 │ yield* guestShares.submit(session, { shareId, text: `note ${index}` }, []); 2026-10-25T07:31:46.1274298Z 733 │ const [waiting] = (yield* waitingMessages).filter((next) => next.status === "pending"); 2026-10-25T07:31:46.1274408Z ·  ────── 2026-10-25T07:31:46.1274492Z 734 │ yield* orchestrator.dispatch({ 2026-10-25T07:31:46.1274541Z ╰──── 2026-10-25T07:31:46.1274708Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-25T07:31:46.1274711Z 2026-10-25T07:31:46.1274911Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-25T07:31:46.1275043Z ╭─[apps/mobile/src/features/review/ReviewSheet.tsx:456:7] 2026-10-25T07:31:46.1275191Z 455 │ showAuxiliaryPane("inspector"); 2026-10-25T07:31:46.1275337Z 456 │ }, [environmentId, showAuxiliaryPane, threadId]); 2026-10-25T07:31:46.1275480Z ·  ──────┬────── ────┬─── 2026-10-25T07:31:46.1275674Z · │ ╰── Unnecessary dependency `threadId` 2026-10-25T07:31:46.1275819Z · ╰── Unnecessary dependency `environmentId` 2026-10-25T07:31:46.1275878Z 457 │ const { 2026-10-25T07:31:46.1275928Z ╰──── 2026-10-25T07:31:46.1276219Z  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-25T07:31:46.1276538Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.1276544Z 2026-10-25T07:31:46.1276727Z ⚠ react(static-components): Cannot create components during render 2026-10-25T07:31:46.1276861Z ╭─[apps/mobile/src/features/review/ReviewSheet.tsx:724:20] 2026-10-25T07:31:46.1277017Z 491 │ // Expo may return null before registration or in older binaries; use the fallback. 2026-10-25T07:31:46.1277142Z 492 │ const NativeReviewDiffView = resolveNativeReviewDiffView(); 2026-10-25T07:31:46.1277259Z ·  ─────────────┬───────────── 2026-10-25T07:31:46.1277438Z · ╰── The component is created during render here 2026-10-25T07:31:46.1277592Z 493 │ const nativeReviewDiffViewRef = useRef(null); 2026-10-25T07:31:46.1277712Z 494 │ const showcasedReviewDrawRef = useRef(null); 2026-10-25T07:31:46.1277841Z 495 │ const [isPullRefreshing, setIsPullRefreshing] = useState(false); 2026-10-25T07:31:46.1277931Z 496 │ const handlePullToRefresh = async () => { 2026-10-25T07:31:46.1278007Z 497 │ setIsPullRefreshing(true); 2026-10-25T07:31:46.1278089Z 498 │ await refreshSelectedSection(); 2026-10-25T07:31:46.1278166Z 499 │ setIsPullRefreshing(false); 2026-10-25T07:31:46.1278219Z 500 │ }; 2026-10-25T07:31:46.1278359Z 501 │ const reviewFileNavigatorRef = useRef(null); 2026-10-25T07:31:46.1278501Z 502 │ const reviewFiles = parsedDiff.kind === "files" ? parsedDiff.files : []; 2026-10-25T07:31:46.1278606Z 503 │ const fileVisibility = useReviewFileVisibility({ 2026-10-25T07:31:46.1278697Z 504 │ threadKey: reviewCache.threadKey, 2026-10-25T07:31:46.1278787Z 505 │ sectionId: selectedSection?.id ?? null, 2026-10-25T07:31:46.1278856Z 506 │ files: reviewFiles, 2026-10-25T07:31:46.1278954Z 507 │ cachedExpandedFileIds: selectedSection?.id 2026-10-25T07:31:46.1279083Z 508 │ ? reviewCache.expandedFileIdsBySection[selectedSection.id] 2026-10-25T07:31:46.1279147Z 509 │ : undefined, 2026-10-25T07:31:46.1279242Z 510 │ cachedViewedFileIds: selectedSection?.id 2026-10-25T07:31:46.1279365Z 511 │ ? reviewCache.viewedFileIdsBySection[selectedSection.id] 2026-10-25T07:31:46.1279427Z 512 │ : undefined, 2026-10-25T07:31:46.1279480Z 513 │ }); 2026-10-25T07:31:46.1279700Z 514 │ const { collapsedFileIds, toggleExpandedFile, toggleViewedFile, viewedFileIds } = fileVisibility; 2026-10-25T07:31:46.1279831Z 515 │ const commentSelection = useReviewCommentSelectionController({ 2026-10-25T07:31:46.1279943Z 516 │ environmentId, 2026-10-25T07:31:46.1280033Z 517 │ threadId, 2026-10-25T07:31:46.1280098Z 518 │ selectedSection, 2026-10-25T07:31:46.1280169Z 519 │ nativeReviewDiffData, 2026-10-25T07:31:46.1280226Z 520 │ }); 2026-10-25T07:31:46.1280331Z 521 │ const nativeBridge = useNativeReviewDiffBridge({ 2026-10-25T07:31:46.1280414Z 522 │ threadKey: reviewCache.threadKey, 2026-10-25T07:31:46.1280506Z 523 │ sectionId: selectedSection?.id ?? null, 2026-10-25T07:31:46.1280582Z 524 │ diff: selectedSection?.diff, 2026-10-25T07:31:46.1280664Z 525 │ data: nativeReviewDiffData, 2026-10-25T07:31:46.1280731Z 526 │ collapsedFileIds, 2026-10-25T07:31:46.1280790Z 527 │ viewedFileIds, 2026-10-25T07:31:46.1280903Z 528 │ selectedRowIds: commentSelection.selectedRowIds, 2026-10-25T07:31:46.1280997Z 529 │ canHighlight: parsedDiff.kind === "files", 2026-10-25T07:31:46.1281055Z 530 │ }); 2026-10-25T07:31:46.1281128Z 531 │ const showcaseReviewKey = 2026-10-25T07:31:46.1281260Z 532 │ SHOWCASE_ENABLED && parsedDiff.kind === "files" && selectedSection 2026-10-25T07:31:46.1281468Z 533 │ ? `${reviewCache.threadKey}:${selectedSection.id}:${nativeBridge.tokensResetKey}:${nativeBridge.themeId}` 2026-10-25T07:31:46.1281529Z 534 │ : null; 2026-10-25T07:31:46.1281693Z 535 │ const handleNativeDebug = (event: NativeSyntheticEvent>) => { 2026-10-25T07:31:46.1281769Z 536 │ nativeBridge.onDebug(event); 2026-10-25T07:31:46.1281827Z 537 │ if ( 2026-10-25T07:31:46.1281906Z 538 │ showcaseReviewKey === null || 2026-10-25T07:31:46.1282024Z 539 │ showcasedReviewDrawRef.current === showcaseReviewKey || 2026-10-25T07:31:46.1282129Z 540 │ !isNativeReviewDiffDrawEvent(event.nativeEvent) 2026-10-25T07:31:46.1282190Z 541 │ ) { 2026-10-25T07:31:46.1282252Z 542 │ return; 2026-10-25T07:31:46.1282306Z 543 │ } 2026-10-25T07:31:46.1282413Z 544 │ showcasedReviewDrawRef.current = showcaseReviewKey; 2026-10-25T07:31:46.1282574Z 545 │ reportShowcaseSceneRendered({ scene: "review", themeId: nativeBridge.themeId }); 2026-10-25T07:31:46.1282628Z 546 │ }; 2026-10-25T07:31:46.1282680Z 547 │ 2026-10-25T07:31:46.1282797Z 548 │ const handleSelectFile = async (fileId: string | null) => { 2026-10-25T07:31:46.1282875Z 549 │ loadVisibleFile(fileId, true); 2026-10-25T07:31:46.1282962Z 550 │ commentSelection.clearSelection(); 2026-10-25T07:31:46.1283080Z 551 │ if (fileId !== null && collapsedFileIds.includes(fileId)) { 2026-10-25T07:31:46.1283158Z 552 │ toggleExpandedFile(fileId); 2026-10-25T07:31:46.1283210Z 553 │ } 2026-10-25T07:31:46.1283324Z 554 │ const nativeView = nativeReviewDiffViewRef.current; 2026-10-25T07:31:46.1283399Z 555 │ if (!nativeView) return; 2026-10-25T07:31:46.1283491Z 556 │ const result = await settlePromise(() => 2026-10-25T07:31:46.1283663Z 557 │ fileId === null ? nativeView.scrollToTop(true) : nativeView.scrollToFile(fileId, true), 2026-10-25T07:31:46.1283716Z 558 │ ); 2026-10-25T07:31:46.1283804Z 559 │ if (AsyncResult.isFailure(result)) { 2026-10-25T07:31:46.1283983Z 560 │ console.error("[review] Failed to navigate to diff file", squashAtomCommandFailure(result)); 2026-10-25T07:31:46.1284036Z 561 │ } 2026-10-25T07:31:46.1284087Z 562 │ }; 2026-10-25T07:31:46.1284169Z 563 │ const handleVisibleFileChange = ( 2026-10-25T07:31:46.1284299Z 564 │ event: NativeSyntheticEvent<{ readonly fileId?: string | null }>, 2026-10-25T07:31:46.1284356Z 565 │ ) => { 2026-10-25T07:31:46.1284516Z 566 │ loadVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-25T07:31:46.1284718Z 567 │ reviewFileNavigatorRef.current?.setVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-25T07:31:46.1284771Z 568 │ }; 2026-10-25T07:31:46.1284849Z 569 │ const renderInspector = () => ( 2026-10-25T07:31:46.1284916Z 570 │ void handleSelectFile(fileId)} 2026-10-25T07:31:46.1285426Z 576 │ /> 2026-10-25T07:31:46.1285482Z 577 │ ); 2026-10-25T07:31:46.1285536Z 578 │ 2026-10-25T07:31:46.1285722Z 579 │ const handleNativeToggleFile = (event: NativeSyntheticEvent<{ readonly fileId?: string }>) => { 2026-10-25T07:31:46.1285808Z 580 │ const { fileId } = event.nativeEvent; 2026-10-25T07:31:46.1285872Z 581 │ if (fileId) { 2026-10-25T07:31:46.1285954Z 582 │ loadVisibleFile(fileId, true); 2026-10-25T07:31:46.1286033Z 583 │ toggleExpandedFile(fileId); 2026-10-25T07:31:46.1286084Z 584 │ } 2026-10-25T07:31:46.1286137Z 585 │ }; 2026-10-25T07:31:46.1286192Z 586 │ 2026-10-25T07:31:46.1286280Z 587 │ const handleNativeToggleViewedFile = ( 2026-10-25T07:31:46.1286394Z 588 │ event: NativeSyntheticEvent<{ readonly fileId?: string }>, 2026-10-25T07:31:46.1286451Z 589 │ ) => { 2026-10-25T07:31:46.1286536Z 590 │ const { fileId } = event.nativeEvent; 2026-10-25T07:31:46.1286599Z 591 │ if (fileId) { 2026-10-25T07:31:46.1286677Z 592 │ toggleViewedFile(fileId); 2026-10-25T07:31:46.1286729Z 593 │ } 2026-10-25T07:31:46.1286790Z 594 │ }; 2026-10-25T07:31:46.1286844Z 595 │ 2026-10-25T07:31:46.1286915Z 596 │ const parsedDiffNotice = 2026-10-25T07:31:46.1287072Z 597 │ parsedDiff.kind === "files" || parsedDiff.kind === "raw" ? parsedDiff.notice : null; 2026-10-25T07:31:46.1287192Z 598 │ const hasCachedSelectedDiff = selectedSection?.diff != null; 2026-10-25T07:31:46.1287346Z 599 │ const hasAnyCachedDiff = reviewSections.some((section) => section.diff != null); 2026-10-25T07:31:46.1287464Z 600 │ const sectionMenu = buildReviewSectionMenu(reviewSections); 2026-10-25T07:31:46.1287620Z 601 │ const { showConnectionNotice, showSectionToolbar } = resolveReviewAvailability({ 2026-10-25T07:31:46.1287726Z 602 │ hasEnvironmentPresentation: environment.isReady, 2026-10-25T07:31:46.1287826Z 603 │ isEnvironmentConnected: isEnvironmentReady, 2026-10-25T07:31:46.1287896Z 604 │ hasCachedSelectedDiff, 2026-10-25T07:31:46.1288018Z 605 │ hasAnyCachedDiff, 2026-10-25T07:31:46.1288101Z 606 │ }); 2026-10-25T07:31:46.1288189Z 607 │ const handleRetryEnvironment = () => { 2026-10-25T07:31:46.1288274Z 608 │ void retryEnvironment(environmentId); 2026-10-25T07:31:46.1288326Z 609 │ }; 2026-10-25T07:31:46.1288408Z 610 │ const handleReturnToThread = () => { 2026-10-25T07:31:46.1288485Z 611 │ if (navigation.canGoBack()) { 2026-10-25T07:31:46.1288555Z 612 │ navigation.goBack(); 2026-10-25T07:31:46.1288615Z 613 │ return; 2026-10-25T07:31:46.1288669Z 614 │ } 2026-10-25T07:31:46.1288731Z 615 │ selectDetail({ 2026-10-25T07:31:46.1288800Z 616 │ name: "Thread", 2026-10-25T07:31:46.1288951Z 617 │ params: { environmentId: String(environmentId), threadId: String(threadId) }, 2026-10-25T07:31:46.1289007Z 618 │ }); 2026-10-25T07:31:46.1289060Z 619 │ }; 2026-10-25T07:31:46.1289143Z 620 │ const androidHeaderSubtitle = [ 2026-10-25T07:31:46.1289216Z 621 │ selectedSection?.title, 2026-10-25T07:31:46.1289295Z 622 │ headerDiffSummary.additions, 2026-10-25T07:31:46.1289371Z 623 │ headerDiffSummary.deletions, 2026-10-25T07:31:46.1289424Z 624 │ ] 2026-10-25T07:31:46.1289529Z 625 │ .filter((part): part is string => Boolean(part)) 2026-10-25T07:31:46.1289592Z 626 │ .join(" · "); 2026-10-25T07:31:46.1289643Z 627 │ 2026-10-25T07:31:46.1289753Z 628 │ const showChangedFilesPane = 2026-10-25T07:31:46.1289824Z 629 │ !showConnectionNotice && 2026-10-25T07:31:46.1289899Z 630 │ selectedSection !== null && 2026-10-25T07:31:46.1289977Z 631 │ parsedDiff.kind === "files" && 2026-10-25T07:31:46.1290055Z 632 │ NativeReviewDiffView !== null; 2026-10-25T07:31:46.1290230Z 633 │ useRegisterWorkspaceInspector(showChangedFilesPane ? renderInspector : undefined); 2026-10-25T07:31:46.1290400Z 634 │ const showChangedFilesToggle = panes.supportsAuxiliaryPane && showChangedFilesPane; 2026-10-25T07:31:46.1290452Z 635 │ 2026-10-25T07:31:46.1290521Z 636 │ const listHeader = (() => { 2026-10-25T07:31:46.1290607Z 637 │ const children: ReactElement[] = []; 2026-10-25T07:31:46.1290659Z 638 │ 2026-10-25T07:31:46.1290723Z 639 │ if (error) { 2026-10-25T07:31:46.1290791Z 640 │ children.push( 2026-10-25T07:31:46.1290854Z 641 │ 2026-10-25T07:31:46.1291505Z 648 │ Review unavailable 2026-10-25T07:31:46.1291656Z 649 │ {error} 2026-10-25T07:31:46.1291718Z 650 │ , 2026-10-25T07:31:46.1291774Z 651 │ ); 2026-10-25T07:31:46.1291829Z 652 │ } 2026-10-25T07:31:46.1291881Z 653 │ 2026-10-25T07:31:46.1291949Z 654 │ if (parsedDiffNotice) { 2026-10-25T07:31:46.1292108Z 655 │ children.push(); 2026-10-25T07:31:46.1292162Z 656 │ } 2026-10-25T07:31:46.1292213Z 657 │ 2026-10-25T07:31:46.1292287Z 658 │ if (children.length === 0) { 2026-10-25T07:31:46.1292352Z 659 │ return null; 2026-10-25T07:31:46.1292405Z 660 │ } 2026-10-25T07:31:46.1292512Z 661 │ 2026-10-25T07:31:46.1292608Z 662 │ return <>{children}; 2026-10-25T07:31:46.1292663Z 663 │ })(); 2026-10-25T07:31:46.1292732Z 664 │ const headerSubtitle = [ 2026-10-25T07:31:46.1292809Z 665 │ headerDiffSummary.additions, 2026-10-25T07:31:46.1292884Z 666 │ headerDiffSummary.deletions, 2026-10-25T07:31:46.1292965Z 667 │ pendingReviewCommentCount > 0 2026-10-25T07:31:46.1293136Z 668 │ ? `${pendingReviewCommentCount} comment${pendingReviewCommentCount === 1 ? "" : "s"}` 2026-10-25T07:31:46.1293196Z 669 │ : null, 2026-10-25T07:31:46.1293249Z 670 │ ] 2026-10-25T07:31:46.1293312Z 671 │ .filter(Boolean) 2026-10-25T07:31:46.1293377Z 672 │ .join(" · "); 2026-10-25T07:31:46.1293509Z 673 │ const headerTitleText = selectedSection?.title ?? "Review changes"; 2026-10-25T07:31:46.1293562Z 674 │ 2026-10-25T07:31:46.1293625Z 675 │ return ( 2026-10-25T07:31:46.1293684Z 676 │ <> 2026-10-25T07:31:46.1293748Z 677 │ 2026-10-25T07:31:46.1295052Z 693 │ 2026-10-25T07:31:46.1295123Z 694 │ 2026-10-25T07:31:46.1295242Z 695 │ 2026-10-25T07:31:46.1295321Z 696 │ {showConnectionNotice ? ( 2026-10-25T07:31:46.1295457Z 697 │ 2026-10-25T07:31:46.1295548Z 698 │ 2026-10-25T07:31:46.1296546Z 710 │ 2026-10-25T07:31:46.1296702Z 711 │ ) : selectedSection && parsedDiff.kind === "files" && NativeReviewDiffView ? ( 2026-10-25T07:31:46.1296762Z 712 │ 2026-10-25T07:31:46.1297387Z 718 │ 2026-10-25T07:31:46.1297740Z 722 │ {listHeader} 2026-10-25T07:31:46.1297863Z 723 │ 2026-10-25T07:31:46.1297943Z 724 │ { 2026-10-25T07:31:46.1303161Z ·  ────┬──── 2026-10-25T07:31:46.1303286Z · ╰── This is the containing effect 2026-10-25T07:31:46.1303384Z 52 │ traceDiffHighlight("viewport-reset", { 2026-10-25T07:31:46.1303476Z 53 │ reset: diffHighlightTraceId(resetKey), 2026-10-25T07:31:46.1303538Z 54 │ enabled, 2026-10-25T07:31:46.1303604Z 55 │ rows: rows.length, 2026-10-25T07:31:46.1303662Z 56 │ }); 2026-10-25T07:31:46.1303752Z 57 │ const previousRange = scheduler.reset(); 2026-10-25T07:31:46.1303849Z 58 │ highlightedRowIdsRef.current = new Set(); 2026-10-25T07:31:46.1303932Z 59 │ pendingPatchesRef.current = []; 2026-10-25T07:31:46.1304037Z 60 │ setViewport({ scope: viewportScope, range: null }); 2026-10-25T07:31:46.1304118Z ·  ─────┬───── 2026-10-25T07:31:46.1304289Z · ╰── Avoid calling setState() directly within an effect 2026-10-25T07:31:46.1304403Z 61 │ setTokensPatchJson(createEmptyTokenPatch(resetKey)); 2026-10-25T07:31:46.1304453Z ╰──── 2026-10-25T07:31:46.1305115Z  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-25T07:31:46.1305436Z  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-25T07:31:46.1305438Z 2026-10-25T07:31:46.1305700Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-25T07:31:46.1305890Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:107:5] 2026-10-25T07:31:46.1305945Z 104 │ 2026-10-25T07:31:46.1306008Z 105 │ useEffect(() => { 2026-10-25T07:31:46.1306080Z ·  ────┬──── 2026-10-25T07:31:46.1306214Z · ╰── This is the containing effect 2026-10-25T07:31:46.1306297Z 106 │ clearReviewCommentTarget(); 2026-10-25T07:31:46.1306393Z 107 │ setPendingNativeCommentSelection(null); 2026-10-25T07:31:46.1306502Z ·  ────────────────┬─────────────── 2026-10-25T07:31:46.1306679Z · ╰── Avoid calling setState() directly within an effect 2026-10-25T07:31:46.1306825Z 108 │ }, [selectedSection?.id]); 2026-10-25T07:31:46.1306917Z ╰──── 2026-10-25T07:31:46.1307504Z  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-25T07:31:46.1307824Z  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-25T07:31:46.1307826Z 2026-10-25T07:31:46.1308085Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-25T07:31:46.1308276Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:112:7] 2026-10-25T07:31:46.1308335Z 109 │ 2026-10-25T07:31:46.1308400Z 110 │ useEffect(() => { 2026-10-25T07:31:46.1308469Z ·  ────┬──── 2026-10-25T07:31:46.1308599Z · ╰── This is the containing effect 2026-10-25T07:31:46.1308688Z 111 │ if (activeCommentTarget === null) { 2026-10-25T07:31:46.1308789Z 112 │ setPendingNativeCommentSelection(null); 2026-10-25T07:31:46.1308895Z ·  ────────────────┬─────────────── 2026-10-25T07:31:46.1309075Z · ╰── Avoid calling setState() directly within an effect 2026-10-25T07:31:46.1309132Z 113 │ } 2026-10-25T07:31:46.1309187Z ╰──── 2026-10-25T07:31:46.1309810Z  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-25T07:31:46.1310131Z  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-25T07:31:46.1310133Z 2026-10-25T07:31:46.1310332Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-25T07:31:46.1310515Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:108:7] 2026-10-25T07:31:46.1310613Z 107 │ setPendingNativeCommentSelection(null); 2026-10-25T07:31:46.1310687Z 108 │ }, [selectedSection?.id]); 2026-10-25T07:31:46.1310776Z ·  ─────────┬───────── 2026-10-25T07:31:46.1310942Z · ╰── Unnecessary dependency `selectedSection?.id` 2026-10-25T07:31:46.1311000Z 109 │ 2026-10-25T07:31:46.1311055Z ╰──── 2026-10-25T07:31:46.1311345Z  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-25T07:31:46.1311645Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.1311651Z 2026-10-25T07:31:46.1311929Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-25T07:31:46.1312098Z ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:469:19] 2026-10-25T07:31:46.1312215Z 468 │ onFilters, 2026-10-25T07:31:46.1312313Z 469 │ authorOptions = [], 2026-10-25T07:31:46.1312388Z ·  ── 2026-10-25T07:31:46.1312458Z 470 │ labelOptions = [], 2026-10-25T07:31:46.1312511Z ╰──── 2026-10-25T07:31:46.1312825Z  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-25T07:31:46.1312828Z 2026-10-25T07:31:46.1313107Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-25T07:31:46.1313272Z ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:470:18] 2026-10-25T07:31:46.1313339Z 469 │ authorOptions = [], 2026-10-25T07:31:46.1313405Z 470 │ labelOptions = [], 2026-10-25T07:31:46.1313486Z ·  ── 2026-10-25T07:31:46.1313553Z 471 │ optionScope, 2026-10-25T07:31:46.1313602Z ╰──── 2026-10-25T07:31:46.1313915Z  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-25T07:31:46.1313917Z 2026-10-25T07:31:46.1314113Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-25T07:31:46.1314266Z ╭─[apps/mobile/src/features/review/ReviewCommentCard.tsx:223:31] 2026-10-25T07:31:46.1314376Z 222 │ ? snippetTokens.map((line, lineIndex) => ( 2026-10-25T07:31:46.1314470Z 223 │ 2026-10-25T07:31:46.1314578Z ·  ─────────────── 2026-10-25T07:31:46.1314679Z 224 │ {lineIndex > 0 ? "\n" : ""} 2026-10-25T07:31:46.1314733Z ╰──── 2026-10-25T07:31:46.1314876Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-25T07:31:46.1314882Z 2026-10-25T07:31:46.1315072Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-25T07:31:46.1315219Z ╭─[apps/mobile/src/features/review/ReviewCommentCard.tsx:227:25] 2026-10-25T07:31:46.1315296Z 226 │ { 2026-10-25T07:31:46.1316603Z 123 │ const snapshot = Schema.decodeUnknownSync(BoundedJson)(boundedBody(true)); 2026-10-25T07:31:46.1316710Z ·  ──────────────────────── 2026-10-25T07:31:46.1316852Z 124 │ return Schema.encodeSync(BoundedJson)({ ...snapshot, idTable: true }); 2026-10-25T07:31:46.1316902Z ╰──── 2026-10-25T07:31:46.1316905Z 2026-10-25T07:31:46.1317258Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.encodeSync(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-25T07:31:46.1317444Z ╭─[packages/client-runtime/src/state/boundedThreadSnapshotHttp.test.ts:124:10] 2026-10-25T07:31:46.1317591Z 123 │ const snapshot = Schema.decodeUnknownSync(BoundedJson)(boundedBody(true)); 2026-10-25T07:31:46.1317729Z 124 │ return Schema.encodeSync(BoundedJson)({ ...snapshot, idTable: true }); 2026-10-25T07:31:46.1317814Z ·  ───────────────── 2026-10-25T07:31:46.1317869Z 125 │ }; 2026-10-25T07:31:46.1317921Z ╰──── 2026-10-25T07:31:46.1317923Z 2026-10-25T07:31:46.1318090Z ⚠ react(purity): Cannot call impure function during render 2026-10-25T07:31:46.1318235Z ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:373:47] 2026-10-25T07:31:46.1318368Z 372 │ const { open, onOpenChange, onSnooze, timestampFormat } = props; 2026-10-25T07:31:46.1318523Z 373 │ const presets = open ? resolveSnoozePresets(new Date(), timestampFormat) : []; 2026-10-25T07:31:46.1318638Z ·  ─────┬──── 2026-10-25T07:31:46.1318800Z · ╰── Cannot call impure function 2026-10-25T07:31:46.1318862Z 374 │ return ( 2026-10-25T07:31:46.1318913Z ╰──── 2026-10-25T07:31:46.1319188Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-25T07:31:46.1319483Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-25T07:31:46.1319485Z 2026-10-25T07:31:46.1319667Z ⚠ react(purity): Cannot call impure function during render 2026-10-25T07:31:46.1319854Z ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:860:39] 2026-10-25T07:31:46.1319947Z 859 │ if (snoozeGateClock.thread !== thread) { 2026-10-25T07:31:46.1320075Z 860 │ setSnoozeGateClock({ thread, now: new Date().toISOString() }); 2026-10-25T07:31:46.1320185Z ·  ─────┬──── 2026-10-25T07:31:46.1320341Z · ╰── Cannot call impure function 2026-10-25T07:31:46.1320396Z 861 │ } 2026-10-25T07:31:46.1320454Z ╰──── 2026-10-25T07:31:46.1320727Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-25T07:31:46.1321072Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-25T07:31:46.1321105Z 2026-10-25T07:31:46.1321271Z ⚠ eslint(no-empty-pattern): Empty array binding pattern 2026-10-25T07:31:46.1321427Z ╭─[apps/server/src/pullRequest/PullRequestService.test.ts:1436:12] 2026-10-25T07:31:46.1321481Z 1435 │ 2026-10-25T07:31:46.1321552Z 1436 │ for (const [] of [ 2026-10-25T07:31:46.1321628Z ·  ── 2026-10-25T07:31:46.1321701Z 1437 │ ["github", "github.com"], 2026-10-25T07:31:46.1321752Z ╰──── 2026-10-25T07:31:46.1322029Z  help: Passing non-iterable values (null, undefined, numbers, booleans, etc.) will result in a runtime error because these values are not iterable. 2026-10-25T07:31:46.1322032Z 2026-10-25T07:31:46.1322226Z ⚠ eslint(no-unused-vars): Identifier 'Arr' is imported but never used. 2026-10-25T07:31:46.1322362Z ╭─[packages/client-runtime/src/state/threadSort.ts:4:13] 2026-10-25T07:31:46.1322480Z 3 │ import type { EnvironmentThreadShell } from "./models.ts"; 2026-10-25T07:31:46.1322559Z 4 │ import * as Arr from "effect/Array"; 2026-10-25T07:31:46.1322634Z ·  ─┬─ 2026-10-25T07:31:46.1322759Z · ╰── 'Arr' is imported here 2026-10-25T07:31:46.1322845Z 5 │ import * as Order from "effect/Order"; 2026-10-25T07:31:46.1322895Z ╰──── 2026-10-25T07:31:46.1322997Z  help: Consider removing this import. 2026-10-25T07:31:46.1322999Z 2026-10-25T07:31:46.1323191Z ⚠ eslint(no-unused-vars): Identifier 'Order' is imported but never used. 2026-10-25T07:31:46.1323328Z ╭─[packages/client-runtime/src/state/threadSort.ts:5:13] 2026-10-25T07:31:46.1323412Z 4 │ import * as Arr from "effect/Array"; 2026-10-25T07:31:46.1323493Z 5 │ import * as Order from "effect/Order"; 2026-10-25T07:31:46.1323568Z ·  ──┬── 2026-10-25T07:31:46.1323698Z · ╰── 'Order' is imported here 2026-10-25T07:31:46.1323752Z 6 │ 2026-10-25T07:31:46.1323806Z ╰──── 2026-10-25T07:31:46.1323906Z  help: Consider removing this import. 2026-10-25T07:31:46.1323908Z 2026-10-25T07:31:46.1324179Z ⚠ eslint(no-unused-vars): Variable 'useDragRegion' is declared but never used. Unused variables should start with a '_'. 2026-10-25T07:31:46.1324327Z ╭─[apps/web/src/components/preview/PreviewPanelShell.tsx:57:9] 2026-10-25T07:31:46.1324383Z 56 │ ) { 2026-10-25T07:31:46.1324554Z 57 │ const useDragRegion = isElectron && props.mode !== "sheet" && props.mode !== "embedded"; 2026-10-25T07:31:46.1324639Z ·  ──────┬────── 2026-10-25T07:31:46.1324781Z · ╰── 'useDragRegion' is declared here 2026-10-25T07:31:46.1324874Z 58 │ const isInline = props.mode === "inline"; 2026-10-25T07:31:46.1324928Z ╰──── 2026-10-25T07:31:46.1325032Z  help: Consider removing this declaration. 2026-10-25T07:31:46.1325035Z 2026-10-25T07:31:46.1325237Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-25T07:31:46.1325367Z ╭─[packages/client-runtime/src/state/filesystem.ts:3:8] 2026-10-25T07:31:46.1325442Z 2 │ AuthFilesystemReadScope, 2026-10-25T07:31:46.1325514Z 3 │ type AuthSessionState, 2026-10-25T07:31:46.1325596Z ·  ────────┬─────── 2026-10-25T07:31:46.1325794Z · ╰── 'AuthSessionState' is imported here 2026-10-25T07:31:46.1325903Z 4 │ type FilesystemBrowseEntry, 2026-10-25T07:31:46.1325957Z ╰──── 2026-10-25T07:31:46.1326052Z  help: Consider removing this import. 2026-10-25T07:31:46.1326054Z 2026-10-25T07:31:46.1326268Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-25T07:31:46.1326438Z ╭─[apps/mobile/src/features/threads/NewTaskContextPickerScreens.tsx:250:7] 2026-10-25T07:31:46.1326519Z 249 │ mountedRef.current = false; 2026-10-25T07:31:46.1326596Z 250 │ flow.setBranchQuery(""); 2026-10-25T07:31:46.1326664Z ·  ──┬─ 2026-10-25T07:31:46.1326792Z · ╰── Missing dependency `flow` 2026-10-25T07:31:46.1326856Z 251 │ }; 2026-10-25T07:31:46.1326933Z 252 │ }, [flow.setBranchQuery]); 2026-10-25T07:31:46.1327019Z ·  ─────────┬───────── 2026-10-25T07:31:46.1327224Z · ╰── Overly precise dependency `flow.setBranchQuery`, use `flow` instead 2026-10-25T07:31:46.1327284Z 253 │ 2026-10-25T07:31:46.1327336Z ╰──── 2026-10-25T07:31:46.1327753Z  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-25T07:31:46.1328060Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.1328065Z 2026-10-25T07:31:46.1328532Z ⚠ 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-25T07:31:46.1328695Z ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1742:7] 2026-10-25T07:31:46.1328787Z 1741 │ yield* harness.replaceSession; 2026-10-25T07:31:46.1329000Z 1742 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-25T07:31:46.1329154Z 1743 │ │ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) { 2026-10-25T07:31:46.1329239Z 1744 │ │ break; 2026-10-25T07:31:46.1329318Z 1745 │ │ } 2026-10-25T07:31:46.1329433Z 1746 │ │ yield* Effect.yieldNow; 2026-10-25T07:31:46.1329572Z 1747 │ ╰─▶ } 2026-10-25T07:31:46.1329644Z 1748 │ yield* Queue.offer( 2026-10-25T07:31:46.1329734Z ╰──── 2026-10-25T07:31:46.1329737Z 2026-10-25T07:31:46.1330196Z ⚠ 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-25T07:31:46.1330349Z ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1851:7] 2026-10-25T07:31:46.1330442Z 1850 │ yield* harness.replaceSession; 2026-10-25T07:31:46.1330648Z 1851 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-25T07:31:46.1330860Z 1852 │ │ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) break; 2026-10-25T07:31:46.1330997Z 1853 │ │ yield* Effect.yieldNow; 2026-10-25T07:31:46.1331130Z 1854 │ ╰─▶ } 2026-10-25T07:31:46.1331259Z 1855 │ expect(yield* Ref.get(harness.subscriptionCount)).toBe(2); 2026-10-25T07:31:46.1331311Z ╰──── 2026-10-25T07:31:46.1331318Z 2026-10-25T07:31:46.1331519Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-25T07:31:46.1331653Z ╭─[packages/client-runtime/src/state/usageAccess.ts:3:8] 2026-10-25T07:31:46.1331727Z 2 │ AuthDiagnosticsReadScope, 2026-10-25T07:31:46.1331800Z 3 │ type AuthSessionState, 2026-10-25T07:31:46.1331882Z ·  ────────┬─────── 2026-10-25T07:31:46.1332036Z · ╰── 'AuthSessionState' is imported here 2026-10-25T07:31:46.1332110Z 4 │ sessionGrantsScope, 2026-10-25T07:31:46.1332163Z ╰──── 2026-10-25T07:31:46.1332262Z  help: Consider removing this import. 2026-10-25T07:31:46.1332264Z 2026-10-25T07:31:46.1332715Z ⚠ 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-25T07:31:46.1332864Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:169:7] 2026-10-25T07:31:46.1332933Z 168 │ }); 2026-10-25T07:31:46.1333127Z 169 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-25T07:31:46.1333322Z 170 │ │ if ((yield* SubscriptionRef.get(shellState)).status === "synchronizing") break; 2026-10-25T07:31:46.1333427Z 171 │ │ yield* Effect.yieldNow; 2026-10-25T07:31:46.1333558Z 172 │ ╰─▶ } 2026-10-25T07:31:46.1333615Z 173 │ 2026-10-25T07:31:46.1333669Z ╰──── 2026-10-25T07:31:46.1333671Z 2026-10-25T07:31:46.1334121Z ⚠ 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-25T07:31:46.1334264Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:178:7] 2026-10-25T07:31:46.1334375Z 177 │ yield* Deferred.succeed(releaseSave, undefined); 2026-10-25T07:31:46.1334569Z 178 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-25T07:31:46.1334706Z 179 │ │ if ((yield* Ref.get(saved)).length > 0) break; 2026-10-25T07:31:46.1334809Z 180 │ │ yield* Effect.yieldNow; 2026-10-25T07:31:46.1334938Z 181 │ ╰─▶ } 2026-10-25T07:31:46.1334994Z 182 │ 2026-10-25T07:31:46.1335048Z ╰──── 2026-10-25T07:31:46.1335050Z 2026-10-25T07:31:46.1335498Z ⚠ 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-25T07:31:46.1335693Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:307:7] 2026-10-25T07:31:46.1335851Z 306 │ yield* Deferred.succeed(releaseUnenrichedSave, undefined); 2026-10-25T07:31:46.1336041Z 307 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-25T07:31:46.1336165Z 308 │ │ const values = yield* Ref.get(saved); 2026-10-25T07:31:46.1336358Z 309 │ │ if (values.length > 0 && values.at(-1)?.projects[0]?.repositoryIdentity != null) { 2026-10-25T07:31:46.1336446Z 310 │ │ break; 2026-10-25T07:31:46.1336523Z 311 │ │ } 2026-10-25T07:31:46.1336626Z 312 │ │ yield* Effect.yieldNow; 2026-10-25T07:31:46.1336758Z 313 │ ╰─▶ } 2026-10-25T07:31:46.1336820Z 314 │ 2026-10-25T07:31:46.1336873Z ╰──── 2026-10-25T07:31:46.1336878Z 2026-10-25T07:31:46.1337082Z ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed 2026-10-25T07:31:46.1337253Z ╭─[apps/server/src/sourceControl/SourceControlProviderRegistry.ts:15:13] 2026-10-25T07:31:46.1337329Z 14 │ } from "@t3tools/contracts"; 2026-10-25T07:31:46.1337421Z 15 │ import type {} from "@t3tools/contracts"; 2026-10-25T07:31:46.1337490Z ·  ── 2026-10-25T07:31:46.1337546Z 16 │ 2026-10-25T07:31:46.1337599Z ╰──── 2026-10-25T07:31:46.1337683Z  help: Remove empty braces 2026-10-25T07:31:46.1337685Z 2026-10-25T07:31:46.1337977Z ⚠ eslint(no-unused-vars): Variable 'revokeActiveMcpThread' is declared but never used. Unused variables should start with a '_'. 2026-10-25T07:31:46.1338106Z ╭─[apps/server/src/mcp/McpSessionRegistry.ts:214:7] 2026-10-25T07:31:46.1338168Z 213 │ 2026-10-25T07:31:46.1338316Z 214 │ const revokeActiveMcpThread = (threadId: ThreadId): Effect.Effect => 2026-10-25T07:31:46.1338408Z ·  ──────────┬────────── 2026-10-25T07:31:46.1338562Z · ╰── 'revokeActiveMcpThread' is declared here 2026-10-25T07:31:46.1338752Z 215 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeThread(threadId) : Effect.void; 2026-10-25T07:31:46.1338806Z ╰──── 2026-10-25T07:31:46.1338910Z  help: Consider removing this declaration. 2026-10-25T07:31:46.1338913Z 2026-10-25T07:31:46.1339217Z ⚠ eslint(no-unused-vars): Variable 'revokeAllActiveMcpCredentials' is declared but never used. Unused variables should start with a '_'. 2026-10-25T07:31:46.1339343Z ╭─[apps/server/src/mcp/McpSessionRegistry.ts:217:7] 2026-10-25T07:31:46.1339398Z 216 │ 2026-10-25T07:31:46.1339529Z 217 │ const revokeAllActiveMcpCredentials = (): Effect.Effect => 2026-10-25T07:31:46.1339630Z ·  ──────────────┬────────────── 2026-10-25T07:31:46.1339834Z · ╰── 'revokeAllActiveMcpCredentials' is declared here 2026-10-25T07:31:46.1339990Z 218 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeAll : Effect.void; 2026-10-25T07:31:46.1340043Z ╰──── 2026-10-25T07:31:46.1340144Z  help: Consider removing this declaration. 2026-10-25T07:31:46.1340147Z 2026-10-25T07:31:46.1340370Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-25T07:31:46.1340563Z ╭─[packages/client-runtime/src/operations/projects.ts:238:51] 2026-10-25T07:31:46.1340653Z 237 │ ): string { 2026-10-25T07:31:46.1340805Z 238 │ const folderName = workspaceRoot.split(/[\\/]/).filter(Boolean).at(-1) ?? ""; 2026-10-25T07:31:46.1340917Z ·  ────── 2026-10-25T07:31:46.1341047Z 239 │ return target.owner ? `${target.owner}/${folderName}` : folderName; 2026-10-25T07:31:46.1341098Z ╰──── 2026-10-25T07:31:46.1341265Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-25T07:31:46.1341267Z 2026-10-25T07:31:46.1341471Z ⚠ typescript(no-extraneous-class): Unexpected class with only a constructor. 2026-10-25T07:31:46.1341591Z ╭─[apps/desktop/src/preview/Manager.test.ts:150:18] 2026-10-25T07:31:46.1341689Z 149 │ BrowserWindow: browserWindowConstructor, 2026-10-25T07:31:46.1341850Z 150 │ ╭─▶ ClipboardItem: class { 2026-10-25T07:31:46.1341980Z 151 │ │ constructor(data: Record) { 2026-10-25T07:31:46.1342096Z 152 │ │ clipboardItemConstructor(data); 2026-10-25T07:31:46.1342171Z 153 │ │ } 2026-10-25T07:31:46.1342296Z 154 │ ╰─▶ }, 2026-10-25T07:31:46.1342359Z 155 │ clipboard: { 2026-10-25T07:31:46.1342411Z ╰──── 2026-10-25T07:31:46.1342575Z  help: Try replacing this class with a standalone function or deleting it entirely 2026-10-25T07:31:46.1342578Z 2026-10-25T07:31:46.1342761Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-25T07:31:46.1342901Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:121:27] 2026-10-25T07:31:46.1343062Z 120 │ const scope = makeScope(options.capabilities ?? new Set(["preview", "worktree"])); 2026-10-25T07:31:46.1343150Z 121 │ const dispatch = vi.fn((_: unknown) => 2026-10-25T07:31:46.1343232Z ·  ┬ 2026-10-25T07:31:46.1343361Z · ╰── '_' is declared here 2026-10-25T07:31:46.1343460Z 122 │ (options.dispatchGate ?? Effect.void).pipe( 2026-10-25T07:31:46.1343510Z ╰──── 2026-10-25T07:31:46.1343614Z  help: Consider removing this parameter. 2026-10-25T07:31:46.1343616Z 2026-10-25T07:31:46.1343796Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-25T07:31:46.1343928Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:134:39] 2026-10-25T07:31:46.1344030Z 133 │ ); 2026-10-25T07:31:46.1344167Z 134 │ const listLocalBranchNames = vi.fn((_: string) => 2026-10-25T07:31:46.1344264Z ·  ┬ 2026-10-25T07:31:46.1344404Z · ╰── '_' is declared here 2026-10-25T07:31:46.1344470Z 135 │ Effect.succeed( 2026-10-25T07:31:46.1344573Z ╰──── 2026-10-25T07:31:46.1344675Z  help: Consider removing this parameter. 2026-10-25T07:31:46.1344677Z 2026-10-25T07:31:46.1344855Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-25T07:31:46.1344985Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:178:31] 2026-10-25T07:31:46.1345041Z 177 │ }); 2026-10-25T07:31:46.1345134Z 178 │ const sendToThread = vi.fn((_: unknown) => { 2026-10-25T07:31:46.1345225Z ·  ┬ 2026-10-25T07:31:46.1345360Z · ╰── '_' is declared here 2026-10-25T07:31:46.1345459Z 179 │ switch (options.continuation ?? "queued") { 2026-10-25T07:31:46.1345508Z ╰──── 2026-10-25T07:31:46.1345606Z  help: Consider removing this parameter. 2026-10-25T07:31:46.1345608Z 2026-10-25T07:31:46.1345786Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-25T07:31:46.1345917Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:203:33] 2026-10-25T07:31:46.1345971Z 202 │ ); 2026-10-25T07:31:46.1346064Z 203 │ const removeWorktree = vi.fn((_: unknown) => 2026-10-25T07:31:46.1346154Z ·  ┬ 2026-10-25T07:31:46.1346291Z · ╰── '_' is declared here 2026-10-25T07:31:46.1346372Z 204 │ options.removeWorktreeFails 2026-10-25T07:31:46.1346422Z ╰──── 2026-10-25T07:31:46.1346520Z  help: Consider removing this parameter. 2026-10-25T07:31:46.1346522Z 2026-10-25T07:31:46.1346698Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-25T07:31:46.1346828Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:208:36] 2026-10-25T07:31:46.1346881Z 207 │ ); 2026-10-25T07:31:46.1346978Z 208 │ const deleteLocalBranch = vi.fn((_: unknown) => 2026-10-25T07:31:46.1347071Z ·  ┬ 2026-10-25T07:31:46.1347205Z · ╰── '_' is declared here 2026-10-25T07:31:46.1347294Z 209 │ options.deleteLocalBranchFails 2026-10-25T07:31:46.1347347Z ╰──── 2026-10-25T07:31:46.1347441Z  help: Consider removing this parameter. 2026-10-25T07:31:46.1347443Z 2026-10-25T07:31:46.1347620Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-25T07:31:46.1347750Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:213:42] 2026-10-25T07:31:46.1347803Z 212 │ ); 2026-10-25T07:31:46.1347914Z 213 │ const fetchWorktreeBaseCommit = vi.fn((_: unknown) => 2026-10-25T07:31:46.1348013Z ·  ┬ 2026-10-25T07:31:46.1348152Z · ╰── '_' is declared here 2026-10-25T07:31:46.1348234Z 214 │ options.fetchWorktreeBaseFails 2026-10-25T07:31:46.1348285Z ╰──── 2026-10-25T07:31:46.1348441Z  help: Consider removing this parameter. 2026-10-25T07:31:46.1348481Z 2026-10-25T07:31:46.1348658Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-25T07:31:46.1348790Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:254:30] 2026-10-25T07:31:46.1348842Z 253 │ ); 2026-10-25T07:31:46.1348933Z 254 │ const localStatus = vi.fn((_: unknown) => 2026-10-25T07:31:46.1349017Z ·  ┬ 2026-10-25T07:31:46.1349148Z · ╰── '_' is declared here 2026-10-25T07:31:46.1349216Z 255 │ Effect.succeed({ 2026-10-25T07:31:46.1349267Z ╰──── 2026-10-25T07:31:46.1349362Z  help: Consider removing this parameter. 2026-10-25T07:31:46.1349364Z 2026-10-25T07:31:46.1349545Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-25T07:31:46.1349714Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:264:32] 2026-10-25T07:31:46.1349768Z 263 │ ); 2026-10-25T07:31:46.1349914Z 264 │ const refreshStatus = vi.fn((_: string) => Effect.die("refreshStatus stub")); 2026-10-25T07:31:46.1350000Z ·  ┬ 2026-10-25T07:31:46.1350132Z · ╰── '_' is declared here 2026-10-25T07:31:46.1350273Z 265 │ const runForThread = vi.fn((input: { readonly worktreePath: string }) => { 2026-10-25T07:31:46.1350324Z ╰──── 2026-10-25T07:31:46.1350421Z  help: Consider removing this parameter. 2026-10-25T07:31:46.1350423Z 2026-10-25T07:31:46.1350571Z ⚠ eslint(no-new): Do not use 'new' for side effects. 2026-10-25T07:31:46.1350696Z ╭─[apps/server/src/mcp/McpToolAccess.test.ts:168:3] 2026-10-25T07:31:46.1350809Z 167 │ // @ts-expect-error a declaration constructed directly 2026-10-25T07:31:46.1350901Z 168 │ new McpToolAccess.Declaration(unchecked); 2026-10-25T07:31:46.1350994Z ·  ───────────────────────────── 2026-10-25T07:31:46.1351119Z 169 │ // @ts-expect-error a handlers layer built outside McpToolAccess 2026-10-25T07:31:46.1351170Z ╰──── 2026-10-25T07:31:46.1351325Z  help: Assign the result of 'new' to a variable or compare it to a reference. 2026-10-25T07:31:46.1351328Z 2026-10-25T07:31:46.1351786Z ⚠ 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-25T07:31:46.1351922Z ╭─[packages/client-runtime/src/rpc/client.test.ts:131:9] 2026-10-25T07:31:46.1351984Z 130 │ ) { 2026-10-25T07:31:46.1352190Z 131 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-25T07:31:46.1352312Z 132 │ │ if (subscriptions.length >= count) { 2026-10-25T07:31:46.1352400Z 133 │ │ return; 2026-10-25T07:31:46.1352478Z 134 │ │ } 2026-10-25T07:31:46.1352584Z 135 │ │ yield* Effect.yieldNow; 2026-10-25T07:31:46.1352716Z 136 │ ╰─▶ } 2026-10-25T07:31:46.1352877Z 137 │ return yield* Effect.die(new Error(`Expected ${count} durable subscriptions.`)); 2026-10-25T07:31:46.1352927Z ╰──── 2026-10-25T07:31:46.1352929Z 2026-10-25T07:31:46.1353436Z ⚠ 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-25T07:31:46.1353599Z ╭─[packages/client-runtime/src/rpc/client.test.ts:252:7] 2026-10-25T07:31:46.1353758Z 251 │ yield* SubscriptionRef.set(activeSession, Option.some(session(firstClient))); 2026-10-25T07:31:46.1354004Z 252 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 1; attempt += 1) { 2026-10-25T07:31:46.1354109Z 253 │ │ yield* Effect.yieldNow; 2026-10-25T07:31:46.1354236Z 254 │ ╰─▶ } 2026-10-25T07:31:46.1354364Z 255 │ yield* SubscriptionRef.set(activeSession, Option.none()); 2026-10-25T07:31:46.1354417Z ╰──── 2026-10-25T07:31:46.1354419Z 2026-10-25T07:31:46.1354871Z ⚠ 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-25T07:31:46.1354999Z ╭─[packages/client-runtime/src/rpc/client.test.ts:258:7] 2026-10-25T07:31:46.1355055Z 257 │ 2026-10-25T07:31:46.1355301Z 258 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-25T07:31:46.1355404Z 259 │ │ yield* Effect.yieldNow; 2026-10-25T07:31:46.1355535Z 260 │ ╰─▶ } 2026-10-25T07:31:46.1355641Z 261 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-25T07:31:46.1355691Z ╰──── 2026-10-25T07:31:46.1355695Z 2026-10-25T07:31:46.1356140Z ⚠ 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-25T07:31:46.1356267Z ╭─[packages/client-runtime/src/rpc/client.test.ts:322:7] 2026-10-25T07:31:46.1356327Z 321 │ ); 2026-10-25T07:31:46.1356575Z 322 │ ╭─▶ for (let attempt = 0; attempt < 100 && observedFailures.length < 1; attempt += 1) { 2026-10-25T07:31:46.1356676Z 323 │ │ yield* Effect.yieldNow; 2026-10-25T07:31:46.1356807Z 324 │ ╰─▶ } 2026-10-25T07:31:46.1356863Z 325 │ 2026-10-25T07:31:46.1356914Z ╰──── 2026-10-25T07:31:46.1356916Z 2026-10-25T07:31:46.1357363Z ⚠ 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-25T07:31:46.1357491Z ╭─[packages/client-runtime/src/rpc/client.test.ts:330:7] 2026-10-25T07:31:46.1357648Z 329 │ yield* SubscriptionRef.set(activeSession, Option.some(session(secondClient))); 2026-10-25T07:31:46.1357890Z 330 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-25T07:31:46.1358036Z 331 │ │ yield* Effect.yieldNow; 2026-10-25T07:31:46.1358194Z 332 │ ╰─▶ } 2026-10-25T07:31:46.1358297Z 333 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-25T07:31:46.1358346Z ╰──── 2026-10-25T07:31:46.1358348Z 2026-10-25T07:31:46.1358795Z ⚠ 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-25T07:31:46.1358925Z ╭─[packages/client-runtime/src/rpc/session.test.ts:226:3] 2026-10-25T07:31:46.1358982Z 225 │ ) { 2026-10-25T07:31:46.1359180Z 226 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-25T07:31:46.1359292Z 227 │ │ const socket = sockets[index]; 2026-10-25T07:31:46.1359381Z 228 │ │ if (socket) { 2026-10-25T07:31:46.1359470Z 229 │ │ return socket; 2026-10-25T07:31:46.1359542Z 230 │ │ } 2026-10-25T07:31:46.1359640Z 231 │ │ yield* Effect.yieldNow; 2026-10-25T07:31:46.1359790Z 232 │ ╰─▶ } 2026-10-25T07:31:46.1359962Z 233 │ return yield* Effect.die(new Error("Expected the RPC protocol to create a websocket.")); 2026-10-25T07:31:46.1360014Z ╰──── 2026-10-25T07:31:46.1360016Z 2026-10-25T07:31:46.1360472Z ⚠ 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-25T07:31:46.1360604Z ╭─[packages/client-runtime/src/rpc/session.test.ts:240:3] 2026-10-25T07:31:46.1360658Z 239 │ ) { 2026-10-25T07:31:46.1360853Z 240 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-25T07:31:46.1361062Z 241 │ │ const request = socket.sent.map((message) => decodeJson(message)).filter(isRpcRequest)[index]; 2026-10-25T07:31:46.1361150Z 242 │ │ if (request) { 2026-10-25T07:31:46.1361240Z 243 │ │ return request; 2026-10-25T07:31:46.1361312Z 244 │ │ } 2026-10-25T07:31:46.1361410Z 245 │ │ yield* Effect.yieldNow; 2026-10-25T07:31:46.1361533Z 246 │ ╰─▶ } 2026-10-25T07:31:46.1361701Z 247 │ return yield* Effect.die(new Error("Expected the RPC protocol to send a request.")); 2026-10-25T07:31:46.1361754Z ╰──── 2026-10-25T07:31:46.1361757Z 2026-10-25T07:31:46.1361951Z ⚠ eslint(no-unused-vars): Identifier 'Fiber' is imported but never used. 2026-10-25T07:31:46.1362043Z ╭─[apps/server/src/ws.ts:10:13] 2026-10-25T07:31:46.1362130Z  9 │ import * as Effect from "effect/Effect"; 2026-10-25T07:31:46.1362214Z 10 │ import * as Fiber from "effect/Fiber"; 2026-10-25T07:31:46.1362288Z ·  ──┬── 2026-10-25T07:31:46.1362416Z · ╰── 'Fiber' is imported here 2026-10-25T07:31:46.1362513Z 11 │ import * as FileSystem from "effect/FileSystem"; 2026-10-25T07:31:46.1362564Z ╰──── 2026-10-25T07:31:46.1362658Z  help: Consider removing this import. 2026-10-25T07:31:46.1362715Z 2026-10-25T07:31:46.1362939Z ⚠ eslint(no-unused-vars): Identifier 'Schedule' is imported but never used. 2026-10-25T07:31:46.1363031Z ╭─[apps/server/src/ws.ts:17:13] 2026-10-25T07:31:46.1363109Z 16 │ import * as Ref from "effect/Ref"; 2026-10-25T07:31:46.1363199Z 17 │ import * as Schedule from "effect/Schedule"; 2026-10-25T07:31:46.1363273Z ·  ────┬─── 2026-10-25T07:31:46.1363406Z · ╰── 'Schedule' is imported here 2026-10-25T07:31:46.1363489Z 18 │ import * as Schema from "effect/Schema"; 2026-10-25T07:31:46.1363540Z ╰──── 2026-10-25T07:31:46.1363633Z  help: Consider removing this import. 2026-10-25T07:31:46.1363637Z 2026-10-25T07:31:46.1363937Z ⚠ eslint(no-unused-vars): Variable 'projectSetupScriptRunner' is declared but never used. Unused variables should start with a '_'. 2026-10-25T07:31:46.1364038Z ╭─[apps/server/src/ws.ts:1298:13] 2026-10-25T07:31:46.1364193Z 1297 │ const usageLimitSources = yield* UsageLimitSources.UsageLimitSources; 2026-10-25T07:31:46.1364390Z 1298 │ const projectSetupScriptRunner = yield* ProjectSetupScriptRunner.ProjectSetupScriptRunner; 2026-10-25T07:31:46.1364494Z ·  ────────────┬─────────── 2026-10-25T07:31:46.1364661Z · ╰── 'projectSetupScriptRunner' is declared here 2026-10-25T07:31:46.1364827Z 1299 │ const worktreeSetupTracker = yield* WorktreeSetupTracker.WorktreeSetupTracker; 2026-10-25T07:31:46.1364880Z ╰──── 2026-10-25T07:31:46.1364982Z  help: Consider removing this declaration. 2026-10-25T07:31:46.1364984Z 2026-10-25T07:31:46.1365213Z ⚠ eslint(no-unused-vars): Function 'resolveThreadWorkspaceCwd' is declared but never used. 2026-10-25T07:31:46.1365334Z ╭─[apps/server/src/checkpointing/Utils.ts:12:10] 2026-10-25T07:31:46.1365387Z 11 │ 2026-10-25T07:31:46.1365481Z 12 │ function resolveThreadWorkspaceCwd(input: { 2026-10-25T07:31:46.1365579Z ·  ────────────┬──────────── 2026-10-25T07:31:46.1365744Z · ╰── 'resolveThreadWorkspaceCwd' is declared here 2026-10-25T07:31:46.1365810Z 13 │ readonly thread: { 2026-10-25T07:31:46.1365861Z ╰──── 2026-10-25T07:31:46.1365960Z  help: Consider removing this declaration. 2026-10-25T07:31:46.1365963Z 2026-10-25T07:31:46.1366419Z ⚠ 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-25T07:31:46.1366567Z ╭─[apps/server/src/background/HostPowerMonitor.test.ts:133:11] 2026-10-25T07:31:46.1366697Z 132 │ const monitor = yield* HostPowerMonitor.HostPowerMonitor; 2026-10-25T07:31:46.1366838Z 133 │ ╭─▶ for ( 2026-10-25T07:31:46.1366940Z 134 │ │ let attempt = 0; 2026-10-25T07:31:46.1367108Z 135 │ │ attempt < 100 && (yield* monitor.snapshot).onBattery !== "true"; 2026-10-25T07:31:46.1367203Z 136 │ │ attempt += 1 2026-10-25T07:31:46.1367283Z 137 │ │ ) { 2026-10-25T07:31:46.1367392Z 138 │ │ yield* Effect.yieldNow; 2026-10-25T07:31:46.1367572Z 139 │ ╰─▶ } 2026-10-25T07:31:46.1367723Z 140 │ expect((yield* monitor.snapshot).onBattery).toBe("true"); 2026-10-25T07:31:46.1367773Z ╰──── 2026-10-25T07:31:46.1367776Z 2026-10-25T07:31:46.1367981Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-25T07:31:46.1368113Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:229:6] 2026-10-25T07:31:46.1368273Z 225 │ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents( 2026-10-25T07:31:46.1368359Z 226 │ nativeEventSnapshotsRef.current, 2026-10-25T07:31:46.1368451Z ·  ───────────┬─────────── 2026-10-25T07:31:46.1368913Z · ╰── 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-25T07:31:46.1368994Z 227 │ mostRecentEventCount, 2026-10-25T07:31:46.1369049Z 228 │ ); 2026-10-25T07:31:46.1369169Z 229 │ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]); 2026-10-25T07:31:46.1369303Z ·  ──────────────────────────┬────────────────────────── 2026-10-25T07:31:46.1369501Z · ╰── This dependency list is missing values used by the callback 2026-10-25T07:31:46.1369584Z 230 │ const assumedValue = props.value; 2026-10-25T07:31:46.1369634Z ╰──── 2026-10-25T07:31:46.1369835Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-25T07:31:46.1370154Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.1370160Z 2026-10-25T07:31:46.1370373Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-25T07:31:46.1370505Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:235:7] 2026-10-25T07:31:46.1370645Z 234 │ nativeEventSnapshotsRef.current = assumeComposerControlledState( 2026-10-25T07:31:46.1370730Z 235 │ nativeEventSnapshotsRef.current, 2026-10-25T07:31:46.1370819Z ·  ───────────┬─────────── 2026-10-25T07:31:46.1371268Z · ╰── 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-25T07:31:46.1371396Z 236 │ controlledEventCount, 2026-10-25T07:31:46.1371568Z 237 │ assumedValue, 2026-10-25T07:31:46.1371621Z 238 │ ); 2026-10-25T07:31:46.1371776Z 239 │ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]); 2026-10-25T07:31:46.1371909Z ·  ───────────┬────────── 2026-10-25T07:31:46.1372113Z · ╰── Unnecessary dependency `controlledDocumentJson` 2026-10-25T07:31:46.1372202Z 240 │ const acceptNativeEvent = useCallback( 2026-10-25T07:31:46.1372250Z ╰──── 2026-10-25T07:31:46.1372668Z  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-25T07:31:46.1372980Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.1372983Z 2026-10-25T07:31:46.1373125Z ⚠ react(refs): Cannot access refs during render 2026-10-25T07:31:46.1373260Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:162:29] 2026-10-25T07:31:46.1373379Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-25T07:31:46.1373490Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-25T07:31:46.1373606Z ·  ─────────────┬──────────── 2026-10-25T07:31:46.1373771Z · ╰── Cannot access ref value during render 2026-10-25T07:31:46.1373833Z 163 │ }); 2026-10-25T07:31:46.1373885Z ╰──── 2026-10-25T07:31:46.1374341Z  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-25T07:31:46.1374630Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-25T07:31:46.1374632Z 2026-10-25T07:31:46.1374775Z ⚠ react(refs): Cannot access refs during render 2026-10-25T07:31:46.1374909Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:162:29] 2026-10-25T07:31:46.1375025Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-25T07:31:46.1375135Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-25T07:31:46.1375251Z ·  ─────────────┬──────────── 2026-10-25T07:31:46.1375454Z · ╰── Passing a ref to a function may read its value during render 2026-10-25T07:31:46.1375515Z 163 │ }); 2026-10-25T07:31:46.1375566Z ╰──── 2026-10-25T07:31:46.1376017Z  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-25T07:31:46.1376300Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-25T07:31:46.1376302Z 2026-10-25T07:31:46.1376490Z ⚠ react(refs): Cannot access refs during render 2026-10-25T07:31:46.1376653Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:23] 2026-10-25T07:31:46.1376708Z 163 │ }); 2026-10-25T07:31:46.1376794Z 164 │ confirmedTokensRef.current = tokens; 2026-10-25T07:31:46.1376916Z ·  ─────────┬────────────┬─── 2026-10-25T07:31:46.1377101Z · │ ╰── Cannot update ref value during render 2026-10-25T07:31:46.1377214Z · ╰── This value is a ref 2026-10-25T07:31:46.1377284Z 165 │ return JSON.stringify( 2026-10-25T07:31:46.1377334Z ╰──── 2026-10-25T07:31:46.1377795Z  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-25T07:31:46.1378081Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-25T07:31:46.1378085Z 2026-10-25T07:31:46.1378227Z ⚠ react(refs): Cannot access refs during render 2026-10-25T07:31:46.1378360Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:206:5] 2026-10-25T07:31:46.1378428Z 205 │ mostRecentEventCount, 2026-10-25T07:31:46.1378515Z 206 │ nativeEventSnapshotsRef.current, 2026-10-25T07:31:46.1378620Z ·  ───────────────┬─────────────── 2026-10-25T07:31:46.1378809Z · ╰── Passing a ref to a function may read its value during render 2026-10-25T07:31:46.1378866Z 207 │ ); 2026-10-25T07:31:46.1378917Z ╰──── 2026-10-25T07:31:46.1379369Z  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-25T07:31:46.1379661Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-25T07:31:46.1379664Z 2026-10-25T07:31:46.1379832Z ⚠ react(refs): Cannot access refs during render 2026-10-25T07:31:46.1379964Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:212:5] 2026-10-25T07:31:46.1380032Z 211 │ mostRecentEventCount, 2026-10-25T07:31:46.1380121Z 212 │ nativeEventSnapshotsRef.current, 2026-10-25T07:31:46.1380226Z ·  ───────────────┬─────────────── 2026-10-25T07:31:46.1380409Z · ╰── Passing a ref to a function may read its value during render 2026-10-25T07:31:46.1380461Z 213 │ ); 2026-10-25T07:31:46.1380512Z ╰──── 2026-10-25T07:31:46.1380961Z  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-25T07:31:46.1381244Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-25T07:31:46.1381246Z 2026-10-25T07:31:46.1381478Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-25T07:31:46.1381636Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:197:6] 2026-10-25T07:31:46.1381752Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-25T07:31:46.1381860Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-25T07:31:46.1381967Z ·  ─────────┬──────── 2026-10-25T07:31:46.1382424Z · ╰── 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-25T07:31:46.1382479Z 163 │ }); 2026-10-25T07:31:46.1382566Z 164 │ confirmedTokensRef.current = tokens; 2026-10-25T07:31:46.1382636Z 165 │ return JSON.stringify( 2026-10-25T07:31:46.1382802Z 166 │ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => { 2026-10-25T07:31:46.1382876Z 167 │ const record = 2026-10-25T07:31:46.1382953Z 168 │ token.type === "context" 2026-10-25T07:31:46.1383113Z 169 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-25T07:31:46.1383179Z 170 │ : undefined; 2026-10-25T07:31:46.1383285Z 171 │ const presentation = contextChipPresentation( 2026-10-25T07:31:46.1383393Z 172 │ token.type === "context" ? token.kind : token.type, 2026-10-25T07:31:46.1383455Z 173 │ record, 2026-10-25T07:31:46.1383514Z 174 │ ); 2026-10-25T07:31:46.1383598Z 175 │ const icon = contextChipIcon( 2026-10-25T07:31:46.1383666Z 176 │ presentation, 2026-10-25T07:31:46.1383808Z 177 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-25T07:31:46.1383868Z 178 │ ); 2026-10-25T07:31:46.1383930Z 179 │ return { 2026-10-25T07:31:46.1384000Z 180 │ type: token.type, 2026-10-25T07:31:46.1384075Z 181 │ source: token.source, 2026-10-25T07:31:46.1384143Z 182 │ start: token.start, 2026-10-25T07:31:46.1384210Z 183 │ end: token.end, 2026-10-25T07:31:46.1384356Z 184 │ accent: contextChipAccent(presentation.accent, theme, chipTextColor), 2026-10-25T07:31:46.1384417Z 185 │ label: 2026-10-25T07:31:46.1384492Z 186 │ token.type === "skill" 2026-10-25T07:31:46.1384649Z 187 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-25T07:31:46.1384730Z 188 │ : token.type === "context" 2026-10-25T07:31:46.1384965Z 189 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-25T07:31:46.1385049Z 190 │ : basename(token.value), 2026-10-25T07:31:46.1385188Z 191 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-25T07:31:46.1385280Z 192 │ iconUri: contextChipIconUri(icon), 2026-10-25T07:31:46.1385366Z 193 │ tintsIcon: icon.kind === "chip", 2026-10-25T07:31:46.1385423Z 194 │ }; 2026-10-25T07:31:46.1385478Z 195 │ }), 2026-10-25T07:31:46.1385534Z 196 │ ); 2026-10-25T07:31:46.1385664Z 197 │ }, [props.value, props.context, skillLabels, theme, chipTextColor]); 2026-10-25T07:31:46.1385813Z ·  ───────────────────────────────┬─────────────────────────────── 2026-10-25T07:31:46.1386076Z · ╰── This dependency list is missing values used by the callback 2026-10-25T07:31:46.1386250Z 198 │ // Every render resolves against the snapshot history, so a render whose 2026-10-25T07:31:46.1386303Z ╰──── 2026-10-25T07:31:46.1386506Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-25T07:31:46.1386817Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.1386820Z 2026-10-25T07:31:46.1387005Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-25T07:31:46.1387138Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:257:5] 2026-10-25T07:31:46.1387267Z 249 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-25T07:31:46.1387372Z 250 │ nativeEventSnapshotsRef.current.push({ 2026-10-25T07:31:46.1387465Z ·  ───────────┬─────────── 2026-10-25T07:31:46.1387912Z · ╰── 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-25T07:31:46.1388001Z 251 │ eventCount: acknowledgedEventCount, 2026-10-25T07:31:46.1388064Z 252 │ value, 2026-10-25T07:31:46.1388141Z 253 │ selection: nextSelection, 2026-10-25T07:31:46.1388197Z 254 │ }); 2026-10-25T07:31:46.1388278Z 255 │ return acknowledgedEventCount; 2026-10-25T07:31:46.1388333Z 256 │ }, 2026-10-25T07:31:46.1388391Z 257 │ [], 2026-10-25T07:31:46.1388458Z ·  ─┬ 2026-10-25T07:31:46.1388642Z · ╰── This dependency list is missing values used by the callback 2026-10-25T07:31:46.1388698Z 258 │ ); 2026-10-25T07:31:46.1388750Z ╰──── 2026-10-25T07:31:46.1388951Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-25T07:31:46.1389258Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.1389261Z 2026-10-25T07:31:46.1389750Z ⚠ 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-25T07:31:46.1389931Z ╭─[apps/server/src/scheduledTasks/ScheduledTaskService.webhook.test.ts:520:13] 2026-10-25T07:31:46.1390053Z 519 │ })).delivery; 2026-10-25T07:31:46.1390275Z 520 │ ╭─▶ while (delivery.outcome === "accepted") { 2026-10-25T07:31:46.1390392Z 521 │ │ yield* Effect.yieldNow; 2026-10-25T07:31:46.1390537Z 522 │ │ delivery = (yield* service.getWebhookDelivery({ 2026-10-25T07:31:46.1390635Z 523 │ │ id: task.id, 2026-10-25T07:31:46.1390749Z 524 │ │ deliveryId: deliveryId!, 2026-10-25T07:31:46.1390846Z 525 │ │ })).delivery; 2026-10-25T07:31:46.1390983Z 526 │ ╰─▶ } 2026-10-25T07:31:46.1391099Z 527 │ assert.equal(delivery.outcome, "dispatch_failed"); 2026-10-25T07:31:46.1391156Z ╰──── 2026-10-25T07:31:46.1391160Z 2026-10-25T07:31:46.1391615Z ⚠ 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-25T07:31:46.1391771Z ╭─[packages/client-runtime/src/connection/supervisor.test.ts:135:3] 2026-10-25T07:31:46.1391880Z 134 │ let lastState = yield* SubscriptionRef.get(state); 2026-10-25T07:31:46.1392092Z 135 │ ╭─▶ for (let iteration = 0; iteration < 100; iteration += 1) { 2026-10-25T07:31:46.1392224Z 136 │ │ lastState = yield* SubscriptionRef.get(state); 2026-10-25T07:31:46.1392329Z 137 │ │ if (predicate(lastState)) { 2026-10-25T07:31:46.1392430Z 138 │ │ return lastState; 2026-10-25T07:31:46.1392505Z 139 │ │ } 2026-10-25T07:31:46.1392604Z 140 │ │ yield* Effect.yieldNow; 2026-10-25T07:31:46.1392724Z 141 │ ╰─▶ } 2026-10-25T07:31:46.1392799Z 142 │ return yield* Effect.die( 2026-10-25T07:31:46.1392853Z ╰──── 2026-10-25T07:31:46.1392856Z 2026-10-25T07:31:46.1393056Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-25T07:31:46.1393219Z ╭─[apps/web/src/components/settings/ProviderSettingsPanel.logic.ts:4:8] 2026-10-25T07:31:46.1393291Z 3 │ AuthProvidersManageScope, 2026-10-25T07:31:46.1393361Z 4 │ type AuthSessionState, 2026-10-25T07:31:46.1393444Z ·  ────────┬─────── 2026-10-25T07:31:46.1393593Z · ╰── 'AuthSessionState' is imported here 2026-10-25T07:31:46.1393660Z 5 │ type EnvironmentId, 2026-10-25T07:31:46.1393713Z ╰──── 2026-10-25T07:31:46.1393811Z  help: Consider removing this import. 2026-10-25T07:31:46.1393814Z 2026-10-25T07:31:46.1394039Z ⚠ unicorn(no-useless-spread): Using a spread operator here creates a new array unnecessarily. 2026-10-25T07:31:46.1394176Z ╭─[apps/mobile/src/native/native-layout-metrics.tsx:43:27] 2026-10-25T07:31:46.1394242Z 42 │ latestMetrics = next; 2026-10-25T07:31:46.1394352Z 43 │ for (const settle of [...metricsWaiters]) settle(next); 2026-10-25T07:31:46.1394438Z ·  ─── 2026-10-25T07:31:46.1394504Z 44 │ setMetrics(next); 2026-10-25T07:31:46.1394554Z ╰──── 2026-10-25T07:31:46.1394794Z  help: `for…of` can iterate over iterable, it's unnecessary to convert to an array. 2026-10-25T07:31:46.1394825Z 2026-10-25T07:31:46.1395090Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-25T07:31:46.1395259Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:81:5] 2026-10-25T07:31:46.1395311Z 78 │ 2026-10-25T07:31:46.1395374Z 79 │ useEffect(() => { 2026-10-25T07:31:46.1395445Z ·  ────┬──── 2026-10-25T07:31:46.1395572Z · ╰── This is the containing effect 2026-10-25T07:31:46.1395700Z 80 │ const { host, code } = parsePairingUrl(connectionPairingUrl); 2026-10-25T07:31:46.1395764Z 81 │ setHostInput(host); 2026-10-25T07:31:46.1395839Z ·  ──────┬───── 2026-10-25T07:31:46.1396011Z · ╰── Avoid calling setState() directly within an effect 2026-10-25T07:31:46.1396081Z 82 │ setCodeInput(code); 2026-10-25T07:31:46.1396135Z ╰──── 2026-10-25T07:31:46.1396725Z  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-25T07:31:46.1397045Z  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-25T07:31:46.1397048Z 2026-10-25T07:31:46.1397306Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-25T07:31:46.1397478Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:91:5] 2026-10-25T07:31:46.1397533Z 84 │ 2026-10-25T07:31:46.1397597Z 85 │ useEffect(() => { 2026-10-25T07:31:46.1397668Z ·  ────┬──── 2026-10-25T07:31:46.1397796Z · ╰── This is the containing effect 2026-10-25T07:31:46.1397886Z 86 │ if (routePairingUrl.length === 0) { 2026-10-25T07:31:46.1397945Z 87 │ return; 2026-10-25T07:31:46.1397997Z 88 │ } 2026-10-25T07:31:46.1398050Z 89 │ 2026-10-25T07:31:46.1398164Z 90 │ const { host, code } = parsePairingUrl(routePairingUrl); 2026-10-25T07:31:46.1398230Z 91 │ setHostInput(host); 2026-10-25T07:31:46.1398302Z ·  ──────┬───── 2026-10-25T07:31:46.1398474Z · ╰── Avoid calling setState() directly within an effect 2026-10-25T07:31:46.1398542Z 92 │ setCodeInput(code); 2026-10-25T07:31:46.1398593Z ╰──── 2026-10-25T07:31:46.1399180Z  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-25T07:31:46.1399497Z  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-25T07:31:46.1399499Z 2026-10-25T07:31:46.1399797Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-25T07:31:46.1400012Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:97:7] 2026-10-25T07:31:46.1400093Z 94 │ 2026-10-25T07:31:46.1400156Z 95 │ useEffect(() => { 2026-10-25T07:31:46.1400225Z ·  ────┬──── 2026-10-25T07:31:46.1400348Z · ╰── This is the containing effect 2026-10-25T07:31:46.1400431Z 96 │ if (pairingConnectionError) { 2026-10-25T07:31:46.1400504Z 97 │ setIsSubmitting(false); 2026-10-25T07:31:46.1400584Z ·  ───────┬─────── 2026-10-25T07:31:46.1400750Z · ╰── Avoid calling setState() directly within an effect 2026-10-25T07:31:46.1400805Z 98 │ } 2026-10-25T07:31:46.1400856Z ╰──── 2026-10-25T07:31:46.1401448Z  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-25T07:31:46.1401766Z  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-25T07:31:46.1401769Z 2026-10-25T07:31:46.1401974Z ⚠ eslint(no-unused-vars): Identifier 'openSettings' is imported but never used. 2026-10-25T07:31:46.1402141Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:35:10] 2026-10-25T07:31:46.1402273Z 34 │ import { splitEnvironmentSections } from "./environmentSections"; 2026-10-25T07:31:46.1402398Z 35 │ import { openSettings } from "../settings/settings-navigation"; 2026-10-25T07:31:46.1402482Z ·  ──────┬───── 2026-10-25T07:31:46.1402622Z · ╰── 'openSettings' is imported here 2026-10-25T07:31:46.1402756Z 36 │ import { leaveSettingsPage } from "../settings/settings-navigation"; 2026-10-25T07:31:46.1402807Z ╰──── 2026-10-25T07:31:46.1402905Z  help: Consider removing this import. 2026-10-25T07:31:46.1402907Z 2026-10-25T07:31:46.1403113Z ⚠ eslint(no-unused-vars): Function 'describeSchedule' is declared but never used. 2026-10-25T07:31:46.1403234Z ╭─[apps/server/src/scheduledTasks/Schedule.ts:75:10] 2026-10-25T07:31:46.1403288Z 74 │ 2026-10-25T07:31:46.1403421Z 75 │ function describeSchedule(schedule: ScheduledTaskSchedule): string { 2026-10-25T07:31:46.1403505Z ·  ────────┬─────── 2026-10-25T07:31:46.1403657Z · ╰── 'describeSchedule' is declared here 2026-10-25T07:31:46.1403766Z 76 │ if (schedule.type === "webhook") return "On webhook"; 2026-10-25T07:31:46.1403819Z ╰──── 2026-10-25T07:31:46.1403922Z  help: Consider removing this declaration. 2026-10-25T07:31:46.1403925Z 2026-10-25T07:31:46.1404115Z ⚠ eslint(no-unused-vars): Identifier 'Image' is imported but never used. 2026-10-25T07:31:46.1404255Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:17:10] 2026-10-25T07:31:46.1404382Z 16 │ import type { NativeSyntheticEvent, ViewProps } from "react-native"; 2026-10-25T07:31:46.1404494Z 17 │ import { Image, Platform, StyleSheet } from "react-native"; 2026-10-25T07:31:46.1404565Z ·  ──┬── 2026-10-25T07:31:46.1404689Z · ╰── 'Image' is imported here 2026-10-25T07:31:46.1404787Z 18 │ 2026-10-25T07:31:46.1404876Z ╰──── 2026-10-25T07:31:46.1404971Z  help: Consider removing this import. 2026-10-25T07:31:46.1404973Z 2026-10-25T07:31:46.1405174Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-25T07:31:46.1405315Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:227:6] 2026-10-25T07:31:46.1405476Z 223 │ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents( 2026-10-25T07:31:46.1405566Z 224 │ nativeEventSnapshotsRef.current, 2026-10-25T07:31:46.1405655Z ·  ───────────┬─────────── 2026-10-25T07:31:46.1406115Z · ╰── 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-25T07:31:46.1406190Z 225 │ mostRecentEventCount, 2026-10-25T07:31:46.1406245Z 226 │ ); 2026-10-25T07:31:46.1406367Z 227 │ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]); 2026-10-25T07:31:46.1406502Z ·  ──────────────────────────┬────────────────────────── 2026-10-25T07:31:46.1406699Z · ╰── This dependency list is missing values used by the callback 2026-10-25T07:31:46.1406781Z 228 │ const assumedValue = props.value; 2026-10-25T07:31:46.1406832Z ╰──── 2026-10-25T07:31:46.1406998Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-25T07:31:46.1407310Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.1407316Z 2026-10-25T07:31:46.1407526Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-25T07:31:46.1407665Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:233:7] 2026-10-25T07:31:46.1407804Z 232 │ nativeEventSnapshotsRef.current = assumeComposerControlledState( 2026-10-25T07:31:46.1407893Z 233 │ nativeEventSnapshotsRef.current, 2026-10-25T07:31:46.1407982Z ·  ───────────┬─────────── 2026-10-25T07:31:46.1408427Z · ╰── 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-25T07:31:46.1408500Z 234 │ controlledEventCount, 2026-10-25T07:31:46.1408610Z 235 │ assumedValue, 2026-10-25T07:31:46.1408699Z 236 │ ); 2026-10-25T07:31:46.1408856Z 237 │ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]); 2026-10-25T07:31:46.1408990Z ·  ───────────┬────────── 2026-10-25T07:31:46.1409195Z · ╰── Unnecessary dependency `controlledDocumentJson` 2026-10-25T07:31:46.1409282Z 238 │ const acceptNativeEvent = useCallback( 2026-10-25T07:31:46.1409334Z ╰──── 2026-10-25T07:31:46.1409791Z  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-25T07:31:46.1410105Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.1410109Z 2026-10-25T07:31:46.1410254Z ⚠ react(refs): Cannot access refs during render 2026-10-25T07:31:46.1410396Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:160:29] 2026-10-25T07:31:46.1410517Z 159 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-25T07:31:46.1410630Z 160 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-25T07:31:46.1410745Z ·  ─────────────┬──────────── 2026-10-25T07:31:46.1410909Z · ╰── Cannot access ref value during render 2026-10-25T07:31:46.1410963Z 161 │ }); 2026-10-25T07:31:46.1411015Z ╰──── 2026-10-25T07:31:46.1411477Z  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-25T07:31:46.1411768Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-25T07:31:46.1411770Z 2026-10-25T07:31:46.1411913Z ⚠ react(refs): Cannot access refs during render 2026-10-25T07:31:46.1412053Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:160:29] 2026-10-25T07:31:46.1412171Z 159 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-25T07:31:46.1412280Z 160 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-25T07:31:46.1412396Z ·  ─────────────┬──────────── 2026-10-25T07:31:46.1412603Z · ╰── Passing a ref to a function may read its value during render 2026-10-25T07:31:46.1412657Z 161 │ }); 2026-10-25T07:31:46.1412709Z ╰──── 2026-10-25T07:31:46.1413164Z  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-25T07:31:46.1413446Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-25T07:31:46.1413449Z 2026-10-25T07:31:46.1413639Z ⚠ react(refs): Cannot access refs during render 2026-10-25T07:31:46.1413810Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:23] 2026-10-25T07:31:46.1413868Z 161 │ }); 2026-10-25T07:31:46.1413956Z 162 │ confirmedTokensRef.current = tokens; 2026-10-25T07:31:46.1414079Z ·  ─────────┬────────────┬─── 2026-10-25T07:31:46.1414265Z · │ ╰── Cannot update ref value during render 2026-10-25T07:31:46.1414379Z · ╰── This value is a ref 2026-10-25T07:31:46.1414451Z 163 │ return JSON.stringify( 2026-10-25T07:31:46.1414502Z ╰──── 2026-10-25T07:31:46.1414966Z  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-25T07:31:46.1415253Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-25T07:31:46.1415255Z 2026-10-25T07:31:46.1415395Z ⚠ react(refs): Cannot access refs during render 2026-10-25T07:31:46.1415534Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:204:5] 2026-10-25T07:31:46.1415605Z 203 │ mostRecentEventCount, 2026-10-25T07:31:46.1415693Z 204 │ nativeEventSnapshotsRef.current, 2026-10-25T07:31:46.1415797Z ·  ───────────────┬─────────────── 2026-10-25T07:31:46.1415980Z · ╰── Passing a ref to a function may read its value during render 2026-10-25T07:31:46.1416035Z 205 │ ); 2026-10-25T07:31:46.1416095Z ╰──── 2026-10-25T07:31:46.1416556Z  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-25T07:31:46.1416840Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-25T07:31:46.1416843Z 2026-10-25T07:31:46.1416982Z ⚠ react(refs): Cannot access refs during render 2026-10-25T07:31:46.1417123Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:210:5] 2026-10-25T07:31:46.1417194Z 209 │ mostRecentEventCount, 2026-10-25T07:31:46.1417279Z 210 │ nativeEventSnapshotsRef.current, 2026-10-25T07:31:46.1417384Z ·  ───────────────┬─────────────── 2026-10-25T07:31:46.1417568Z · ╰── Passing a ref to a function may read its value during render 2026-10-25T07:31:46.1417624Z 211 │ ); 2026-10-25T07:31:46.1417676Z ╰──── 2026-10-25T07:31:46.1418129Z  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-25T07:31:46.1418413Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-25T07:31:46.1418415Z 2026-10-25T07:31:46.1418601Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-25T07:31:46.1418787Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:195:6] 2026-10-25T07:31:46.1418935Z 159 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-25T07:31:46.1421439Z 160 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-25T07:31:46.1421566Z ·  ─────────┬──────── 2026-10-25T07:31:46.1422028Z · ╰── 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-25T07:31:46.1422084Z 161 │ }); 2026-10-25T07:31:46.1422172Z 162 │ confirmedTokensRef.current = tokens; 2026-10-25T07:31:46.1422242Z 163 │ return JSON.stringify( 2026-10-25T07:31:46.1422411Z 164 │ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => { 2026-10-25T07:31:46.1422481Z 165 │ const record = 2026-10-25T07:31:46.1422559Z 166 │ token.type === "context" 2026-10-25T07:31:46.1422718Z 167 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-25T07:31:46.1422785Z 168 │ : undefined; 2026-10-25T07:31:46.1422894Z 169 │ const presentation = contextChipPresentation( 2026-10-25T07:31:46.1423002Z 170 │ token.type === "context" ? token.kind : token.type, 2026-10-25T07:31:46.1423065Z 171 │ record, 2026-10-25T07:31:46.1423122Z 172 │ ); 2026-10-25T07:31:46.1423204Z 173 │ const icon = contextChipIcon( 2026-10-25T07:31:46.1423271Z 174 │ presentation, 2026-10-25T07:31:46.1423411Z 175 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-25T07:31:46.1423472Z 176 │ ); 2026-10-25T07:31:46.1423534Z 177 │ return { 2026-10-25T07:31:46.1423602Z 178 │ type: token.type, 2026-10-25T07:31:46.1423676Z 179 │ source: token.source, 2026-10-25T07:31:46.1423744Z 180 │ start: token.start, 2026-10-25T07:31:46.1423808Z 181 │ end: token.end, 2026-10-25T07:31:46.1423953Z 182 │ accent: contextChipAccent(presentation.accent, theme, chipTextColor), 2026-10-25T07:31:46.1424015Z 183 │ label: 2026-10-25T07:31:46.1424090Z 184 │ token.type === "skill" 2026-10-25T07:31:46.1424194Z 185 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-25T07:31:46.1424275Z 186 │ : token.type === "context" 2026-10-25T07:31:46.1424504Z 187 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-25T07:31:46.1424660Z 188 │ : basename(token.value), 2026-10-25T07:31:46.1424802Z 189 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-25T07:31:46.1424893Z 190 │ iconUri: contextChipIconUri(icon), 2026-10-25T07:31:46.1424978Z 191 │ tintsIcon: icon.kind === "chip", 2026-10-25T07:31:46.1425035Z 192 │ }; 2026-10-25T07:31:46.1425092Z 193 │ }), 2026-10-25T07:31:46.1425145Z 194 │ ); 2026-10-25T07:31:46.1425276Z 195 │ }, [props.value, props.context, skillLabels, theme, chipTextColor]); 2026-10-25T07:31:46.1425425Z ·  ───────────────────────────────┬─────────────────────────────── 2026-10-25T07:31:46.1425627Z · ╰── This dependency list is missing values used by the callback 2026-10-25T07:31:46.1425839Z 196 │ // Every render resolves against the snapshot history, so a render whose 2026-10-25T07:31:46.1425934Z ╰──── 2026-10-25T07:31:46.1426136Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-25T07:31:46.1426448Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.1426451Z 2026-10-25T07:31:46.1426637Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-25T07:31:46.1426779Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:255:5] 2026-10-25T07:31:46.1426907Z 247 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-25T07:31:46.1427007Z 248 │ nativeEventSnapshotsRef.current.push({ 2026-10-25T07:31:46.1427102Z ·  ───────────┬─────────── 2026-10-25T07:31:46.1427556Z · ╰── 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-25T07:31:46.1427646Z 249 │ eventCount: acknowledgedEventCount, 2026-10-25T07:31:46.1427706Z 250 │ value, 2026-10-25T07:31:46.1427784Z 251 │ selection: nextSelection, 2026-10-25T07:31:46.1427841Z 252 │ }); 2026-10-25T07:31:46.1427924Z 253 │ return acknowledgedEventCount; 2026-10-25T07:31:46.1427977Z 254 │ }, 2026-10-25T07:31:46.1428033Z 255 │ [], 2026-10-25T07:31:46.1428099Z ·  ─┬ 2026-10-25T07:31:46.1428277Z · ╰── This dependency list is missing values used by the callback 2026-10-25T07:31:46.1428335Z 256 │ ); 2026-10-25T07:31:46.1428394Z ╰──── 2026-10-25T07:31:46.1428594Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-25T07:31:46.1428901Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.1428904Z 2026-10-25T07:31:46.1429100Z ⚠ eslint(no-unused-vars): Identifier 'FormSheet' is imported but never used. 2026-10-25T07:31:46.1429249Z ╭─[apps/mobile/src/native/createV5StackNavigator.ios.tsx:26:10] 2026-10-25T07:31:46.1429351Z 25 │ import { StyleSheet, View } from "react-native"; 2026-10-25T07:31:46.1429464Z 26 │ import { FormSheet, Stack } from "react-native-screens"; 2026-10-25T07:31:46.1429543Z ·  ────┬──── 2026-10-25T07:31:46.1429718Z · ╰── 'FormSheet' is imported here 2026-10-25T07:31:46.1429865Z 27 │ import { NativeScrollEdgeEffectsContext } from "./NativeScrollViewMarker"; 2026-10-25T07:31:46.1429917Z ╰──── 2026-10-25T07:31:46.1430014Z  help: Consider removing this import. 2026-10-25T07:31:46.1430017Z 2026-10-25T07:31:46.1430246Z ⚠ eslint(no-unused-vars): Identifier 'nativeWorkspacePopAction' is imported but never used. 2026-10-25T07:31:46.1430391Z ╭─[apps/mobile/src/native/createV5StackNavigator.ios.tsx:33:3] 2026-10-25T07:31:46.1430459Z 32 │ nativeStackPopAction, 2026-10-25T07:31:46.1430531Z 33 │ nativeWorkspacePopAction, 2026-10-25T07:31:46.1430619Z ·  ────────────┬─────────── 2026-10-25T07:31:46.1430825Z · ╰── 'nativeWorkspacePopAction' is imported here 2026-10-25T07:31:46.1430924Z 34 │ nativeWorkspacePopCount, 2026-10-25T07:31:46.1430974Z ╰──── 2026-10-25T07:31:46.1431069Z  help: Consider removing this import. 2026-10-25T07:31:46.1431071Z 2026-10-25T07:31:46.1431292Z ⚠ eslint(no-unused-vars): Identifier 'nativeWorkspacePopCount' is imported but never used. 2026-10-25T07:31:46.1431434Z ╭─[apps/mobile/src/native/createV5StackNavigator.ios.tsx:34:3] 2026-10-25T07:31:46.1431505Z 33 │ nativeWorkspacePopAction, 2026-10-25T07:31:46.1431575Z 34 │ nativeWorkspacePopCount, 2026-10-25T07:31:46.1431662Z ·  ───────────┬─────────── 2026-10-25T07:31:46.1431816Z · ╰── 'nativeWorkspacePopCount' is imported here 2026-10-25T07:31:46.1431893Z 35 │ partitionStackPresentations, 2026-10-25T07:31:46.1431947Z ╰──── 2026-10-25T07:31:46.1432043Z  help: Consider removing this import. 2026-10-25T07:31:46.1432046Z 2026-10-25T07:31:46.1432189Z ⚠ react(refs): Cannot access refs during render 2026-10-25T07:31:46.1432306Z ╭─[apps/mobile/src/native/StackHeader.tsx:202:9] 2026-10-25T07:31:46.1432369Z 201 │ "options", 2026-10-25T07:31:46.1432460Z 202 │ latestOptionFunctionsRef.current, 2026-10-25T07:31:46.1432570Z ·  ────────────────┬─────────────── 2026-10-25T07:31:46.1432760Z · ╰── Passing a ref to a function may read its value during render 2026-10-25T07:31:46.1432852Z 203 │ optionFunctionWrappersRef.current, 2026-10-25T07:31:46.1432902Z ╰──── 2026-10-25T07:31:46.1433369Z  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-25T07:31:46.1433660Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-25T07:31:46.1433663Z 2026-10-25T07:31:46.1433805Z ⚠ react(refs): Cannot access refs during render 2026-10-25T07:31:46.1433921Z ╭─[apps/mobile/src/native/StackHeader.tsx:203:9] 2026-10-25T07:31:46.1434009Z 202 │ latestOptionFunctionsRef.current, 2026-10-25T07:31:46.1434100Z 203 │ optionFunctionWrappersRef.current, 2026-10-25T07:31:46.1434209Z ·  ────────────────┬──────────────── 2026-10-25T07:31:46.1434450Z · ╰── Passing a ref to a function may read its value during render 2026-10-25T07:31:46.1434571Z 204 │ ) as NativeStackNavigationOptions) 2026-10-25T07:31:46.1434620Z ╰──── 2026-10-25T07:31:46.1435076Z  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-25T07:31:46.1435363Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-25T07:31:46.1435366Z 2026-10-25T07:31:46.1435535Z ⚠ react(purity): Cannot call impure function during render 2026-10-25T07:31:46.1435683Z ╭─[apps/web/src/components/chat/useThreadLifecycle.tsx:178:58] 2026-10-25T07:31:46.1435794Z 177 │ if (snoozeClockState.shell !== activeThreadShell) { 2026-10-25T07:31:46.1435953Z 178 │ setSnoozeClockState({ shell: activeThreadShell, now: new Date().toISOString() }); 2026-10-25T07:31:46.1436075Z ·  ─────┬──── 2026-10-25T07:31:46.1436241Z · ╰── Cannot call impure function 2026-10-25T07:31:46.1436296Z 179 │ } 2026-10-25T07:31:46.1436346Z ╰──── 2026-10-25T07:31:46.1436619Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-25T07:31:46.1436911Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-25T07:31:46.1436915Z 2026-10-25T07:31:46.1437056Z ⚠ react(refs): Cannot access refs during render 2026-10-25T07:31:46.1437222Z ╭─[apps/mobile/src/features/voice-input/useVoiceInputController.ts:27:14] 2026-10-25T07:31:46.1437303Z 26 │ const latestInput = useRef(input); 2026-10-25T07:31:46.1437377Z 27 │ latestInput.current = input; 2026-10-25T07:31:46.1437487Z ·  ─────┬─────────┬─── 2026-10-25T07:31:46.1437666Z · │ ╰── Cannot update ref value during render 2026-10-25T07:31:46.1437780Z · ╰── This value is a ref 2026-10-25T07:31:46.1437853Z 28 │ const mounted = useRef(true); 2026-10-25T07:31:46.1437907Z ╰──── 2026-10-25T07:31:46.1438370Z  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-25T07:31:46.1438656Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-25T07:31:46.1438658Z 2026-10-25T07:31:46.1438811Z ⚠ react(immutability): This value cannot be modified 2026-10-25T07:31:46.1438965Z ╭─[apps/mobile/src/features/connection/ConnectionStatusDot.tsx:58:7] 2026-10-25T07:31:46.1439057Z 53 │ function usePulseAnimation(pulse: boolean) { 2026-10-25T07:31:46.1439148Z 54 │ const pulseProgress = useSharedValue(0); 2026-10-25T07:31:46.1439227Z ·  ──────┬────── 2026-10-25T07:31:46.1439412Z · ╰── `pulseProgress` originates here 2026-10-25T07:31:46.1439491Z 55 │ 2026-10-25T07:31:46.1439556Z 56 │ useEffect(() => { 2026-10-25T07:31:46.1439619Z 57 │ if (pulse) { 2026-10-25T07:31:46.1439716Z 58 │ pulseProgress.value = withRepeat( 2026-10-25T07:31:46.1439822Z ·  ──────┬────── 2026-10-25T07:31:46.1439965Z · ╰── `pulseProgress` cannot be modified 2026-10-25T07:31:46.1440031Z 59 │ withTiming(1, { 2026-10-25T07:31:46.1440083Z ╰──── 2026-10-25T07:31:46.1440347Z  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-25T07:31:46.1440653Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-25T07:31:46.1440660Z 2026-10-25T07:31:46.1440812Z ⚠ react(immutability): This value cannot be modified 2026-10-25T07:31:46.1440979Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:93:5] 2026-10-25T07:31:46.1441033Z 90 │ }) { 2026-10-25T07:31:46.1441143Z 91 │ const rotation = useSharedValue(props.hidden ? 1 : 0); 2026-10-25T07:31:46.1441215Z ·  ────┬─── 2026-10-25T07:31:46.1441357Z · ╰── `rotation` originates here 2026-10-25T07:31:46.1441426Z 92 │ useLayoutEffect(() => { 2026-10-25T07:31:46.1441565Z 93 │ rotation.value = withTiming(props.hidden ? 1 : 0, TOOLBAR_FLIP_TIMING); 2026-10-25T07:31:46.1441634Z ·  ────┬─── 2026-10-25T07:31:46.1441766Z · ╰── `rotation` cannot be modified 2026-10-25T07:31:46.1441842Z 94 │ }, [props.hidden, rotation]); 2026-10-25T07:31:46.1441892Z ╰──── 2026-10-25T07:31:46.1442149Z  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-25T07:31:46.1442445Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-25T07:31:46.1442451Z 2026-10-25T07:31:46.1442604Z ⚠ react(immutability): This value cannot be modified 2026-10-25T07:31:46.1442770Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:266:5] 2026-10-25T07:31:46.1442862Z 263 │ const variant = props.variant ?? "plain"; 2026-10-25T07:31:46.1442997Z 264 │ const loadingVisibility = useSharedValue(props.loading ? 1 : 0); 2026-10-25T07:31:46.1443083Z ·  ────────┬──────── 2026-10-25T07:31:46.1443229Z · ╰── `loadingVisibility` originates here 2026-10-25T07:31:46.1443299Z 265 │ useLayoutEffect(() => { 2026-10-25T07:31:46.1443456Z 266 │ loadingVisibility.value = withTiming(props.loading ? 1 : 0, DICTATION_TIMING); 2026-10-25T07:31:46.1443536Z ·  ────────┬──────── 2026-10-25T07:31:46.1443679Z · ╰── `loadingVisibility` cannot be modified 2026-10-25T07:31:46.1443768Z 267 │ }, [loadingVisibility, props.loading]); 2026-10-25T07:31:46.1443819Z ╰──── 2026-10-25T07:31:46.1444078Z  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-25T07:31:46.1444433Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-25T07:31:46.1444465Z 2026-10-25T07:31:46.1444615Z ⚠ react(immutability): This value cannot be modified 2026-10-25T07:31:46.1444784Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:325:5] 2026-10-25T07:31:46.1444839Z 322 │ }) { 2026-10-25T07:31:46.1444995Z 323 │ const recordingVisibility = useSharedValue(props.phase === "recording" ? 1 : 0); 2026-10-25T07:31:46.1445082Z ·  ─────────┬───────── 2026-10-25T07:31:46.1445228Z · ╰── `recordingVisibility` originates here 2026-10-25T07:31:46.1445296Z 324 │ useLayoutEffect(() => { 2026-10-25T07:31:46.1445484Z 325 │ recordingVisibility.value = withTiming(props.phase === "recording" ? 1 : 0, DICTATION_TIMING); 2026-10-25T07:31:46.1445571Z ·  ─────────┬───────── 2026-10-25T07:31:46.1445720Z · ╰── `recordingVisibility` cannot be modified 2026-10-25T07:31:46.1445808Z 326 │ }, [props.phase, recordingVisibility]); 2026-10-25T07:31:46.1445859Z ╰──── 2026-10-25T07:31:46.1446116Z  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-25T07:31:46.1446413Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-25T07:31:46.1446416Z 2026-10-25T07:31:46.1446559Z ⚠ react(refs): Cannot access refs during render 2026-10-25T07:31:46.1446719Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:120:38] 2026-10-25T07:31:46.1446879Z 119 │ const audioLevelsRef = useRef(Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-25T07:31:46.1447000Z 120 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-25T07:31:46.1447118Z ·  ───────────┬────────── 2026-10-25T07:31:46.1447290Z · ╰── Cannot access ref value during render 2026-10-25T07:31:46.1447405Z 121 │ const sessionRef = useRef(null); 2026-10-25T07:31:46.1447456Z ╰──── 2026-10-25T07:31:46.1447920Z  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-25T07:31:46.1448206Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-25T07:31:46.1448208Z 2026-10-25T07:31:46.1448348Z ⚠ react(refs): Cannot access refs during render 2026-10-25T07:31:46.1448502Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:124:8] 2026-10-25T07:31:46.1448557Z 123 │ 2026-10-25T07:31:46.1448664Z 124 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-25T07:31:46.1448750Z ·  ─────────┬──────── 2026-10-25T07:31:46.1448893Z · ╰── Cannot access ref value during render 2026-10-25T07:31:46.1448991Z 125 │ const recorder = createLazyVoiceRecorder({ 2026-10-25T07:31:46.1449042Z ╰──── 2026-10-25T07:31:46.1449547Z  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-25T07:31:46.1449960Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-25T07:31:46.1449963Z 2026-10-25T07:31:46.1450103Z ⚠ react(refs): Cannot access refs during render 2026-10-25T07:31:46.1450256Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:124:7] 2026-10-25T07:31:46.1450309Z 123 │ 2026-10-25T07:31:46.1450413Z 124 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-25T07:31:46.1450498Z ·  ─────────┬───────── 2026-10-25T07:31:46.1450646Z · ╰── Cannot access ref value during render 2026-10-25T07:31:46.1450745Z 125 │ const recorder = createLazyVoiceRecorder({ 2026-10-25T07:31:46.1450797Z ╰──── 2026-10-25T07:31:46.1451251Z  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-25T07:31:46.1451535Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-25T07:31:46.1451537Z 2026-10-25T07:31:46.1451675Z ⚠ react(refs): Cannot access refs during render 2026-10-25T07:31:46.1451831Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:124:31] 2026-10-25T07:31:46.1451886Z 123 │ 2026-10-25T07:31:46.1451989Z 124 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-25T07:31:46.1452100Z ·  ─────────┬───────── 2026-10-25T07:31:46.1452267Z · ╰── Cannot access ref value during render 2026-10-25T07:31:46.1452362Z 125 │ const recorder = createLazyVoiceRecorder({ 2026-10-25T07:31:46.1452414Z ╰──── 2026-10-25T07:31:46.1452870Z  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-25T07:31:46.1453196Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-25T07:31:46.1453225Z 2026-10-25T07:31:46.1453364Z ⚠ react(refs): Cannot access refs during render 2026-10-25T07:31:46.1453516Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:124:30] 2026-10-25T07:31:46.1453569Z 123 │ 2026-10-25T07:31:46.1453674Z 124 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-25T07:31:46.1453784Z ·  ──────────┬───────── 2026-10-25T07:31:46.1453947Z · ╰── Cannot access ref value during render 2026-10-25T07:31:46.1454042Z 125 │ const recorder = createLazyVoiceRecorder({ 2026-10-25T07:31:46.1454093Z ╰──── 2026-10-25T07:31:46.1454552Z  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-25T07:31:46.1454838Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-25T07:31:46.1454841Z 2026-10-25T07:31:46.1454979Z ⚠ react(refs): Cannot access refs during render 2026-10-25T07:31:46.1455131Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:125:46] 2026-10-25T07:31:46.1455241Z 124 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-25T07:31:46.1455431Z 125 │ ╭─▶ const recorder = createLazyVoiceRecorder({ 2026-10-25T07:31:46.1455607Z 126 │ │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-25T07:31:46.1455740Z 127 │ │ onStatus: (status: RecordingStatus) => { 2026-10-25T07:31:46.1455891Z 128 │ │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-25T07:31:46.1456008Z 129 │ │ isFinished: status.isFinished, 2026-10-25T07:31:46.1456180Z 130 │ │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-25T07:31:46.1456281Z 131 │ │ error: status.error, 2026-10-25T07:31:46.1456378Z 132 │ │ url: status.url, 2026-10-25T07:31:46.1456456Z 133 │ │ }); 2026-10-25T07:31:46.1456533Z 134 │ │ }, 2026-10-25T07:31:46.1456730Z 135 │ │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-25T07:31:46.1456838Z 136 │ │ selectInput: (inputs) => { 2026-10-25T07:31:46.1456990Z 137 │ │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-25T07:31:46.1457131Z 138 │ │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-25T07:31:46.1457293Z 139 │ │ const known = microphoneOrder(preferences.value.microphones); 2026-10-25T07:31:46.1457429Z 140 │ │ const order = rememberMicrophones(known, inputs); 2026-10-25T07:31:46.1457530Z 141 │ │ if (order !== known) { 2026-10-25T07:31:46.1457666Z 142 │ │ registry.set(updateMobilePreferencesAtom, { 2026-10-25T07:31:46.1457824Z 143 │ │ transform: (current) => ({ 2026-10-25T07:31:46.1458061Z 144 │ │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-25T07:31:46.1458144Z 145 │ │ }), 2026-10-25T07:31:46.1458223Z 146 │ │ }); 2026-10-25T07:31:46.1458297Z 147 │ │ } 2026-10-25T07:31:46.1458435Z 148 │ │ return preferredMicrophoneInput(inputs, order); 2026-10-25T07:31:46.1458511Z 149 │ │ }, 2026-10-25T07:31:46.1458640Z 150 │ ├─▶ }); 2026-10-25T07:31:46.1458873Z · ╰──── Passing a ref to a function may read its value during render 2026-10-25T07:31:46.1458962Z 151 │ recorderRef.current = recorder; 2026-10-25T07:31:46.1459017Z ╰──── 2026-10-25T07:31:46.1459473Z  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-25T07:31:46.1459794Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-25T07:31:46.1459797Z 2026-10-25T07:31:46.1459938Z ⚠ react(refs): Cannot access refs during render 2026-10-25T07:31:46.1460095Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:151:16] 2026-10-25T07:31:46.1460149Z 150 │ }); 2026-10-25T07:31:46.1460228Z 151 │ recorderRef.current = recorder; 2026-10-25T07:31:46.1460344Z ·  ─────┬─────────┬─── 2026-10-25T07:31:46.1460526Z · │ ╰── Cannot update ref value during render 2026-10-25T07:31:46.1460640Z · ╰── This value is a ref 2026-10-25T07:31:46.1460744Z 152 │ sessionRef.current = new VoiceInputSession({ 2026-10-25T07:31:46.1460795Z ╰──── 2026-10-25T07:31:46.1461253Z  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-25T07:31:46.1461535Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-25T07:31:46.1461542Z 2026-10-25T07:31:46.1461685Z ⚠ react(refs): Cannot access refs during render 2026-10-25T07:31:46.1461839Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:152:48] 2026-10-25T07:31:46.1461922Z 151 │ recorderRef.current = recorder; 2026-10-25T07:31:46.1462110Z 152 │ ╭─▶ sessionRef.current = new VoiceInputSession({ 2026-10-25T07:31:46.1462194Z 153 │ │ recorder, 2026-10-25T07:31:46.1462320Z 154 │ │ getTranscriber: getLocalVoiceTranscriber, 2026-10-25T07:31:46.1462436Z 155 │ │ requestPermission: async () => { 2026-10-25T07:31:46.1462601Z 156 │ │ const permission = await requestRecordingPermissionsAsync(); 2026-10-25T07:31:46.1462844Z 157 │ │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-25T07:31:46.1462949Z 158 │ │ }, 2026-10-25T07:31:46.1463089Z 159 │ │ configureRecording: configureVoiceRecordingAudio, 2026-10-25T07:31:46.1463222Z 160 │ │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-25T07:31:46.1463354Z 161 │ │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-25T07:31:46.1463463Z 162 │ │ onStateChange: (nextState) => 2026-10-25T07:31:46.1463555Z 163 │ │ setState({ 2026-10-25T07:31:46.1463657Z 164 │ │ state: nextState, 2026-10-25T07:31:46.1463791Z 165 │ │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-25T07:31:46.1463921Z 166 │ │ label: sessionRef.current?.label ?? null, 2026-10-25T07:31:46.1464004Z 167 │ │ }), 2026-10-25T07:31:46.1464130Z 168 │ ├─▶ }); 2026-10-25T07:31:46.1464324Z · ╰──── Cannot access ref value during render 2026-10-25T07:31:46.1464380Z 169 │ } 2026-10-25T07:31:46.1464429Z ╰──── 2026-10-25T07:31:46.1464945Z  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-25T07:31:46.1465232Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-25T07:31:46.1465237Z 2026-10-25T07:31:46.1465376Z ⚠ react(refs): Cannot access refs during render 2026-10-25T07:31:46.1465531Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:152:15] 2026-10-25T07:31:46.1465611Z 151 │ recorderRef.current = recorder; 2026-10-25T07:31:46.1465712Z 152 │ sessionRef.current = new VoiceInputSession({ 2026-10-25T07:31:46.1465820Z ·  ─────┬────────┬─── 2026-10-25T07:31:46.1465997Z · │ ╰── Cannot update ref value during render 2026-10-25T07:31:46.1466110Z · ╰── This value is a ref 2026-10-25T07:31:46.1466171Z 153 │ recorder, 2026-10-25T07:31:46.1466224Z ╰──── 2026-10-25T07:31:46.1466685Z  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-25T07:31:46.1466972Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-25T07:31:46.1466974Z 2026-10-25T07:31:46.1467115Z ⚠ react(refs): Cannot access refs during render 2026-10-25T07:31:46.1467268Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:181:7] 2026-10-25T07:31:46.1467353Z 180 │ return () => subscription.remove(); 2026-10-25T07:31:46.1467419Z 181 │ }, [controller]); 2026-10-25T07:31:46.1467497Z ·  ─────┬──── 2026-10-25T07:31:46.1467698Z · ╰── Cannot access ref value during render 2026-10-25T07:31:46.1467784Z 182 │ 2026-10-25T07:31:46.1467837Z ╰──── 2026-10-25T07:31:46.1468287Z  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-25T07:31:46.1468569Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-25T07:31:46.1468571Z 2026-10-25T07:31:46.1468712Z ⚠ react(refs): Cannot access refs during render 2026-10-25T07:31:46.1468865Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:181:6] 2026-10-25T07:31:46.1468955Z 180 │ return () => subscription.remove(); 2026-10-25T07:31:46.1469021Z 181 │ }, [controller]); 2026-10-25T07:31:46.1469095Z ·  ──────┬───── 2026-10-25T07:31:46.1469236Z · ╰── Cannot access ref value during render 2026-10-25T07:31:46.1469287Z 182 │ 2026-10-25T07:31:46.1469338Z ╰──── 2026-10-25T07:31:46.1469825Z  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-25T07:31:46.1470106Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-25T07:31:46.1470108Z 2026-10-25T07:31:46.1470252Z ⚠ react(refs): Cannot access refs during render 2026-10-25T07:31:46.1470408Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:188:6] 2026-10-25T07:31:46.1470464Z 187 │ }, 2026-10-25T07:31:46.1470534Z 188 │ [controller, recorder], 2026-10-25T07:31:46.1470606Z ·  ─────┬──── 2026-10-25T07:31:46.1470747Z · ╰── Cannot access ref value during render 2026-10-25T07:31:46.1470800Z 189 │ ); 2026-10-25T07:31:46.1470849Z ╰──── 2026-10-25T07:31:46.1471300Z  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-25T07:31:46.1471588Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-25T07:31:46.1471593Z 2026-10-25T07:31:46.1471733Z ⚠ react(refs): Cannot access refs during render 2026-10-25T07:31:46.1471885Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:173:20] 2026-10-25T07:31:46.1471976Z 172 │ const controller = session.controller; 2026-10-25T07:31:46.1472061Z 173 │ const recorder = recorderRef.current; 2026-10-25T07:31:46.1472163Z ·  ─────────┬───────── 2026-10-25T07:31:46.1472319Z · ╰── Cannot access ref value during render 2026-10-25T07:31:46.1472369Z 174 │ 2026-10-25T07:31:46.1472420Z ╰──── 2026-10-25T07:31:46.1472924Z  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-25T07:31:46.1473237Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-25T07:31:46.1473239Z 2026-10-25T07:31:46.1473379Z ⚠ react(refs): Cannot access refs during render 2026-10-25T07:31:46.1473532Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:188:5] 2026-10-25T07:31:46.1473590Z 187 │ }, 2026-10-25T07:31:46.1473660Z 188 │ [controller, recorder], 2026-10-25T07:31:46.1473750Z ·  ───────────┬────────── 2026-10-25T07:31:46.1473896Z · ╰── Cannot access ref value during render 2026-10-25T07:31:46.1473953Z 189 │ ); 2026-10-25T07:31:46.1474007Z ╰──── 2026-10-25T07:31:46.1474461Z  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-25T07:31:46.1474744Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-25T07:31:46.1474747Z 2026-10-25T07:31:46.1474888Z ⚠ react(refs): Cannot access refs during render 2026-10-25T07:31:46.1475041Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:242:20] 2026-10-25T07:31:46.1475132Z 241 │ return () => clearInterval(intervalId); 2026-10-25T07:31:46.1475245Z 242 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-25T07:31:46.1475334Z ·  ─────┬──── 2026-10-25T07:31:46.1475487Z · ╰── Cannot access ref value during render 2026-10-25T07:31:46.1475537Z 243 │ 2026-10-25T07:31:46.1475589Z ╰──── 2026-10-25T07:31:46.1476044Z  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-25T07:31:46.1476326Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-25T07:31:46.1476328Z 2026-10-25T07:31:46.1476472Z ⚠ react(refs): Cannot access refs during render 2026-10-25T07:31:46.1476627Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:242:6] 2026-10-25T07:31:46.1476717Z 241 │ return () => clearInterval(intervalId); 2026-10-25T07:31:46.1476825Z 242 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-25T07:31:46.1476951Z ·  ────────────────────────┬─────────────────────── 2026-10-25T07:31:46.1477106Z · ╰── Cannot access ref value during render 2026-10-25T07:31:46.1477157Z 243 │ 2026-10-25T07:31:46.1477209Z ╰──── 2026-10-25T07:31:46.1477665Z  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-25T07:31:46.1478001Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-25T07:31:46.1478042Z 2026-10-25T07:31:46.1478184Z ⚠ react(refs): Cannot access refs during render 2026-10-25T07:31:46.1478337Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:257:5] 2026-10-25T07:31:46.1478405Z 256 │ setOwnerFocused, 2026-10-25T07:31:46.1478467Z 257 │ session, 2026-10-25T07:31:46.1478538Z ·  ───┬─── 2026-10-25T07:31:46.1478671Z · ╰── Cannot access ref value during render 2026-10-25T07:31:46.1478731Z 258 │ stop, 2026-10-25T07:31:46.1478784Z ╰──── 2026-10-25T07:31:46.1479245Z  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-25T07:31:46.1479530Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-25T07:31:46.1479533Z 2026-10-25T07:31:46.1479702Z ⚠ react(refs): Cannot access refs during render 2026-10-25T07:31:46.1479855Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:247:10] 2026-10-25T07:31:46.1479911Z 246 │ 2026-10-25T07:31:46.1480049Z 247 │ ╭─▶ return { 2026-10-25T07:31:46.1480258Z 248 │ │ isAvailable: getLocalVoiceTranscriber() !== null || getNativeShowcaseScene() !== null, 2026-10-25T07:31:46.1480343Z 249 │ │ state, 2026-10-25T07:31:46.1480432Z 250 │ │ audioLevels, 2026-10-25T07:31:46.1480526Z 251 │ │ elapsedSeconds, 2026-10-25T07:31:46.1480656Z 252 │ │ isBusy: voiceInputBlocksSubmission(state), 2026-10-25T07:31:46.1480739Z 253 │ │ ownerKey, 2026-10-25T07:31:46.1480815Z 254 │ │ label, 2026-10-25T07:31:46.1480907Z 255 │ │ focusedOwners, 2026-10-25T07:31:46.1481001Z 256 │ │ setOwnerFocused, 2026-10-25T07:31:46.1481082Z 257 │ │ session, 2026-10-25T07:31:46.1481157Z 258 │ │ stop, 2026-10-25T07:31:46.1481236Z 259 │ │ cancel, 2026-10-25T07:31:46.1481413Z 260 │ ├─▶ }; 2026-10-25T07:31:46.1481637Z · ╰──── Cannot access ref value during render 2026-10-25T07:31:46.1481694Z 261 │ } 2026-10-25T07:31:46.1481745Z ╰──── 2026-10-25T07:31:46.1482205Z  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-25T07:31:46.1482489Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-25T07:31:46.1482491Z 2026-10-25T07:31:46.1482646Z ⚠ react(immutability): This value cannot be modified 2026-10-25T07:31:46.1482810Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:208:7] 2026-10-25T07:31:46.1482969Z 119 │ const audioLevelsRef = useRef(Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-25T07:31:46.1483091Z 120 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-25T07:31:46.1483169Z ·  ─────┬───── 2026-10-25T07:31:46.1483304Z · ╰── `audioLevels` originates here 2026-10-25T07:31:46.1483423Z 121 │ const sessionRef = useRef(null); 2026-10-25T07:31:46.1483564Z 122 │ const recorderRef = useRef | null>(null); 2026-10-25T07:31:46.1483617Z 123 │ 2026-10-25T07:31:46.1483723Z 124 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-25T07:31:46.1483823Z 125 │ const recorder = createLazyVoiceRecorder({ 2026-10-25T07:31:46.1483964Z 126 │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-25T07:31:46.1484060Z 127 │ onStatus: (status: RecordingStatus) => { 2026-10-25T07:31:46.1484183Z 128 │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-25T07:31:46.1484270Z 129 │ isFinished: status.isFinished, 2026-10-25T07:31:46.1484414Z 130 │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-25T07:31:46.1484485Z 131 │ error: status.error, 2026-10-25T07:31:46.1484554Z 132 │ url: status.url, 2026-10-25T07:31:46.1484614Z 133 │ }); 2026-10-25T07:31:46.1484673Z 134 │ }, 2026-10-25T07:31:46.1484835Z 135 │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-25T07:31:46.1484911Z 136 │ selectInput: (inputs) => { 2026-10-25T07:31:46.1485037Z 137 │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-25T07:31:46.1485153Z 138 │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-25T07:31:46.1485284Z 139 │ const known = microphoneOrder(preferences.value.microphones); 2026-10-25T07:31:46.1485388Z 140 │ const order = rememberMicrophones(known, inputs); 2026-10-25T07:31:46.1485461Z 141 │ if (order !== known) { 2026-10-25T07:31:46.1485567Z 142 │ registry.set(updateMobilePreferencesAtom, { 2026-10-25T07:31:46.1485649Z 143 │ transform: (current) => ({ 2026-10-25T07:31:46.1485820Z 144 │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-25T07:31:46.1485881Z 145 │ }), 2026-10-25T07:31:46.1485943Z 146 │ }); 2026-10-25T07:31:46.1486001Z 147 │ } 2026-10-25T07:31:46.1486111Z 148 │ return preferredMicrophoneInput(inputs, order); 2026-10-25T07:31:46.1486215Z 149 │ }, 2026-10-25T07:31:46.1486305Z 150 │ }); 2026-10-25T07:31:46.1486388Z 151 │ recorderRef.current = recorder; 2026-10-25T07:31:46.1486490Z 152 │ sessionRef.current = new VoiceInputSession({ 2026-10-25T07:31:46.1486553Z 153 │ recorder, 2026-10-25T07:31:46.1486650Z 154 │ getTranscriber: getLocalVoiceTranscriber, 2026-10-25T07:31:46.1486736Z 155 │ requestPermission: async () => { 2026-10-25T07:31:46.1486865Z 156 │ const permission = await requestRecordingPermissionsAsync(); 2026-10-25T07:31:46.1487020Z 157 │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-25T07:31:46.1487075Z 158 │ }, 2026-10-25T07:31:46.1487185Z 159 │ configureRecording: configureVoiceRecordingAudio, 2026-10-25T07:31:46.1487289Z 160 │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-25T07:31:46.1487398Z 161 │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-25T07:31:46.1487479Z 162 │ onStateChange: (nextState) => 2026-10-25T07:31:46.1487542Z 163 │ setState({ 2026-10-25T07:31:46.1487615Z 164 │ state: nextState, 2026-10-25T07:31:46.1487720Z 165 │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-25T07:31:46.1487817Z 166 │ label: sessionRef.current?.label ?? null, 2026-10-25T07:31:46.1487875Z 167 │ }), 2026-10-25T07:31:46.1487933Z 168 │ }); 2026-10-25T07:31:46.1487989Z 169 │ } 2026-10-25T07:31:46.1488042Z 170 │ 2026-10-25T07:31:46.1488126Z 171 │ const session = sessionRef.current; 2026-10-25T07:31:46.1488216Z 172 │ const controller = session.controller; 2026-10-25T07:31:46.1488301Z 173 │ const recorder = recorderRef.current; 2026-10-25T07:31:46.1488356Z 174 │ 2026-10-25T07:31:46.1488425Z 175 │ useEffect(() => { 2026-10-25T07:31:46.1488575Z 176 │ const subscription = AppState.addEventListener("change", (nextState) => { 2026-10-25T07:31:46.1488818Z 177 │ // iOS permission dialogs report inactive; cancel preparation only on background. Recorder status handles capture interruptions. 2026-10-25T07:31:46.1488954Z 178 │ if (nextState === "background") controller.appMovedToBackground(); 2026-10-25T07:31:46.1489009Z 179 │ }); 2026-10-25T07:31:46.1489091Z 180 │ return () => subscription.remove(); 2026-10-25T07:31:46.1489156Z 181 │ }, [controller]); 2026-10-25T07:31:46.1489208Z 182 │ 2026-10-25T07:31:46.1489268Z 183 │ useEffect( 2026-10-25T07:31:46.1489328Z 184 │ () => () => { 2026-10-25T07:31:46.1489401Z 185 │ controller.dispose(); 2026-10-25T07:31:46.1489470Z 186 │ recorder.release(); 2026-10-25T07:31:46.1489526Z 187 │ }, 2026-10-25T07:31:46.1489601Z 188 │ [controller, recorder], 2026-10-25T07:31:46.1489684Z 189 │ ); 2026-10-25T07:31:46.1489740Z 190 │ 2026-10-25T07:31:46.1489803Z 191 │ useEffect(() => { 2026-10-25T07:31:46.1489896Z 192 │ if (state.phase !== "recording") return; 2026-10-25T07:31:46.1489947Z 193 │ 2026-10-25T07:31:46.1490096Z 194 │ const tag = `voice-input:${keepAwakeId}:${++keepAwakeSessionRef.current}`; 2026-10-25T07:31:46.1490201Z 195 │ const activation = activateKeepAwakeAsync(tag); 2026-10-25T07:31:46.1490280Z 196 │ void activation.catch(() => {}); 2026-10-25T07:31:46.1490343Z 197 │ return () => { 2026-10-25T07:31:46.1490493Z 198 │ // Release after activation settles, even if the recording ends immediately. 2026-10-25T07:31:46.1490629Z 199 │ void activation.then(() => deactivateKeepAwake(tag)).catch(() => {}); 2026-10-25T07:31:46.1490685Z 200 │ }; 2026-10-25T07:31:46.1490817Z 201 │ }, [keepAwakeId, state.phase]); 2026-10-25T07:31:46.1490902Z 202 │ 2026-10-25T07:31:46.1490967Z 203 │ useEffect(() => { 2026-10-25T07:31:46.1491100Z 204 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-25T07:31:46.1491154Z 205 │ 2026-10-25T07:31:46.1491272Z 206 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-25T07:31:46.1491426Z 207 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-25T07:31:46.1491529Z 208 │ audioLevels.value = audioLevelsRef.current; 2026-10-25T07:31:46.1491609Z ·  ─────┬───── 2026-10-25T07:31:46.1491749Z · ╰── `audioLevels` cannot be modified 2026-10-25T07:31:46.1491801Z 209 │ } 2026-10-25T07:31:46.1491853Z ╰──── 2026-10-25T07:31:46.1492124Z  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-25T07:31:46.1492434Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-25T07:31:46.1492436Z 2026-10-25T07:31:46.1492639Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-25T07:31:46.1492795Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:208:7] 2026-10-25T07:31:46.1492849Z 202 │ 2026-10-25T07:31:46.1492914Z 203 │ useEffect(() => { 2026-10-25T07:31:46.1492991Z ·  ───┬─── 2026-10-25T07:31:46.1493204Z · ╰── This function may (indirectly) reassign or modify `audioLevels` after render 2026-10-25T07:31:46.1493344Z 204 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-25T07:31:46.1493401Z 205 │ 2026-10-25T07:31:46.1493524Z 206 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-25T07:31:46.1493676Z 207 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-25T07:31:46.1493775Z 208 │ audioLevels.value = audioLevelsRef.current; 2026-10-25T07:31:46.1493853Z ·  ─────┬───── 2026-10-25T07:31:46.1493982Z · ╰── This modifies `audioLevels` 2026-10-25T07:31:46.1494039Z 209 │ } 2026-10-25T07:31:46.1494090Z ╰──── 2026-10-25T07:31:46.1494426Z  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-25T07:31:46.1494733Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-25T07:31:46.1494738Z 2026-10-25T07:31:46.1494939Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-25T07:31:46.1495098Z ╭─[apps/mobile/src/features/diffs/nativeReviewDiffSurface.ts:266:35] 2026-10-25T07:31:46.1495153Z 265 │ }; 2026-10-25T07:31:46.1495287Z 266 │ }, [method, nativeRef, payload, resetKey, onFailure, onDelivered]); 2026-10-25T07:31:46.1495391Z ·  ────┬─── 2026-10-25T07:31:46.1495549Z · ╰── Unnecessary dependency `resetKey` 2026-10-25T07:31:46.1495603Z 267 │ } 2026-10-25T07:31:46.1495654Z ╰──── 2026-10-25T07:31:46.1495994Z  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-25T07:31:46.1496338Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.1496341Z 2026-10-25T07:31:46.1496484Z ⚠ react(refs): Cannot access refs during render 2026-10-25T07:31:46.1496639Z ╭─[apps/mobile/src/features/diffs/nativeReviewDiffSurface.ts:390:39] 2026-10-25T07:31:46.1496695Z 389 │ 2026-10-25T07:31:46.1496874Z 390 │ ╭─▶ return createElement(RawNativeView, { 2026-10-25T07:31:46.1496970Z 391 │ │ ...nativeProps, 2026-10-25T07:31:46.1497118Z 392 │ │ refreshEnabled: props.onPullToRefresh !== undefined, 2026-10-25T07:31:46.1497220Z 393 │ │ onDebug: (event) => { 2026-10-25T07:31:46.1497369Z 394 │ │ if (event.nativeEvent.message === "rows-decode-failed") { 2026-10-25T07:31:46.1497570Z 395 │ │ console.error("[native-review-diff] rows decode failed", event.nativeEvent.error); 2026-10-25T07:31:46.1497669Z 396 │ │ onRowsFailure(); 2026-10-25T07:31:46.1497743Z 397 │ │ } 2026-10-25T07:31:46.1497838Z 398 │ │ onDebug?.(event); 2026-10-25T07:31:46.1497911Z 399 │ │ }, 2026-10-25T07:31:46.1498001Z 400 │ │ ref: nativeRef, 2026-10-25T07:31:46.1498131Z 401 │ ├─▶ }); 2026-10-25T07:31:46.1498372Z · ╰──── Passing a ref to a function may read its value during render 2026-10-25T07:31:46.1498431Z 402 │ } 2026-10-25T07:31:46.1498482Z ╰──── 2026-10-25T07:31:46.1498942Z  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-25T07:31:46.1499225Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-25T07:31:46.1499227Z 2026-10-25T07:31:46.1499381Z ⚠ react(immutability): This value cannot be modified 2026-10-25T07:31:46.1499550Z ╭─[apps/mobile/src/features/voice-input/GlobalVoiceInputControl.tsx:68:5] 2026-10-25T07:31:46.1499659Z 65 │ const [expanded, setExpanded] = useState(false); 2026-10-25T07:31:46.1499741Z 66 │ const progress = useSharedValue(0); 2026-10-25T07:31:46.1500007Z ·  ────┬─── 2026-10-25T07:31:46.1500138Z · ╰── `progress` originates here 2026-10-25T07:31:46.1500202Z 67 │ useEffect(() => { 2026-10-25T07:31:46.1500322Z 68 │ progress.value = withTiming(expanded ? 1 : 0, MORPH_TIMING); 2026-10-25T07:31:46.1500393Z ·  ────┬─── 2026-10-25T07:31:46.1500522Z · ╰── `progress` cannot be modified 2026-10-25T07:31:46.1500595Z 69 │ }, [expanded, progress]); 2026-10-25T07:31:46.1500646Z ╰──── 2026-10-25T07:31:46.1500958Z  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-25T07:31:46.1501286Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-25T07:31:46.1501289Z 2026-10-25T07:31:46.1501522Z ⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence. 2026-10-25T07:31:46.1501657Z ╭─[apps/web/src/components/chat/useComposerSend.ts:985:13] 2026-10-25T07:31:46.1501776Z 984 │ const changedBeforeDecline = draftChangedSinceSend(); 2026-10-25T07:31:46.1502008Z 985 │ ╭─▶ const pendingIdsBeforeDecline = pendingApprovalsRef.current.map( 2026-10-25T07:31:46.1502132Z 986 │ │ (approval) => approval.requestId, 2026-10-25T07:31:46.1502264Z 987 │ ╰─▶ ); 2026-10-25T07:31:46.1502400Z 988 │ const approvalResponding = approvalsToDecline.some((approval) => 2026-10-25T07:31:46.1502450Z ╰──── 2026-10-25T07:31:46.1502525Z  help: Switch to `Set` 2026-10-25T07:31:46.1502527Z 2026-10-25T07:31:46.1502711Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-25T07:31:46.1502875Z ╭─[apps/mobile/src/features/workspace/workspace-selection-store.ts:52:72] 2026-10-25T07:31:46.1503046Z 51 │ function withoutRouteKeys(saved: WorkspaceSelections | undefined): WorkspaceSelections { 2026-10-25T07:31:46.1503217Z 52 │ const omitKey = ({ key: _, ...rest }: Selection) => 2026-10-25T07:31:46.1503342Z ·  ┬ 2026-10-25T07:31:46.1503507Z · ╰── '_' is declared here 2026-10-25T07:31:46.1503564Z 53 │ rest; 2026-10-25T07:31:46.1503615Z ╰──── 2026-10-25T07:31:46.1503714Z  help: Consider removing this parameter. 2026-10-25T07:31:46.1503717Z 2026-10-25T07:31:46.1503980Z ⚠ eslint(no-unused-vars): Variable 'navigation' is declared but never used. Unused variables should start with a '_'. 2026-10-25T07:31:46.1504140Z ╭─[apps/mobile/src/features/workspace/WorkspaceSectionToolbar.tsx:23:9] 2026-10-25T07:31:46.1504232Z 22 │ const selectTab = useSelectWorkspaceTab(); 2026-10-25T07:31:46.1504311Z 23 │ const navigation = useNavigation(); 2026-10-25T07:31:46.1504383Z ·  ─────┬──── 2026-10-25T07:31:46.1504568Z · ╰── 'navigation' is declared here 2026-10-25T07:31:46.1504662Z 24 │ const selected = selectedNavigationTab( 2026-10-25T07:31:46.1504712Z ╰──── 2026-10-25T07:31:46.1504812Z  help: Consider removing this declaration. 2026-10-25T07:31:46.1504816Z 2026-10-25T07:31:46.1505009Z ⚠ eslint(no-unused-vars): Identifier 'Duration' is imported but never used. 2026-10-25T07:31:46.1505141Z ╭─[packages/provider-pi/src/server/adapter.test.ts:24:13] 2026-10-25T07:31:46.1505231Z 23 │ import * as Deferred from "effect/Deferred"; 2026-10-25T07:31:46.1505317Z 24 │ import * as Duration from "effect/Duration"; 2026-10-25T07:31:46.1505391Z ·  ────┬─── 2026-10-25T07:31:46.1505520Z · ╰── 'Duration' is imported here 2026-10-25T07:31:46.1505673Z 25 │ import * as Effect from "effect/Effect"; 2026-10-25T07:31:46.1505762Z ╰──── 2026-10-25T07:31:46.1505857Z  help: Consider removing this import. 2026-10-25T07:31:46.1505860Z 2026-10-25T07:31:46.1506117Z ⚠ eslint(no-unused-vars): Variable 'navigation' is declared but never used. Unused variables should start with a '_'. 2026-10-25T07:31:46.1506280Z ╭─[apps/mobile/src/features/workspace/WorkspaceSidebarTabs.ios.tsx:32:9] 2026-10-25T07:31:46.1506423Z 31 │ const tabs = [...visibleNavigationTabs(order, hidden), "settings" as const]; 2026-10-25T07:31:46.1506505Z 32 │ const navigation = useNavigation(); 2026-10-25T07:31:46.1506579Z ·  ─────┬──── 2026-10-25T07:31:46.1506707Z · ╰── 'navigation' is declared here 2026-10-25T07:31:46.1506801Z 33 │ const selectTab = useSelectWorkspaceTab(); 2026-10-25T07:31:46.1506854Z ╰──── 2026-10-25T07:31:46.1506957Z  help: Consider removing this declaration. 2026-10-25T07:31:46.1506959Z 2026-10-25T07:31:46.1507209Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-25T07:31:46.1507335Z ╭─[packages/provider-pi/src/server/adapter.ts:3337:7] 2026-10-25T07:31:46.1507389Z 3336 │ 2026-10-25T07:31:46.1507577Z 3337 │ const layer: Layer.Layer = 2026-10-25T07:31:46.1507646Z ·  ──┬── 2026-10-25T07:31:46.1507766Z · ╰── 'layer' is declared here 2026-10-25T07:31:46.1507829Z 3338 │ Layer.effect( 2026-10-25T07:31:46.1507881Z ╰──── 2026-10-25T07:31:46.1507986Z  help: Consider removing this declaration. 2026-10-25T07:31:46.1507992Z 2026-10-25T07:31:46.1508200Z ⚠ eslint(no-unused-vars): Identifier 'serverEnvironment' is imported but never used. 2026-10-25T07:31:46.1508322Z ╭─[apps/web/src/components/chat/ChatHeader.tsx:27:10] 2026-10-25T07:31:46.1508432Z 26 │ import { threadEnvironment } from "../../state/threads"; 2026-10-25T07:31:46.1508537Z 27 │ import { serverEnvironment } from "../../state/server"; 2026-10-25T07:31:46.1508622Z ·  ────────┬──────── 2026-10-25T07:31:46.1508767Z · ╰── 'serverEnvironment' is imported here 2026-10-25T07:31:46.1508897Z 28 │ import { canShareWithGuestAtom } from "./guestShareAvailability"; 2026-10-25T07:31:46.1508946Z ╰──── 2026-10-25T07:31:46.1509041Z  help: Consider removing this import. 2026-10-25T07:31:46.1509050Z 2026-10-25T07:31:46.1509249Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-25T07:31:46.1509405Z ╭─[apps/mobile/src/features/workspace/WorkspaceToolbar.ios.tsx:128:33] 2026-10-25T07:31:46.1509501Z 127 │ return () => cancelAnimationFrame(frame); 2026-10-25T07:31:46.1509601Z 128 │ }, [restoreSearch, tabActive, bottomSearch]); 2026-10-25T07:31:46.1509715Z ·  ──────┬───── 2026-10-25T07:31:46.1509906Z · ╰── Unnecessary dependency `bottomSearch` 2026-10-25T07:31:46.1510007Z 129 │ const composeButton = nativeToolbarCompose ? ( 2026-10-25T07:31:46.1510057Z ╰──── 2026-10-25T07:31:46.1510395Z  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-25T07:31:46.1510735Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.1510738Z 2026-10-25T07:31:46.1511199Z ⚠ 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-25T07:31:46.1511375Z ╭─[apps/mobile/src/features/agent-awareness/remoteRegistration.test.ts:222:5] 2026-10-25T07:31:46.1511446Z 221 │ let idlePasses = 0; 2026-10-25T07:31:46.1511585Z 222 │ ╭─▶ for (;;) { 2026-10-25T07:31:46.1511724Z 223 │ │ yield* Effect.promise(() => Promise.resolve()); 2026-10-25T07:31:46.1511867Z 224 │ │ const pending = backgroundRuntime.pending.shift(); 2026-10-25T07:31:46.1511958Z 225 │ │ if (!pending) { 2026-10-25T07:31:46.1512048Z 226 │ │ idlePasses++; 2026-10-25T07:31:46.1512153Z 227 │ │ if (idlePasses >= 3) { 2026-10-25T07:31:46.1512236Z 228 │ │ return; 2026-10-25T07:31:46.1512312Z 229 │ │ } 2026-10-25T07:31:46.1512394Z 230 │ │ continue; 2026-10-25T07:31:46.1512468Z 231 │ │ } 2026-10-25T07:31:46.1512559Z 232 │ │ idlePasses = 0; 2026-10-25T07:31:46.1512671Z 233 │ │ const exit = yield* Effect.exit( 2026-10-25T07:31:46.1512888Z 234 │ │ pending.operation as Effect.Effect, 2026-10-25T07:31:46.1512966Z 235 │ │ ); 2026-10-25T07:31:46.1513068Z 236 │ │ yield* Effect.sync(() => { 2026-10-25T07:31:46.1513170Z 237 │ │ pending.resolve(exit); 2026-10-25T07:31:46.1513246Z 238 │ │ }); 2026-10-25T07:31:46.1513370Z 239 │ ╰─▶ } 2026-10-25T07:31:46.1513426Z 240 │ }, 2026-10-25T07:31:46.1513476Z ╰──── 2026-10-25T07:31:46.1513479Z 2026-10-25T07:31:46.1513758Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-25T07:31:46.1513963Z ╭─[apps/web/src/components/settings/SettingInheritance.tsx:160:24] 2026-10-25T07:31:46.1514052Z 159 │ keys, 2026-10-25T07:31:46.1514123Z 160 │ overridingProjects = [], 2026-10-25T07:31:46.1514203Z ·  ── 2026-10-25T07:31:46.1514268Z 161 │ onClearOverrides, 2026-10-25T07:31:46.1514318Z ╰──── 2026-10-25T07:31:46.1514633Z  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-25T07:31:46.1514636Z 2026-10-25T07:31:46.1514818Z ⚠ react(static-components): Cannot create components during render 2026-10-25T07:31:46.1514974Z ╭─[apps/mobile/src/features/terminal/NativeTerminalSurface.tsx:234:10] 2026-10-25T07:31:46.1515058Z 196 │ const { onInput, onResize } = props; 2026-10-25T07:31:46.1515205Z 197 │ const NativeTerminalSurfaceView = resolveNativeTerminalSurfaceView(); 2026-10-25T07:31:46.1515336Z ·  ────────────────┬─────────────── 2026-10-25T07:31:46.1515520Z · ╰── The component is created during render here 2026-10-25T07:31:46.1515644Z 198 │ const hasNativeSurface = Boolean(NativeTerminalSurfaceView); 2026-10-25T07:31:46.1515696Z 199 │ 2026-10-25T07:31:46.1515759Z 200 │ useEffect(() => { 2026-10-25T07:31:46.1515845Z 201 │ terminalDebugLog("native:surface", { 2026-10-25T07:31:46.1515928Z 202 │ terminalKey: props.terminalKey, 2026-10-25T07:31:46.1516003Z 203 │ native: hasNativeSurface, 2026-10-25T07:31:46.1516135Z 204 │ hardwareKeyRevision: getNativeTerminalHardwareKeyRevision(), 2026-10-25T07:31:46.1516222Z 205 │ bufferLen: props.buffer.length, 2026-10-25T07:31:46.1516300Z 206 │ isRunning: props.isRunning, 2026-10-25T07:31:46.1516354Z 207 │ }); 2026-10-25T07:31:46.1516511Z 208 │ }, [hasNativeSurface, props.buffer.length, props.isRunning, props.terminalKey]); 2026-10-25T07:31:46.1516595Z 209 │ const handleNativeInput = useCallback( 2026-10-25T07:31:46.1516707Z 210 │ (event: NativeSyntheticEvent) => { 2026-10-25T07:31:46.1516800Z 211 │ if (!props.isRunning || props.readOnly) { 2026-10-25T07:31:46.1516861Z 212 │ return; 2026-10-25T07:31:46.1516913Z 213 │ } 2026-10-25T07:31:46.1517001Z 214 │ terminalDebugLog("native:onInput", { 2026-10-25T07:31:46.1517149Z 215 │ codes: Array.from(event.nativeEvent.data, (char) => char.codePointAt(0)), 2026-10-25T07:31:46.1517207Z 216 │ }); 2026-10-25T07:31:46.1517291Z 217 │ onInput(event.nativeEvent.data); 2026-10-25T07:31:46.1517349Z 218 │ }, 2026-10-25T07:31:46.1517449Z 219 │ [onInput, props.isRunning, props.readOnly], 2026-10-25T07:31:46.1517502Z 220 │ ); 2026-10-25T07:31:46.1517589Z 221 │ const handleNativeResize = useCallback( 2026-10-25T07:31:46.1517700Z 222 │ (event: NativeSyntheticEvent) => { 2026-10-25T07:31:46.1517762Z 223 │ onResize({ 2026-10-25T07:31:46.1517841Z 224 │ cols: event.nativeEvent.cols, 2026-10-25T07:31:46.1517921Z 225 │ rows: event.nativeEvent.rows, 2026-10-25T07:31:46.1517977Z 226 │ }); 2026-10-25T07:31:46.1518029Z 227 │ }, 2026-10-25T07:31:46.1518089Z 228 │ [onResize], 2026-10-25T07:31:46.1518141Z 229 │ ); 2026-10-25T07:31:46.1518192Z 230 │ 2026-10-25T07:31:46.1518270Z 231 │ if (NativeTerminalSurfaceView) { 2026-10-25T07:31:46.1518329Z 232 │ return ( 2026-10-25T07:31:46.1518457Z 233 │ 2026-10-25T07:31:46.1518562Z 234 │ event.type === "snapshot").at(-1)?.snapshot; 2026-10-25T07:31:46.1520227Z ·  ────── 2026-10-25T07:31:46.1520344Z 732 │ expect(snapshot?.history).toBe("aa😀\rEND"); 2026-10-25T07:31:46.1520395Z ╰──── 2026-10-25T07:31:46.1520561Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-25T07:31:46.1520564Z 2026-10-25T07:31:46.1520931Z ⚠ 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-25T07:31:46.1521057Z ╭─[packages/shared/src/otelEnvironment.ts:146:14] 2026-10-25T07:31:46.1521117Z 145 │ name, 2026-10-25T07:31:46.1521255Z 146 │ (raw) => Schema.decodeUnknownOption(OtlpProtocol)(raw.toLowerCase()), 2026-10-25T07:31:46.1521359Z ·  ────────────────────────── 2026-10-25T07:31:46.1521476Z 147 │ `${name} is not http/protobuf or http/json, ${NOT_EXPORTED}`, 2026-10-25T07:31:46.1521526Z ╰──── 2026-10-25T07:31:46.1521528Z 2026-10-25T07:31:46.1521788Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-25T07:31:46.1521956Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:641:5] 2026-10-25T07:31:46.1522009Z 636 │ 2026-10-25T07:31:46.1522075Z 637 │ useEffect(() => { 2026-10-25T07:31:46.1522150Z ·  ────┬──── 2026-10-25T07:31:46.1522282Z · ╰── This is the containing effect 2026-10-25T07:31:46.1522390Z 638 │ if (pendingLaunchEntry.key === launchTargetKey) { 2026-10-25T07:31:46.1522450Z 639 │ return; 2026-10-25T07:31:46.1522502Z 640 │ } 2026-10-25T07:31:46.1522576Z 641 │ setPendingLaunchEntry({ 2026-10-25T07:31:46.1522664Z ·  ──────────┬────────── 2026-10-25T07:31:46.1522834Z · ╰── Avoid calling setState() directly within an effect 2026-10-25T07:31:46.1522903Z 642 │ key: launchTargetKey, 2026-10-25T07:31:46.1522953Z ╰──── 2026-10-25T07:31:46.1523672Z  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-25T07:31:46.1524029Z  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-25T07:31:46.1524032Z 2026-10-25T07:31:46.1524287Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-25T07:31:46.1524453Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:651:5] 2026-10-25T07:31:46.1524504Z 646 │ 2026-10-25T07:31:46.1524567Z 647 │ useEffect(() => { 2026-10-25T07:31:46.1524635Z ·  ────┬──── 2026-10-25T07:31:46.1524762Z · ╰── This is the containing effect 2026-10-25T07:31:46.1524876Z 648 │ if (initialAttachGridEntry.key === launchTargetKey) { 2026-10-25T07:31:46.1524938Z 649 │ return; 2026-10-25T07:31:46.1524991Z 650 │ } 2026-10-25T07:31:46.1525069Z 651 │ setInitialAttachGridEntry({ 2026-10-25T07:31:46.1525160Z ·  ────────────┬──────────── 2026-10-25T07:31:46.1525328Z · ╰── Avoid calling setState() directly within an effect 2026-10-25T07:31:46.1525398Z 652 │ key: launchTargetKey, 2026-10-25T07:31:46.1525448Z ╰──── 2026-10-25T07:31:46.1526033Z  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-25T07:31:46.1526353Z  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-25T07:31:46.1526358Z 2026-10-25T07:31:46.1526607Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-25T07:31:46.1526771Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:744:7] 2026-10-25T07:31:46.1526822Z 741 │ 2026-10-25T07:31:46.1526885Z 742 │ useEffect(() => { 2026-10-25T07:31:46.1526954Z ·  ────┬──── 2026-10-25T07:31:46.1527077Z · ╰── This is the containing effect 2026-10-25T07:31:46.1527176Z 743 │ if (!routeEnvironmentId || !routeThreadId) { 2026-10-25T07:31:46.1527243Z 744 │ setLastGridSize({ 2026-10-25T07:31:46.1527326Z ·  ───────┬─────── 2026-10-25T07:31:46.1527494Z · ╰── Avoid calling setState() directly within an effect 2026-10-25T07:31:46.1527575Z 745 │ cols: DEFAULT_TERMINAL_COLS, 2026-10-25T07:31:46.1527629Z ╰──── 2026-10-25T07:31:46.1528214Z  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-25T07:31:46.1528529Z  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-25T07:31:46.1528531Z 2026-10-25T07:31:46.1528776Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-25T07:31:46.1528969Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:536:24] 2026-10-25T07:31:46.1529025Z 535 │ }); 2026-10-25T07:31:46.1529146Z 536 │ }, [terminal.buffer, terminal.buffer.length, terminalKey]); 2026-10-25T07:31:46.1529252Z ·  ───────────┬────────── 2026-10-25T07:31:46.1529492Z · ╰── Overly precise dependency `terminal.buffer.length`, use `terminal.buffer` instead 2026-10-25T07:31:46.1529679Z 537 │ const cwd = terminal.summary?.cwd ?? selectedThreadProject?.workspaceRoot ?? null; 2026-10-25T07:31:46.1529730Z ╰──── 2026-10-25T07:31:46.1530023Z  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-25T07:31:46.1530332Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.1530335Z 2026-10-25T07:31:46.1530532Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-25T07:31:46.1530694Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:707:7] 2026-10-25T07:31:46.1530787Z 706 │ sentInitialInputKeyRef.current = null; 2026-10-25T07:31:46.1530851Z 707 │ }, [terminalKey]); 2026-10-25T07:31:46.1530925Z ·  ─────┬───── 2026-10-25T07:31:46.1531064Z · ╰── Unnecessary dependency `terminalKey` 2026-10-25T07:31:46.1531113Z 708 │ 2026-10-25T07:31:46.1531168Z ╰──── 2026-10-25T07:31:46.1531459Z  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-25T07:31:46.1531763Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.1531765Z 2026-10-25T07:31:46.1531960Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-25T07:31:46.1532124Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:798:52] 2026-10-25T07:31:46.1532178Z 797 │ }; 2026-10-25T07:31:46.1532352Z 798 │ }, [canOperateTerminal, isRunning, pasteSession, terminal.lifecycleVersion, terminalKey]); 2026-10-25T07:31:46.1532528Z ·  ────────────┬──────────── ─────┬───── 2026-10-25T07:31:46.1532757Z · │ ╰── Unnecessary dependency `terminalKey` 2026-10-25T07:31:46.1532960Z · ╰── Unnecessary dependency `terminal.lifecycleVersion` 2026-10-25T07:31:46.1533011Z 799 │ 2026-10-25T07:31:46.1533061Z ╰──── 2026-10-25T07:31:46.1533349Z  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-25T07:31:46.1533651Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.1533706Z 2026-10-25T07:31:46.1533874Z ⚠ react(refs): Cannot access refs during render 2026-10-25T07:31:46.1534039Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:791:24] 2026-10-25T07:31:46.1534093Z 790 │ } 2026-10-25T07:31:46.1534196Z 791 │ const pasteSession = pasteSessionRef.current; 2026-10-25T07:31:46.1534306Z ·  ───────────┬─────────── 2026-10-25T07:31:46.1534464Z · ╰── Cannot access ref value during render 2026-10-25T07:31:46.1534515Z 792 │ 2026-10-25T07:31:46.1534570Z ╰──── 2026-10-25T07:31:46.1535035Z  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-25T07:31:46.1535320Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-25T07:31:46.1535323Z 2026-10-25T07:31:46.1535510Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-25T07:31:46.1535664Z ╭─[apps/mobile/src/features/terminal/TerminalContextSheet.tsx:72:15] 2026-10-25T07:31:46.1535731Z 71 │ ({ key: input.targetKey, location: candidate })); 2026-10-25T07:31:46.1536799Z 113 │ useEffect(() => { 2026-10-25T07:31:46.1536867Z ·  ────┬──── 2026-10-25T07:31:46.1536993Z · ╰── This is the containing effect 2026-10-25T07:31:46.1537151Z 114 │ if (entry.key === input.targetKey && (entry.location !== null || candidate === null)) { 2026-10-25T07:31:46.1537212Z 115 │ return; 2026-10-25T07:31:46.1537265Z 116 │ } 2026-10-25T07:31:46.1537430Z 117 │ setEntry({ key: input.targetKey, location: candidate }); 2026-10-25T07:31:46.1537529Z ·  ────┬─── 2026-10-25T07:31:46.1537691Z · ╰── Avoid calling setState() directly within an effect 2026-10-25T07:31:46.1537810Z 118 │ }, [candidate, entry.key, entry.location, input.targetKey]); 2026-10-25T07:31:46.1537860Z ╰──── 2026-10-25T07:31:46.1538446Z  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-25T07:31:46.1538763Z  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-25T07:31:46.1538768Z 2026-10-25T07:31:46.1539098Z ⚠ 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-25T07:31:46.1539239Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:50:18] 2026-10-25T07:31:46.1539398Z 49 │ for (const tool of ["sendMessage", "followupTask", "interruptAgent", "listAgents"]) { 2026-10-25T07:31:46.1539564Z 50 │ assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true); 2026-10-25T07:31:46.1539657Z ·  ───────── 2026-10-25T07:31:46.1539861Z 51 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true); 2026-10-25T07:31:46.1539909Z ╰──── 2026-10-25T07:31:46.1539912Z 2026-10-25T07:31:46.1540242Z ⚠ 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-25T07:31:46.1540384Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:51:18] 2026-10-25T07:31:46.1540549Z 50 │ assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true); 2026-10-25T07:31:46.1540721Z 51 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true); 2026-10-25T07:31:46.1540802Z ·  ───────── 2026-10-25T07:31:46.1540857Z 52 │ } 2026-10-25T07:31:46.1540908Z ╰──── 2026-10-25T07:31:46.1540911Z 2026-10-25T07:31:46.1541235Z ⚠ 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-25T07:31:46.1541378Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:55:5] 2026-10-25T07:31:46.1541442Z 54 │ assert.equal( 2026-10-25T07:31:46.1541609Z 55 │ Schema.is(CodexSchema.ServerNotification__CollabAgentToolCallStatus)("interrupted"), 2026-10-25T07:31:46.1541679Z ·  ───────── 2026-10-25T07:31:46.1541734Z 56 │ true, 2026-10-25T07:31:46.1541783Z ╰──── 2026-10-25T07:31:46.1541785Z 2026-10-25T07:31:46.1542110Z ⚠ 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-25T07:31:46.1542247Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:59:5] 2026-10-25T07:31:46.1542308Z 58 │ assert.equal( 2026-10-25T07:31:46.1542531Z 59 │ Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentToolCallStatus)("interrupted"), 2026-10-25T07:31:46.1542630Z ·  ───────── 2026-10-25T07:31:46.1542687Z 60 │ true, 2026-10-25T07:31:46.1542736Z ╰──── 2026-10-25T07:31:46.1542739Z 2026-10-25T07:31:46.1543064Z ⚠ 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-25T07:31:46.1543210Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:103:16] 2026-10-25T07:31:46.1543260Z 102 │ 2026-10-25T07:31:46.1543424Z 103 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse)(resumeResponse), true); 2026-10-25T07:31:46.1543506Z ·  ───────── 2026-10-25T07:31:46.1543559Z 104 │ }); 2026-10-25T07:31:46.1543608Z ╰──── 2026-10-25T07:31:46.1543611Z 2026-10-25T07:31:46.1543799Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-25T07:31:46.1543906Z ╭─[packages/shared/src/qrCode.ts:458:44] 2026-10-25T07:31:46.1543969Z 457 │ ): Array { 2026-10-25T07:31:46.1544073Z 458 │ let result: Array = divisor.map((_) => 0); 2026-10-25T07:31:46.1544170Z ·  ┬ 2026-10-25T07:31:46.1544312Z · ╰── '_' is declared here 2026-10-25T07:31:46.1544381Z 459 │ for (const b of data) { 2026-10-25T07:31:46.1544431Z ╰──── 2026-10-25T07:31:46.1544576Z  help: Consider removing this parameter. 2026-10-25T07:31:46.1544579Z 2026-10-25T07:31:46.1544789Z ⚠ eslint(no-unused-vars): Identifier 'serverEnvironment' is imported but never used. 2026-10-25T07:31:46.1544920Z ╭─[apps/web/src/components/LegacySidebar.tsx:210:40] 2026-10-25T07:31:46.1545077Z 209 │ import { useClientSettings, updateClientSettings } from "~/hooks/useSettings"; 2026-10-25T07:31:46.1545239Z 210 │ import { primaryServerKeybindingsAtom, serverEnvironment } from "../state/server"; 2026-10-25T07:31:46.1545352Z ·  ────────┬──────── 2026-10-25T07:31:46.1545520Z · ╰── 'serverEnvironment' is imported here 2026-10-25T07:31:46.1545628Z 211 │ import { appAtomRegistry } from "../rpc/atomRegistry"; 2026-10-25T07:31:46.1545678Z ╰──── 2026-10-25T07:31:46.1545773Z  help: Consider removing this import. 2026-10-25T07:31:46.1545776Z 2026-10-25T07:31:46.1546232Z ⚠ 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-25T07:31:46.1546355Z ╭─[packages/effect-acp/src/errors.test.ts:129:28] 2026-10-25T07:31:46.1546443Z 128 │ const secret = "acp-summary-secret"; 2026-10-25T07:31:46.1546548Z 129 │ const cause = yield* Schema.decodeUnknownEffect( 2026-10-25T07:31:46.1546661Z ·  ────────────────────────── 2026-10-25T07:31:46.1546725Z 130 │ Schema.Struct({ 2026-10-25T07:31:46.1546775Z ╰──── 2026-10-25T07:31:46.1546778Z 2026-10-25T07:31:46.1547101Z ⚠ 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-25T07:31:46.1547216Z ╭─[packages/effect-acp/src/schema.test.ts:18:12] 2026-10-25T07:31:46.1547433Z 17 │ const command = { name: "plan", description: "Make a plan", input: { hint: "Task" } }; 2026-10-25T07:31:46.1547597Z 18 │ expect(Schema.is(V1.AvailableCommand)(command)).toBe(true); 2026-10-25T07:31:46.1547673Z ·  ───────── 2026-10-25T07:31:46.1547730Z 19 │ expect( 2026-10-25T07:31:46.1547781Z ╰──── 2026-10-25T07:31:46.1547783Z 2026-10-25T07:31:46.1548107Z ⚠ 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-25T07:31:46.1548223Z ╭─[packages/effect-acp/src/schema.test.ts:20:7] 2026-10-25T07:31:46.1548280Z 19 │ expect( 2026-10-25T07:31:46.1548445Z 20 │ Schema.is(V2.AvailableCommand)({ ...command, input: { type: "text", hint: "Task" } }), 2026-10-25T07:31:46.1548521Z ·  ───────── 2026-10-25T07:31:46.1548587Z 21 │ ).toBe(true); 2026-10-25T07:31:46.1548635Z ╰──── 2026-10-25T07:31:46.1548638Z 2026-10-25T07:31:46.1548861Z ⚠ eslint(no-unused-vars): Type 'EnvironmentThreadSearchMatch' is imported but never used. 2026-10-25T07:31:46.1548987Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:14:8] 2026-10-25T07:31:46.1549056Z 13 │ threadSearchMatchKey, 2026-10-25T07:31:46.1549140Z 14 │ type EnvironmentThreadSearchMatch, 2026-10-25T07:31:46.1549242Z ·  ──────────────┬───────────── 2026-10-25T07:31:46.1549415Z · ╰── 'EnvironmentThreadSearchMatch' is imported here 2026-10-25T07:31:46.1549520Z 15 │ } from "@t3tools/client-runtime/state/thread-search"; 2026-10-25T07:31:46.1549569Z ╰──── 2026-10-25T07:31:46.1549695Z  help: Consider removing this import. 2026-10-25T07:31:46.1549701Z 2026-10-25T07:31:46.1549896Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-25T07:31:46.1550024Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:484:25] 2026-10-25T07:31:46.1550230Z 483 │ // snoozeWakeTick re-arms clamped timers even when the wake date exceeds 32-bit setTimeout and stays unchanged. 2026-10-25T07:31:46.1550319Z 484 │ }, [nextSnoozeWakeAt, snoozeWakeTick]); 2026-10-25T07:31:46.1550414Z ·  ───────┬────── 2026-10-25T07:31:46.1550576Z · ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-25T07:31:46.1550746Z 485 │ // Called as `props.onSelectThread(...)`, the compiler would cache this handler on the whole 2026-10-25T07:31:46.1550795Z ╰──── 2026-10-25T07:31:46.1551091Z  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-25T07:31:46.1551398Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.1551401Z 2026-10-25T07:31:46.1551564Z ⚠ react(purity): Cannot call impure function during render 2026-10-25T07:31:46.1551716Z ╭─[apps/web/src/components/CommandPaletteThreadItems.tsx:152:58] 2026-10-25T07:31:46.1551894Z 151 │ if (threadSearchQuery.trim().length > 0 && !threadSearchQuery.startsWith(">") && !isOpen) { 2026-10-25T07:31:46.1552024Z 152 │ claimThreadOpen(thread.environmentId, thread.id, Date.now()); 2026-10-25T07:31:46.1552195Z ·  ─────┬──── 2026-10-25T07:31:46.1552392Z · ╰── Cannot call impure function 2026-10-25T07:31:46.1552448Z 153 │ } 2026-10-25T07:31:46.1552503Z ╰──── 2026-10-25T07:31:46.1552782Z  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-25T07:31:46.1553068Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-25T07:31:46.1553071Z 2026-10-25T07:31:46.1553528Z ⚠ 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-25T07:31:46.1553653Z ╭─[packages/effect-acp/src/protocol.test.ts:500:31] 2026-10-25T07:31:46.1553706Z 499 │ 2026-10-25T07:31:46.1553817Z 500 │ const response = yield* Schema.decodeUnknownEffect( 2026-10-25T07:31:46.1553931Z ·  ────────────────────────── 2026-10-25T07:31:46.1554036Z 501 │ Schema.fromJsonString(JsonRpcErrorResponse), 2026-10-25T07:31:46.1554085Z ╰──── 2026-10-25T07:31:46.1554088Z 2026-10-25T07:31:46.1554453Z ⚠ 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-25T07:31:46.1554568Z ╭─[packages/effect-acp/src/client.ts:1270:11] 2026-10-25T07:31:46.1554719Z 1269 │ extNotificationHandlers.set(CLIENT_METHODS.mcp_message, (params) => 2026-10-25T07:31:46.1554893Z 1270 │ Schema.decodeUnknownEffect(AcpSchemaV2.MessageMcpNotification)(params).pipe( 2026-10-25T07:31:46.1554995Z ·  ────────────────────────── 2026-10-25T07:31:46.1555138Z 1271 │ Effect.mapError(() => AcpError.AcpRequestError.invalidParams()), 2026-10-25T07:31:46.1555190Z ╰──── 2026-10-25T07:31:46.1555192Z 2026-10-25T07:31:46.1555333Z ⚠ react(refs): Cannot access refs during render 2026-10-25T07:31:46.1555483Z ╭─[apps/mobile/src/features/home/thread-swipe-actions.tsx:472:27] 2026-10-25T07:31:46.1555541Z 471 │ > 2026-10-25T07:31:46.1555618Z 472 │ {props.children(close)} 2026-10-25T07:31:46.1555705Z ·  ──┬── 2026-10-25T07:31:46.1555903Z · ╰── Cannot access ref value during render 2026-10-25T07:31:46.1556013Z 473 │ 2026-10-25T07:31:46.1556063Z ╰──── 2026-10-25T07:31:46.1556525Z  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-25T07:31:46.1556810Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-25T07:31:46.1556812Z 2026-10-25T07:31:46.1556994Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-25T07:31:46.1557145Z ╭─[apps/mobile/src/features/threads/ThreadQueueControl.tsx:606:27] 2026-10-25T07:31:46.1557316Z 605 │ const onEnd = useEffectEvent((y: number, success: boolean) => props.onEnd(y, success)); 2026-10-25T07:31:46.1557394Z 606 │ const gesture = Gesture.Pan() 2026-10-25T07:31:46.1557478Z ·  ─┬─ 2026-10-25T07:31:46.1557612Z · ╰── `Pan` may be a component 2026-10-25T07:31:46.1557685Z 607 │ .enabled(!props.disabled) 2026-10-25T07:31:46.1557736Z ╰──── 2026-10-25T07:31:46.1558005Z  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-25T07:31:46.1558441Z  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-25T07:31:46.1558448Z 2026-10-25T07:31:46.1558613Z ⚠ react(purity): Cannot call impure function during render 2026-10-25T07:31:46.1558744Z ╭─[apps/web/src/components/CustomSnoozeDialog.tsx:140:58] 2026-10-25T07:31:46.1558875Z 139 │ {...(weekStartsOn === undefined ? {} : { weekStartsOn })} 2026-10-25T07:31:46.1559017Z 140 │ disabled={{ before: new Date(new Date().setHours(0, 0, 0, 0)) }} 2026-10-25T07:31:46.1559137Z ·  ─────┬──── 2026-10-25T07:31:46.1559301Z · ╰── Cannot call impure function 2026-10-25T07:31:46.1559398Z 141 │ onSelect={(selected) => { 2026-10-25T07:31:46.1559448Z ╰──── 2026-10-25T07:31:46.1559739Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-25T07:31:46.1560054Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-25T07:31:46.1560056Z 2026-10-25T07:31:46.1560331Z ⚠ eslint(no-unused-vars): Variable 'layerUnavailable' is declared but never used. Unused variables should start with a '_'. 2026-10-25T07:31:46.1560473Z ╭─[apps/server/src/orchestration-v2/Orchestrator.ts:12551:7] 2026-10-25T07:31:46.1560527Z 12550 │ 2026-10-25T07:31:46.1560667Z 12551 │ const layerUnavailable: Layer.Layer = Layer.succeed( 2026-10-25T07:31:46.1560750Z ·  ────────┬─────── 2026-10-25T07:31:46.1560939Z · ╰── 'layerUnavailable' is declared here 2026-10-25T07:31:46.1561037Z 12552 │ OrchestratorV2, 2026-10-25T07:31:46.1561088Z ╰──── 2026-10-25T07:31:46.1561190Z  help: Consider removing this declaration. 2026-10-25T07:31:46.1561193Z 2026-10-25T07:31:46.1561408Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-25T07:31:46.1561539Z ╭─[apps/mobile/src/state/use-model-option-memory.ts:21:7] 2026-10-25T07:31:46.1561603Z 20 │ [instanceId]: { 2026-10-25T07:31:46.1561680Z 21 │ ...(state[instanceId] ?? {}), 2026-10-25T07:31:46.1561779Z ·  ──────────────────────────── 2026-10-25T07:31:46.1561843Z 22 │ [model]: options, 2026-10-25T07:31:46.1561893Z ╰──── 2026-10-25T07:31:46.1562158Z  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-25T07:31:46.1562163Z 2026-10-25T07:31:46.1562418Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-25T07:31:46.1562591Z ╭─[apps/mobile/src/features/threads/thread-inspector-content-stack.tsx:60:5] 2026-10-25T07:31:46.1562641Z 58 │ 2026-10-25T07:31:46.1562704Z 59 │ useEffect(() => { 2026-10-25T07:31:46.1562775Z ·  ────┬──── 2026-10-25T07:31:46.1562902Z · ╰── This is the containing effect 2026-10-25T07:31:46.1562983Z 60 │ setMountedModes((current) => { 2026-10-25T07:31:46.1563058Z ·  ───────┬─────── 2026-10-25T07:31:46.1563230Z · ╰── Avoid calling setState() directly within an effect 2026-10-25T07:31:46.1563312Z 61 │ if (current.has(props.mode)) { 2026-10-25T07:31:46.1563362Z ╰──── 2026-10-25T07:31:46.1563952Z  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-25T07:31:46.1564268Z  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-25T07:31:46.1564271Z 2026-10-25T07:31:46.1564461Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-25T07:31:46.1564608Z ╭─[apps/mobile/modules/t3-source-text/src/SourceText.tsx:36:9] 2026-10-25T07:31:46.1564694Z 35 │ Date.now()); 2026-10-25T07:31:46.1565649Z 83 │ useEffect(() => { 2026-10-25T07:31:46.1565763Z ·  ────┬──── 2026-10-25T07:31:46.1565920Z · ╰── This is the containing effect 2026-10-25T07:31:46.1566003Z 84 │ if (!actionState.isRunning) return; 2026-10-25T07:31:46.1566069Z 85 │ setNowMs(Date.now()); 2026-10-25T07:31:46.1566137Z ·  ────┬─── 2026-10-25T07:31:46.1566297Z · ╰── Avoid calling setState() directly within an effect 2026-10-25T07:31:46.1566420Z 86 │ const interval = setInterval(() => setNowMs(Date.now()), 1000); 2026-10-25T07:31:46.1566469Z ╰──── 2026-10-25T07:31:46.1567057Z  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-25T07:31:46.1567374Z  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-25T07:31:46.1567377Z 2026-10-25T07:31:46.1567641Z ⚠ eslint(no-unused-vars): Variable 'claudeCaps' is declared but never used. Unused variables should start with a '_'. 2026-10-25T07:31:46.1567747Z ╭─[packages/shared/src/model.test.ts:36:7] 2026-10-25T07:31:46.1567797Z 35 │ 2026-10-25T07:31:46.1567926Z 36 │ const claudeCaps: ModelCapabilities = createModelCapabilities({ 2026-10-25T07:31:46.1567997Z ·  ─────┬──── 2026-10-25T07:31:46.1568128Z · ╰── 'claudeCaps' is declared here 2026-10-25T07:31:46.1568195Z 37 │ optionDescriptors: [ 2026-10-25T07:31:46.1568251Z ╰──── 2026-10-25T07:31:46.1568355Z  help: Consider removing this declaration. 2026-10-25T07:31:46.1568358Z 2026-10-25T07:31:46.1568575Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-25T07:31:46.1568692Z ╭─[packages/shared/src/serverSettings.ts:333:9] 2026-10-25T07:31:46.1568791Z 332 │ const entry: ProjectSettingsOverrides = { 2026-10-25T07:31:46.1568918Z 333 │ ...(entries.get(projectId) ?? currentEntries[projectId] ?? {}), 2026-10-25T07:31:46.1569065Z ·  ────────────────────────────────────────────────────────────── 2026-10-25T07:31:46.1569122Z 334 │ }; 2026-10-25T07:31:46.1569171Z ╰──── 2026-10-25T07:31:46.1569437Z  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-25T07:31:46.1569442Z 2026-10-25T07:31:46.1569666Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in Array.prototype.reduce() 2026-10-25T07:31:46.1569810Z ╭─[packages/shared/src/serverSettings.ts:435:24] 2026-10-25T07:31:46.1569876Z 434 │ const favorites = 2026-10-25T07:31:46.1569979Z 435 │ setModelFavorites?.reduce((current, change) => { 2026-10-25T07:31:46.1570064Z ·  ───┬── 2026-10-25T07:31:46.1570187Z · ╰── For this reduce 2026-10-25T07:31:46.1570265Z 436 │ const exists = current.some( 2026-10-25T07:31:46.1570435Z 437 │ (favorite) => favorite.provider === change.provider && favorite.model === change.model, 2026-10-25T07:31:46.1570490Z 438 │ ); 2026-10-25T07:31:46.1570609Z 439 │ return change.favorite 2026-10-25T07:31:46.1570698Z 440 │ ? exists 2026-10-25T07:31:46.1570760Z 441 │ ? current 2026-10-25T07:31:46.1570890Z 442 │ : [...current, { provider: change.provider, model: change.model }] 2026-10-25T07:31:46.1570972Z ·  ─────┬──── 2026-10-25T07:31:46.1571087Z · ╰── From this spread 2026-10-25T07:31:46.1571155Z 443 │ : current.filter( 2026-10-25T07:31:46.1571204Z ╰──── 2026-10-25T07:31:46.1571405Z  help: Consider using `Object.assign()` or `Array.prototype.push()` to mutate the accumulator instead. 2026-10-25T07:31:46.1571559Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-25T07:31:46.1571562Z 2026-10-25T07:31:46.1571749Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-25T07:31:46.1571866Z ╭─[packages/shared/src/serverSettings.ts:453:3] 2026-10-25T07:31:46.1571923Z 451 │ null; 2026-10-25T07:31:46.1572034Z 452 │ let nextModelPreferences = initialModelPreferences; 2026-10-25T07:31:46.1572120Z ·  ──────────┬───────── 2026-10-25T07:31:46.1572243Z · ╰── From this accumulator 2026-10-25T07:31:46.1572340Z 453 │ for (const change of setModelsHidden ?? []) { 2026-10-25T07:31:46.1572404Z ·  ─┬─ 2026-10-25T07:31:46.1572506Z · ╰── For this loop 2026-10-25T07:31:46.1572637Z 454 │ const preferences = nextModelPreferences?.[change.provider] ?? { 2026-10-25T07:31:46.1572703Z 455 │ hiddenModels: [], 2026-10-25T07:31:46.1572767Z 456 │ modelOrder: [], 2026-10-25T07:31:46.1572820Z 457 │ }; 2026-10-25T07:31:46.1573001Z 458 │ const hiddenModels = preferences.hiddenModels.filter((model) => model !== change.model); 2026-10-25T07:31:46.1573110Z 459 │ if (change.hidden) hiddenModels.push(change.model); 2026-10-25T07:31:46.1573181Z 460 │ nextModelPreferences = { 2026-10-25T07:31:46.1573254Z 461 │ ...nextModelPreferences, 2026-10-25T07:31:46.1573349Z ·  ───────────┬─────────── 2026-10-25T07:31:46.1573471Z · ╰── From this spread 2026-10-25T07:31:46.1573579Z 462 │ [change.provider]: { ...preferences, hiddenModels }, 2026-10-25T07:31:46.1573629Z ╰──── 2026-10-25T07:31:46.1573777Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-25T07:31:46.1573928Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-25T07:31:46.1573931Z 2026-10-25T07:31:46.1574192Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-25T07:31:46.1574344Z ╭─[apps/mobile/src/features/threads/use-worktree-setup.ts:30:40] 2026-10-25T07:31:46.1574504Z 28 │ const snapshot = resolveWorktreeSetupSnapshot(input.threadId, query.data, live); 2026-10-25T07:31:46.1574568Z 29 │ useEffect(() => { 2026-10-25T07:31:46.1574638Z ·  ────┬──── 2026-10-25T07:31:46.1574762Z · ╰── This is the containing effect 2026-10-25T07:31:46.1574882Z 30 │ if (snapshot && snapshot !== live) setHeld({ key, snapshot }); 2026-10-25T07:31:46.1574982Z ·  ───┬─── 2026-10-25T07:31:46.1575220Z · ╰── Avoid calling setState() directly within an effect 2026-10-25T07:31:46.1575317Z 31 │ }, [key, live, snapshot]); 2026-10-25T07:31:46.1575367Z ╰──── 2026-10-25T07:31:46.1575966Z  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-25T07:31:46.1576284Z  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-25T07:31:46.1576286Z 2026-10-25T07:31:46.1576751Z ⚠ 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-25T07:31:46.1576924Z ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:566:7] 2026-10-25T07:31:46.1577026Z 565 │ let afterSequence = created[0]!.sequence; 2026-10-25T07:31:46.1577219Z 566 │ ╭─▶ for (let index = 1; index <= 32; index += 1) { 2026-10-25T07:31:46.1577318Z 567 │ │ const nextEvent = { 2026-10-25T07:31:46.1579850Z 568 │ │ id: EventId.make(`event:foundation-stream-race:${index}`), 2026-10-25T07:31:46.1579998Z 569 │ │ type: "thread.metadata-updated" as const, 2026-10-25T07:31:46.1580087Z 570 │ │ threadId, 2026-10-25T07:31:46.1580197Z 571 │ │ providerInstanceId, 2026-10-25T07:31:46.1580300Z 572 │ │ occurredAt: now, 2026-10-25T07:31:46.1580447Z 573 │ │ payload: { ...thread, title: `Race update ${index}` }, 2026-10-25T07:31:46.1580573Z 574 │ │ } satisfies OrchestrationV2DomainEvent; 2026-10-25T07:31:46.1580684Z 575 │ │ const reader = yield* eventSink 2026-10-25T07:31:46.1580802Z 576 │ │ .stream({ threadId, afterSequence }) 2026-10-25T07:31:46.1580932Z 577 │ │ .pipe(Stream.runHead, Effect.forkChild); 2026-10-25T07:31:46.1581034Z 578 │ │ yield* Effect.yieldNow; 2026-10-25T07:31:46.1581195Z 579 │ │ const written = yield* eventSink.write({ events: [nextEvent] }); 2026-10-25T07:31:46.1581378Z 580 │ │ const received = yield* Fiber.join(reader); 2026-10-25T07:31:46.1581517Z 581 │ │ if (Option.isNone(received)) { 2026-10-25T07:31:46.1581713Z 582 │ │ return yield* Effect.die("The event stream ended before delivering the live event."); 2026-10-25T07:31:46.1581790Z 583 │ │ } 2026-10-25T07:31:46.1581947Z 584 │ │ assert.equal(received.value.sequence, written[0]?.sequence); 2026-10-25T07:31:46.1582089Z 585 │ │ assert.equal(received.value.event.id, nextEvent.id); 2026-10-25T07:31:46.1582213Z 586 │ │ afterSequence = received.value.sequence; 2026-10-25T07:31:46.1582342Z 587 │ ╰─▶ } 2026-10-25T07:31:46.1582401Z 588 │ }), 2026-10-25T07:31:46.1582450Z ╰──── 2026-10-25T07:31:46.1582460Z 2026-10-25T07:31:46.1582920Z ⚠ 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-25T07:31:46.1583091Z ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:2324:9] 2026-10-25T07:31:46.1583167Z 2323 │ let settled = false; 2026-10-25T07:31:46.1583324Z 2324 │ ╭─▶ while (!settled) { 2026-10-25T07:31:46.1583480Z 2325 │ │ settled = (yield* outbox.listByCommandId(commandId)).every( 2026-10-25T07:31:46.1583607Z 2326 │ │ (effect) => effect.status === "succeeded", 2026-10-25T07:31:46.1583693Z 2327 │ │ ); 2026-10-25T07:31:46.1583822Z 2328 │ │ if (!settled) yield* Effect.yieldNow; 2026-10-25T07:31:46.1583956Z 2329 │ ╰─▶ } 2026-10-25T07:31:46.1584071Z 2330 │ }).pipe(Effect.provide(layerWorker), Effect.scoped); 2026-10-25T07:31:46.1584122Z ╰──── 2026-10-25T07:31:46.1584124Z 2026-10-25T07:31:46.1584354Z ⚠ eslint(no-unneeded-ternary): Unnecessary use of boolean literals in conditional expression 2026-10-25T07:31:46.1584477Z ╭─[packages/shared/src/serverSettings.test.ts:35:7] 2026-10-25T07:31:46.1584727Z 34 │ const fallback = fallbackTextGenerationModelSelection(providerInstances, (instanceId) => 2026-10-25T07:31:46.1584821Z 35 │ instanceId === configured ? true : false, 2026-10-25T07:31:46.1584942Z ·  ──────────────────────────────────────── 2026-10-25T07:31:46.1584998Z 36 │ ); 2026-10-25T07:31:46.1585048Z ╰──── 2026-10-25T07:31:46.1585141Z  help: Remove this ternary operator 2026-10-25T07:31:46.1585144Z 2026-10-25T07:31:46.1585475Z ⚠ eslint(no-unused-vars): Variable 'layerCodexAppServerClientFactoryCommand' is declared but never used. Unused variables should start with a '_'. 2026-10-25T07:31:46.1585636Z ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1409:7] 2026-10-25T07:31:46.1585688Z 1408 │ 2026-10-25T07:31:46.1585801Z 1409 │ const layerCodexAppServerClientFactoryCommand = ( 2026-10-25T07:31:46.1585919Z ·  ───────────────────┬─────────────────── 2026-10-25T07:31:46.1586119Z · ╰── 'layerCodexAppServerClientFactoryCommand' is declared here 2026-10-25T07:31:46.1586306Z 1410 │ options: CodexClient.CodexAppServerClientOptions & { 2026-10-25T07:31:46.1586394Z ╰──── 2026-10-25T07:31:46.1586496Z  help: Consider removing this declaration. 2026-10-25T07:31:46.1586498Z 2026-10-25T07:31:46.1586753Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-25T07:31:46.1586911Z ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1645:7] 2026-10-25T07:31:46.1586963Z 1644 │ 2026-10-25T07:31:46.1587033Z 1645 │ const layer: Layer.Layer< 2026-10-25T07:31:46.1587101Z ·  ──┬── 2026-10-25T07:31:46.1587223Z · ╰── 'layer' is declared here 2026-10-25T07:31:46.1587321Z 1646 │ ProviderAdapter.ProviderAdapterV2, 2026-10-25T07:31:46.1587372Z ╰──── 2026-10-25T07:31:46.1587476Z  help: Consider removing this declaration. 2026-10-25T07:31:46.1587481Z 2026-10-25T07:31:46.1587729Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-25T07:31:46.1587888Z ╭─[apps/server/src/orchestration-v2/ThreadPullRequestService.ts:405:7] 2026-10-25T07:31:46.1587940Z 404 │ 2026-10-25T07:31:46.1588064Z 405 │ const layer = Layer.effect(ThreadPullRequestServiceV2, make); 2026-10-25T07:31:46.1588132Z ·  ──┬── 2026-10-25T07:31:46.1588254Z · ╰── 'layer' is declared here 2026-10-25T07:31:46.1588304Z ╰──── 2026-10-25T07:31:46.1588404Z  help: Consider removing this declaration. 2026-10-25T07:31:46.1588406Z 2026-10-25T07:31:46.1588869Z ⚠ 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-25T07:31:46.1588993Z ╭─[packages/shared/src/atomicWrite.test.ts:137:5] 2026-10-25T07:31:46.1589068Z 136 │ Effect.gen(function* () { 2026-10-25T07:31:46.1589254Z 137 │ ╭─▶ while (fiber.pollUnsafe() === undefined) { 2026-10-25T07:31:46.1589375Z 138 │ │ yield* TestClock.adjust("100 millis"); 2026-10-25T07:31:46.1589717Z 139 │ │ // 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-25T07:31:46.1589906Z 140 │ │ yield* Effect.promise(() => new Promise((resolve) => setImmediate(resolve))); 2026-10-25T07:31:46.1590035Z 141 │ ╰─▶ } 2026-10-25T07:31:46.1590117Z 142 │ return yield* Fiber.join(fiber); 2026-10-25T07:31:46.1590168Z ╰──── 2026-10-25T07:31:46.1590170Z 2026-10-25T07:31:46.1590393Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-25T07:31:46.1590562Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:2143:15] 2026-10-25T07:31:46.1590627Z 2142 │ assert.equal( 2026-10-25T07:31:46.1590770Z 2143 │ items.filter((item) => item.type === "assistant_message").at(-1)?.text, 2026-10-25T07:31:46.1590849Z ·  ────── 2026-10-25T07:31:46.1590925Z 2144 │ "authoritative answer", 2026-10-25T07:31:46.1590976Z ╰──── 2026-10-25T07:31:46.1591192Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-25T07:31:46.1591223Z 2026-10-25T07:31:46.1591678Z ⚠ 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-25T07:31:46.1591843Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:4245:7] 2026-10-25T07:31:46.1592020Z 4244 │ const closeFiber = yield* Scope.close(sessionScope, Exit.void).pipe(Effect.forkScoped); 2026-10-25T07:31:46.1592218Z 4245 │ ╭─▶ while (!responseLifecycle.includes("failed")) { 2026-10-25T07:31:46.1592323Z 4246 │ │ yield* Effect.yieldNow; 2026-10-25T07:31:46.1592457Z 4247 │ ╰─▶ } 2026-10-25T07:31:46.1592579Z 4248 │ const responseExit = yield* Fiber.join(responseFiber); 2026-10-25T07:31:46.1592629Z ╰──── 2026-10-25T07:31:46.1592631Z 2026-10-25T07:31:46.1593081Z ⚠ 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-25T07:31:46.1593248Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6355:9] 2026-10-25T07:31:46.1593332Z 6354 │ .pipe(Effect.forkScoped); 2026-10-25T07:31:46.1593509Z 6355 │ ╭─▶ while (promptGates.length < 1) { 2026-10-25T07:31:46.1593625Z 6356 │ │ yield* Effect.yieldNow; 2026-10-25T07:31:46.1593759Z 6357 │ ╰─▶ } 2026-10-25T07:31:46.1593925Z 6358 │ assert.isDefined(sessionUpdateHandler, "session update handler must be wired"); 2026-10-25T07:31:46.1593974Z ╰──── 2026-10-25T07:31:46.1593976Z 2026-10-25T07:31:46.1594424Z ⚠ 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-25T07:31:46.1594585Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6490:9] 2026-10-25T07:31:46.1594670Z 6489 │ .pipe(Effect.forkScoped); 2026-10-25T07:31:46.1594851Z 6490 │ ╭─▶ while (promptGates.length < 2) { 2026-10-25T07:31:46.1594959Z 6491 │ │ yield* Effect.yieldNow; 2026-10-25T07:31:46.1595092Z 6492 │ ╰─▶ } 2026-10-25T07:31:46.1595252Z 6493 │ if (sessionUpdateHandler === undefined || capturedMutation.current === null) { 2026-10-25T07:31:46.1595302Z ╰──── 2026-10-25T07:31:46.1595305Z 2026-10-25T07:31:46.1595521Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-25T07:31:46.1595651Z ╭─[apps/mobile/src/state/use-composer-drafts.ts:998:15] 2026-10-25T07:31:46.1595717Z 997 │ instanceId, 2026-10-25T07:31:46.1595855Z 998 │ { ...(persisted.modelOptionMemory[instanceId] ?? {}), ...models }, 2026-10-25T07:31:46.1596041Z ·  ────────────────────────────────────────────────── 2026-10-25T07:31:46.1596131Z 999 │ ]), 2026-10-25T07:31:46.1596180Z ╰──── 2026-10-25T07:31:46.1596441Z  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-25T07:31:46.1596444Z 2026-10-25T07:31:46.1596650Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-25T07:31:46.1596786Z ╭─[packages/shared/src/composerContextLegacySend.ts:15:45] 2026-10-25T07:31:46.1596906Z 14 │ const occurrences = collectComposerContextReferences(text); 2026-10-25T07:31:46.1597009Z 15 │ for (const occurrence of [...occurrences].reverse()) { 2026-10-25T07:31:46.1597118Z ·  ─────── 2026-10-25T07:31:46.1597239Z 16 │ const record = recordsById.get(occurrence.contextId); 2026-10-25T07:31:46.1597293Z ╰──── 2026-10-25T07:31:46.1597546Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-25T07:31:46.1597550Z 2026-10-25T07:31:46.1597745Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-25T07:31:46.1597882Z ╭─[apps/mobile/src/state/use-thread-outbox-drain.ts:1362:5] 2026-10-25T07:31:46.1597963Z 1361 │ queuedMessagesByThreadKey, 2026-10-25T07:31:46.1598026Z 1362 │ retryTick, 2026-10-25T07:31:46.1598096Z ·  ────┬──── 2026-10-25T07:31:46.1598235Z · ╰── Unnecessary dependency `retryTick` 2026-10-25T07:31:46.1598304Z 1363 │ restoreQueuedMessage, 2026-10-25T07:31:46.1598361Z ╰──── 2026-10-25T07:31:46.1598656Z  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-25T07:31:46.1598968Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.1598970Z 2026-10-25T07:31:46.1599223Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-25T07:31:46.1599392Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:124:7] 2026-10-25T07:31:46.1599443Z 119 │ 2026-10-25T07:31:46.1599507Z 120 │ useEffect(() => { 2026-10-25T07:31:46.1599574Z ·  ────┬──── 2026-10-25T07:31:46.1599732Z · ╰── This is the containing effect 2026-10-25T07:31:46.1599816Z 121 │ if (orientationSettled) return; 2026-10-25T07:31:46.1599926Z 122 │ const orientation = getNativeShowcaseOrientation(); 2026-10-25T07:31:46.1599998Z 123 │ if (orientation === null) { 2026-10-25T07:31:46.1600077Z 124 │ setOrientationSettled(true); 2026-10-25T07:31:46.1600167Z ·  ──────────┬────────── 2026-10-25T07:31:46.1600338Z · ╰── Avoid calling setState() directly within an effect 2026-10-25T07:31:46.1600398Z 125 │ return; 2026-10-25T07:31:46.1600448Z ╰──── 2026-10-25T07:31:46.1601155Z  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-25T07:31:46.1601502Z  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-25T07:31:46.1601506Z 2026-10-25T07:31:46.1601759Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-25T07:31:46.1601928Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:299:7] 2026-10-25T07:31:46.1601978Z 287 │ 2026-10-25T07:31:46.1602041Z 288 │ useEffect(() => { 2026-10-25T07:31:46.1602110Z ·  ────┬──── 2026-10-25T07:31:46.1602235Z · ╰── This is the containing effect 2026-10-25T07:31:46.1602296Z 289 │ if ( 2026-10-25T07:31:46.1602362Z 290 │ scene === null || 2026-10-25T07:31:46.1602436Z 291 │ requestedScene === null || 2026-10-25T07:31:46.1602512Z 292 │ scene !== requestedScene || 2026-10-25T07:31:46.1602576Z 293 │ !hasFixture || 2026-10-25T07:31:46.1602644Z 294 │ !orientationSettled || 2026-10-25T07:31:46.1602712Z 295 │ !themeApplied || 2026-10-25T07:31:46.1602831Z 296 │ (scene === "agent-activity" && !agentActivityStaged) || 2026-10-25T07:31:46.1602963Z 297 │ !isShowcaseNativeContentReady({ scene, themeId, renderSignal }) 2026-10-25T07:31:46.1603020Z 298 │ ) { 2026-10-25T07:31:46.1603087Z 299 │ setReadyScene(null); 2026-10-25T07:31:46.1603164Z ·  ──────┬────── 2026-10-25T07:31:46.1603330Z · ╰── Avoid calling setState() directly within an effect 2026-10-25T07:31:46.1603395Z 300 │ return; 2026-10-25T07:31:46.1603447Z ╰──── 2026-10-25T07:31:46.1604035Z  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-25T07:31:46.1604351Z  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-25T07:31:46.1604353Z 2026-10-25T07:31:46.1604620Z ⚠ eslint(no-unused-vars): Variable 'lastOutcome' is declared but never used. Unused variables should start with a '_'. 2026-10-25T07:31:46.1604835Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:129:9] 2026-10-25T07:31:46.1604929Z 128 │ let cancelled = false; 2026-10-25T07:31:46.1605016Z 129 │ let lastOutcome: string | null = null; 2026-10-25T07:31:46.1605092Z ·  ─────┬───── 2026-10-25T07:31:46.1605223Z · ╰── 'lastOutcome' is declared here 2026-10-25T07:31:46.1605397Z 130 │ void retryShowcaseOperation(async () => applyNativeShowcaseOrientation(orientation), { 2026-10-25T07:31:46.1605448Z ╰──── 2026-10-25T07:31:46.1605550Z  help: Consider removing this declaration. 2026-10-25T07:31:46.1605553Z 2026-10-25T07:31:46.1605731Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-25T07:31:46.1605913Z ╭─[apps/mobile/src/features/keyboard/HardwareKeyboardCommandProvider.tsx:122:34] 2026-10-25T07:31:46.1605985Z 121 │ return [...commands]; 2026-10-25T07:31:46.1606116Z 122 │ }, [activeThreadRef, pathname, registrationVersion, navigation]); 2026-10-25T07:31:46.1606230Z ·  ─────────┬───────── 2026-10-25T07:31:46.1606411Z · ╰── Unnecessary dependency `registrationVersion` 2026-10-25T07:31:46.1606463Z 123 │ 2026-10-25T07:31:46.1606512Z ╰──── 2026-10-25T07:31:46.1606817Z  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-25T07:31:46.1607119Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.1607122Z 2026-10-25T07:31:46.1607280Z ⚠ react(immutability): This value cannot be modified 2026-10-25T07:31:46.1607440Z ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:39:5] 2026-10-25T07:31:46.1607491Z 32 │ 2026-10-25T07:31:46.1607628Z 33 │ const inspectorProgress = useSharedValue(inspectorVisible ? 1 : 0); 2026-10-25T07:31:46.1607712Z ·  ────────┬──────── 2026-10-25T07:31:46.1607855Z · ╰── `inspectorProgress` originates here 2026-10-25T07:31:46.1607945Z 34 │ const { renderedInspectorWidth } = props; 2026-10-25T07:31:46.1608078Z 35 │ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0); 2026-10-25T07:31:46.1608128Z 36 │ 2026-10-25T07:31:46.1608206Z 37 │ const onClosed = props.onClosed; 2026-10-25T07:31:46.1608270Z 38 │ useEffect(() => { 2026-10-25T07:31:46.1608362Z 39 │ inspectorProgress.value = withTiming( 2026-10-25T07:31:46.1608443Z ·  ────────┬──────── 2026-10-25T07:31:46.1608589Z · ╰── `inspectorProgress` cannot be modified 2026-10-25T07:31:46.1608663Z 40 │ inspectorVisible ? 1 : 0, 2026-10-25T07:31:46.1608713Z ╰──── 2026-10-25T07:31:46.1608973Z  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-25T07:31:46.1609267Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-25T07:31:46.1609269Z 2026-10-25T07:31:46.1609420Z ⚠ react(immutability): This value cannot be modified 2026-10-25T07:31:46.1609626Z ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:64:7] 2026-10-25T07:31:46.1609777Z 34 │ const { renderedInspectorWidth } = props; 2026-10-25T07:31:46.1609905Z 35 │ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0); 2026-10-25T07:31:46.1609991Z ·  ──────────┬───────── 2026-10-25T07:31:46.1610143Z · ╰── `renderedContentWidth` originates here 2026-10-25T07:31:46.1610195Z 36 │ 2026-10-25T07:31:46.1610271Z 37 │ const onClosed = props.onClosed; 2026-10-25T07:31:46.1610334Z 38 │ useEffect(() => { 2026-10-25T07:31:46.1610418Z 39 │ inspectorProgress.value = withTiming( 2026-10-25T07:31:46.1610493Z 40 │ inspectorVisible ? 1 : 0, 2026-10-25T07:31:46.1610563Z 41 │ WORKSPACE_PANE_TIMING, 2026-10-25T07:31:46.1610627Z 42 │ (finished) => { 2026-10-25T07:31:46.1610768Z 43 │ if (finished === true && !inspectorVisible && onClosed !== undefined) { 2026-10-25T07:31:46.1610841Z 44 │ runOnJS(onClosed)(); 2026-10-25T07:31:46.1610897Z 45 │ } 2026-10-25T07:31:46.1610952Z 46 │ }, 2026-10-25T07:31:46.1611003Z 47 │ ); 2026-10-25T07:31:46.1611132Z 48 │ const targetWidth = inspectorVisible ? (inspectorWidth ?? 0) : 0; 2026-10-25T07:31:46.1611208Z 49 │ renderedInspectorWidth.set( 2026-10-25T07:31:46.1611347Z 50 │ resizing ? targetWidth : withTiming(targetWidth, WORKSPACE_PANE_TIMING), 2026-10-25T07:31:46.1611400Z 51 │ ); 2026-10-25T07:31:46.1611450Z 52 │ }, [ 2026-10-25T07:31:46.1611517Z 53 │ inspectorProgress, 2026-10-25T07:31:46.1611582Z 54 │ inspectorVisible, 2026-10-25T07:31:46.1611645Z 55 │ inspectorWidth, 2026-10-25T07:31:46.1611701Z 56 │ onClosed, 2026-10-25T07:31:46.1611771Z 57 │ renderedInspectorWidth, 2026-10-25T07:31:46.1611834Z 58 │ resizing, 2026-10-25T07:31:46.1611889Z 59 │ ]); 2026-10-25T07:31:46.1611937Z 60 │ 2026-10-25T07:31:46.1611998Z 61 │ useEffect(() => { 2026-10-25T07:31:46.1612089Z 62 │ const targetWidth = inspectorWidth ?? 0; 2026-10-25T07:31:46.1612173Z 63 │ if (!inspectorVisible || resizing) { 2026-10-25T07:31:46.1612267Z 64 │ renderedContentWidth.value = targetWidth; 2026-10-25T07:31:46.1612352Z ·  ──────────┬───────── 2026-10-25T07:31:46.1612513Z · ╰── `renderedContentWidth` cannot be modified 2026-10-25T07:31:46.1612570Z 65 │ return; 2026-10-25T07:31:46.1612619Z ╰──── 2026-10-25T07:31:46.1612876Z  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-25T07:31:46.1613182Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-25T07:31:46.1613188Z 2026-10-25T07:31:46.1613440Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-25T07:31:46.1613581Z ╭─[apps/mobile/src/features/files/FileTreeBrowser.tsx:156:5] 2026-10-25T07:31:46.1613633Z 151 │ 2026-10-25T07:31:46.1613696Z 152 │ useEffect(() => { 2026-10-25T07:31:46.1613765Z ·  ────┬──── 2026-10-25T07:31:46.1613891Z · ╰── This is the containing effect 2026-10-25T07:31:46.1613971Z 153 │ if (!controlledSelectedPath) { 2026-10-25T07:31:46.1614030Z 154 │ return; 2026-10-25T07:31:46.1614082Z 155 │ } 2026-10-25T07:31:46.1614211Z 156 │ setExpandedPaths((current) => { 2026-10-25T07:31:46.1614317Z ·  ────────┬─────── 2026-10-25T07:31:46.1614483Z · ╰── Avoid calling setState() directly within an effect 2026-10-25T07:31:46.1614603Z 157 │ const ancestors = ancestorPaths(controlledSelectedPath); 2026-10-25T07:31:46.1614655Z ╰──── 2026-10-25T07:31:46.1615242Z  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-25T07:31:46.1615557Z  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-25T07:31:46.1615563Z 2026-10-25T07:31:46.1615764Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-25T07:31:46.1615921Z ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:150:7] 2026-10-25T07:31:46.1615973Z 149 │ } 2026-10-25T07:31:46.1616039Z 150 │ }, [wrappedRender]); 2026-10-25T07:31:46.1616115Z ·  ──────┬────── 2026-10-25T07:31:46.1616260Z · ╰── Unnecessary dependency `wrappedRender` 2026-10-25T07:31:46.1616309Z 151 │ 2026-10-25T07:31:46.1616359Z ╰──── 2026-10-25T07:31:46.1616646Z  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-25T07:31:46.1616952Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.1616957Z 2026-10-25T07:31:46.1617195Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-25T07:31:46.1617352Z ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:786:42] 2026-10-25T07:31:46.1617407Z 785 │ > 2026-10-25T07:31:46.1617530Z 786 │ 2026-10-25T07:31:46.1617649Z ·  ──────────────────── 2026-10-25T07:31:46.1617747Z 787 │ 2026-10-25T07:31:46.1617796Z ╰──── 2026-10-25T07:31:46.1618016Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-25T07:31:46.1618156Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-25T07:31:46.1618162Z 2026-10-25T07:31:46.1618357Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-25T07:31:46.1618472Z ╭─[apps/mobile/src/state/thread-order.ts:28:7] 2026-10-25T07:31:46.1618546Z 27 │ getPendingThreadOrder(); 2026-10-25T07:31:46.1618624Z 28 │ }, [nowMinute, snoozeWakeTick]); 2026-10-25T07:31:46.1618740Z ·  ────┬──── ───────┬────── 2026-10-25T07:31:46.1618928Z · │ ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-25T07:31:46.1619066Z · ╰── Unnecessary dependency `nowMinute` 2026-10-25T07:31:46.1619177Z 29 │ return pending; 2026-10-25T07:31:46.1619264Z ╰──── 2026-10-25T07:31:46.1619549Z  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-25T07:31:46.1619881Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.1619883Z 2026-10-25T07:31:46.1620082Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-25T07:31:46.1620226Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:257:7] 2026-10-25T07:31:46.1620321Z 256 │ return () => cancelAnimationFrame(frame); 2026-10-25T07:31:46.1620399Z 257 │ }, [props.path, targetIndex]); 2026-10-25T07:31:46.1620479Z ·  ─────┬──── 2026-10-25T07:31:46.1620624Z · ╰── Unnecessary dependency `props.path` 2026-10-25T07:31:46.1620677Z 258 │ 2026-10-25T07:31:46.1620729Z ╰──── 2026-10-25T07:31:46.1621014Z  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-25T07:31:46.1621317Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.1621319Z 2026-10-25T07:31:46.1621513Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-25T07:31:46.1621659Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:289:23] 2026-10-25T07:31:46.1621736Z 288 │ 2026-10-25T07:31:46.1622803Z ·  ─────────── 2026-10-25T07:31:46.1622876Z 306 │ {body} 2026-10-25T07:31:46.1622931Z ╰──── 2026-10-25T07:31:46.1623074Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-25T07:31:46.1623076Z 2026-10-25T07:31:46.1623261Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-25T07:31:46.1623372Z ╭─[apps/mobile/src/lib/useHoverGesture.ts:8:15] 2026-10-25T07:31:46.1623432Z 7 │ () => 2026-10-25T07:31:46.1623497Z 8 │ Gesture.Hover() 2026-10-25T07:31:46.1623575Z ·  ──┬── 2026-10-25T07:31:46.1623714Z · ╰── `Hover` may be a component 2026-10-25T07:31:46.1623787Z 9 │ .manualActivation(true) 2026-10-25T07:31:46.1623839Z ╰──── 2026-10-25T07:31:46.1624164Z  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-25T07:31:46.1624761Z  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-25T07:31:46.1624763Z 2026-10-25T07:31:46.1625021Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-25T07:31:46.1625191Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:390:7] 2026-10-25T07:31:46.1625250Z 385 │ }; 2026-10-25T07:31:46.1625317Z 386 │ useEffect(() => { 2026-10-25T07:31:46.1625387Z ·  ────┬──── 2026-10-25T07:31:46.1625518Z · ╰── This is the containing effect 2026-10-25T07:31:46.1625621Z 387 │ if (!guidesEnabled && section === "guide") { 2026-10-25T07:31:46.1625716Z 388 │ requestedSection.current = "overview"; 2026-10-25T07:31:46.1625881Z 389 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-25T07:31:46.1625953Z 390 │ setSection("overview"); 2026-10-25T07:31:46.1626026Z ·  ─────┬──── 2026-10-25T07:31:46.1626193Z · ╰── Avoid calling setState() directly within an effect 2026-10-25T07:31:46.1626248Z 391 │ } 2026-10-25T07:31:46.1626301Z ╰──── 2026-10-25T07:31:46.1626900Z  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-25T07:31:46.1627219Z  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-25T07:31:46.1627224Z 2026-10-25T07:31:46.1627427Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-25T07:31:46.1627598Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:392:6] 2026-10-25T07:31:46.1627695Z 387 │ if (!guidesEnabled && section === "guide") { 2026-10-25T07:31:46.1627788Z 388 │ requestedSection.current = "overview"; 2026-10-25T07:31:46.1627868Z ·  ────────┬─────── 2026-10-25T07:31:46.1628368Z · ╰── 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-25T07:31:46.1628568Z 389 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-25T07:31:46.1628714Z ·  ─────────┬───────── ──────┬────── 2026-10-25T07:31:46.1629206Z · │ ╰── 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-25T07:31:46.1629661Z · ╰── 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-25T07:31:46.1629734Z 390 │ setSection("overview"); 2026-10-25T07:31:46.1629820Z 391 │ } 2026-10-25T07:31:46.1629912Z 392 │ }, [guidesEnabled, section, insets.top]); 2026-10-25T07:31:46.1630024Z ·  ──────────────────┬───────────────── 2026-10-25T07:31:46.1630214Z · ╰── This dependency list is missing values used by the callback 2026-10-25T07:31:46.1630297Z 393 │ const tabContent = activityContent; 2026-10-25T07:31:46.1630350Z ╰──── 2026-10-25T07:31:46.1630517Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-25T07:31:46.1630826Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-25T07:31:46.1630834Z 2026-10-25T07:31:46.1630921Z Found 0 errors and 383 warnings in 5581 files (5.0s, 8 threads) 2026-10-25T07:31:46.2036844Z Post job cleanup. 2026-10-25T07:31:46.2628442Z Cache hit occurred on the primary key electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309, not saving cache. 2026-10-25T07:31:46.2699632Z Post job cleanup. 2026-10-25T07:31:46.3622005Z ##[start-action display=Cache full pnpm store;id=__5fa7ff1d-040f-43ce-a11a-1e62c828003f.__actions_cache] 2026-10-25T07:31:46.3923488Z Post job cleanup. 2026-10-25T07:31:46.4516686Z Cache hit occurred on the primary key pnpm-full-v1-Linux-X64-8a4fb989c1a2cecc2b0e5829ebdd9db8b402fe97cf8844590fcfa86441a5fa16, not saving cache. 2026-10-25T07:31:46.4545773Z ##[end-action id=__5fa7ff1d-040f-43ce-a11a-1e62c828003f.__actions_cache;outcome=success;conclusion=success;duration_ms=92] 2026-10-25T07:31:46.4547304Z ##[start-action display=Cache Vite+;id=__5fa7ff1d-040f-43ce-a11a-1e62c828003f.vp_cache] 2026-10-25T07:31:46.4574981Z Post job cleanup. 2026-10-25T07:31:46.5157717Z 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-25T07:31:46.5185978Z ##[end-action id=__5fa7ff1d-040f-43ce-a11a-1e62c828003f.vp_cache;outcome=success;conclusion=success;duration_ms=63] 2026-10-25T07:31:46.5219893Z Post job cleanup. 2026-10-25T07:31:46.5594080Z [command]/usr/local/bin/git version 2026-10-25T07:31:46.5640862Z git version 2.55.0 2026-10-25T07:31:46.5656533Z Temporarily overriding HOME='/home/runner/_work/_temp/634afcfb-aa5e-4577-85e0-5f122dc849f8' before making global git config changes 2026-10-25T07:31:46.5656873Z Adding repository directory to the temporary git global config as a safe directory 2026-10-25T07:31:46.5659230Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code 2026-10-25T07:31:46.5680248Z Removing SSH command configuration 2026-10-25T07:31:46.5682942Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand 2026-10-25T07:31:46.5703895Z [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-25T07:31:46.5816735Z fatal: No url found for submodule path '.repos/alchemy-effect/submodules/distilled' in .gitmodules 2026-10-25T07:31:46.5835820Z ##[warning]The process '/usr/local/bin/git' failed with exit code 128 2026-10-25T07:31:46.5872951Z A job completed hook has been configured by the self-hosted runner administrator 2026-10-25T07:31:46.5896565Z ##[group]Run '/job_completed.sh' 2026-10-25T07:31:46.5908087Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-25T07:31:46.5908256Z env: 2026-10-25T07:31:46.5908364Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 152 2026-10-25T07:31:46.5908511Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 517 2026-10-25T07:31:46.5908652Z BLACKSMITH_CHECK_RUN_ID: 121107811281 2026-10-25T07:31:46.5908862Z BLACKSMITH_JOB_DISPLAY_NAME: Lint 2026-10-25T07:31:46.5909009Z GITHUB_ACTIONS_CACHE_MODE: write 2026-10-25T07:31:46.5909142Z ##[endgroup] 2026-10-25T07:31:46.5982540Z Docker container cache not activated, skipping hash computation. 2026-10-25T07:31:46.6231862Z No active SSH sessions detected. Proceeding with shutdown immediately. 2026-10-25T07:31:46.6273366Z Cleaning up orphan processes