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