GitHub check

256 KB of 618 KB loaded Download the full log (618 KB)
362 KB of earlier output not loaded
46;87;248m       ────────┬───────
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<void> =>
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<void> =>
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<string, unknown>) {
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<number>(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<VoiceInputSession | null>(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<number>(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<VoiceInputSession | null>(null);
2026-10-25T07:31:46.1483564Z  122 │   const recorderRef = useRef<LazyVoiceRecorder<RecorderState> | 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<number>(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<number>(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 = <Selection extends { readonly key?: string }>({ 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<ProviderAdapter.ProviderAdapterV2, never, PiAdapterV2DriverEnv> =
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<unknown, unknown, ManagedRelay.ManagedRelayClient>,
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<TerminalInputEvent>) => {
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<TerminalResizeEvent>) => {
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 │       <View style={props.style}>
2026-10-25T07:31:46.1518562Z  234 │         <NativeTerminalSurfaceView
2026-10-25T07:31:46.1518662Z      ·          ────────────┬────────────
2026-10-25T07:31:46.1518821Z      ·                      ╰── This component is created during render
2026-10-25T07:31:46.1518914Z  235 │           appearanceScheme={themeAppearance}
2026-10-25T07:31:46.1518964Z      ╰────
2026-10-25T07:31:46.1519206Z   help: Components created during render will reset their state each time they are created. Declare components outside of render
2026-10-25T07:31:46.1519517Z   note: 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.1519520Z
2026-10-25T07:31:46.1519781Z   ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result.
2026-10-25T07:31:46.1519908Z      ╭─[apps/server/src/terminal/Manager.test.ts:731:31]
2026-10-25T07:31:46.1519965Z  730 │       );
2026-10-25T07:31:46.1520133Z  731 │       const snapshot = events.filter((event) => 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 │             <Pressable
2026-10-25T07:31:46.1535795Z  72 │               key={index}
2026-10-25T07:31:46.1535878Z     ·               ───────────
2026-10-25T07:31:46.1535959Z  73 │               accessibilityRole="button"
2026-10-25T07:31:46.1536009Z     ╰────
2026-10-25T07:31:46.1536160Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-25T07:31:46.1536165Z
2026-10-25T07:31:46.1536419Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T07:31:46.1536574Z      ╭─[apps/mobile/src/features/terminal/terminalLaunchContext.ts:117:5]
2026-10-25T07:31:46.1536735Z  112 │   const [entry, setEntry] = useState(() => ({ 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<byte> {
2026-10-25T07:31:46.1544073Z  458 │     let result: Array<byte> = 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 │         </ReanimatedSwipeable>
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<OrchestratorV2> = 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 │       <T3SourceTextRunNativeComponent
2026-10-25T07:31:46.1564756Z  36 │         key={index}
2026-10-25T07:31:46.1564830Z     ·         ───────────
2026-10-25T07:31:46.1564903Z  37 │         style={flattenedStyle}
2026-10-25T07:31:46.1564954Z     ╰────
2026-10-25T07:31:46.1565099Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-25T07:31:46.1565101Z
2026-10-25T07:31:46.1565354Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T07:31:46.1565479Z     ╭─[apps/mobile/src/state/use-vcs-action-state.ts:85:5]
2026-10-25T07:31:46.1565587Z  82 │   const [nowMs, setNowMs] = useState(() => 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 │       <AdaptiveWorkspaceContext.Provider value={contextValue}>
2026-10-25T07:31:46.1617649Z      ·                                          ────────────────────
2026-10-25T07:31:46.1617747Z  787 │         <WindowHingeContext value={windowHinge}>
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 │                     <SourceText
2026-10-25T07:31:46.1621835Z  289 │                       key={`${index}:${tokenIndex}`}
2026-10-25T07:31:46.1621952Z      ·                       ──────────────────────────────
2026-10-25T07:31:46.1622022Z  290 │                       style={{
2026-10-25T07:31:46.1622074Z      ╰────
2026-10-25T07:31:46.1622221Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-25T07:31:46.1622224Z
2026-10-25T07:31:46.1622412Z   ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-25T07:31:46.1622556Z      ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:305:27]
2026-10-25T07:31:46.1622622Z  304 │             return (
2026-10-25T07:31:46.1622705Z  305 │               <SourceText key={index}>
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